feat: 任务栏声音和关机选项添加配置功能

使用QGsettings读取配置,控制控件状态

Log: 任务栏声音和关机选项添加配置功能
Task: https://pms.uniontech.com/zentao/task-view-62236.html
Change-Id: I83a5eb815e536fc50a284b18782fa2b209e6cdea
This commit is contained in:
xiechuan 2021-02-27 15:50:24 +08:00
parent ffc27409fb
commit b4d5e8967a
5 changed files with 100 additions and 27 deletions

View File

@ -1,5 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<enum id="com.deepin.dde.dock.module.StatusMode">
<value value="0" nick="Enabled" />
<value value="1" nick="Disabled" />
<value value="2" nick="Hiden" />
</enum>
<schema path="/com/deepin/dde/dock/module/app/" id="com.deepin.dde.dock.module.app" gettext-domain="DDE">
<key type="b" name="control">
<default>false</default>
@ -255,6 +260,22 @@
Control Menu pluginsettings visible
</description>
</key>
<key name="show-suspend" type="b">
<default>true</default>
<summary>The suspend options show or not</summary>
</key>
<key name="show-hibernate" type="b">
<default>true</default>
<summary>The hibernate options show or not</summary>
</key>
<key name="show-shutdown" type="b">
<default>true</default>
<summary>The shutdown options show or not</summary>
</key>
<key name="show-lock" type="b">
<default>true</default>
<summary>The lock options show or not</summary>
</key>
</schema>
<schema path="/com/deepin/dde/dock/module/sound/" id="com.deepin.dde.dock.module.sound" gettext-domain="DDE">
<key type="b" name="control">
@ -278,6 +299,11 @@
Control Menu Enable
</description>
</key>
<key enum="com.deepin.dde.dock.module.StatusMode" name="sound-output-slider">
<default>'Enabled'</default>
<summary>change sound output slider status</summary>
<description>default is Enabled</description>
</key>
</schema>
<schema path="/com/deepin/dde/dock/module/trash/" id="com.deepin.dde.dock.module.trash" gettext-domain="DDE">
<key type="b" name="control">

View File

@ -30,17 +30,21 @@
#include <QIcon>
#include <QSettings>
#define PLUGIN_STATE_KEY "enable"
#define PLUGIN_STATE_KEY "enable"
#define GSETTING_SHOW_SUSPEND "showSuspend"
#define GSETTING_SHOW_HIBERNATE "showHibernate"
#define GSETTING_SHOW_SHUTDOWN "showShutdown"
#define GSETTING_SHOW_LOCK "showLock"
DCORE_USE_NAMESPACE
using namespace Dock;
ShutdownPlugin::ShutdownPlugin(QObject *parent)
: QObject(parent),
m_pluginLoaded(false),
m_tipsLabel(new TipsWidget),
m_powerManagerInter(new DBusPowerManager("com.deepin.daemon.PowerManager", "/com/deepin/daemon/PowerManager", QDBusConnection::systemBus(), this))
: QObject(parent)
, m_pluginLoaded(false)
, m_tipsLabel(new TipsWidget)
, m_powerManagerInter(new DBusPowerManager("com.deepin.daemon.PowerManager", "/com/deepin/daemon/PowerManager", QDBusConnection::systemBus(), this))
, m_gsettings(new QGSettings("com.deepin.dde.dock.module.shutdown", QByteArray(), this))
{
m_tipsLabel->setVisible(false);
m_tipsLabel->setAccessibleName("shutdown");
@ -114,10 +118,12 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey)
items.reserve(6);
QMap<QString, QVariant> shutdown;
shutdown["itemId"] = "Shutdown";
shutdown["itemText"] = tr("Shut down");
shutdown["isActive"] = true;
items.push_back(shutdown);
if (m_gsettings->get(GSETTING_SHOW_SHUTDOWN).toBool()) {
shutdown["itemId"] = "Shutdown";
shutdown["itemText"] = tr("Shut down");
shutdown["isActive"] = true;
items.push_back(shutdown);
}
QMap<QString, QVariant> reboot;
reboot["itemId"] = "Restart";
@ -134,10 +140,12 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey)
;
if (can_sleep) {
QMap<QString, QVariant> suspend;
suspend["itemId"] = "Suspend";
suspend["itemText"] = tr("Suspend");
suspend["isActive"] = true;
items.push_back(suspend);
if (m_gsettings->get(GSETTING_SHOW_SUSPEND).toBool()) {
suspend["itemId"] = "Suspend";
suspend["itemText"] = tr("Suspend");
suspend["isActive"] = true;
items.push_back(suspend);
}
}
bool can_hibernate = enviromentVar.contains("POWER_CAN_HIBERNATE") ? QVariant(enviromentVar.value("POWER_CAN_HIBERNATE")).toBool()
@ -145,19 +153,23 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey)
if (can_hibernate) {
QMap<QString, QVariant> hibernate;
hibernate["itemId"] = "Hibernate";
hibernate["itemText"] = tr("Hibernate");
hibernate["isActive"] = true;
items.push_back(hibernate);
if (m_gsettings->get(GSETTING_SHOW_HIBERNATE).toBool()) {
hibernate["itemId"] = "Hibernate";
hibernate["itemText"] = tr("Hibernate");
hibernate["isActive"] = true;
items.push_back(hibernate);
}
}
#endif
QMap<QString, QVariant> lock;
lock["itemId"] = "Lock";
lock["itemText"] = tr("Lock");
lock["isActive"] = true;
items.push_back(lock);
if (m_gsettings->get(GSETTING_SHOW_LOCK).toBool()) {
lock["itemId"] = "Lock";
lock["itemText"] = tr("Lock");
lock["isActive"] = true;
items.push_back(lock);
}
QMap<QString, QVariant> logout;
logout["itemId"] = "Logout";

View File

@ -31,6 +31,7 @@
namespace Dock {
class TipsWidget;
}
class QGSettings;
class ShutdownPlugin : public QObject, PluginsItemInterface
{
Q_OBJECT
@ -112,6 +113,7 @@ private:
ShutdownWidget *m_shutdownWidget;
Dock::TipsWidget *m_tipsLabel;
DBusPowerManager* m_powerManagerInter;
QGSettings *m_gsettings;
};
#endif // SHUTDOWNPLUGIN_H

View File

@ -40,6 +40,8 @@
#define ITEM_HEIGHT 24
#define ITEM_SPACING 5
#define DEVICE_SPACING 10
#define SLIDER_HIGHT 32
#define GSETTING_SOUND_OUTPUT_SLIDER "soundOutputSlider"
DWIDGET_USE_NAMESPACE
DGUI_USE_NAMESPACE
@ -118,6 +120,7 @@ SoundApplet::SoundApplet(QWidget *parent)
, m_model(new QStandardItemModel(m_listView))
, m_deviceInfo("")
, m_lastPort(nullptr)
, m_gsettings(new QGSettings("com.deepin.dde.dock.module.sound", QByteArray(), this))
{
initUi();
@ -176,8 +179,16 @@ void SoundApplet::initUi()
m_volumeBtn->setFixedSize(ICON_SIZE, ICON_SIZE);
m_volumeBtn->setIconSize(QSize(ICON_SIZE, ICON_SIZE));
m_volumeBtn->setFlat(true);
m_volumeSlider->setFixedHeight(SLIDER_HIGHT);
m_volumeSlider->setMinimum(0);
m_volumeSlider->setMaximum(m_audioInter->maxUIVolume() * 100.0f);
updateVolumeSliderStatus(m_gsettings->get(GSETTING_SOUND_OUTPUT_SLIDER).toString());
connect(m_gsettings, &QGSettings::changed, [ = ] (const QString &key) {
if (key == GSETTING_SOUND_OUTPUT_SLIDER) {
updateVolumeSliderStatus(m_gsettings->get(GSETTING_SOUND_OUTPUT_SLIDER).toString());
}
});
m_centralLayout = new QVBoxLayout;
m_centralLayout->addLayout(deviceLineLayout);
@ -187,7 +198,6 @@ void SoundApplet::initUi()
m_listView->setModel(m_model);
m_centralLayout->addWidget(m_listView);
m_centralWidget->setLayout(m_centralLayout);
m_centralWidget->setFixedWidth(WIDTH);
m_centralWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
@ -549,7 +559,12 @@ void SoundApplet::updateCradsInfo()
void SoundApplet::enableDevice(bool flag)
{
m_volumeSlider->setEnabled(flag);
QString status = m_gsettings->get(GSETTING_SOUND_OUTPUT_SLIDER).toString();
if ("Disabled" == status ) {
m_volumeSlider->setEnabled(false);
} else if ("Enabled" == status) {
m_volumeSlider->setEnabled(flag);
}
m_volumeBtn->setEnabled(flag);
m_soundShow->setEnabled(flag);
m_volumeIconMax->setEnabled(flag);
@ -596,6 +611,24 @@ void SoundApplet::removeDisabledDevice(QString portId, unsigned int cardId)
qDebug() << "remove disabled output device";
}
void SoundApplet::updateVolumeSliderStatus(const QString &status)
{
bool flag = true;
if ("Enabled" == status) {
flag = true;
} else if ("Disabled" == status) {
flag = false;
}
m_volumeSlider->setEnabled(flag);
m_volumeBtn->setEnabled(flag);
m_volumeIconMax->setEnabled(flag);
flag = "Hiden" != status;
m_volumeSlider->setVisible(flag);
m_volumeBtn->setVisible(flag);
m_volumeIconMax->setVisible(flag);
}
void SoundApplet::haldleDbusSignal(const QDBusMessage &msg)
{
Q_UNUSED(msg)
@ -640,6 +673,3 @@ void SoundApplet::portEnableChange(unsigned int cardId, QString portId)
m_deviceInfo = "";
updateCradsInfo();
}

View File

@ -41,6 +41,7 @@ using DBusAudio = com::deepin::daemon::Audio;
using DBusSink = com::deepin::daemon::audio::Sink;
class HorizontalSeparator;
class QGSettings;
namespace Dock{
class TipsWidget;
@ -136,6 +137,7 @@ private:
void disableAllDevice();//禁用所有设备
void removeLastDevice();//移除最后一个设备
void removeDisabledDevice(QString portId, unsigned int cardId);
void updateVolumeSliderStatus(const QString &status);
private:
QWidget *m_centralWidget;
@ -154,6 +156,7 @@ private:
QList<Port *> m_ports;
QString m_deviceInfo;
QPointer<Port> m_lastPort;//最后一个因为只有一个设备而被直接移除的设备
QGSettings *m_gsettings;
};
#endif // SOUNDAPPLET_H