From ea8dd62555e80e687deea4bc432f3a277933027f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=20=E7=BF=94?= Date: Tue, 30 Jan 2018 17:09:06 +0800 Subject: [PATCH] beautify propertiesdialog and mydialog --- .../src/systemdbus/daemon.py | 56 ++--- plugins/systemmonitor/cpuballwidget.cpp | 38 ++- plugins/systemmonitor/cpuballwidget.h | 4 + plugins/systemmonitor/cpuratewidget.cpp | 2 + plugins/systemmonitor/filesystemlistitem.cpp | 29 ++- plugins/systemmonitor/monitortitlewidget.cpp | 8 +- plugins/systemmonitor/networkindicator.cpp | 7 +- plugins/systemmonitor/processdialog.cpp | 6 +- plugins/systemmonitor/propertiesdialog.cpp | 232 ++++++++++++++---- plugins/systemmonitor/propertiesdialog.h | 26 +- plugins/systemmonitor/util.cpp | 55 ++--- plugins/systemmonitor/util.h | 7 +- plugins/widgets/mydialog.cpp | 174 ++++++------- plugins/widgets/mydialog.h | 24 +- plugins/widgets/mysearchedit.cpp | 57 +++-- plugins/widgets/mysearchedit.h | 25 +- setting/energywidget.cpp | 141 +++++++++-- setting/energywidget.h | 8 +- setting/menuwidget.cpp | 1 - src/dataworker.cpp | 26 ++ src/dataworker.h | 6 + src/mainwindow.cpp | 16 +- src/mainwindow.h | 2 + src/settingwidget.cpp | 12 +- src/settingwidget.h | 5 +- 25 files changed, 617 insertions(+), 350 deletions(-) diff --git a/backends/kylin-assistant-daemon/src/systemdbus/daemon.py b/backends/kylin-assistant-daemon/src/systemdbus/daemon.py index cd437ad..0149882 100644 --- a/backends/kylin-assistant-daemon/src/systemdbus/daemon.py +++ b/backends/kylin-assistant-daemon/src/systemdbus/daemon.py @@ -204,34 +204,34 @@ class Daemon(PolicyKitService): @dbus.service.method(INTERFACE, in_signature='s', out_signature='') def adjust_cpufreq_scaling_governer(self, value): - cpufreq_file = "/etc/init.d/cpufrequtils" - oldvalue = '' - if os.path.exists(cpufreq_file): - fp = open(cpufreq_file, "rw+") - line = fp.readline() - while line: - if line.startswith("GOVERNOR="): - if value not in line: - oldvalue = line.split("=")[1].replace('"', '').replace('\n', '') - break - line = fp.readline() - fp.close() - if oldvalue not in ['', None] and value not in ['', None]: - cmd = "sed -i 's/%s/%s/g' %s" % (oldvalue, value, cpufreq_file) - os.system(cmd) - os.system('service cpufrequtils restart') - else: - fpath = os.path.expanduser("/sys/devices/system/cpu/") - for line in os.listdir(fpath): - line = line.strip('\n') - #pattern = re.compile(r'cpu.*[0-9]$') - pattern = re.compile(r'cpu.*\d\Z') - m = pattern.match(line) - if m: - filepath = "/sys/devices/system/cpu/%s/cpufreq/scaling_governor" % line - if os.path.exists(filepath): - cmd = 'echo %s > %s' % (value, filepath) - os.system(cmd) +# cpufreq_file = "/etc/init.d/cpufrequtils" +# oldvalue = '' +# if os.path.exists(cpufreq_file): +# fp = open(cpufreq_file, "rw+") +# line = fp.readline() +# while line: +# if line.startswith("GOVERNOR="): +# if value not in line: +# oldvalue = line.split("=")[1].replace('"', '').replace('\n', '') +# break +# line = fp.readline() +# fp.close() +# if oldvalue not in ['', None] and value not in ['', None]: +# cmd = "sed -i 's/%s/%s/g' %s" % (oldvalue, value, cpufreq_file) +# os.system(cmd) +# os.system('service cpufrequtils restart') +# else: + fpath = os.path.expanduser("/sys/devices/system/cpu/") + for line in os.listdir(fpath): + line = line.strip('\n') + #pattern = re.compile(r'cpu.*[0-9]$') + pattern = re.compile(r'cpu.*\d\Z') + m = pattern.match(line) + if m: + filepath = "/sys/devices/system/cpu/%s/cpufreq/scaling_governor" % line + if os.path.exists(filepath): + cmd = 'echo %s > %s' % (value, filepath) + os.system(cmd) @dbus.service.method(INTERFACE, in_signature='', out_signature='as') def get_cpufreq_scaling_governer_list(self): diff --git a/plugins/systemmonitor/cpuballwidget.cpp b/plugins/systemmonitor/cpuballwidget.cpp index 54a01ad..750b2f3 100644 --- a/plugins/systemmonitor/cpuballwidget.cpp +++ b/plugins/systemmonitor/cpuballwidget.cpp @@ -25,6 +25,12 @@ #include #include +#include +qreal gradientDistance(qreal x) +{ + return (1 - qCos(M_PI * x)) / 2; +} + CpuBallWidget::CpuBallWidget(QWidget *parent) : QWidget(parent) { this->setFixedSize(210, 210); @@ -34,6 +40,7 @@ CpuBallWidget::CpuBallWidget(QWidget *parent) : QWidget(parent) m_xFrontOffset = 0; m_xBackOffset = this->width(); + m_prevPercentValue = 0.0; m_percentValue = 0.0; m_progressText = QString("%1%").arg(QString::number(m_percentValue, 'f', 1)); @@ -47,7 +54,10 @@ CpuBallWidget::CpuBallWidget(QWidget *parent) : QWidget(parent) m_waveTimer = new QTimer(this); connect(m_waveTimer, SIGNAL(timeout()), this, SLOT(onRepaintWaveImage())); - m_waveTimer->setInterval(60); + m_waveTimer->setInterval(200); + + m_animationIndex = 0; + m_animationCounts = 2000/200;//2000为数据更新的时间间隔,200为波浪更新的时间间隔 } CpuBallWidget::~CpuBallWidget() @@ -110,7 +120,14 @@ void CpuBallWidget::onRepaintWaveImage() if (m_xBackOffset > m_backImage.width()) {//保留整个显示直径的大小不做处理,避免出现断层 m_xBackOffset = 0; } - this->update();//this->repaint(); + + if (m_animationIndex < m_animationCounts) { + m_animationIndex++; + repaint(); + } else { + m_waveTimer->stop(); + } +// this->update();//this->repaint(); } //value:0 ~ 100 @@ -119,21 +136,24 @@ void CpuBallWidget::updateCpuPercent(double value) if (this->m_percentValue == value || value > 100 || value < 0) { return; } - + m_prevPercentValue = m_percentValue; m_percentValue = value; m_progressText = QString("%1%").arg(QString::number(value, 'f', 1)); + + m_animationIndex = 0; + m_waveTimer->start(); } void CpuBallWidget::startTimer() { - if (this->m_waveTimer && !this->m_waveTimer->isActive()) - this->m_waveTimer->start(); +// if (this->m_waveTimer && !this->m_waveTimer->isActive()) +// this->m_waveTimer->start(); } void CpuBallWidget::stopTimer() { - if (this->m_waveTimer && this->m_waveTimer->isActive()) - this->m_waveTimer->stop(); +// if (this->m_waveTimer && this->m_waveTimer->isActive()) +// this->m_waveTimer->stop(); } //在不同的平台上得到一样的效果,但绘制的文字除外 @@ -145,7 +165,9 @@ void CpuBallWidget::paintEvent(QPaintEvent *) QRectF rect = QRectF(0, 0, this->width(), this->height()); QSize waveSize = this->size(); - int currentPercent = static_cast(m_percentValue); +// int currentPercent = static_cast(m_percentValue); + double percent = m_prevPercentValue + gradientDistance(m_animationIndex / m_animationCounts) * (m_percentValue - m_prevPercentValue); + int currentPercent = static_cast(percent); //Step1:整个矩形背景 QImage waveRectImage = QImage(waveSize, QImage::Format_ARGB32_Premultiplied);//创建一个Format_ARGB32_Premultiplied 格式的QIamge,大小和控件相同 diff --git a/plugins/systemmonitor/cpuballwidget.h b/plugins/systemmonitor/cpuballwidget.h index 73dc5ef..2278d5d 100644 --- a/plugins/systemmonitor/cpuballwidget.h +++ b/plugins/systemmonitor/cpuballwidget.h @@ -56,9 +56,13 @@ private: QString m_progressText; + double m_prevPercentValue; double m_percentValue; double m_xFrontOffset; double m_xBackOffset; + + double m_animationCounts; + int m_animationIndex; }; #endif // CPUBALLWIDGET_H diff --git a/plugins/systemmonitor/cpuratewidget.cpp b/plugins/systemmonitor/cpuratewidget.cpp index 84b0f5b..c0bda02 100644 --- a/plugins/systemmonitor/cpuratewidget.cpp +++ b/plugins/systemmonitor/cpuratewidget.cpp @@ -308,6 +308,8 @@ void CpuRateWidget::initWidgets() cpuIdleTimeLayout->addWidget(m_cpuIdleTimeTitle); cpuIdleTimeLayout->addWidget(m_cpuIdleTimeText); + + m_labelLayout->setContentsMargins(0, 0, 0, 0); m_labelLayout->setSpacing(10); m_labelLayout->addWidget(m_title); diff --git a/plugins/systemmonitor/filesystemlistitem.cpp b/plugins/systemmonitor/filesystemlistitem.cpp index a1ecd33..6be5ae6 100644 --- a/plugins/systemmonitor/filesystemlistitem.cpp +++ b/plugins/systemmonitor/filesystemlistitem.cpp @@ -156,26 +156,29 @@ void FileSystemListItem::drawForeground(QRect rect, QPainter *painter, int colum } } else if (column == 6) { - if (!m_data->usedCapactiy().isEmpty()) { - int maxWidth = 60; - QFont font = painter->font(); - QFontMetrics fm(font); - QString uCapacity = fm.elidedText(m_data->usedCapactiy(), Qt::ElideRight, maxWidth); - painter->drawText(QRect(rect.x(), rect.y(), maxWidth - textPadding, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, uCapacity); - } int leftPadding = 10; int topPadding = 5; - int pWidth = rect.width() - 60 - 2 * leftPadding - textPadding; - int pHeight = rect.height() - 2 * topPadding; + int progressWidth = 100; + int progressHeight = rect.height() - 2 * topPadding; + int textMaxWidth = rect.width() - progressWidth - 2 * leftPadding; + if (!m_data->usedCapactiy().isEmpty()) { + QFont font = painter->font(); + QFontMetrics fm(font); + QString uCapacity = fm.elidedText(m_data->usedCapactiy(), Qt::ElideRight, textMaxWidth - textPadding); + painter->drawText(QRect(rect.x() + textPadding, rect.y(), textMaxWidth - textPadding, rect.height()), Qt::AlignLeft | Qt::AlignVCenter, uCapacity); + } QPainterPath bgPath; - bgPath.addRect(QRectF(rect.x() + 60, rect.y() + topPadding, pWidth, pHeight)); + bgPath.addRect(QRectF(rect.x() + textMaxWidth + leftPadding, rect.y() + topPadding, progressWidth, progressHeight)); painter->fillPath(bgPath, QColor("#eeeeee")); QPainterPath fillPath; - fillPath.addRect(QRectF(rect.x() + 60, rect.y() + topPadding, pWidth - m_data->usedPercentage(), pHeight)); + fillPath.addRect(QRectF(rect.x() + textMaxWidth + leftPadding, rect.y() + topPadding, m_data->usedPercentage(), progressHeight)); painter->setOpacity(0.5); - painter->fillPath(fillPath, QColor("#0288d1")); + if (m_data->usedPercentage() < 75) + painter->fillPath(fillPath, QColor("#0288d1")); + else + painter->fillPath(fillPath, QColor("#f8b551")); painter->setOpacity(1); - painter->drawText(QRect(rect.x() + 60, rect.y() + topPadding, pWidth, pHeight), Qt::AlignHCenter | Qt::AlignVCenter, QString::number(m_data->usedPercentage()).append("%")); + painter->drawText(QRect(rect.x() + textMaxWidth + leftPadding, rect.y() + topPadding, progressWidth, progressHeight), Qt::AlignHCenter | Qt::AlignVCenter, QString::number(m_data->usedPercentage()).append("%")); /* QStyleOptionProgressBar progressBarStyle;//progressBarStyle.initFrom(this); diff --git a/plugins/systemmonitor/monitortitlewidget.cpp b/plugins/systemmonitor/monitortitlewidget.cpp index 46510c5..b5a5534 100644 --- a/plugins/systemmonitor/monitortitlewidget.cpp +++ b/plugins/systemmonitor/monitortitlewidget.cpp @@ -136,7 +136,7 @@ bool MonitorTitleWidget::eventFilter(QObject *obj, QEvent *event) void MonitorTitleWidget::setSearchEditFocus() { - if (m_searchEdit->text() != "") { + if (m_searchEdit->searchedText() != "") { m_searchEdit->getLineEdit()->setFocus(); } else { m_searchEdit->setFocus(); @@ -145,14 +145,14 @@ void MonitorTitleWidget::setSearchEditFocus() void MonitorTitleWidget::onRefreshSearchResult() { - if (m_searchEdit->text() == searchTextCache) { + if (m_searchEdit->searchedText() == searchTextCache) { emit this->searchSignal(searchTextCache); } } void MonitorTitleWidget::handleSearchTextChanged() { - searchTextCache = m_searchEdit->text(); + searchTextCache = m_searchEdit->searchedText(); this->m_cancelSearchBtn->setVisible(!searchTextCache.isEmpty()); @@ -165,7 +165,7 @@ void MonitorTitleWidget::handleSearchTextChanged() void MonitorTitleWidget::onCancelSearchBtnClicked(bool b) { this->m_cancelSearchBtn->setVisible(false); - m_searchEdit->clearEdit(); + m_searchEdit->clearAndFocusEdit(); emit canelSearchEditFocus(); } diff --git a/plugins/systemmonitor/networkindicator.cpp b/plugins/systemmonitor/networkindicator.cpp index c3ea863..2f24c7c 100644 --- a/plugins/systemmonitor/networkindicator.cpp +++ b/plugins/systemmonitor/networkindicator.cpp @@ -116,7 +116,7 @@ void NetworkIndicator::updateBgColor() this->m_bgColor = QColor("#f6fcfe"); break; case Checked: - this->m_outsideBorderColor = QColor("#0973b4"); + this->m_outsideBorderColor = QColor("#009944"); this->m_bgColor = QColor("#e9f8fd"); break; default: @@ -243,15 +243,14 @@ void NetworkIndicator::paintEvent(QPaintEvent *event) path.addRect(QRectF(1, 1, width()-2, height()-2)); painter.fillPath(path, this->m_bgColor); - painter.translate((rect().width() - m_pointsCount * m_pointSpace) / 2 + 2, 40);//将坐标第原点移动到该点 painter.scale(1, -1);//将横坐标扩大1倍,将纵坐标缩小1倍 //使用QPainterPath画贝塞尔曲线 - painter.setPen(QPen(QColor("#1E90FF"), 1)); + painter.setPen(QPen(QColor("#009944"), 1)); painter.setBrush(QBrush()); painter.drawPath(m_downloadPath);//绘制前面创建的path:m_downloadPath painter.translate(0, -8);//将点(0,-8)设为原点 - painter.setPen(QPen(QColor("#FF0000"), 1)); + painter.setPen(QPen(QColor("#e60012"), 1)); painter.setBrush(QBrush()); painter.drawPath(m_uploadPath); diff --git a/plugins/systemmonitor/processdialog.cpp b/plugins/systemmonitor/processdialog.cpp index 8c4f8d5..ea82a4e 100644 --- a/plugins/systemmonitor/processdialog.cpp +++ b/plugins/systemmonitor/processdialog.cpp @@ -622,7 +622,7 @@ void ProcessDialog::refreshProcessList() ----------------------------------------------------------*/ std::string desktopFile; - desktopFile = getDesktopFileFromName(pid, name, ""); + desktopFile = getDesktopFileAccordProcName(name, ""); // qDebug() << "****************"<< QString::fromStdString(desktopFile); QPixmap icon_pixmap; @@ -632,14 +632,14 @@ void ProcessDialog::refreshProcessList() icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } else { - icon_pixmap = getDesktopFileIcon(desktopFile, 24); + icon_pixmap = getAppIconFromDesktopFile(desktopFile, 24); if (icon_pixmap.isNull()) { icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } //QPixmap pixmap = QPixmap::fromImage(img).scaled(iconSize, iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); } - QString title = getDisplayNameFromName(name, desktopFile); + QString title = getDisplayNameAccordProcName(name, desktopFile); QString displayName; if (whose_processes == "all") { displayName = QString("[%1] %2").arg(username).arg(title); diff --git a/plugins/systemmonitor/propertiesdialog.cpp b/plugins/systemmonitor/propertiesdialog.cpp index 03431ba..349aa9f 100644 --- a/plugins/systemmonitor/propertiesdialog.cpp +++ b/plugins/systemmonitor/propertiesdialog.cpp @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -33,23 +34,35 @@ #include #include +const int spacing = 8; + PropertiesDialog::PropertiesDialog(QWidget *parent, pid_t processId) : QDialog(parent) , mousePressed(false) { - this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowCloseButtonHint); - + this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowCloseButtonHint| Qt::WindowStaysOnTopHint); this->setAttribute(Qt::WA_TranslucentBackground); this->setAttribute(Qt::WA_Resized, false); +// this->setMaximumSize(480, 600); +// this->setMinimumWidth(320); - this->setMaximumSize(480, 600); - this->setMinimumWidth(320); + this->setFixedWidth(380); pid = processId; - layout = new QVBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); + m_layout = new QVBoxLayout(this); + m_layout->setContentsMargins(0, 0, 0, 5); + m_topLayout = new QHBoxLayout; + m_topLeftLayout = new QHBoxLayout; + m_topLeftLayout->setContentsMargins(20, 20, 0, 0); + m_topLeftLayout->setSpacing(10); + m_topRightLayout = new QHBoxLayout; + m_topRightLayout->setMargin(0); + m_topRightLayout->setSpacing(5); + m_topLayout->addLayout(m_topLeftLayout); + m_topLayout->addStretch(); + m_topLayout->addLayout(m_topRightLayout); - userLayout = new QHBoxLayout(); + /*userLayout = new QHBoxLayout(); userLayout->setContentsMargins(0, 0, 0, 0); nameLayout = new QHBoxLayout(); nameLayout->setContentsMargins(0, 0, 0, 0); @@ -58,7 +71,13 @@ PropertiesDialog::PropertiesDialog(QWidget *parent, pid_t processId) : QDialog(p cpuDurationLayout = new QHBoxLayout(); cpuDurationLayout->setContentsMargins(0, 0, 0, 0); startTimeLayout = new QHBoxLayout(); - startTimeLayout->setContentsMargins(0, 0, 0, 0); + startTimeLayout->setContentsMargins(0, 0, 0, 0);*/ + + m_logoLabel = new QLabel(); + m_logoLabel->setStyleSheet("QLabel{background:transparent;border:none;}"); + m_logoLabel->setFixedSize(44, 58); + m_logoLabel->setContentsMargins(0, 0, 0, 0); + m_logoLabel->setPixmap(QPixmap(":/res/sub_logo.png")); closeButton = new MyTristateButton(); closeButton->setObjectName("CloseButton"); @@ -66,13 +85,89 @@ PropertiesDialog::PropertiesDialog(QWidget *parent, pid_t processId) : QDialog(p this->close(); }); - iconLabel = new QLabel(); - iconLabel->setFixedSize(96, 96); + m_iconLabel = new QLabel(); + m_iconLabel->setStyleSheet("QLabel{background:transparent;border:none;}"); + m_iconLabel->setFixedSize(48, 48); + m_iconLabel->setContentsMargins(0, 0, 0, 0); - titleLabel = new QLabel(); - titleLabel->setStyleSheet("QLabel { background-color : transparent; font-size: 14px; font-weight: 500; color : #303030; }"); + m_titleLabel = new QLabel(); + m_titleLabel->setStyleSheet("QLabel{background-color:transparent;font-size:18px;color:#000000;}"); + m_titleLabel->setFixedWidth(230); + m_titleLabel->setWordWrap(true); - userTitleLabel = new QLabel(QString("%1:").arg(tr("User name"))); + m_topLeftLayout->addWidget(m_iconLabel, 0, Qt::AlignLeft | Qt::AlignVCenter); + m_topLeftLayout->addWidget(m_titleLabel, 0, Qt::AlignLeft | Qt::AlignVCenter); + + m_topRightLayout->addWidget(m_logoLabel, 0, Qt::AlignTop | Qt::AlignRight); + m_topRightLayout->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight); + + QLabel *topSplit = new QLabel(); + topSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); +// topSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:1, y2:0,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); + topSplit->setFixedSize(320, 1); + + QLabel *bottomSplit = new QLabel(); + bottomSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); +// bottomSplit->setStyleSheet("QLabel{background: qlineargradient(x1:0, y1:0, x2:1, y2:0,stop:0 #f1f1f1, stop:1 #e0e0e0);}"); + bottomSplit->setFixedSize(320, 1); + + m_infoFrame = new QFrame; + m_infoFrame->setMaximumWidth(320); + m_infoFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + m_bottomLayout = new QHBoxLayout; + m_bottomLayout->setContentsMargins(0,0,20,0); + m_bottomLayout->setSpacing(0); + m_okBtn = new QPushButton; + m_okBtn->setFixedSize(91, 25); + m_okBtn->setObjectName("blackButton"); + m_okBtn->setFocusPolicy(Qt::NoFocus); + m_okBtn->setText(tr("OK")); + connect(m_okBtn, &QPushButton::clicked, this, [=] { + this->close(); + }); + m_bottomLayout->addWidget(m_okBtn, 0, Qt::AlignBottom | Qt::AlignRight); + + m_layout->addLayout(m_topLayout); + m_layout->addSpacing(10); + m_layout->addWidget(topSplit, 0, Qt::AlignCenter); + m_layout->addSpacing(10); + m_layout->addWidget(m_infoFrame, 0, Qt::AlignCenter); + m_layout->addSpacing(5); + m_layout->addWidget(bottomSplit, 0, Qt::AlignCenter); + m_layout->addSpacing(5); + m_layout->addLayout(m_bottomLayout); + m_layout->addSpacing(10); + m_layout->addStretch(); + + QGridLayout *infoGrid = new QGridLayout(m_infoFrame); + infoGrid->setMargin(0); + infoGrid->setHorizontalSpacing(spacing); + infoGrid->setVerticalSpacing(spacing); + infoGrid->setColumnStretch(0, 10); + infoGrid->setColumnStretch(1, 100); + + QStringList titleList; + titleList << QObject::tr("User name:") << QObject::tr("Process name:") << QObject::tr("Command line:") << QObject::tr("CPU Time:") << QObject::tr("Started Time:"); + for (int i = 0; i < titleList.length(); ++i) { + QLabel *titleLabel = new QLabel(titleList.value(i)); + titleLabel->setStyleSheet("QLabel{background-color:transparent;font-size:12px;color:#999999;}"); + titleLabel->setMinimumHeight(20); + + QLabel *infoLabel = new QLabel(); + infoLabel->setStyleSheet("QLabel{background-color:transparent;font-size:12px;color:#000000;}"); + infoLabel->setWordWrap(true); + infoLabel->setMinimumHeight(28); + infoLabel->setMinimumWidth(220); + infoLabel->setMaximumWidth(240); + infoLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + infoLabel->adjustSize(); + m_labelList << infoLabel; + infoGrid->addWidget(titleLabel); + infoGrid->addWidget(infoLabel); + } + + /*userTitleLabel = new QLabel(QString("%1:").arg(tr("User name"))); userTitleLabel->setStyleSheet("QLabel { background-color : transparent; color : #666666; }"); userTitleLabel->setFixedWidth(100); userTitleLabel->setAlignment(Qt::AlignRight); @@ -138,18 +233,18 @@ PropertiesDialog::PropertiesDialog(QWidget *parent, pid_t processId) : QDialog(p startTimeLayout->addWidget(startTimeLabel); startTimeLayout->addSpacing(20); - layout->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight); - layout->addSpacing(20); - layout->addWidget(iconLabel, 0, Qt::AlignHCenter); - layout->addSpacing(14); - layout->addWidget(titleLabel, 0, Qt::AlignHCenter); - layout->addSpacing(20); - layout->addLayout(userLayout); - layout->addLayout(nameLayout); - layout->addLayout(cmdlineLayout); - layout->addLayout(cpuDurationLayout); - layout->addLayout(startTimeLayout); - layout->addSpacing(20); + m_layout->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight); + m_layout->addSpacing(20); + m_layout->addWidget(m_iconLabel, 0, Qt::AlignHCenter); + m_layout->addSpacing(14); + m_layout->addWidget(m_titleLabel, 0, Qt::AlignHCenter); + m_layout->addSpacing(20); + m_layout->addLayout(userLayout); + m_layout->addLayout(nameLayout); + m_layout->addLayout(cmdlineLayout); + m_layout->addLayout(cpuDurationLayout); + m_layout->addLayout(startTimeLayout); + m_layout->addSpacing(20);*/ this->moveToCenter(); @@ -172,12 +267,37 @@ PropertiesDialog::~PropertiesDialog() } delete closeButton; - delete iconLabel; - delete userTitleLabel; + delete m_iconLabel; + delete m_titleLabel; + delete m_okBtn; + + QLayoutItem *child; + while ((child = m_topLeftLayout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } + while ((child = m_topRightLayout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } + while ((child = m_topLayout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } + while ((child = m_bottomLayout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } + + delete m_infoFrame; + /*delete userTitleLabel; delete userLabel; delete nameTitleLabel; delete m_appNameLabel; - delete titleLabel; delete cmdlineTitleLabel; delete cpuDurationLabel; delete cpuDurationTitleLabel; @@ -188,8 +308,20 @@ PropertiesDialog::~PropertiesDialog() delete nameLayout; delete cmdlineLayout; delete cpuDurationLayout; - delete startTimeLayout; - delete layout; + delete startTimeLayout;*/ + delete m_layout; +} + +void PropertiesDialog::updateLabelFrameHeight() +{ + int labelTotalHeight = 0; + foreach (QLabel *label, m_labelList) { + label->adjustSize(); + labelTotalHeight += label->size().height() + spacing; + } + m_infoFrame->setFixedHeight(labelTotalHeight); + m_infoFrame->adjustSize(); + this->adjustSize(); } void PropertiesDialog::initProcproperties() @@ -205,31 +337,41 @@ void PropertiesDialog::initProcproperties() // long memory = info->mem; std::string desktopFile; - desktopFile = getDesktopFileFromName(pid, name, ""); + desktopFile = getDesktopFileAccordProcName(name, ""); QPixmap icon_pixmap; - int iconSize = 96 * qApp->devicePixelRatio(); + int iconSize = 48 * qApp->devicePixelRatio(); QPixmap defaultPixmap = QIcon::fromTheme("application-x-executable").pixmap(iconSize, iconSize); if (desktopFile.size() == 0) { icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } else { - icon_pixmap = getDesktopFileIcon(desktopFile, 96); + icon_pixmap = getAppIconFromDesktopFile(desktopFile, 48); if (icon_pixmap.isNull()) { icon_pixmap = defaultPixmap; icon_pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); } //QPixmap pixmap = QPixmap::fromImage(img).scaled(iconSize, iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); } - QString displayName = getDisplayNameFromName(name, desktopFile); - iconLabel->setPixmap(icon_pixmap); - titleLabel->setText(displayName); - userLabel->setText(username); + QString displayName = getDisplayNameAccordProcName(name, desktopFile); + m_iconLabel->setPixmap(icon_pixmap); + m_titleLabel->setText(displayName); + /*userLabel->setText(username); m_appNameLabel->setText(QString(info->name)); cmdlineLabel->setText(QString(info->arguments)); startTimeLabel->setText(QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss")); - cpuDurationLabel->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency)); + cpuDurationLabel->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency));*/ + + QStringList valueList; + valueList << username << QString(info->name) << QString(info->arguments) + << QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss") + << formatDurationForDisplay(100 * info->cpu_time / info->frequency); + + for (int i = 0; i < this->m_labelList.length(); ++i) { + this->m_labelList.value(i)->setText(valueList.value(i)); + } } + this->updateLabelFrameHeight(); } void PropertiesDialog::refreshProcproperties() @@ -237,8 +379,14 @@ void PropertiesDialog::refreshProcproperties() ProcessWorker *info; info = ProcessWorker::find(pid); if (info) { - startTimeLabel->setText(QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss")); - cpuDurationLabel->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency)); + for (int i = 0; i < this->m_labelList.length(); ++i) { + if (i == 3) + this->m_labelList.value(i)->setText(QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss")); + if (i == 4) + this->m_labelList.value(i)->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency)); + } + //startTimeLabel->setText(QFileInfo(QString("/proc/%1").arg(pid)).created().toString("yyyy-MM-dd hh:mm:ss")); + //cpuDurationLabel->setText(formatDurationForDisplay(100 * info->cpu_time / info->frequency)); } } @@ -302,8 +450,8 @@ void PropertiesDialog::paintEvent(QPaintEvent *event) QPainter painter(this); //绘制圆角矩形 - painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 QColor(255, 255, 255, 153) - painter.setBrush(QColor("#e9eef0"));//背景色 #0d87ca + painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 #3f96e4 + painter.setBrush(QColor("#e9eef0"));//背景色 painter.setRenderHint(QPainter::Antialiasing, true); painter.setOpacity(1); QRectF r(0 / 2.0, 0 / 2.0, width() - 0, height() - 0);//左边 上边 右边 下边 diff --git a/plugins/systemmonitor/propertiesdialog.h b/plugins/systemmonitor/propertiesdialog.h index 6fbc4e3..d78d4ab 100644 --- a/plugins/systemmonitor/propertiesdialog.h +++ b/plugins/systemmonitor/propertiesdialog.h @@ -45,6 +45,7 @@ public: pid_t getPid(); QRect getParentGeometry() const; void moveToCenter(); + void updateLabelFrameHeight(); void initProcproperties(); public slots: @@ -58,8 +59,9 @@ protected: // void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: - MyTristateButton *closeButton; - QHBoxLayout *cmdlineLayout; + MyTristateButton *closeButton = nullptr; + QLabel *m_logoLabel = nullptr; + /*QHBoxLayout *cmdlineLayout; QHBoxLayout *userLayout; QHBoxLayout *nameLayout; QHBoxLayout *cpuDurationLayout; @@ -68,19 +70,29 @@ private: QLabel *cmdlineTitleLabel; QLabel *userLabel; QLabel *userTitleLabel; - QLabel *iconLabel; QLabel *m_appNameLabel; QLabel *nameTitleLabel; QLabel *cpuDurationLabel; QLabel *cpuDurationTitleLabel; QLabel *startTimeLabel; - QLabel *startTimeTitleLabel; - QLabel *titleLabel; - QVBoxLayout *layout; + QLabel *startTimeTitleLabel;*/ + + QVBoxLayout *m_layout = nullptr; + QHBoxLayout *m_topLayout = nullptr; + QHBoxLayout *m_topLeftLayout = nullptr; + QHBoxLayout *m_topRightLayout = nullptr; + QHBoxLayout *m_bottomLayout = nullptr; + QLabel *m_iconLabel = nullptr; + QLabel *m_titleLabel = nullptr; + QPushButton *m_okBtn = nullptr; + pid_t pid; QPoint dragPosition; bool mousePressed; - QTimer *timer; + QTimer *timer = nullptr; + + QFrame *m_infoFrame = nullptr; + QList m_labelList; }; #endif // PROPERTIESSDIALOG_H diff --git a/plugins/systemmonitor/util.cpp b/plugins/systemmonitor/util.cpp index 36f1270..6c560e4 100644 --- a/plugins/systemmonitor/util.cpp +++ b/plugins/systemmonitor/util.cpp @@ -17,16 +17,15 @@ * along with this program. If not, see . */ +#include "util.h" + #include #include -#include -#include -#include -#include "util.h" #include + +#include #include #include -#include std::string make_string(char *c_str) { @@ -59,7 +58,6 @@ QString formatDurationForDisplay(unsigned centiseconds) gchar *duration = NULL; if (weeks) { - /* xgettext: weeks, days */ duration = g_strdup_printf("%uw%ud", weeks, days); formatTime = QString(QLatin1String(duration)); if (duration) { @@ -70,7 +68,6 @@ QString formatDurationForDisplay(unsigned centiseconds) } if (days) { - /* xgettext: days, hours (0 -> 23) */ duration = g_strdup_printf("%ud%02uh", days, hours); formatTime = QString(QLatin1String(duration)); if (duration) { @@ -81,7 +78,6 @@ QString formatDurationForDisplay(unsigned centiseconds) } if (hours) { - /* xgettext: hours (0 -> 23), minutes, seconds */ duration = g_strdup_printf("%u:%02u:%02u", hours, minutes, seconds); formatTime = QString(QLatin1String(duration)); if (duration) { @@ -91,7 +87,6 @@ QString formatDurationForDisplay(unsigned centiseconds) return formatTime; } - /* xgettext: minutes, seconds, centiseconds */ duration = g_strdup_printf("%u:%02u.%02u", minutes, seconds, centiseconds); formatTime = QString(QLatin1String(duration)); if (duration) { @@ -101,18 +96,12 @@ QString formatDurationForDisplay(unsigned centiseconds) return formatTime; } -std::string getDesktopFileFromName(int pid, QString procName, QString cmdline) +std::string getDesktopFileAccordProcName(QString procName, QString cmdline) { QDirIterator dir("/usr/share/applications", QDirIterator::Subdirectories); std::string desktopFile; - - // Convert to lower characters. QString procname = procName.toLower(); - - // Replace "_" instead "-", avoid some applications desktop file can't found, such as, sublime text. procname.replace("_", "-"); - - // Concat desktop file. QString processFilename = procname + ".desktop"; while(dir.hasNext()) { @@ -128,7 +117,7 @@ std::string getDesktopFileFromName(int pid, QString procName, QString cmdline) return desktopFile; } -QPixmap getDesktopFileIcon(std::string desktopFile, int iconSize) +QPixmap getAppIconFromDesktopFile(std::string desktopFile, int iconSize) { std::ifstream in; in.open(desktopFile); @@ -141,13 +130,11 @@ QPixmap getDesktopFileIcon(std::string desktopFile, int iconSize) iconName = QString::fromStdString(line); if (iconName.startsWith("Icon=")) { - iconName.remove(0,5); // remove the first 5 chars + iconName.remove(0,5); } else { continue; } - if (iconName.contains("/")) { - // this is probably a path to the file, use that instead of the theme icon name icon = QIcon(iconName); } else { icon = QIcon::fromTheme(iconName, defaultExecutableIcon); @@ -164,39 +151,35 @@ QPixmap getDesktopFileIcon(std::string desktopFile, int iconSize) return pixmap; } - -QString getDisplayNameFromName(QString procName, std::string desktopFile) +QString getDisplayNameAccordProcName(QString procName, std::string desktopFile) { if (desktopFile.size() == 0) { return procName; } - std::ifstream in; in.open(desktopFile); QString displayName = procName; while(!in.eof()) { std::string line; std::getline(in,line); - QString lineContent = QString::fromStdString(line); - QString localNameFlag = QString("Name[%1]=").arg(QLocale::system().name()); QString nameFlag = "Name="; QString genericNameFlag = QString("GenericName[%1]=").arg(QLocale::system().name()); if (lineContent.startsWith(localNameFlag)) { displayName = lineContent.remove(0, localNameFlag.size()); - break; - } else if (lineContent.startsWith(genericNameFlag)) { + } + else if (lineContent.startsWith(genericNameFlag)) { displayName = lineContent.remove(0, genericNameFlag.size()); - break; - } else if (lineContent.startsWith(nameFlag)) { + } + else if (lineContent.startsWith(nameFlag)) { displayName = lineContent.remove(0, nameFlag.size()); - continue; - } else { + } + else { continue; } } @@ -205,15 +188,6 @@ QString getDisplayNameFromName(QString procName, std::string desktopFile) return displayName; } -QString getImagePath(QString imageName) -{ - QDir dir(qApp->applicationDirPath()); - dir.cdUp(); - - return QDir(dir.filePath("image")).filePath(imageName); -} - - QString formatProcessState(guint state) { QString status; @@ -281,7 +255,6 @@ QString formatUnitSize(double v, const char** orders, int nb_orders) QString formatByteCount(double v) { static const char* orders[] = { "B", "KB", "MB", "GB", "TB" }; - return formatUnitSize(v, orders, sizeof(orders)/sizeof(orders[0])); } diff --git a/plugins/systemmonitor/util.h b/plugins/systemmonitor/util.h index 98b84eb..5f2b8f6 100644 --- a/plugins/systemmonitor/util.h +++ b/plugins/systemmonitor/util.h @@ -29,10 +29,9 @@ using std::string; -std::string getDesktopFileFromName(int pid, QString procName, QString cmdline); -QPixmap getDesktopFileIcon(std::string desktopFile, int iconSize = 24); -QString getDisplayNameFromName(QString procName, std::string desktopFile); -QString getImagePath(QString imageName); +std::string getDesktopFileAccordProcName(QString procName, QString cmdline); +QPixmap getAppIconFromDesktopFile(std::string desktopFile, int iconSize = 24); +QString getDisplayNameAccordProcName(QString procName, std::string desktopFile); std::string make_string(char *c_str); QString formatProcessState(guint state); QString getNiceLevel(int nice); diff --git a/plugins/widgets/mydialog.cpp b/plugins/widgets/mydialog.cpp index 16f459e..7f238cf 100644 --- a/plugins/widgets/mydialog.cpp +++ b/plugins/widgets/mydialog.cpp @@ -2,7 +2,6 @@ #include "mytristatebutton.h" #include -#include #include #include #include @@ -18,70 +17,57 @@ MyDialog::MyDialog(const QString &title, const QString &message, QWidget *parent , mousePressed(false) { this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::WindowCloseButtonHint); - this->setAttribute(Qt::WA_TranslucentBackground); // this->setAttribute(Qt::WA_DeleteOnClose, false); this->setAttribute(Qt::WA_Resized, false); - topLayout = new QHBoxLayout; - topLayout->setContentsMargins(20, 14, 20, 14); - topLayout->setSpacing(20); + m_topLayout = new QHBoxLayout; + m_topLayout->setContentsMargins(20, 14, 20, 14); + m_topLayout->setSpacing(20); - titleLabel = new QLabel; - titleLabel->setStyleSheet("QLabel{padding-top: 2px;padding-bottom: 2px;font-size: 12px;color: #000000;}"); - titleLabel->hide(); - titleLabel->setAttribute(Qt::WA_TransparentForMouseEvents); + m_titleLabel = new QLabel; + m_titleLabel->setStyleSheet("QLabel{padding-top:3px;padding-bottom:3px;font-size:18px;color:#000000;}"); + m_titleLabel->hide(); + m_titleLabel->setAttribute(Qt::WA_TransparentForMouseEvents); - messageLabel = new QLabel; - messageLabel->setStyleSheet("QLabel{padding-top: 2px;padding-bottom: 2px;font-size: 11px;color: #444444;}"); - messageLabel->hide(); - messageLabel->setAttribute(Qt::WA_TransparentForMouseEvents); + m_messageLabel = new QLabel; + m_messageLabel->setStyleSheet("QLabel{padding-top:3px;padding-bottom:3px;font-size:12px;color:#000000;}"); + m_messageLabel->hide(); + m_messageLabel->setAttribute(Qt::WA_TransparentForMouseEvents); QVBoxLayout *textLayout = new QVBoxLayout; textLayout->setContentsMargins(0, 0, 0, 0); textLayout->setSpacing(5); - textLayout->addStretch(); - textLayout->addWidget(titleLabel, 0, Qt::AlignLeft); - textLayout->addWidget(messageLabel, 0, Qt::AlignLeft); + textLayout->addWidget(m_titleLabel, 0, Qt::AlignLeft); + textLayout->addWidget(m_messageLabel, 0, Qt::AlignLeft); textLayout->addStretch(); - contentLayout = new QVBoxLayout; - contentLayout->setContentsMargins(0, 0, 0, 0); - contentLayout->setSpacing(0); - contentLayout->addLayout(textLayout); - - topLayout->addLayout(contentLayout); - + m_topLayout->addLayout(textLayout); closeButton = new MyTristateButton(this); closeButton->setObjectName("CloseButton"); -// closeButton->setNormalPic(":/res/tool/close_normal.png"); -// closeButton->setHoverPic(":/res/tool/close_hover.png"); -// closeButton->setPressPic(":/res/tool/close_press.png"); connect(closeButton, &MyTristateButton::clicked, this, [=] { this->close(); }); closeButton->setAttribute(Qt::WA_NoMousePropagation); + m_buttonLayout = new QHBoxLayout; + m_buttonLayout->setMargin(0); + m_buttonLayout->setSpacing(0); + m_buttonLayout->setContentsMargins(20, 14, 20, 14); + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setContentsMargins(0, 0, 0, 0); - mainLayout->setSpacing(0); + mainLayout->setSpacing(10); mainLayout->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight); - mainLayout->addLayout(topLayout); - - buttonLayout = new QHBoxLayout; - buttonLayout->setMargin(0); - buttonLayout->setSpacing(0); - buttonLayout->setContentsMargins(20, 14, 20, 14); - mainLayout->addLayout(buttonLayout); + mainLayout->addLayout(m_topLayout); + mainLayout->addLayout(m_buttonLayout); QAction *button_action = new QAction(this); - button_action->setShortcuts(QKeySequence::InsertParagraphSeparator); button_action->setAutoRepeat(false); - - QObject::connect(button_action, SIGNAL(triggered(bool)), this, SLOT(onDefaultButtonTriggered())); + connect(button_action, SIGNAL(triggered(bool)), this, SLOT(onDefaultButtonTriggered())); this->setLayout(mainLayout); this->addAction(button_action); @@ -96,17 +82,36 @@ MyDialog::MyDialog(const QString &title, const QString &message, QWidget *parent MyDialog::~MyDialog() { - this->clearButtons(); + delete m_messageLabel; + delete m_titleLabel; + delete closeButton; + + QLayoutItem *child; + while ((child = m_topLayout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } + + this->buttonList.clear(); + while ((child = m_buttonLayout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } +// while(this->m_buttonLayout->count()) { +// QLayoutItem *item = this->m_buttonLayout->takeAt(0); +// item->widget()->deleteLater(); +// delete item; +// } } void MyDialog::updateSize() { if (!this->testAttribute(Qt::WA_Resized)) { QSize size = this->sizeHint(); - - size.setWidth(qMax(size.width(), 440)); - size.setHeight(qMax(size.height(), 200)); - + size.setWidth(qMax(size.width(), 234)); + size.setHeight(qMax(size.height(), 196)); this->resize(size); this->setAttribute(Qt::WA_Resized, false); } @@ -115,7 +120,6 @@ void MyDialog::updateSize() void MyDialog::onButtonClicked() { QAbstractButton *button = qobject_cast(this->sender()); - if(button) { clickedButtonIndex = buttonList.indexOf(button); emit this->buttonClicked(clickedButtonIndex, button->text()); @@ -138,51 +142,25 @@ int MyDialog::buttonCount() const return this->buttonList.count(); } -int MyDialog::addButton(const QString &text, bool isDefault/*, ButtonType type*/) +int MyDialog::addButton(const QString &text, bool isDefault) { int index = buttonCount(); - QAbstractButton *button = new QPushButton(text); + button->setFocusPolicy(Qt::NoFocus); button->setStyleSheet("QPushButton{font-size:12px;background:#ffffff;border:1px solid #bebebe;color:#000000;}QPushButton:hover{background-color:#ffffff;border:1px solid #3f96e4;color:#000000;}QPushButton:pressed{background-color:#ffffff;border:1px solid #3f96e4;color:#000000;}"); button->setAttribute(Qt::WA_NoMousePropagation); - button->setFixedHeight(24); + button->setFixedSize(91, 25); - QLabel* label = new QLabel; - label->setStyleSheet("QLabel{background-color:rgba(0, 0, 0, 0.1);}"); - label->setFixedWidth(1); - label->hide(); - - if(index > 0 && index >= buttonCount()) { - QLabel *label = qobject_cast(this->buttonLayout->itemAt(this->buttonLayout->count() - 1)->widget()); - if(label) - label->show(); - } - - this->buttonLayout->insertWidget(index * 2, button); + this->m_buttonLayout->insertWidget(index+1, button); this->buttonList << button; - this->buttonLayout->insertWidget(index * 2 + 1, label); - connect(button, SIGNAL(clicked(bool)), this, SLOT(onButtonClicked())); if(isDefault) { setDefaultButton(button); } - return index; } -void MyDialog::clearButtons() -{ - this->buttonList.clear(); - - while(this->buttonLayout->count()) { - QLayoutItem *item = this->buttonLayout->takeAt(0); - - item->widget()->deleteLater(); - delete item; - } -} - void MyDialog::setDefaultButton(QAbstractButton *button) { this->defaultButton = button; @@ -194,27 +172,25 @@ void MyDialog::setTitle(const QString &title) return; this->m_title = title; - this->titleLabel->setText(title); - this->titleLabel->setHidden(title.isEmpty()); + this->m_titleLabel->setText(title); + this->m_titleLabel->setHidden(title.isEmpty()); } void MyDialog::setMessage(const QString &message) { if (this->m_message == message) return; - this->m_message = message; - this->messageLabel->setText(message); - this->messageLabel->setHidden(message.isEmpty()); + this->m_messageLabel->setText(message); + this->m_messageLabel->setHidden(message.isEmpty()); } int MyDialog::exec() { this->clickedButtonIndex = -1; + int ret = QDialog::exec(); - int code = QDialog::exec(); - - return this->clickedButtonIndex >= 0 ? this->clickedButtonIndex : code; + return this->clickedButtonIndex >= 0 ? this->clickedButtonIndex : ret; } void MyDialog::showEvent(QShowEvent *event) @@ -227,14 +203,12 @@ void MyDialog::showEvent(QShowEvent *event) void MyDialog::hideEvent(QHideEvent *event) { QDialog::hideEvent(event); - done(-1); } void MyDialog::childEvent(QChildEvent *event) { QDialog::childEvent(event); - if (event->added()) { if (this->closeButton) { this->closeButton->raise(); @@ -246,16 +220,15 @@ QRect MyDialog::getParentGeometry() const { if (this->parentWidget()) { return this->parentWidget()->window()->geometry(); - } else { + } + else { QPoint pos = QCursor::pos(); - for (QScreen *screen : qApp->screens()) { if (screen->geometry().contains(pos)) { return screen->geometry(); } } } - return qApp->primaryScreen()->geometry(); } @@ -272,14 +245,12 @@ void MyDialog::mousePressEvent(QMouseEvent *event) this->dragPosition = event->globalPos() - frameGeometry().topLeft(); this->mousePressed = true; } - QDialog::mousePressEvent(event); } void MyDialog::mouseReleaseEvent(QMouseEvent *event) { this->mousePressed = false; - QDialog::mouseReleaseEvent(event); } @@ -288,7 +259,6 @@ void MyDialog::mouseMoveEvent(QMouseEvent *event) if (this->mousePressed) { move(event->globalPos() - this->dragPosition); } - QDialog::mouseMoveEvent(event); } @@ -297,7 +267,7 @@ void MyDialog::paintEvent(QPaintEvent *event) QPainter painter(this); //绘制圆角矩形 - painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 QColor(255, 255, 255, 153) + painter.setPen(QPen(QColor("#0d87ca"), 0));//边框颜色 painter.setBrush(QColor("#e9eef0"));//背景色 #0d87ca painter.setRenderHint(QPainter::Antialiasing, true); painter.setOpacity(1); @@ -318,21 +288,21 @@ void MyDialog::resizeEvent(QResizeEvent *event) { QDialog::resizeEvent(event); - this->titleLabel->setWordWrap(false); - int labelMaxWidth = maximumWidth() - this->closeButton->width() - this->titleLabel->x(); + this->m_titleLabel->setWordWrap(false); + int labelMaxWidth = maximumWidth() - this->closeButton->width() - this->m_titleLabel->x(); - if (this->titleLabel->sizeHint().width() > labelMaxWidth) { - this->titleLabel->setFixedWidth(labelMaxWidth); - this->titleLabel->setWordWrap(true); - this->titleLabel->setFixedHeight(this->titleLabel->sizeHint().height()); + if (this->m_titleLabel->sizeHint().width() > labelMaxWidth) { + this->m_titleLabel->setFixedWidth(labelMaxWidth); + this->m_titleLabel->setWordWrap(true); + this->m_titleLabel->setFixedHeight(this->m_titleLabel->sizeHint().height()); } - this->messageLabel->setWordWrap(false); - labelMaxWidth = maximumWidth() - this->closeButton->width() - this->messageLabel->x(); + this->m_messageLabel->setWordWrap(false); + labelMaxWidth = maximumWidth() - this->closeButton->width() - this->m_messageLabel->x(); - if (this->messageLabel->sizeHint().width() > labelMaxWidth) { - this->messageLabel->setFixedWidth(labelMaxWidth); - this->messageLabel->setWordWrap(true); - this->messageLabel->setFixedHeight(this->messageLabel->sizeHint().height()); + if (this->m_messageLabel->sizeHint().width() > labelMaxWidth) { + this->m_messageLabel->setFixedWidth(labelMaxWidth); + this->m_messageLabel->setWordWrap(true); + this->m_messageLabel->setFixedHeight(this->m_messageLabel->sizeHint().height()); } } diff --git a/plugins/widgets/mydialog.h b/plugins/widgets/mydialog.h index 0dbc9c4..062aae7 100644 --- a/plugins/widgets/mydialog.h +++ b/plugins/widgets/mydialog.h @@ -23,6 +23,7 @@ public: explicit MyDialog(const QString &title, const QString& message, QWidget *parent = 0); ~MyDialog(); + void updateSize(); int buttonCount() const; QRect getParentGeometry() const; void moveToCenter(); @@ -32,11 +33,9 @@ signals: public slots: int addButton(const QString &text, bool isDefault = false); - void clearButtons(); void setDefaultButton(QAbstractButton *button); void setTitle(const QString &title); void setMessage(const QString& message); - int exec() Q_DECL_OVERRIDE; public slots: @@ -54,22 +53,21 @@ protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: - QString m_title; - QString m_message; - QLabel* messageLabel; - QLabel* titleLabel; - - MyTristateButton* closeButton = nullptr; - QHBoxLayout *iconLayout; - QVBoxLayout *contentLayout; - QHBoxLayout *buttonLayout; - QHBoxLayout *topLayout; + QLabel *m_messageLabel = nullptr; + QLabel *m_titleLabel = nullptr; + MyTristateButton *closeButton = nullptr; +// QVBoxLayout *contentLayout = nullptr; + QHBoxLayout *m_buttonLayout = nullptr; + QHBoxLayout *m_topLayout = nullptr; QList buttonList; QList contentList; QPointer defaultButton; int clickedButtonIndex; - void updateSize(); + + QString m_title; + QString m_message; + QPoint dragPosition; bool mousePressed; }; diff --git a/plugins/widgets/mysearchedit.cpp b/plugins/widgets/mysearchedit.cpp index b6c2a5a..45c9dab 100644 --- a/plugins/widgets/mysearchedit.cpp +++ b/plugins/widgets/mysearchedit.cpp @@ -1,19 +1,17 @@ #include "mysearchedit.h" #include -#include -#include #include #include #include #include -#include MySearchEdit::MySearchEdit(QWidget *parent) : QFrame(parent) + ,m_showCurve(QEasingCurve::OutCubic) + ,m_hideCurve(QEasingCurve::InCubic) { -// this->setStyleSheet("QFrame{background-color:#00376a;border-radius:0px;}"); - this->setStyleSheet("QFrame{background-color:rgb(0, 55, 106, 127);border-radius:0px;}"); + this->setStyleSheet("QFrame{background-color:#00376a;border-radius:0px;}"); m_searchBtn = new QLabel; m_searchBtn->setStyleSheet("QLabel{background-color:transparent;border:none;background-image:url(:/res/search.png);}"); @@ -45,42 +43,45 @@ MySearchEdit::MySearchEdit(QWidget *parent) layout->setAlignment(m_placeHolder, Qt::AlignCenter); layout->addWidget(m_edit); layout->setAlignment(m_edit, Qt::AlignCenter); -// layout->addStretch(); -// layout->addWidget(m_searchBtn); -// layout->setAlignment(m_searchBtn, Qt::AlignCenter); layout->addStretch(); layout->addWidget(m_clearBtn); layout->setAlignment(m_clearBtn, Qt::AlignCenter); layout->setSpacing(0); layout->setContentsMargins(0, 0, 0, 0); -// setAutoFillBackground(true); setFocusPolicy(Qt::StrongFocus); - connect(m_clearBtn, &MyTristateButton::clicked, m_edit, static_cast(&QLineEdit::setFocus)); - connect(m_clearBtn, &MyTristateButton::clicked, this, &MySearchEdit::clearEdit); connect(m_edit, &QLineEdit::textChanged, [this] {m_clearBtn->setVisible(!m_edit->text().isEmpty());}); connect(m_edit, &QLineEdit::textChanged, this, &MySearchEdit::textChanged, Qt::DirectConnection); -// connect(m_edit, &QLineEdit::textChanged, this, [=] { -// emit this->textChanged(); -// }); + connect(m_clearBtn, &MyTristateButton::clicked, this, [=] { + this->clearAndFocusEdit(); + }); } MySearchEdit::~MySearchEdit() { m_animation->deleteLater(); + delete m_edit; + delete m_searchBtn; + delete m_placeHolder; + delete m_clearBtn; } -const QString MySearchEdit::text() const +const QString MySearchEdit::searchedText() const { return m_edit->text(); } +void MySearchEdit::clearAndFocusEdit() +{ + this->clearEdit(); + this->m_edit->setFocus(); +} + void MySearchEdit::clearEdit() { m_edit->clear(); -// this->setStyleSheet("QFrame{background-color:#00376a;border-radius:0px;}"); - this->setStyleSheet("QFrame{background-color:rgb(0, 55, 106, 127);border-radius:0px;}"); + this->setStyleSheet("QFrame{background-color:#00376a;border-radius:0px;}"); } void MySearchEdit::mousePressEvent(QMouseEvent *event) @@ -102,6 +103,7 @@ bool MySearchEdit::eventFilter(QObject *object, QEvent *event) if (object == m_edit && event->type() == QEvent::FocusOut && m_edit->text().isEmpty()) { auto focusEvent = dynamic_cast(event); if (focusEvent && focusEvent->reason() != Qt::PopupFocusReason) { +// m_placeHolder->show(); m_animation->stop(); m_animation->setStartValue(m_edit->width()); m_animation->setEndValue(0); @@ -110,7 +112,6 @@ bool MySearchEdit::eventFilter(QObject *object, QEvent *event) connect(m_animation, &QPropertyAnimation::finished, m_placeHolder, &QLabel::show); } } - return QFrame::eventFilter(object, event); } @@ -127,10 +128,20 @@ void MySearchEdit::setEditFocus() m_animation->start(); m_placeHolder->hide(); m_edit->setFocus(); -// this->setStyleSheet("QFrame{background-color:#00376a;border:1px solid #47ccf3;border-radius:0px;}"); - this->setStyleSheet("QFrame{background-color:rgb(0, 55, 106, 127);border:1px solid #47ccf3;border-radius:0px;}"); + this->setStyleSheet("QFrame{background-color:#00376a;border:1px solid #47ccf3;border-radius:0px;}"); } +void MySearchEdit::setPlaceHolder(const QString &text) +{ + m_placeHolder->setText(text); +} + +void MySearchEdit::setText(const QString & text) +{ + if (m_edit) { + m_edit->setText(text); + } +} QLineEdit *MySearchEdit::getLineEdit() const { @@ -148,13 +159,9 @@ bool MySearchEdit::event(QEvent *event) if (event->type() == QEvent::FocusIn) { const QFocusEvent *ev = static_cast(event); - if (ev->reason() == Qt::TabFocusReason - || ev->reason() == Qt::BacktabFocusReason - || ev->reason() == Qt::OtherFocusReason - || ev->reason() == Qt::ShortcutFocusReason) { + if (ev->reason() == Qt::TabFocusReason || ev->reason() == Qt::BacktabFocusReason || ev->reason() == Qt::OtherFocusReason || ev->reason() == Qt::ShortcutFocusReason) { setEditFocus(); } } - return QFrame::event(event); } diff --git a/plugins/widgets/mysearchedit.h b/plugins/widgets/mysearchedit.h index 7a68ab2..f43fb4a 100644 --- a/plugins/widgets/mysearchedit.h +++ b/plugins/widgets/mysearchedit.h @@ -16,16 +16,15 @@ public: explicit MySearchEdit(QWidget *parent = 0); ~MySearchEdit(); - void setPlaceHolder(const QString &text) {m_placeHolder->setText(text);} - QSize sizeHint() const {return m_size;} - QSize minimumSizeHint() const {return m_size;} - const QString text() const; + void clearAndFocusEdit(); + void setPlaceHolder(const QString &text); + const QString searchedText() const; QLineEdit *getLineEdit() const; public slots: - void setEditFocus(); - void setText(const QString & text) {if (m_edit) m_edit->setText(text);} void clearEdit(); + void setEditFocus(); + void setText(const QString & text); signals: void textChanged(); @@ -38,14 +37,14 @@ protected: bool eventFilter(QObject *object, QEvent *event); private: + QPropertyAnimation *m_animation = nullptr; + QEasingCurve m_showCurve; + QEasingCurve m_hideCurve; QSize m_size; - QLineEdit *m_edit; - QLabel *m_searchBtn; - QLabel *m_placeHolder; - MyTristateButton *m_clearBtn; - QPropertyAnimation *m_animation; - QEasingCurve m_showCurve = QEasingCurve::OutCubic; - QEasingCurve m_hideCurve = QEasingCurve::InCubic; + QLineEdit *m_edit = nullptr; + QLabel *m_searchBtn = nullptr; + QLabel *m_placeHolder = nullptr; + MyTristateButton *m_clearBtn = nullptr; }; #endif // MYSEARCHEDIT_H diff --git a/setting/energywidget.cpp b/setting/energywidget.cpp index 1b579dc..2317f51 100644 --- a/setting/energywidget.cpp +++ b/setting/energywidget.cpp @@ -26,7 +26,7 @@ #include #include -EnergyWidget::EnergyWidget(QWidget *parent, /*SessionDispatcher *proxy, */QString cur_desktop, bool has_battery) : +EnergyWidget::EnergyWidget(QStringList cpulist, QString cpu, QString cur_desktop, bool has_battery, QWidget *parent) : SettingModulePage(parent),desktop(cur_desktop) { gamma_label = new QLabel(); @@ -50,7 +50,6 @@ EnergyWidget::EnergyWidget(QWidget *parent, /*SessionDispatcher *proxy, */QStrin lock_delay_label = new QLabel(); lock_delay_combo = new QComboBox(); - critical_low_label = new QLabel(); suspend_low_radio = new QRadioButton(); shutdown_radio = new QRadioButton(); @@ -90,7 +89,6 @@ EnergyWidget::EnergyWidget(QWidget *parent, /*SessionDispatcher *proxy, */QStrin sleep_ac_display_label = new QLabel(); sleep_ac_display_combo = new QComboBox(); - if (this->desktop == "mate" || this->desktop == "MATE" || this->desktop == "UKUI" || this->desktop == "ukui") { brightness_label->hide(); brightness_value_label->hide(); @@ -134,6 +132,8 @@ EnergyWidget::EnergyWidget(QWidget *parent, /*SessionDispatcher *proxy, */QStrin sleep_battery_display_label->setFixedWidth(260); sleep_ac_display_label->setFixedWidth(260); + + QHBoxLayout *layout0 = new QHBoxLayout(); layout0->setSpacing(10); layout0->addWidget(gamma_label); @@ -200,28 +200,108 @@ EnergyWidget::EnergyWidget(QWidget *parent, /*SessionDispatcher *proxy, */QStrin layout11->addWidget(sleep_ac_display_combo); layout11->addStretch(); - QVBoxLayout *layout = new QVBoxLayout(); - layout->addLayout(layout0); - layout->addLayout(layout1); - layout->addLayout(layout2); - layout->addLayout(layout3); - layout->addLayout(layout4); - layout->addLayout(layout5); - layout->addLayout(layout6); - layout->addLayout(layout7); - layout->addLayout(layout8); - layout->addLayout(layout9); - layout->addLayout(layout10); - layout->addLayout(layout11); - layout->addStretch(); - setLayout(layout); - layout->setSpacing(10); - layout->setContentsMargins(20, 20, 0, 0); + m_layout = new QVBoxLayout(this); + m_layout->setSpacing(10); + m_layout->setContentsMargins(20, 20, 0, 0); + + m_layout->addLayout(layout0); + m_layout->addLayout(layout1); + m_layout->addLayout(layout2); + m_layout->addLayout(layout3); + m_layout->addLayout(layout4); + m_layout->addLayout(layout5); + m_layout->addLayout(layout6); + m_layout->addLayout(layout7); + m_layout->addLayout(layout8); + m_layout->addLayout(layout9); + m_layout->addLayout(layout10); + m_layout->addLayout(layout11); + + //kobe reset cpu mode + if (!cpulist.isEmpty()) { +// qDebug() << cpulist; +// qDebug() << cpu; + QLabel *cpu_label = new QLabel(); + cpu_label->setText(tr("CPU FM mode:")); + QHBoxLayout *cpu_layout = new QHBoxLayout(); + cpu_layout->setSpacing(10); + cpu_layout->addWidget(cpu_label); + QButtonGroup *cpuGroup = new QButtonGroup(); + + QList::Iterator it = cpulist.begin(), itend = cpulist.end(); + for(;it != itend; it++) { + if(*it == "ondemand") { + QRadioButton *ondemand_radio = new QRadioButton(); + ondemand_radio->setFocusPolicy(Qt::NoFocus); + ondemand_radio->setText(tr("Ondemand")); + ondemand_radio->setObjectName("ondemandradio"); + ondemand_radio->setChecked(false); + cpuGroup->addButton(ondemand_radio); + cpu_layout->addWidget(ondemand_radio); + connect(ondemand_radio, SIGNAL(clicked()), this, SLOT(onCpuRadioButtonClicked())); + } + else if(*it == "powersave") { + QRadioButton *powersave_radio = new QRadioButton(); + powersave_radio->setFocusPolicy(Qt::NoFocus); + powersave_radio->setText(tr("Powersave")); + powersave_radio->setObjectName("powersaveradio"); + powersave_radio->setChecked(false); + cpuGroup->addButton(powersave_radio); + cpu_layout->addWidget(powersave_radio); + connect(powersave_radio, SIGNAL(clicked()), this, SLOT(onCpuRadioButtonClicked())); + } + else if(*it == "performance") { + QRadioButton *performance_radio = new QRadioButton(); + performance_radio->setFocusPolicy(Qt::NoFocus); + performance_radio->setText(tr("Performance")); + performance_radio->setObjectName("performanceradio"); + performance_radio->setChecked(false); + cpuGroup->addButton(performance_radio); + cpu_layout->addWidget(performance_radio); + connect(performance_radio, SIGNAL(clicked()), this, SLOT(onCpuRadioButtonClicked())); + } + } + cpu_layout->addStretch(); + m_layout->addLayout(cpu_layout); + +// for (auto cpuMode : cpulist) + foreach (QAbstractButton *absbutton, cpuGroup->buttons()) { + QRadioButton *radio = qobject_cast(absbutton); + if (radio) { + QString obj_name = radio->objectName(); + if(obj_name == "ondemandradio") { + if(cpu == "ondemand") { + radio->setChecked(true); + } + else { + radio->setChecked(false); + } + } + else if(obj_name == "powersaveradio") { + if(cpu == "powersave") { + radio->setChecked(true); + } + else { + radio->setChecked(false); + } + } + else if(obj_name == "performanceradio") { + if(cpu == "performance") { + radio->setChecked(true); + } + else { + radio->setChecked(false); + } + } + } + } + + } + m_layout->addStretch(); // this->initSettingData(); this->setLanguage(); - // iface = new QDBusInterface("org.gnome.SettingsDaemon", // "/org/gnome/SettingsDaemon/Power", // "org.gnome.SettingsDaemon.Power.Screen", @@ -346,6 +426,13 @@ EnergyWidget::~EnergyWidget() delete sleep_ac_display_combo; sleep_ac_display_combo = NULL; } + + QLayoutItem *child; + while ((child = m_layout->takeAt(0)) != 0) { + if (child->widget()) + child->widget()->deleteLater(); + delete child; + } } QString EnergyWidget::settingModuleName() @@ -775,7 +862,8 @@ void EnergyWidget::onSendLockAndSleepData(bool lockEnabled, const QString &lock_ sleep_ac_combo->setCurrentIndex(initIndex4); } -void EnergyWidget::initConnect() { +void EnergyWidget::initConnect() +{ connect(gamma_slider, SIGNAL(valueChanged(double)), this, SLOT(setScreenGammaValue(double))); connect(brightness_slider, SIGNAL(valueChanged(int)), this, SLOT(setBrightnessValue(int))); // connect(idle_delay_combo, SIGNAL(currentIndexChanged(QString)), this, SLOT(setIdleDelay(QString))); @@ -910,6 +998,15 @@ void EnergyWidget::setLockDelay(int index) //// sessionproxy->set_current_lock_delay_qt(value.toInt()); } +void EnergyWidget::onCpuRadioButtonClicked() +{ + QRadioButton *button = qobject_cast(this->sender()); + if (button) { + QString obj_name = button->objectName(); + emit setCurrentCpuMode(obj_name); + } +} + void EnergyWidget::setRadioButtonRowStatus() { QObject *obj = sender(); //返回发出信号的对象,用QObject类型接收 diff --git a/setting/energywidget.h b/setting/energywidget.h index 41c7c67..6b38a1f 100644 --- a/setting/energywidget.h +++ b/setting/energywidget.h @@ -32,6 +32,7 @@ class QComboBox; class QDoubleSpinBox; class QSlider; class QRadioButton; +class QVBoxLayout; #include "settingmodulelpage.h" @@ -39,7 +40,7 @@ class EnergyWidget : public SettingModulePage { Q_OBJECT public: - explicit EnergyWidget(QWidget *parent = 0, /*SessionDispatcher *proxy = 0,*/ QString cur_desktop = "", bool has_battery = false); + explicit EnergyWidget(QStringList cpulist, QString cpu, QString cur_desktop, bool has_battery = false, QWidget *parent = 0); ~EnergyWidget(); void setLanguage(); void initConnect(); @@ -54,6 +55,7 @@ public slots: void setLockEnabled(); // void setLockDelay(QString value); void setLockDelay(int index); + void onCpuRadioButtonClicked(); void setRadioButtonRowStatus(); void setSleepTimeoutBattery(int index); void setSleepTimeoutAC(int index); @@ -63,8 +65,6 @@ public slots: void onSendIdleAndGammaData(double gamma, const QStringList &aclist, int brightnessValue, const QString &sleepTimeoutDisplayBattery, const QString &sleepTimeoutFisplayAC, const QString &idle_delay, const QStringList &idledelaylist); void onSendLockAndSleepData(bool lockEnabled, const QString &lock_delay, const QStringList &lockdelaylist, const QString &critical_low, const QString &laptop_battery, const QString &laptop_ac, const QString &sleepTimeoutBattery, const QStringList &batterylist, const QString &sleepTimeoutAc); - - signals: void requestPowerAndBatteryData(); void resetScreenGammaValue(double value); @@ -79,6 +79,7 @@ signals: void resetSleepTimeoutAC(int index, int value); void resetSleepTimeoutDisplayBattery(int index, int value); void resetSleepTimeoutDisplayAC(int index, int value); + void setCurrentCpuMode(const QString &mode); private: QString desktop; @@ -119,6 +120,7 @@ private: QComboBox *sleep_ac_display_combo; QStringList m_aclist; + QVBoxLayout *m_layout = nullptr; }; #endif // ENERGYWIDGET_H diff --git a/setting/menuwidget.cpp b/setting/menuwidget.cpp index cb31f2b..97b1d75 100644 --- a/setting/menuwidget.cpp +++ b/setting/menuwidget.cpp @@ -399,7 +399,6 @@ void MenuWidget::onSendMatePanelIconValue(int topIconSize, int bottomIconSize, b void MenuWidget::onSendUnityIconValue(int iconSize, bool iconHide, bool desktopIconShowed, double launcherTransparency, int iconColourIndex, const QStringList &colourlist) { - qDebug() << "MenuWidget::onSendUnityIconValue============"; size_slider->setValue(iconSize); size_value_label->setText(QString::number(iconSize)); hide_switcher->switchedOn = iconHide; diff --git a/src/dataworker.cpp b/src/dataworker.cpp index c4e1445..a3d58bd 100644 --- a/src/dataworker.cpp +++ b/src/dataworker.cpp @@ -64,6 +64,7 @@ void DataWorker::initDataWorker() sessioninterface = new SessionDispatcher; ThreadPool::Instance()->moveToNewThread(sessioninterface); this->m_existBattery = sessioninterface->judge_power_is_exists_qt(); + connect(sessioninterface, SIGNAL(string_value_notify(QString,QString)), this, SIGNAL(string_value_notify(QString,QString))); connect(sessioninterface, SIGNAL(bool_value_notify(QString,bool)), this, SIGNAL(bool_value_notify(QString,bool))); connect(sessioninterface, SIGNAL(int_value_notify(QString,int)), this, SIGNAL(int_value_notify(QString,int))); @@ -85,6 +86,8 @@ void DataWorker::initDataWorker() systemThread->start();*/ this->m_existSensor = systeminterface->judge_sensors_exists_qt(); + this->m_cpulist = systeminterface->get_cpufreq_scaling_governer_list_qt(); + this->m_currentCpuMode = systeminterface->get_current_cpufreq_scaling_governer_qt(); connect(systeminterface, SIGNAL(finishCleanWorkMain(QString)), this, SIGNAL(finishCleanWorkMain(QString))); connect(systeminterface, SIGNAL(finishCleanWorkMainError(QString)), this, SIGNAL(finishCleanWorkMainError(QString))); @@ -103,6 +106,16 @@ void DataWorker::doWork() emit dataLoadFinished(); } +const QStringList DataWorker::cpuModeList() const +{ + return this->m_cpulist; +} + +const QString DataWorker::cpuCurrentMode() const +{ + return this->m_currentCpuMode; +} + bool DataWorker::deleteAppointedFile(QString filename) { bool result = systeminterface->delete_file_qt(filename); @@ -1063,6 +1076,19 @@ void DataWorker::onResetSleepTimeoutDisplayAC(int index, int value) } } +void DataWorker::onSetCurrentCpuMode(const QString &mode) +{ +// qDebug() << "set cpu mode="<adjust_cpufreq_scaling_governer_qt("ondemand"); + } + else if(mode == "powersaveradio") { + systeminterface->adjust_cpufreq_scaling_governer_qt("powersave"); + } + else if(mode == "performanceradio") { + systeminterface->adjust_cpufreq_scaling_governer_qt("performance"); + } +} //-------------------file manager diff --git a/src/dataworker.h b/src/dataworker.h index 112eea7..e1ad0b7 100644 --- a/src/dataworker.h +++ b/src/dataworker.h @@ -40,6 +40,9 @@ public: bool isBatteryExist() { return m_existBattery; } bool isSensorExist() { return m_existSensor; } + const QStringList cpuModeList() const; + const QString cpuCurrentMode() const; + public slots: void doWork(); void updateSensorValue(); @@ -190,6 +193,7 @@ public slots: void onResetSleepTimeoutAC(int index, int value); void onResetSleepTimeoutDisplayBattery(int index, int value); void onResetSleepTimeoutDisplayAC(int index, int value); + void onSetCurrentCpuMode(const QString &mode); //file manager void onRequestFileManagerData(); @@ -331,6 +335,8 @@ private: bool m_existBattery; bool m_existSensor; + QStringList m_cpulist; + QString m_currentCpuMode; QTimer *m_sensorTimer = nullptr; }; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 61d5d09..d0905c3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -326,6 +326,8 @@ void MainWindow::onInitDataFinished() { this->battery = m_dataWorker->isBatteryExist(); this->sensor = m_dataWorker->isSensorExist(); + this->m_cpulist = m_dataWorker->cpuModeList(); + this->m_currentCpuMode = m_dataWorker->cpuCurrentMode(); this->displayMainWindow(); @@ -350,8 +352,6 @@ void MainWindow::onInitDataFinished() connect(m_dataWorker, SIGNAL(finishCleanWorkMainError(QString)), home_action_widget, SLOT(finishCleanError(QString))); connect(m_dataWorker, SIGNAL(quickCleanProcess(QString,QString)), home_action_widget, SLOT(getCleaningMessage(QString,QString))); - - //theme connect(setting_widget, SIGNAL(changeSystemTheme(QString)), m_dataWorker, SLOT(onChangeSystemTheme(QString))); connect(setting_widget, SIGNAL(requestThemeData()), m_dataWorker, SLOT(onRequestThemeData())); @@ -368,7 +368,6 @@ void MainWindow::onInitDataFinished() connect(setting_widget, SIGNAL(displayRecycleBinIcon(bool)), m_dataWorker, SLOT(onDisplayRecycleBinIcon(bool))); connect(setting_widget, SIGNAL(displayDiskIcon(bool)), m_dataWorker, SLOT(onDisplayDiskIcon(bool))); - //mouse connect(setting_widget, SIGNAL(requestMouseData()), m_dataWorker, SLOT(onRequestMouseData())); connect(m_dataWorker, SIGNAL(sendMouseThemeAndCusorSize(QString,QStringList,int)), setting_widget, SIGNAL(sendMouseThemeAndCusorSize(QString,QStringList,int))); @@ -404,7 +403,6 @@ void MainWindow::onInitDataFinished() connect(setting_widget, SIGNAL(resetShowIcon(bool)), m_dataWorker, SLOT(onResetShowIcon(bool))); connect(setting_widget, SIGNAL(resetShowPlaces(bool)), m_dataWorker, SLOT(onResetShowPlaces(bool))); - //launcher menu connect(setting_widget, SIGNAL(requestMateOrUnityMenuData(bool)), m_dataWorker, SLOT(onRequestMateOrUnityMenuData(bool))); connect(m_dataWorker, SIGNAL(sendMatePanelIconValue(int,int,bool,bool)), setting_widget, SIGNAL(sendMatePanelIconValue(int,int,bool,bool))); @@ -438,7 +436,6 @@ void MainWindow::onInitDataFinished() connect(setting_widget, SIGNAL(resetMouseRightClick(QString)), m_dataWorker, SLOT(onResetMouseRightClick(QString))); connect(setting_widget, SIGNAL(resetWindowButtonLeftOrRightAlign(bool)), m_dataWorker, SLOT(onResetWindowButtonLeftOrRightAlign(bool))); - //font connect(setting_widget, SIGNAL(requestFontData()), m_dataWorker, SLOT(onRequestFontData())); connect(m_dataWorker, SIGNAL(sendFontValue(QString)), setting_widget, SIGNAL(sendFontValue(QString))); @@ -462,7 +459,6 @@ void MainWindow::onInitDataFinished() connect(setting_widget, SIGNAL(restoreDocumentDefaultFont(bool)), m_dataWorker, SLOT(onRestoreDocumentDefaultFont(bool))); connect(setting_widget, SIGNAL(restoreTitlebarDefaultFont(bool)), m_dataWorker, SLOT(onRestoreTitlebarDefaultFont(bool))); - //touchpad connect(setting_widget, SIGNAL(requestMateOrUnityTouchpadData(bool)), m_dataWorker, SLOT(onRequestMateOrUnityTouchpadData(bool))); connect(m_dataWorker, SIGNAL(sendTouchPadValue(bool,bool,QString,int,QString)), setting_widget, SIGNAL(sendTouchPadValue(bool,bool,QString,int,QString))); @@ -472,8 +468,6 @@ void MainWindow::onInitDataFinished() connect(setting_widget, SIGNAL(setMateTouchscrollingMode(int)), m_dataWorker, SLOT(onSetMateTouchscrollingMode(int))); connect(setting_widget, SIGNAL(setUnityTouchscrollingMode(int)), m_dataWorker, SLOT(onSetUnityTouchscrollingMode(int))); - - //ac and battery connect(setting_widget, SIGNAL(requestPowerAndBatteryData()), m_dataWorker, SLOT(onRequestPowerAndBatteryData())); connect(m_dataWorker, SIGNAL(sendIdleAndGammaData(double,QStringList,int,QString,QString,QString,QStringList)), setting_widget, SIGNAL(sendIdleAndGammaData(double,QStringList,int,QString,QString,QString,QStringList))); @@ -491,7 +485,7 @@ void MainWindow::onInitDataFinished() connect(setting_widget, SIGNAL(resetSleepTimeoutAC(int,int)), m_dataWorker, SLOT(onResetSleepTimeoutAC(int,int))); connect(setting_widget, SIGNAL(resetSleepTimeoutDisplayBattery(int,int)), m_dataWorker, SLOT(onResetSleepTimeoutDisplayBattery(int,int))); connect(setting_widget, SIGNAL(resetSleepTimeoutDisplayAC(int,int)), m_dataWorker, SLOT(onResetSleepTimeoutDisplayAC(int,int))); - + connect(setting_widget, SIGNAL(setCurrentCpuMode(QString)), m_dataWorker, SLOT(onSetCurrentCpuMode(QString))); //file manager connect(setting_widget, SIGNAL(requestFileManagerData()), m_dataWorker, SLOT(onRequestFileManagerData())); @@ -994,7 +988,6 @@ void MainWindow::initOtherPages() connect(m_dataWorker, SIGNAL(tellCleanerMainStatus(QString, QString)), cleaner_action_widget, SLOT(showCleanerStatus(QString, QString))); connect(m_dataWorker, SIGNAL(sendCleanErrorSignal(QString)), cleaner_action_widget, SLOT(showCleanerError(QString))); - connect(cleaner_widget, SIGNAL(startScanSystem(QMap)), m_dataWorker, SLOT(onStartScanSystem(QMap))); connect(cleaner_widget, SIGNAL(startCleanSystem(QMap)), m_dataWorker, SLOT(onStartCleanSystem(QMap))); @@ -1013,7 +1006,6 @@ void MainWindow::initOtherPages() // connect(sessioninterface, SIGNAL(tellCleanerDetailStatus(QString)), cleaner_action_widget, SLOT(showCleanReciveStatus(QString))); // connect(sessioninterface, SIGNAL(tellCleanerDetailError(QString)), cleaner_action_widget, SLOT(showCleanReciveError(QString))); - connect(cleaner_action_widget, SIGNAL(sendScanSignal()),cleaner_widget, SIGNAL(transScanSignal())); connect(cleaner_widget, SIGNAL(tranActionAnimaitonSignal()),cleaner_action_widget, SLOT(displayAnimation())); connect(cleaner_widget, SIGNAL(tranScanOverSignal(bool)),cleaner_action_widget, SLOT(accordScanOverStatusToChange(bool))); @@ -1090,7 +1082,7 @@ void MainWindow::initOtherPages() if(setting_widget == NULL) - setting_widget = new SettingWidget(this->desktop, this->battery);//20180101 + setting_widget = new SettingWidget(this->m_cpulist, this->m_currentCpuMode, this->desktop, this->battery);//20180101 setting_widget->setParentWindow(this); // setting_widget->setSessionDbusProxy(sessioninterface); // setting_widget->setSystemDbusProxy(systeminterface); diff --git a/src/mainwindow.h b/src/mainwindow.h index 4c17cad..0cf263d 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -159,6 +159,8 @@ private: QString arch; bool battery; bool sensor; + QStringList m_cpulist; + QString m_currentCpuMode; QParallelAnimationGroup *spreadGroup; QParallelAnimationGroup *gatherGroup; PAGESTATUS status; diff --git a/src/settingwidget.cpp b/src/settingwidget.cpp index d4e6c3f..a1f32a5 100644 --- a/src/settingwidget.cpp +++ b/src/settingwidget.cpp @@ -25,8 +25,12 @@ #include "../setting/settingmodel.h" #include "../setting/settingdelegate.h" -SettingWidget::SettingWidget(QString cur_desktop, bool has_battery, QWidget *parent) : - QWidget(parent), desktop(cur_desktop), battery(has_battery) +SettingWidget::SettingWidget(QStringList cpulist, QString cpu, QString cur_desktop, bool has_battery, QWidget *parent) : + QWidget(parent) + ,m_cpuList(cpulist) + ,m_currentCpu(cpu) + ,desktop(cur_desktop) + ,battery(has_battery) { this->setFixedSize(900, 403); // setStyleSheet("background-color: rgba(155, 255, 255, .238);"); @@ -140,7 +144,7 @@ void SettingWidget::initUI(/*QString skin*/) font_widget = new FontWidget(this, p_mainwindow, desktop, "");//TODO:read skin from ini file touchpad_widget = new TouchpadWidget(this, desktop); // deadpixel_widget = new DeadpixelWidget(this); - conserve_widget = new EnergyWidget(this, desktop, battery); + conserve_widget = new EnergyWidget(m_cpuList, m_currentCpu, desktop, battery, this); nautilus_widget = new FileManagerWidget(this); stacked_widget->addWidget(theme_widget); stacked_widget->addWidget(icon_widget); @@ -306,7 +310,7 @@ void SettingWidget::initUI(/*QString skin*/) connect(conserve_widget, SIGNAL(resetSleepTimeoutAC(int,int)), this, SIGNAL(resetSleepTimeoutAC(int,int))); connect(conserve_widget, SIGNAL(resetSleepTimeoutDisplayBattery(int,int)), this, SIGNAL(resetSleepTimeoutDisplayBattery(int,int))); connect(conserve_widget, SIGNAL(resetSleepTimeoutDisplayAC(int,int)), this, SIGNAL(resetSleepTimeoutDisplayAC(int,int))); - + connect(conserve_widget, SIGNAL(setCurrentCpuMode(QString)), this, SIGNAL(setCurrentCpuMode(QString))); //file manager connect(nautilus_widget, SIGNAL(requestFileManagerData()), this, SIGNAL(requestFileManagerData())); diff --git a/src/settingwidget.h b/src/settingwidget.h index 5d1bb64..81fbbba 100644 --- a/src/settingwidget.h +++ b/src/settingwidget.h @@ -55,7 +55,7 @@ class SettingWidget : public QWidget { Q_OBJECT public: - explicit SettingWidget(QString cur_desktop = "", bool has_battery = false, QWidget *parent = 0); + explicit SettingWidget(QStringList cpulist, QString cpu, QString cur_desktop, bool has_battery = false, QWidget *parent = 0); ~SettingWidget(); void setParentWindow(MainWindow* window) { p_mainwindow = window;} void initUI(/*QString skin*/); @@ -199,6 +199,7 @@ signals: void resetSleepTimeoutAC(int index, int value); void resetSleepTimeoutDisplayBattery(int index, int value); void resetSleepTimeoutDisplayAC(int index, int value); + void setCurrentCpuMode(const QString &mode); //file manager void requestFileManagerData(); @@ -231,6 +232,8 @@ private: MainWindow *p_mainwindow; QString desktop; bool battery; + QStringList m_cpuList; + QString m_currentCpu; QStackedWidget *stacked_widget; ThemeWidget *theme_widget;