add tooltip

This commit is contained in:
arcan1s 2014-09-01 12:35:43 +04:00
parent 5b26d835df
commit 5921bd4c1d
6 changed files with 199 additions and 11 deletions

View File

@ -17,7 +17,10 @@
#include "awesome-widget.h" #include "awesome-widget.h"
#include <Plasma/ToolTipManager>
#include <QGraphicsLinearLayout> #include <QGraphicsLinearLayout>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QNetworkInterface> #include <QNetworkInterface>
#include <QProcessEnvironment> #include <QProcessEnvironment>
#include <QTextCodec> #include <QTextCodec>
@ -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() QStringList AwesomeWidget::getTimeKeys()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
@ -114,14 +141,27 @@ void AwesomeWidget::init()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
// dataengines
extsysmonEngine = dataEngine(QString("ext-sysmon")); extsysmonEngine = dataEngine(QString("ext-sysmon"));
sysmonEngine = dataEngine(QString("systemmonitor")); sysmonEngine = dataEngine(QString("systemmonitor"));
timeEngine = dataEngine(QString("time")); 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 = new QGraphicsLinearLayout();
mainLayout->setContentsMargins(1, 1, 1, 1); mainLayout->setContentsMargins(1, 1, 1, 1);
setLayout(mainLayout); setLayout(mainLayout);
textLabel = new CustomLabel(this, debug); textLabel = new CustomLabel(this, debug);
// read variables // read variables

View File

@ -21,6 +21,7 @@
#include <Plasma/Applet> #include <Plasma/Applet>
#include <Plasma/DataEngine> #include <Plasma/DataEngine>
#include <Plasma/ToolTipContent>
#include <ui_advanced.h> #include <ui_advanced.h>
#include <ui_appearance.h> #include <ui_appearance.h>
@ -31,6 +32,7 @@
class CustomLabel; class CustomLabel;
class QGraphicsLinearLayout; class QGraphicsLinearLayout;
class QGraphicsScene;
class AwesomeWidget : public Plasma::Applet class AwesomeWidget : public Plasma::Applet
{ {
@ -41,6 +43,7 @@ public:
~AwesomeWidget(); ~AwesomeWidget();
QString getNetworkDevice(); QString getNetworkDevice();
int getNumberCpus(); int getNumberCpus();
float getTemp(const float temp);
QStringList getTimeKeys(); QStringList getTimeKeys();
void init(); void init();
// de configuration // de configuration
@ -76,6 +79,10 @@ private:
QGraphicsLinearLayout *mainLayout; QGraphicsLinearLayout *mainLayout;
CustomLabel *textLabel; CustomLabel *textLabel;
QTimer *timer; QTimer *timer;
// tooltip
Plasma::ToolTipContent toolTip;
QGraphicsScene *toolTipScene;
QGraphicsView *toolTipView;
// values // values
int networkDeviceUpdate; int networkDeviceUpdate;
QMap<QString, int> counts; QMap<QString, int> counts;

View File

@ -272,11 +272,11 @@ void AwesomeWidget::createConfigurationInterface(KConfigDialog *parent)
else else
uiTooltipConfig.checkBox_cpu->setCheckState(Qt::Checked); uiTooltipConfig.checkBox_cpu->setCheckState(Qt::Checked);
uiTooltipConfig.kcolorcombo_cpu->setColor(QColor(configuration[QString("cpuColor")])); 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); uiTooltipConfig.checkBox_cpuclock->setCheckState(Qt::Unchecked);
else else
uiTooltipConfig.checkBox_cpuclock->setCheckState(Qt::Checked); 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) if (configuration[QString("memTooltip")].toInt() == 0)
uiTooltipConfig.checkBox_mem->setCheckState(Qt::Unchecked); uiTooltipConfig.checkBox_mem->setCheckState(Qt::Unchecked);
else else
@ -426,8 +426,8 @@ void AwesomeWidget::configAccepted()
cg.writeEntry("tooltipBackground", uiTooltipConfig.kcolorcombo_background->color().name()); cg.writeEntry("tooltipBackground", uiTooltipConfig.kcolorcombo_background->color().name());
cg.writeEntry("cpuTooltip", QString::number(uiTooltipConfig.checkBox_cpu->checkState())); cg.writeEntry("cpuTooltip", QString::number(uiTooltipConfig.checkBox_cpu->checkState()));
cg.writeEntry("cpuColor", uiTooltipConfig.kcolorcombo_cpu->color().name()); cg.writeEntry("cpuColor", uiTooltipConfig.kcolorcombo_cpu->color().name());
cg.writeEntry("cpuclockTooltip", QString::number(uiTooltipConfig.checkBox_cpuclock->checkState())); cg.writeEntry("cpuclTooltip", QString::number(uiTooltipConfig.checkBox_cpuclock->checkState()));
cg.writeEntry("cpuclockColor", uiTooltipConfig.kcolorcombo_cpuclock->color().name()); cg.writeEntry("cpuclColor", uiTooltipConfig.kcolorcombo_cpuclock->color().name());
cg.writeEntry("memTooltip", QString::number(uiTooltipConfig.checkBox_mem->checkState())); cg.writeEntry("memTooltip", QString::number(uiTooltipConfig.checkBox_mem->checkState()));
cg.writeEntry("memColor", uiTooltipConfig.kcolorcombo_mem->color().name()); cg.writeEntry("memColor", uiTooltipConfig.kcolorcombo_mem->color().name());
cg.writeEntry("swapTooltip", QString::number(uiTooltipConfig.checkBox_swap->checkState())); 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("tooltipBackground")] = cg.readEntry("tooltipBackground", "#ffffff");
configuration[QString("cpuTooltip")] = cg.readEntry("cpuTooltip", "2"); configuration[QString("cpuTooltip")] = cg.readEntry("cpuTooltip", "2");
configuration[QString("cpuColor")] = cg.readEntry("cpuColor", "#ff0000"); configuration[QString("cpuColor")] = cg.readEntry("cpuColor", "#ff0000");
configuration[QString("cpuclockTooltip")] = cg.readEntry("cpuclockTooltip", "2"); configuration[QString("cpuclTooltip")] = cg.readEntry("cpuclTooltip", "2");
configuration[QString("cpuclockColor")] = cg.readEntry("cpuclockColor", "#00ff00"); configuration[QString("cpuclColor")] = cg.readEntry("cpuclColor", "#00ff00");
configuration[QString("memTooltip")] = cg.readEntry("memTooltip", "2"); configuration[QString("memTooltip")] = cg.readEntry("memTooltip", "2");
configuration[QString("memColor")] = cg.readEntry("memColor", "#0000ff"); configuration[QString("memColor")] = cg.readEntry("memColor", "#0000ff");
configuration[QString("swapTooltip")] = cg.readEntry("swapTooltip", "2"); 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("mount")] = configuration[QString("mount")].split(QString("@@")).count();
counts[QString("pkg")] = deSettings[QString("PKGCMD")].split(QChar(',')).count(); counts[QString("pkg")] = deSettings[QString("PKGCMD")].split(QChar(',')).count();
counts[QString("temp")] = configuration[QString("tempDevice")].split(QString("@@")).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(); reinit();
} }

View File

@ -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()); values[QString("cpu") + number] = QString("%5.1f").arg(data[QString("value")].toFloat());
} else if (sourceName == QString("cpu/system/AverageClock")) { } else if (sourceName == QString("cpu/system/AverageClock")) {
values[QString("cpucl")] = QString("%5.1f").arg(data[QString("value")].toFloat()); 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()); tooltipValues[QString("cpucl")].append(data[QString("value")].toFloat());
} else if (sourceName.indexOf(cpuclRegExp) > -1) { } else if (sourceName.indexOf(cpuclRegExp) > -1) {
QString number = sourceName; QString number = sourceName;
@ -224,7 +224,7 @@ void AwesomeWidget::dataUpdated(const QString &sourceName, const Plasma::DataEng
} else if (sourceName == QString("gpu")) { } else if (sourceName == QString("gpu")) {
values[QString("gpu")] = QString("%4.1f").arg(data[QString("GPU")].toFloat()); values[QString("gpu")] = QString("%4.1f").arg(data[QString("GPU")].toFloat());
} else if (sourceName == QString("gputemp")) { } 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) { } else if (sourceName.indexOf(mountFillRegExp) > -1) {
QString mount = sourceName; QString mount = sourceName;
mount.remove(QString("partitions")); mount.remove(QString("partitions"));
@ -269,7 +269,7 @@ void AwesomeWidget::dataUpdated(const QString &sourceName, const Plasma::DataEng
for (int i=0; i<data.keys().count(); i++) for (int i=0; i<data.keys().count(); i++)
for (int j=0; j<counts[QString("hddtemp")]; j++) for (int j=0; j<counts[QString("hddtemp")]; j++)
if (data.keys()[i] == configuration[QString("hdd")].split(QString("@@"))[j]) { if (data.keys()[i] == configuration[QString("hdd")].split(QString("@@"))[j]) {
values[QString("hddtemp") + QString::number(j)] = QString("%4.1f").arg(data[data.keys()[i]].toFloat()); values[QString("hddtemp") + QString::number(j)] = QString("%4.1f").arg(getTemp(data[data.keys()[i]].toFloat()));
break; break;
} }
} else if (sourceName == QString("mem/physical/application")) { } else if (sourceName == QString("mem/physical/application")) {
@ -342,7 +342,7 @@ void AwesomeWidget::dataUpdated(const QString &sourceName, const Plasma::DataEng
} else if (sourceName.indexOf(tempRegExp) > -1) { } else if (sourceName.indexOf(tempRegExp) > -1) {
for (int i=0; i<counts[QString("temp")]; i++) for (int i=0; i<counts[QString("temp")]; i++)
if (sourceName == configuration[QString("tempDevice")].split(QString("@@"))[i]) { if (sourceName == configuration[QString("tempDevice")].split(QString("@@"))[i]) {
values[QString("temp") + QString::number(i)] = QString("%4.1f").arg(data[QString("value")].toFloat()); values[QString("temp") + QString::number(i)] = QString("%4.1f").arg(getTemp(data[QString("value")].toFloat()));
break; break;
} }
} else if (sourceName == QString("Local")) { } else if (sourceName == QString("Local")) {

View File

@ -17,7 +17,9 @@
#include "awesome-widget.h" #include "awesome-widget.h"
#include <Plasma/ToolTipManager>
#include <QGraphicsLinearLayout> #include <QGraphicsLinearLayout>
#include <QGraphicsView>
//#include <QThread> //#include <QThread>
#include "customlabel.h" #include "customlabel.h"
@ -67,10 +69,63 @@ void AwesomeWidget::reinit()
void AwesomeWidget::updateText() void AwesomeWidget::updateText()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
QString text = configuration[QString("text")];
for (int i=0; i<foundKeys.count(); i++)
text.replace(QString("$") + foundKeys[i] + QString("$"), values[foundKeys[i]]);
textLabel->setText(text);
} }
void AwesomeWidget::updateTooltip() void AwesomeWidget::updateTooltip()
{ {
if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG;
toolTipView->resize(100.0 * counts[QString("tooltip")], 100.0);
// boundaries
QMap<QString, float> 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; i<tooltipValues[QString("down")].count(); i++)
if (boundaries[QString("down")] < tooltipValues[QString("down")][i])
boundaries[QString("down")] = tooltipValues[QString("down")][i];
if (configuration[QString("upTooltip")].toInt() == 2)
for (int i=0; i<tooltipValues[QString("up")].count(); i++)
if (boundaries[QString("down")] < tooltipValues[QString("up")][i])
boundaries[QString("down")] = tooltipValues[QString("up")][i];
boundaries[QString("up")] = boundaries[QString("down")];
// create image
toolTipScene->clear();
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; i<tooltipValues.keys().count(); i++) {
float normX = 100.0 / tooltipValues[tooltipValues.keys()[i]].count();
float normY = 100.0 / (1.5 * boundaries[tooltipValues.keys()[i]]);
pen.setColor(QColor(configuration[tooltipValues.keys()[i] + QString("Color")]));
float shift = i * 100.0;
if (down)
shift -= 100.0;
for (int j=0; j<tooltipValues[tooltipValues.keys()[i]].count()-1; j++) {
float x1 = j * normX + shift;
float y1 = -tooltipValues[tooltipValues.keys()[i]][j] * normY;
float x2 = (j + 1) * normX + shift;
float y2 = -tooltipValues[tooltipValues.keys()[i]][j+1] * normY;
toolTipScene->addLine(x1, y1, x2, y2, pen);
}
if (tooltipValues.keys()[i] == QString("down"))
down = true;
}
toolTip.setImage(QPixmap::grabWidget(toolTipView));
Plasma::ToolTipManager::self()->setContent(this, toolTip);
} }

View File

@ -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 <pdebug/pdebug.h>
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; i<foundKeys.count(); i++)
text.replace(QString("$") + foundKeys[i] + QString("$"), values[foundKeys[i]]);
textLabel->setText(text);
}
void AwesomeWidget::updateTooltip()
{
if (debug) qDebug() << PDEBUG;
}