diff --git a/frame/model/brightnessmodel.cpp b/frame/model/brightnessmodel.cpp index 33efb327d..e7c024bce 100644 --- a/frame/model/brightnessmodel.cpp +++ b/frame/model/brightnessmodel.cpp @@ -49,9 +49,6 @@ BrightnessModel::BrightnessModel(QObject *parent) BrightMonitor *monitor = new BrightMonitor(path.path(), this); monitor->setPrimary(primaryScreenName == monitor->name()); m_monitor << monitor; - connect(monitor, &BrightMonitor::brightnessChanged, this, [ = ] { - Q_EMIT brightnessChanged(monitor); - }); } } @@ -77,27 +74,6 @@ BrightMonitor *BrightnessModel::primaryMonitor() const return nullptr; } -void BrightnessModel::setBrightness(BrightMonitor *monitor, int brightness) -{ - setBrightness(monitor->name(), brightness); -} - -void BrightnessModel::setBrightness(QString name, int brightness) -{ - callMethod("SetBrightness", { name, static_cast(brightness *0.01) }); -} - -QDBusMessage BrightnessModel::callMethod(const QString &methodName, const QList &argument) -{ - QDBusInterface dbusInter(serviceName, servicePath, serviceInterface, QDBusConnection::sessionBus()); - if (dbusInter.isValid()) { - QDBusPendingCall reply = dbusInter.asyncCallWithArgumentList(methodName, argument); - reply.waitForFinished(); - return reply.reply(); - } - return QDBusMessage(); -} - void BrightnessModel::primaryScreenChanged(QScreen *screen) { BrightMonitor *defaultMonitor = nullptr; @@ -142,7 +118,7 @@ void BrightMonitor::setPrimary(bool primary) m_isPrimary = primary; } -int BrightMonitor::brihtness() +int BrightMonitor::brightness() { return m_brightness; } @@ -162,6 +138,11 @@ bool BrightMonitor::isPrimary() return m_isPrimary; } +void BrightMonitor::setBrightness(int value) +{ + callMethod("SetBrightness", { m_name, static_cast(value * 0.01) }); +} + void BrightMonitor::onPropertyChanged(const QDBusMessage &msg) { QList arguments = msg.arguments(); @@ -196,3 +177,14 @@ void BrightMonitor::onPropertyChanged(const QDBusMessage &msg) } } +QDBusMessage BrightMonitor::callMethod(const QString &methodName, const QList &argument) +{ + QDBusInterface dbusInter(serviceName, servicePath, serviceInterface, QDBusConnection::sessionBus()); + if (dbusInter.isValid()) { + QDBusPendingCall reply = dbusInter.asyncCallWithArgumentList(methodName, argument); + reply.waitForFinished(); + return reply.reply(); + } + + return QDBusMessage(); +} diff --git a/frame/model/brightnessmodel.h b/frame/model/brightnessmodel.h index e22549cd9..b9c0c022b 100644 --- a/frame/model/brightnessmodel.h +++ b/frame/model/brightnessmodel.h @@ -38,16 +38,10 @@ public: QList monitors(); BrightMonitor *primaryMonitor() const; - void setBrightness(BrightMonitor *monitor, int brightness); - void setBrightness(QString name, int brightness); Q_SIGNALS: - void brightnessChanged(BrightMonitor *); void primaryChanged(BrightMonitor *); -protected: - QDBusMessage callMethod(const QString &methodName, const QList &argument); - protected Q_SLOTS: void primaryScreenChanged(QScreen *screen); @@ -59,7 +53,9 @@ class BrightMonitor : public QObject { Q_OBJECT - friend class BrightnessModel; +public: + explicit BrightMonitor(QString path, QObject *parent); + ~BrightMonitor(); Q_SIGNALS: void brightnessChanged(int); @@ -67,20 +63,19 @@ Q_SIGNALS: void enabledChanged(bool); public: - int brihtness(); + void setPrimary(bool primary); + int brightness(); bool enabled(); QString name(); bool isPrimary(); -protected: - explicit BrightMonitor(QString path, QObject *parent); - ~BrightMonitor(); - - void setPrimary(bool primary); - -protected Q_SLOTS: +public slots: + void setBrightness(int value); void onPropertyChanged(const QDBusMessage &msg); +private: + QDBusMessage callMethod(const QString &methodName, const QList &argument); + private: QString m_path; QString m_name; diff --git a/frame/window/components/brightnessmonitorwidget.cpp b/frame/window/components/brightnessmonitorwidget.cpp deleted file mode 100644 index a37a4c3fa..000000000 --- a/frame/window/components/brightnessmonitorwidget.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd. - * - * Author: donghualin - * - * Maintainer: donghualin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include "brightnessmonitorwidget.h" -#include "brightnessmodel.h" -#include "slidercontainer.h" -#include "settingdelegate.h" -#include "imageutil.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -DWIDGET_USE_NAMESPACE - -#define ITEMSPACE 16 - -BrightnessMonitorWidget::BrightnessMonitorWidget(BrightnessModel *model, QWidget *parent) - : QWidget(parent) - , m_sliderWidget(new QWidget(this)) - , m_sliderLayout(new QVBoxLayout(m_sliderWidget)) - , m_descriptionLabel(new QLabel(tr("Collaboration"), this)) - , m_deviceList(new DListView(this)) - , m_brightModel(model) - , m_model(new QStandardItemModel(this)) - , m_delegate(new SettingDelegate(m_deviceList)) -{ - initUi(); - initConnection(); - reloadMonitor(); - - QMetaObject::invokeMethod(this, [ this ]{ - resetHeight(); - }, Qt::QueuedConnection); -} - -BrightnessMonitorWidget::~BrightnessMonitorWidget() -{ -} - -void BrightnessMonitorWidget::initUi() -{ - QVBoxLayout *layout = new QVBoxLayout(this); - layout->setContentsMargins(10, 12, 10, 12); - layout->setSpacing(6); - - m_sliderLayout->setContentsMargins(0, 0, 0, 0); - m_sliderLayout->setSpacing(5); - - QList monitors = m_brightModel->monitors(); - for (BrightMonitor *monitor : monitors) { - SliderContainer *container = new SliderContainer(m_sliderWidget); - container->setTitle(monitor->name()); - QPixmap leftPixmap = ImageUtil::loadSvg(":/icons/resources/brightnesslow", QSize(20, 20)); - QPixmap rightPixmap = ImageUtil::loadSvg(":/icons/resources/brightnesshigh", QSize(20, 20)); - container->updateSlider(SliderContainer::IconPosition::LeftIcon, { leftPixmap.size(), QSize(), leftPixmap, 12 }); - container->updateSlider(SliderContainer::IconPosition::RightIcon, { rightPixmap.size(), QSize(), rightPixmap, 12 }); - - container->setFixedHeight(50); - m_sliderLayout->addWidget(container); - - SliderProxyStyle *proxy = new SliderProxyStyle(SliderProxyStyle::Normal); - proxy->setParent(container->slider()); - container->slider()->setStyle(proxy); - - m_sliderContainers << qMakePair(monitor, container); - } - - layout->addSpacing(ITEMSPACE - layout->spacing()); - layout->addWidget(m_sliderWidget); - layout->addSpacing(4); - layout->addWidget(m_descriptionLabel); - - m_deviceList->setContentsMargins(0, 0, 0, 0); - m_deviceList->setModel(m_model); - m_deviceList->setViewMode(QListView::ListMode); - m_deviceList->setMovement(QListView::Free); - m_deviceList->setItemRadius(12); - m_deviceList->setWordWrap(false); - m_deviceList->verticalScrollBar()->setVisible(false); - m_deviceList->horizontalScrollBar()->setVisible(false); - m_deviceList->setOrientation(QListView::Flow::TopToBottom, false); - layout->addWidget(m_deviceList); - layout->addStretch(); - m_deviceList->setSpacing(10); - - m_deviceList->setItemDelegate(m_delegate); -} - -void BrightnessMonitorWidget::initConnection() -{ - connect(m_delegate, &SettingDelegate::selectIndexChanged, this, [ this ](const QModelIndex &index) { - BrightMonitor *monitor = index.data(itemDataRole).value(); - if (monitor) { - m_deviceList->update(); - // 更新滚动条的内容 - onBrightChanged(monitor); - } else { - DDBusSender().service("com.deepin.dde.ControlCenter") - .path("/com/deepin/dde/ControlCenter") - .interface("com.deepin.dde.ControlCenter") - .method("ShowPage").arg(QString("display")).call(); - hide(); - } - }); - - for (QPair container : m_sliderContainers) { - SliderContainer *sliderContainer = container.second; - sliderContainer->slider()->setValue(container.first->brihtness()); - connect(sliderContainer->slider(), &QSlider::valueChanged, this, [ this, container ](int value) { - m_brightModel->setBrightness(container.first, value); - }); - } - - connect(m_brightModel, &BrightnessModel::brightnessChanged, this, &BrightnessMonitorWidget::onBrightChanged); -} - -void BrightnessMonitorWidget::reloadMonitor() -{ - m_model->clear(); - // 跨端协同列表,后续会新增该功能 - // 显示设置 - DStandardItem *settingItem = new DStandardItem; - settingItem->setIcon(QIcon("")); - settingItem->setText(tr("Display settings")); - settingItem->setFlags(Qt::NoItemFlags); - settingItem->setData(false, itemCheckRole); - m_model->appendRow(settingItem); -} - -void BrightnessMonitorWidget::onBrightChanged(BrightMonitor *monitor) -{ - for (QPair container : m_sliderContainers) { - SliderContainer *slider = container.second; - if (container.first == monitor) { - slider->slider()->blockSignals(true); - slider->slider()->setValue(monitor->brihtness()); - slider->slider()->blockSignals(false); - } - } -} - -void BrightnessMonitorWidget::resetHeight() -{ - int viewHeight = 0; - for (int i = 0; i < m_model->rowCount(); i++) { - QRect indexRect = m_deviceList->visualRect(m_model->index(i, 0)); - viewHeight += indexRect.height(); - // 上下间距 - viewHeight += m_deviceList->spacing() * 2; - } - // 设置列表的高度 - m_deviceList->setFixedHeight(viewHeight); - QMargins sliderMargin = m_sliderLayout->contentsMargins(); - int sliderHeight = sliderMargin.top() + sliderMargin.bottom(); - for (QPair container : m_sliderContainers) { - SliderContainer *slider = container.second; - sliderHeight += slider->height(); - } - - m_sliderWidget->setFixedHeight(sliderHeight); - QMargins m = layout()->contentsMargins(); - int space1 = ITEMSPACE - layout()->spacing(); - int space2 = 4; - int height = m.top() + m.bottom() + sliderHeight + space1 - + m_descriptionLabel->height() + space2 + m_deviceList->height(); - setFixedHeight(height); -} diff --git a/frame/window/components/brightnessmonitorwidget.h b/frame/window/components/brightnessmonitorwidget.h deleted file mode 100644 index 7fdbd994a..000000000 --- a/frame/window/components/brightnessmonitorwidget.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd. - * - * Author: donghualin - * - * Maintainer: donghualin - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef BRIGHTNESSMONITORWIDGET_H -#define BRIGHTNESSMONITORWIDGET_H - -#include -#include - -class QLabel; -class SliderContainer; -class BrightnessModel; -class QStandardItemModel; -class QVBoxLayout; -class SliderContainer; -class BrightMonitor; -class SettingDelegate; - -namespace Dtk { namespace Widget { class DListView; } } - -using namespace Dtk::Widget; - -class BrightnessMonitorWidget : public QWidget -{ - Q_OBJECT - -public: - explicit BrightnessMonitorWidget(BrightnessModel *model, QWidget *parent = nullptr); - ~BrightnessMonitorWidget() override; - -private: - void initUi(); - void initConnection(); - void reloadMonitor(); - - void resetHeight(); - -private Q_SLOTS: - void onBrightChanged(BrightMonitor *monitor); - -private: - QWidget *m_sliderWidget; - QVBoxLayout *m_sliderLayout; - QList> m_sliderContainers; - QLabel *m_descriptionLabel; - DListView *m_deviceList; - BrightnessModel *m_brightModel; - QStandardItemModel *m_model; - SettingDelegate *m_delegate; -}; - -#endif // BRIGHTNESSMONITORWIDGET_H diff --git a/frame/window/components/brightnesswidget.cpp b/frame/window/components/brightnesswidget.cpp index eda1b707d..cd8cff6a8 100644 --- a/frame/window/components/brightnesswidget.cpp +++ b/frame/window/components/brightnesswidget.cpp @@ -20,7 +20,6 @@ */ #include "brightnesswidget.h" #include "brightnessmodel.h" -#include "brightnessmonitorwidget.h" #include "imageutil.h" #include "slidercontainer.h" @@ -51,50 +50,50 @@ SliderContainer *BrightnessWidget::sliderContainer() void BrightnessWidget::showEvent(QShowEvent *event) { DBlurEffectWidget::showEvent(event); + + // 显示的时候更新一下slider的主屏幕亮度值 + updateSliderValue(); Q_EMIT visibleChanged(true); } void BrightnessWidget::hideEvent(QHideEvent *event) { DBlurEffectWidget::hideEvent(event); + Q_EMIT visibleChanged(true); } void BrightnessWidget::initUi() { - QHBoxLayout *layout = new QHBoxLayout(this); - layout->setContentsMargins(15, 0, 12, 0); - layout->addWidget(m_sliderContainer); + QHBoxLayout *mainLayout = new QHBoxLayout(this); + mainLayout->setContentsMargins(15, 0, 12, 0); QPixmap leftPixmap = ImageUtil::loadSvg(":/icons/resources/brightness.svg", QSize(IMAGESIZE, IMAGESIZE)); QPixmap rightPixmap = ImageUtil::loadSvg(":/icons/resources/ICON_Device_Laptop.svg", QSize(IMAGESIZE, IMAGESIZE)); - m_sliderContainer->updateSlider(SliderContainer::IconPosition::LeftIcon, { leftPixmap.size(), QSize(), leftPixmap, 10 }); - m_sliderContainer->updateSlider(SliderContainer::IconPosition::RightIcon, { rightPixmap.size(), QSize(BACKSIZE, BACKSIZE), rightPixmap, 12}); + m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 10); + m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(BACKSIZE, BACKSIZE), 12); SliderProxyStyle *style = new SliderProxyStyle; - style->setParent(m_sliderContainer->slider()); - m_sliderContainer->slider()->setStyle(style); + m_sliderContainer->setSliderProxyStyle(style); + + mainLayout->addWidget(m_sliderContainer); } void BrightnessWidget::initConnection() { - connect(m_sliderContainer->slider(), &QSlider::valueChanged, this, [ this ](int value) { + connect(m_sliderContainer, &SliderContainer::sliderValueChanged, this, [ this ](int value) { BrightMonitor *monitor = m_model->primaryMonitor(); if (monitor) - m_model->setBrightness(monitor, value); + monitor->setBrightness(value); }); - connect(m_model, &BrightnessModel::brightnessChanged, this, &BrightnessWidget::onUpdateBright); - - BrightMonitor *monitor = m_model->primaryMonitor(); - if (monitor) - onUpdateBright(monitor); + updateSliderValue(); } -void BrightnessWidget::onUpdateBright(BrightMonitor *monitor) +void BrightnessWidget::updateSliderValue() { - if (!monitor->isPrimary()) - return; - // 此处只显示主屏的亮度 - m_sliderContainer->slider()->setValue(monitor->brihtness()); + BrightMonitor *monitor = m_model->primaryMonitor(); + if (monitor) { + m_sliderContainer->updateSliderValue(monitor->brightness()); + } } diff --git a/frame/window/components/brightnesswidget.h b/frame/window/components/brightnesswidget.h index c8f11a552..c8ca44721 100644 --- a/frame/window/components/brightnesswidget.h +++ b/frame/window/components/brightnesswidget.h @@ -45,12 +45,10 @@ protected: void showEvent(QShowEvent *event) override; void hideEvent(QHideEvent *event) override; -private Q_SLOTS: - void onUpdateBright(BrightMonitor *monitor); - private: void initUi(); void initConnection(); + void updateSliderValue(); private: SliderContainer *m_sliderContainer; diff --git a/frame/window/components/slidercontainer.cpp b/frame/window/components/slidercontainer.cpp index a3a8e22d0..6ce0a95f2 100644 --- a/frame/window/components/slidercontainer.cpp +++ b/frame/window/components/slidercontainer.cpp @@ -23,14 +23,11 @@ #include "slidercontainer.h" #include -#include #include #include #include #include -#include -#include #include #include @@ -125,6 +122,8 @@ SliderContainer::SliderContainer(QWidget *parent) m_leftIconWidget->installEventFilter(this); m_slider->installEventFilter(this); m_rightIconWidget->installEventFilter(this); + + connect(m_slider, &QSlider::valueChanged, this, &SliderContainer::sliderValueChanged); } SliderContainer::~SliderContainer() @@ -145,21 +144,26 @@ QSize SliderContainer::getSuitableSize(const QSize &iconSize, const QSize &bgSiz return iconSize; } -void SliderContainer::updateSlider(const SliderContainer::IconPosition &iconPosition, const SliderContainer::SliderData &sliderData) +void SliderContainer::setIcon(const SliderContainer::IconPosition &iconPosition, const QPixmap &icon, + const QSize &shadowSize, int space) { + if (icon.isNull()) { + return; + } + switch (iconPosition) { - case IconPosition::LeftIcon: { - m_leftIconWidget->setFixedSize(getSuitableSize(sliderData.iconSize, sliderData.shadowSize)); - m_leftIconWidget->updateData(sliderData.icon, sliderData.iconSize, sliderData.shadowSize); - m_spaceLeftWidget->setFixedWidth(sliderData.space); - break; - } - case IconPosition::RightIcon: { - m_rightIconWidget->setFixedSize(getSuitableSize(sliderData.iconSize, sliderData.shadowSize)); - m_rightIconWidget->updateData(sliderData.icon, sliderData.iconSize, sliderData.shadowSize); - m_spaceRightWidget->setFixedWidth(sliderData.space); - break; - } + case IconPosition::LeftIcon: { + m_leftIconWidget->setFixedSize(getSuitableSize(icon.size(), shadowSize)); + m_leftIconWidget->updateData(icon, icon.size(), shadowSize); + m_spaceLeftWidget->setFixedWidth(space); + break; + } + case IconPosition::RightIcon: { + m_rightIconWidget->setFixedSize(getSuitableSize(icon.size(), shadowSize)); + m_rightIconWidget->updateData(icon, icon.size(), shadowSize); + m_spaceRightWidget->setFixedWidth(space); + break; + } } } @@ -177,11 +181,6 @@ void SliderContainer::setIcon(const SliderContainer::IconPosition &iconPosition, } } -QSlider *SliderContainer::slider() -{ - return m_slider; -} - bool SliderContainer::eventFilter(QObject *watched, QEvent *event) { if (event->type() == QEvent::MouseButtonRelease) { @@ -194,6 +193,19 @@ bool SliderContainer::eventFilter(QObject *watched, QEvent *event) return QWidget::eventFilter(watched, event); } +void SliderContainer::updateSliderValue(int value) +{ + m_slider->blockSignals(true); + m_slider->setValue(value); + m_slider->blockSignals(false); +} + +void SliderContainer::setSliderProxyStyle(QProxyStyle *proxyStyle) +{ + proxyStyle->setParent(m_slider); + m_slider->setStyle(proxyStyle); +} + SliderProxyStyle::SliderProxyStyle(StyleType drawSpecial, QStyle *style) : QProxyStyle(style) , m_drawSpecial(drawSpecial) diff --git a/frame/window/components/slidercontainer.h b/frame/window/components/slidercontainer.h index 805056ea2..f2f8d76b7 100644 --- a/frame/window/components/slidercontainer.h +++ b/frame/window/components/slidercontainer.h @@ -46,24 +46,21 @@ public: RightIcon }; - struct SliderData { - QSize iconSize; // 图标尺寸 - QSize shadowSize; // 阴影尺寸 - QIcon icon; // 图标 - int space; // 间距 - }; - public: explicit SliderContainer(QWidget *parent); ~SliderContainer() override; void setTitle(const QString &text); - void updateSlider(const IconPosition &iconPosition, const SliderData &sliderData); + void setSliderProxyStyle(QProxyStyle *proxyStyle); void setIcon(const IconPosition &iconPosition, const QIcon &icon); - QSlider *slider(); + void setIcon(const IconPosition &iconPosition, const QPixmap &icon, const QSize &shadowSize, int space); Q_SIGNALS: void iconClicked(const IconPosition &); + void sliderValueChanged(int value); + +public slots: + void updateSliderValue(int value); protected: bool eventFilter(QObject *watched, QEvent *event) override; diff --git a/frame/window/components/volumedeviceswidget.cpp b/frame/window/components/volumedeviceswidget.cpp index efe2d614c..3bb238411 100644 --- a/frame/window/components/volumedeviceswidget.cpp +++ b/frame/window/components/volumedeviceswidget.cpp @@ -99,13 +99,12 @@ void VolumeDevicesWidget::initUi() sliderLayout->setSpacing(0); QPixmap leftPixmap = ImageUtil::loadSvg(leftIcon(), QSize(24, 24)); - m_sliderContainer->updateSlider(SliderContainer::IconPosition::LeftIcon, { leftPixmap.size(), QSize(), leftPixmap, 5 }); + m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 5); QPixmap rightPixmap = ImageUtil::loadSvg(rightIcon(), QSize(24, 24)); - m_sliderContainer->updateSlider(SliderContainer::IconPosition::RightIcon, { rightPixmap.size(), QSize(), rightPixmap, 7 }); + m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(), 7); SliderProxyStyle *proxy = new SliderProxyStyle(SliderProxyStyle::Normal); - proxy->setParent(m_sliderContainer->slider()); - m_sliderContainer->slider()->setStyle(proxy); + m_sliderContainer->setSliderProxyStyle(proxy); sliderLayout->addWidget(m_sliderContainer); QHBoxLayout *topLayout = new QHBoxLayout(this); @@ -156,26 +155,22 @@ void VolumeDevicesWidget::reloadAudioDevices() void VolumeDevicesWidget::initConnection() { m_audioSink = m_volumeModel->defaultSink(); - auto adjustVolumeSlider = [ this ](int volume) { - m_sliderContainer->slider()->blockSignals(true); - m_sliderContainer->slider()->setValue(volume); - m_sliderContainer->slider()->blockSignals(false); - }; + if (m_audioSink) - connect(m_audioSink, &AudioSink::volumeChanged, this, adjustVolumeSlider); - connect(m_volumeModel, &VolumeModel::defaultSinkChanged, this, [ this, adjustVolumeSlider ](AudioSink *sink) { + connect(m_audioSink, &AudioSink::volumeChanged, m_sliderContainer, &SliderContainer::updateSliderValue); + connect(m_volumeModel, &VolumeModel::defaultSinkChanged, this, [ this ](AudioSink *sink) { if (m_audioSink) disconnect(m_audioSink); m_audioSink = sink; - if (m_audioSink) - connect(m_audioSink, &AudioSink::volumeChanged, this, adjustVolumeSlider); + if (sink) + connect(sink, &AudioSink::volumeChanged, m_sliderContainer, &SliderContainer::updateSliderValue); resetVolumeInfo(); m_deviceList->update(); }); - connect(m_sliderContainer->slider(), &QSlider::valueChanged, this, [ this ](int value) { + connect(m_sliderContainer, &SliderContainer::sliderValueChanged, this, [ this ](int value) { AudioSink *defSink = m_volumeModel->defaultSink(); if (!defSink) return; @@ -260,7 +255,5 @@ void VolumeDevicesWidget::resetVolumeInfo() if (!defaultSink) return; - m_sliderContainer->slider()->blockSignals(true); - m_sliderContainer->slider()->setValue(defaultSink->volume()); - m_sliderContainer->slider()->blockSignals(false); + m_sliderContainer->updateSliderValue(defaultSink->volume()); } diff --git a/frame/window/components/volumewidget.cpp b/frame/window/components/volumewidget.cpp index 18c3560b1..89532fbe5 100644 --- a/frame/window/components/volumewidget.cpp +++ b/frame/window/components/volumewidget.cpp @@ -62,7 +62,7 @@ VolumeWidget::~VolumeWidget() void VolumeWidget::initUi() { if (m_defaultSink) - m_sliderContainer->slider()->setValue(m_defaultSink->volume()); + m_sliderContainer->updateSliderValue(m_defaultSink->volume()); QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->setContentsMargins(17, 0, 12, 0); @@ -70,12 +70,11 @@ void VolumeWidget::initUi() QPixmap leftPixmap = ImageUtil::loadSvg(leftIcon(), QSize(ICON_SIZE, ICON_SIZE)); QPixmap rightPixmap = ImageUtil::loadSvg(rightIcon(), QSize(ICON_SIZE, ICON_SIZE)); - m_sliderContainer->updateSlider(SliderContainer::IconPosition::LeftIcon, { leftPixmap.size(), QSize(), leftPixmap, 12}); - m_sliderContainer->updateSlider(SliderContainer::IconPosition::RightIcon, { rightPixmap.size(), QSize(BACKSIZE, BACKSIZE), rightPixmap, 12}); + m_sliderContainer->setIcon(SliderContainer::IconPosition::LeftIcon, leftPixmap, QSize(), 12); + m_sliderContainer->setIcon(SliderContainer::IconPosition::RightIcon, rightPixmap, QSize(BACKSIZE, BACKSIZE), 12); SliderProxyStyle *proxy = new SliderProxyStyle; - proxy->setParent(m_sliderContainer->slider()); - m_sliderContainer->slider()->setStyle(proxy); + m_sliderContainer->setSliderProxyStyle(proxy); bool existActiveOutputDevice = m_model->existActiveOutputDevice(); setEnabled(existActiveOutputDevice); @@ -83,26 +82,21 @@ void VolumeWidget::initUi() void VolumeWidget::initConnection() { - auto setCtrlVolumeValue = [this](int volume) { - m_sliderContainer->blockSignals(true); - m_sliderContainer->slider()->setValue(volume); - m_sliderContainer->blockSignals(false); - }; if (m_defaultSink) - connect(m_defaultSink, &AudioSink::volumeChanged, this, setCtrlVolumeValue); + connect(m_defaultSink, &AudioSink::volumeChanged, m_sliderContainer, &SliderContainer::updateSliderValue); - connect(m_model, &VolumeModel::defaultSinkChanged, this, [ this, setCtrlVolumeValue ](AudioSink *sink) { + connect(m_model, &VolumeModel::defaultSinkChanged, this, [ this ](AudioSink *sink) { if (m_defaultSink) disconnect(m_defaultSink); m_defaultSink = sink; if (sink) { - setCtrlVolumeValue(sink->volume()); - connect(m_defaultSink, &AudioSink::volumeChanged, this, setCtrlVolumeValue); + m_sliderContainer->updateSliderValue(sink->volume()); + connect(sink, &AudioSink::volumeChanged, m_sliderContainer, &SliderContainer::updateSliderValue); } }); - connect(m_sliderContainer->slider(), &QSlider::valueChanged, this, [ this ](int value) { + connect(m_sliderContainer, &SliderContainer::sliderValueChanged, this, [ this ](int value) { AudioSink *sink = m_model->defaultSink(); if (sink) sink->setVolume(value, true); diff --git a/frame/window/quicksettingcontainer.cpp b/frame/window/quicksettingcontainer.cpp index 195670313..53c290e5a 100644 --- a/frame/window/quicksettingcontainer.cpp +++ b/frame/window/quicksettingcontainer.cpp @@ -29,7 +29,6 @@ #include "slidercontainer.h" #include "volumewidget.h" #include "volumedeviceswidget.h" -#include "brightnessmonitorwidget.h" #include "pluginchildpage.h" #include "volumemodel.h" @@ -68,7 +67,6 @@ QuickSettingContainer::QuickSettingContainer(QWidget *parent) , m_volumnWidget(new VolumeWidget(m_volumeModel, m_componentWidget)) , m_brihtnessWidget(new BrightnessWidget(m_brightnessModel, m_componentWidget)) , m_volumeSettingWidget(new VolumeDevicesWidget(m_volumeModel, this)) - , m_brightSettingWidget(new BrightnessMonitorWidget(m_brightnessModel, this)) , m_childPage(new PluginChildPage(this)) , m_dragPluginPosition(QPoint(0, 0)) { @@ -313,7 +311,6 @@ void QuickSettingContainer::initUi() m_switchLayout->addWidget(m_childPage); m_volumeSettingWidget->hide(); - m_brightSettingWidget->hide(); setMouseTracking(true); setAcceptDrops(true); @@ -341,7 +338,7 @@ void QuickSettingContainer::initConnection() connect(m_brihtnessWidget->sliderContainer(), &SliderContainer::iconClicked, this, [ this ](const SliderContainer::IconPosition &iconPosition) { if (iconPosition == SliderContainer::RightIcon) { // 点击右侧的按钮,弹出具体的调节的界面 - showWidget(m_brightSettingWidget, tr("brightness")); + // showWidget(m_brightSettingWidget, tr("brightness")); resizeView(); } }); diff --git a/frame/window/quicksettingcontainer.h b/frame/window/quicksettingcontainer.h index 4222933ea..0ee1a4452 100644 --- a/frame/window/quicksettingcontainer.h +++ b/frame/window/quicksettingcontainer.h @@ -41,7 +41,6 @@ class QuickSettingItem; class DockPopupWindow; class QStackedLayout; class VolumeDevicesWidget; -class BrightnessMonitorWidget; class QLabel; class PluginChildPage; class QGridLayout; @@ -104,7 +103,6 @@ private: BrightnessWidget *m_brihtnessWidget; VolumeDevicesWidget *m_volumeSettingWidget; - BrightnessMonitorWidget *m_brightSettingWidget; PluginChildPage *m_childPage; QPoint m_dragPluginPosition; };