From 5921bd4c1db0811dbc88c0dc58bab21182d96527 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Mon, 1 Sep 2014 12:35:43 +0400 Subject: [PATCH] add tooltip --- sources/awesome-widget/awesome-widget.cpp | 42 ++++++++++++- sources/awesome-widget/awesome-widget.h | 7 +++ sources/awesome-widget/configuration.cpp | 21 +++++-- sources/awesome-widget/deinteraction.cpp | 8 +-- sources/awesome-widget/reinit.cpp | 55 ++++++++++++++++ sources/awesome-widget/tooltip.cpp | 77 +++++++++++++++++++++++ 6 files changed, 199 insertions(+), 11 deletions(-) create mode 100644 sources/awesome-widget/tooltip.cpp diff --git a/sources/awesome-widget/awesome-widget.cpp b/sources/awesome-widget/awesome-widget.cpp index ae03767..fcdb5aa 100644 --- a/sources/awesome-widget/awesome-widget.cpp +++ b/sources/awesome-widget/awesome-widget.cpp @@ -17,7 +17,10 @@ #include "awesome-widget.h" +#include #include +#include +#include #include #include #include @@ -84,6 +87,30 @@ int AwesomeWidget::getNumberCpus() } +float AwesomeWidget::getTemp(const float temp) +{ + if (debug) qDebug() << PDEBUG; + + float convertedTemp = temp; + if (configuration[QString("tempUnits")] == QString("Celsius")) + ; + else if (configuration[QString("tempUnits")] == QString("Fahrenheit")) + convertedTemp = temp * 9.0 / 5.0 + 32.0; + else if (configuration[QString("tempUnits")] == QString("Kelvin")) + convertedTemp = temp + 273.15; + else if (configuration[QString("tempUnits")] == QString("Reaumur")) + convertedTemp = temp * 0.8; + else if (configuration[QString("tempUnits")] == QString("cm^-1")) + convertedTemp = temp * 0.695; + else if (configuration[QString("tempUnits")] == QString("kJ/mol")) + convertedTemp = temp * 8.31; + else if (configuration[QString("tempUnits")] == QString("kcal/mol")) + convertedTemp = temp * 1.98; + + return convertedTemp; +} + + QStringList AwesomeWidget::getTimeKeys() { if (debug) qDebug() << PDEBUG; @@ -114,14 +141,27 @@ void AwesomeWidget::init() { if (debug) qDebug() << PDEBUG; + // dataengines extsysmonEngine = dataEngine(QString("ext-sysmon")); sysmonEngine = dataEngine(QString("systemmonitor")); timeEngine = dataEngine(QString("time")); + // tooltip + toolTip = Plasma::ToolTipContent(); + toolTip.setMainText(QString("Awesome Widget")); + toolTip.setSubText(QString("")); + toolTipScene = new QGraphicsScene(); + toolTipView = new QGraphicsView(toolTipScene); + toolTipView->setStyleSheet(QString("background: transparent")); + toolTipView->setContentsMargins(0, 0, 0, 0); + toolTipView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + toolTipView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + Plasma::ToolTipManager::self()->setContent(this, toolTip); + + // body mainLayout = new QGraphicsLinearLayout(); mainLayout->setContentsMargins(1, 1, 1, 1); setLayout(mainLayout); - textLabel = new CustomLabel(this, debug); // read variables diff --git a/sources/awesome-widget/awesome-widget.h b/sources/awesome-widget/awesome-widget.h index 2e02e07..eeff04c 100644 --- a/sources/awesome-widget/awesome-widget.h +++ b/sources/awesome-widget/awesome-widget.h @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -31,6 +32,7 @@ class CustomLabel; class QGraphicsLinearLayout; +class QGraphicsScene; class AwesomeWidget : public Plasma::Applet { @@ -41,6 +43,7 @@ public: ~AwesomeWidget(); QString getNetworkDevice(); int getNumberCpus(); + float getTemp(const float temp); QStringList getTimeKeys(); void init(); // de configuration @@ -76,6 +79,10 @@ private: QGraphicsLinearLayout *mainLayout; CustomLabel *textLabel; QTimer *timer; + // tooltip + Plasma::ToolTipContent toolTip; + QGraphicsScene *toolTipScene; + QGraphicsView *toolTipView; // values int networkDeviceUpdate; QMap counts; diff --git a/sources/awesome-widget/configuration.cpp b/sources/awesome-widget/configuration.cpp index 8645867..4552a20 100644 --- a/sources/awesome-widget/configuration.cpp +++ b/sources/awesome-widget/configuration.cpp @@ -272,11 +272,11 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent) else uiTooltipConfig.checkBox_cpu->setCheckState(Qt::Checked); uiTooltipConfig.kcolorcombo_cpu->setColor(QColor(configuration[QString("cpuColor")])); - if (configuration[QString("cpuclockTooltip")].toInt() == 0) + if (configuration[QString("cpuclTooltip")].toInt() == 0) uiTooltipConfig.checkBox_cpuclock->setCheckState(Qt::Unchecked); else uiTooltipConfig.checkBox_cpuclock->setCheckState(Qt::Checked); - uiTooltipConfig.kcolorcombo_cpuclock->setColor(QColor(configuration[QString("cpuclockColor")])); + uiTooltipConfig.kcolorcombo_cpuclock->setColor(QColor(configuration[QString("cpuclColor")])); if (configuration[QString("memTooltip")].toInt() == 0) uiTooltipConfig.checkBox_mem->setCheckState(Qt::Unchecked); else @@ -426,8 +426,8 @@ void AwesomeWidget::configAccepted() cg.writeEntry("tooltipBackground", uiTooltipConfig.kcolorcombo_background->color().name()); cg.writeEntry("cpuTooltip", QString::number(uiTooltipConfig.checkBox_cpu->checkState())); cg.writeEntry("cpuColor", uiTooltipConfig.kcolorcombo_cpu->color().name()); - cg.writeEntry("cpuclockTooltip", QString::number(uiTooltipConfig.checkBox_cpuclock->checkState())); - cg.writeEntry("cpuclockColor", uiTooltipConfig.kcolorcombo_cpuclock->color().name()); + cg.writeEntry("cpuclTooltip", QString::number(uiTooltipConfig.checkBox_cpuclock->checkState())); + cg.writeEntry("cpuclColor", uiTooltipConfig.kcolorcombo_cpuclock->color().name()); cg.writeEntry("memTooltip", QString::number(uiTooltipConfig.checkBox_mem->checkState())); cg.writeEntry("memColor", uiTooltipConfig.kcolorcombo_mem->color().name()); cg.writeEntry("swapTooltip", QString::number(uiTooltipConfig.checkBox_swap->checkState())); @@ -509,8 +509,8 @@ void AwesomeWidget::configChanged() configuration[QString("tooltipBackground")] = cg.readEntry("tooltipBackground", "#ffffff"); configuration[QString("cpuTooltip")] = cg.readEntry("cpuTooltip", "2"); configuration[QString("cpuColor")] = cg.readEntry("cpuColor", "#ff0000"); - configuration[QString("cpuclockTooltip")] = cg.readEntry("cpuclockTooltip", "2"); - configuration[QString("cpuclockColor")] = cg.readEntry("cpuclockColor", "#00ff00"); + configuration[QString("cpuclTooltip")] = cg.readEntry("cpuclTooltip", "2"); + configuration[QString("cpuclColor")] = cg.readEntry("cpuclColor", "#00ff00"); configuration[QString("memTooltip")] = cg.readEntry("memTooltip", "2"); configuration[QString("memColor")] = cg.readEntry("memColor", "#0000ff"); configuration[QString("swapTooltip")] = cg.readEntry("swapTooltip", "2"); @@ -546,6 +546,15 @@ void AwesomeWidget::configChanged() counts[QString("mount")] = configuration[QString("mount")].split(QString("@@")).count(); counts[QString("pkg")] = deSettings[QString("PKGCMD")].split(QChar(',')).count(); counts[QString("temp")] = configuration[QString("tempDevice")].split(QString("@@")).count(); + counts[QString("tooltip")] = 0; + counts[QString("tooltip")] += configuration[QString("cpuTooltip")].toInt(); + counts[QString("tooltip")] += configuration[QString("cpuclTooltip")].toInt(); + counts[QString("tooltip")] += configuration[QString("memTooltip")].toInt(); + counts[QString("tooltip")] += configuration[QString("swapTooltip")].toInt(); + if ((configuration[QString("downTooltip")].toInt() == 2) || + (configuration[QString("upTooltip")].toInt() == 2)) + counts[QString("tooltip")] += 2; + counts[QString("tooltip")] = counts[QString("tooltip")] / 2; reinit(); } diff --git a/sources/awesome-widget/deinteraction.cpp b/sources/awesome-widget/deinteraction.cpp index f82a683..a982312 100644 --- a/sources/awesome-widget/deinteraction.cpp +++ b/sources/awesome-widget/deinteraction.cpp @@ -191,7 +191,7 @@ void AwesomeWidget::dataUpdated(const QString &sourceName, const Plasma::DataEng values[QString("cpu") + number] = QString("%5.1f").arg(data[QString("value")].toFloat()); } else if (sourceName == QString("cpu/system/AverageClock")) { values[QString("cpucl")] = QString("%5.1f").arg(data[QString("value")].toFloat()); - if (configuration[QString("cpuclockTooltip")].toInt() == 2) + if (configuration[QString("cpuclTooltip")].toInt() == 2) tooltipValues[QString("cpucl")].append(data[QString("value")].toFloat()); } else if (sourceName.indexOf(cpuclRegExp) > -1) { QString number = sourceName; @@ -224,7 +224,7 @@ void AwesomeWidget::dataUpdated(const QString &sourceName, const Plasma::DataEng } else if (sourceName == QString("gpu")) { values[QString("gpu")] = QString("%4.1f").arg(data[QString("GPU")].toFloat()); } else if (sourceName == QString("gputemp")) { - values[QString("gputemp")] = QString("%4.1f").arg(data[QString("GPUTemp")].toFloat()); + values[QString("gputemp")] = QString("%4.1f").arg(getTemp(data[QString("GPUTemp")].toFloat())); } else if (sourceName.indexOf(mountFillRegExp) > -1) { QString mount = sourceName; mount.remove(QString("partitions")); @@ -269,7 +269,7 @@ void AwesomeWidget::dataUpdated(const QString &sourceName, const Plasma::DataEng for (int i=0; i -1) { for (int i=0; i #include +#include //#include #include "customlabel.h" @@ -67,10 +69,63 @@ void AwesomeWidget::reinit() void AwesomeWidget::updateText() { if (debug) qDebug() << PDEBUG; + + QString text = configuration[QString("text")]; + for (int i=0; isetText(text); } void AwesomeWidget::updateTooltip() { if (debug) qDebug() << PDEBUG; + + toolTipView->resize(100.0 * counts[QString("tooltip")], 100.0); + + // boundaries + QMap boundaries; + boundaries[QString("cpu")] = 100.0; + boundaries[QString("cpucl")] = 4000.0; + boundaries[QString("mem")] = 100.0; + boundaries[QString("swap")] = 100.0; + boundaries[QString("down")] = 1.0; + if (configuration[QString("downTooltip")].toInt() == 2) + for (int i=0; iclear(); + QPen pen = QPen(); + if (configuration[QString("useTooltipBackground")].toInt() == 2) + toolTipScene->setBackgroundBrush(QColor(configuration[QString("tooltipBackground")])); + else + toolTipScene->setBackgroundBrush(QBrush(Qt::NoBrush)); + bool down = false; + for (int i=0; iaddLine(x1, y1, x2, y2, pen); + } + if (tooltipValues.keys()[i] == QString("down")) + down = true; + } + + toolTip.setImage(QPixmap::grabWidget(toolTipView)); + Plasma::ToolTipManager::self()->setContent(this, toolTip); } diff --git a/sources/awesome-widget/tooltip.cpp b/sources/awesome-widget/tooltip.cpp new file mode 100644 index 0000000..1b8c54d --- /dev/null +++ b/sources/awesome-widget/tooltip.cpp @@ -0,0 +1,77 @@ +/*************************************************************************** + * This file is part of pytextmonitor * + * * + * pytextmonitor 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 (at your option) any later version. * + * * + * pytextmonitor 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 pytextmonitor. If not, see http://www.gnu.org/licenses/ * + ***************************************************************************/ + +#include "awesome-widget.h" + +#include + + +void AwesomeWidget::initValues() +{ + if (debug) qDebug() << PDEBUG; +} + + +void AwesomeWidget::reinit() +{ + if (debug) qDebug() << PDEBUG; + + mainLayout = new QGraphicsLinearLayout(); + mainLayout->setContentsMargins(1, 1, 1, 1); + setLayout(mainLayout); + + if (configuration[QString("background")].toInt() == 0) + setBackgroundHints(NoBackground); + else + setBackgroundHints(DefaultBackground); + if (configuration[QString("layout")].toInt() == 0) + mainLayout->setOrientation(Qt::Horizontal); + else + mainLayout->setOrientation(Qt::Vertical); + if (configuration[QString("leftStretch")].toInt() == 2) + mainLayout->addStretch(1); + if (configuration[QString("popup")].toInt() == 0) + textLabel->setPopupEnabled(true); + mainLayout->addItem(textLabel); + if (configuration[QString("rightStretch")].toInt() == 2) + mainLayout->addStretch(1); + + keys = getKeys(); + foundKeys = findKeys(); + initValues(); + values[QString("netdev")] = getNetworkDevice(); +// thread()->wait(60000); + connectToEngine(); + resize(10, 10); +} + + +void AwesomeWidget::updateText() +{ + if (debug) qDebug() << PDEBUG; + + QString text = configuration[QString("text")]; + for (int i=0; isetText(text); +} + + +void AwesomeWidget::updateTooltip() +{ + if (debug) qDebug() << PDEBUG; +}