mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
chore: 优化有关slider等相关的操作代码
优化局部代码。 Log: 优化代码。 Influence: 快捷设置面板slider操作。 Change-Id: I48e9ae9ba55d18133fd66b6327cd5d9c835858c3
This commit is contained in:
parent
7502b87e06
commit
51915b44a1
@ -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<double>(brightness *0.01) });
|
||||
}
|
||||
|
||||
QDBusMessage BrightnessModel::callMethod(const QString &methodName, const QList<QVariant> &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<double>(value * 0.01) });
|
||||
}
|
||||
|
||||
void BrightMonitor::onPropertyChanged(const QDBusMessage &msg)
|
||||
{
|
||||
QList<QVariant> arguments = msg.arguments();
|
||||
@ -196,3 +177,14 @@ void BrightMonitor::onPropertyChanged(const QDBusMessage &msg)
|
||||
}
|
||||
}
|
||||
|
||||
QDBusMessage BrightMonitor::callMethod(const QString &methodName, const QList<QVariant> &argument)
|
||||
{
|
||||
QDBusInterface dbusInter(serviceName, servicePath, serviceInterface, QDBusConnection::sessionBus());
|
||||
if (dbusInter.isValid()) {
|
||||
QDBusPendingCall reply = dbusInter.asyncCallWithArgumentList(methodName, argument);
|
||||
reply.waitForFinished();
|
||||
return reply.reply();
|
||||
}
|
||||
|
||||
return QDBusMessage();
|
||||
}
|
||||
|
@ -38,16 +38,10 @@ public:
|
||||
|
||||
QList<BrightMonitor *> 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<QVariant> &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<QVariant> &argument);
|
||||
|
||||
private:
|
||||
QString m_path;
|
||||
QString m_name;
|
||||
|
@ -1,192 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: donghualin <donghualin@uniontech.com>
|
||||
*
|
||||
* Maintainer: donghualin <donghualin@uniontech.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "brightnessmonitorwidget.h"
|
||||
#include "brightnessmodel.h"
|
||||
#include "slidercontainer.h"
|
||||
#include "settingdelegate.h"
|
||||
#include "imageutil.h"
|
||||
|
||||
#include <DListView>
|
||||
#include <DDBusSender>
|
||||
|
||||
#include <QScrollBar>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
#include <QEvent>
|
||||
#include <QProcess>
|
||||
#include <QDBusInterface>
|
||||
#include <QDBusConnection>
|
||||
|
||||
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<BrightMonitor *> 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<BrightMonitor *>();
|
||||
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<BrightMonitor *, SliderContainer *> 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<BrightMonitor *, SliderContainer *> 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<BrightMonitor *, SliderContainer *> 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);
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||
*
|
||||
* Author: donghualin <donghualin@uniontech.com>
|
||||
*
|
||||
* Maintainer: donghualin <donghualin@uniontech.com>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef BRIGHTNESSMONITORWIDGET_H
|
||||
#define BRIGHTNESSMONITORWIDGET_H
|
||||
|
||||
#include <QMap>
|
||||
#include <QWidget>
|
||||
|
||||
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<QPair<BrightMonitor *, SliderContainer *>> m_sliderContainers;
|
||||
QLabel *m_descriptionLabel;
|
||||
DListView *m_deviceList;
|
||||
BrightnessModel *m_brightModel;
|
||||
QStandardItemModel *m_model;
|
||||
SettingDelegate *m_delegate;
|
||||
};
|
||||
|
||||
#endif // BRIGHTNESSMONITORWIDGET_H
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -23,14 +23,11 @@
|
||||
#include "slidercontainer.h"
|
||||
|
||||
#include <DStyle>
|
||||
#include <DApplicationHelper>
|
||||
#include <DGuiApplicationHelper>
|
||||
#include <DPaletteHelper>
|
||||
|
||||
#include <QPainterPath>
|
||||
#include <QMouseEvent>
|
||||
#include <QDebug>
|
||||
#include <QTimer>
|
||||
#include <QGridLayout>
|
||||
#include <QLabel>
|
||||
|
||||
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
});
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user