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"?> <?xml version="1.0" encoding="UTF-8"?>
<schemalist> <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"> <schema path="/com/deepin/dde/dock/module/app/" id="com.deepin.dde.dock.module.app" gettext-domain="DDE">
<key type="b" name="control"> <key type="b" name="control">
<default>false</default> <default>false</default>
@ -255,6 +260,22 @@
Control Menu pluginsettings visible Control Menu pluginsettings visible
</description> </description>
</key> </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>
<schema path="/com/deepin/dde/dock/module/sound/" id="com.deepin.dde.dock.module.sound" gettext-domain="DDE"> <schema path="/com/deepin/dde/dock/module/sound/" id="com.deepin.dde.dock.module.sound" gettext-domain="DDE">
<key type="b" name="control"> <key type="b" name="control">
@ -278,6 +299,11 @@
Control Menu Enable Control Menu Enable
</description> </description>
</key> </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>
<schema path="/com/deepin/dde/dock/module/trash/" id="com.deepin.dde.dock.module.trash" gettext-domain="DDE"> <schema path="/com/deepin/dde/dock/module/trash/" id="com.deepin.dde.dock.module.trash" gettext-domain="DDE">
<key type="b" name="control"> <key type="b" name="control">

View File

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

View File

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

View File

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

View File

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