diff --git a/sources/desktop-panel/desktop-panel.cpp b/sources/desktop-panel/desktop-panel.cpp index 25a4804..e298530 100644 --- a/sources/desktop-panel/desktop-panel.cpp +++ b/sources/desktop-panel/desktop-panel.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -104,17 +105,19 @@ void DesktopPanel::init() { if (debug) qDebug() << PDEBUG; - extsysmonEngine = dataEngine(QString("ext-sysmon")); - layout = new QGraphicsGridLayout(); layout->setContentsMargins(1, 1, 1, 1); setLayout(layout); - currentDesktop = 1; - // read variables configChanged(); + timer = new QTimer(this); + timer->setSingleShot(false); + timer->setInterval(2000); + connect(timer, SIGNAL(timeout()), this, SLOT(updateTooltip())); + timer->start(); connect(this, SIGNAL(activate()), this, SLOT(changePanelsState())); + connect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this, SLOT(updateText(int))); } @@ -183,7 +186,7 @@ QString DesktopPanel::parsePattern(const QString rawLine, const int num) QString line, fullMark, mark; line = rawLine; - if (currentDesktop == num + 1) + if (KWindowSystem::currentDesktop() == num + 1) mark = configuration[QString("mark")]; else mark = QString(""); @@ -206,7 +209,6 @@ QString DesktopPanel::parsePattern(const QString rawLine, const int num) void DesktopPanel::reinit() { if (debug) qDebug() << PDEBUG; - if (desktopNames.isEmpty()) return; // clear // labels @@ -218,8 +220,12 @@ void DesktopPanel::reinit() } labels.clear(); proxyWidgets.clear(); + desktopNames.clear(); // add + int total = KWindowSystem::numberOfDesktops(); + for (int i=1; iaddItem(proxyWidgets[i], i, 0); } - updateText(true); + updateText(KWindowSystem::currentDesktop()); for (int i=0; iadjustSize(); proxyWidgets[i]->setGeometry(labels[i]->geometry()); @@ -277,65 +283,23 @@ void DesktopPanel::setCurrentDesktop(const int number) if (debug) qDebug() << PDEBUG; if (debug) qDebug() << PDEBUG << ":" << "Set desktop" << number + 1; - QString cmd = parsePattern(configuration[QString("desktopcmd")], number); - if (debug) qDebug() << PDEBUG << ":" << "Run cmd " << cmd; - - QProcess command; - command.startDetached(cmd); + KWindowSystem::setCurrentDesktop(number + 1); } -void DesktopPanel::updateText(const bool first) +void DesktopPanel::updateText(const int active) { if (debug) qDebug() << PDEBUG; QString line, text; for (int i=0; isetText(text); - - // update tooltip - if (configuration[QString("tooltip")].toInt() == 2) { - QGraphicsScene *toolTipScene = new QGraphicsScene(); - toolTipScene->setBackgroundBrush(QBrush(Qt::NoBrush)); - QGraphicsView *toolTipView = new QGraphicsView(toolTipScene); - toolTipView->setStyleSheet(QString("background: transparent")); - toolTipView->setContentsMargins(0, 0, 0, 0); - toolTipView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - toolTipView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - // paint - DesktopWindowsInfo info = getInfoByDesktop(i + 1); - toolTipView->resize(info.desktop.width() * 1.01, info.desktop.height() * 1.03); - QPen pen = QPen(); - pen.setWidthF(2.0 * info.desktop.width() / 400.0); - for (int i=0; iaddLine(info.windows[i].left(), info.windows[i].bottom(), - info.windows[i].left(), info.windows[i].top(), pen); - toolTipScene->addLine(info.windows[i].left(), info.windows[i].top(), - info.windows[i].right(), info.windows[i].top(), pen); - toolTipScene->addLine(info.windows[i].right(), info.windows[i].top(), - info.windows[i].right(), info.windows[i].bottom(), pen); - toolTipScene->addLine(info.windows[i].right(), info.windows[i].bottom(), - info.windows[i].left(), info.windows[i].bottom(), pen); - } - // convert - QPixmap pixmap = QPixmap::grabWidget(toolTipView); - QByteArray byteArray; - QBuffer buffer(&byteArray); - pixmap.scaledToWidth(configuration[QString("tooltipWidth")].toInt()).save(&buffer, "PNG"); - QString url = QString(""); - labels[i]->setToolTip(url); - } } int height = 0; int width = 0; @@ -356,21 +320,45 @@ void DesktopPanel::updateText(const bool first) } -// data engine interaction -void DesktopPanel::dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data) +void DesktopPanel::updateTooltip() { if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "Source name" << sourceName; + if (configuration[QString("tooltip")].toInt() != 2) return; - if (data.keys().count() == 0) - return; - if (sourceName == QString("desktop")) { - currentDesktop = data[QString("currentNumber")].toInt(); - if (desktopNames.isEmpty()) { - desktopNames = data[QString("list")].toString().split(QString(";;")); - reinit(); + for (int i=0; isetBackgroundBrush(QBrush(Qt::NoBrush)); + QGraphicsView *toolTipView = new QGraphicsView(toolTipScene); + toolTipView->setStyleSheet(QString("background: transparent")); + toolTipView->setContentsMargins(0, 0, 0, 0); + toolTipView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + toolTipView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + // paint + DesktopWindowsInfo info = getInfoByDesktop(i + 1); + toolTipView->resize(info.desktop.width() * 1.01, info.desktop.height() * 1.03); + QPen pen = QPen(); + pen.setWidthF(2.0 * info.desktop.width() / 400.0); + for (int i=0; iaddLine(info.windows[i].left(), info.windows[i].bottom(), + info.windows[i].left(), info.windows[i].top(), pen); + toolTipScene->addLine(info.windows[i].left(), info.windows[i].top(), + info.windows[i].right(), info.windows[i].top(), pen); + toolTipScene->addLine(info.windows[i].right(), info.windows[i].top(), + info.windows[i].right(), info.windows[i].bottom(), pen); + toolTipScene->addLine(info.windows[i].right(), info.windows[i].bottom(), + info.windows[i].left(), info.windows[i].bottom(), pen); } - updateText(); + // convert + QPixmap pixmap = QPixmap::grabWidget(toolTipView); + QByteArray byteArray; + QBuffer buffer(&byteArray); + pixmap.scaledToWidth(configuration[QString("tooltipWidth")].toInt()).save(&buffer, "PNG"); + QString url = QString(""); + labels[i]->setToolTip(url); + delete toolTipView; + delete toolTipScene; } } @@ -401,10 +389,8 @@ void DesktopPanel::createConfigurationInterface(KConfigDialog *parent) uiWidConfig.checkBox_layout->setCheckState(Qt::Unchecked); else uiWidConfig.checkBox_layout->setCheckState(Qt::Checked); - uiWidConfig.spinBox_interval->setValue(configuration[QString("interval")].toInt()); uiWidConfig.comboBox_mark->setItemText(uiWidConfig.comboBox_mark->count()-1, configuration[QString("mark")]); uiWidConfig.comboBox_mark->setCurrentIndex(uiWidConfig.comboBox_mark->count()-1); - uiWidConfig.lineEdit_desktopcmd->setText(configuration[QString("desktopcmd")]); KConfigGroup cg = config(); CFont font(cg.readEntry("currentFontFamily", "Terminus")); @@ -473,7 +459,6 @@ void DesktopPanel::configAccepted() { if (debug) qDebug() << PDEBUG; - extsysmonEngine->disconnectSource(QString("desktop"), this); KConfigGroup cg = config(); cg.writeEntry("pattern", uiWidConfig.textEdit_elements->toPlainText()); @@ -481,9 +466,7 @@ void DesktopPanel::configAccepted() cg.writeEntry("tooltipWidth", QString::number(uiWidConfig.spinBox_tooltip->value())); cg.writeEntry("background", QString::number(uiWidConfig.checkBox_background->checkState())); cg.writeEntry("layout", QString::number(uiWidConfig.checkBox_layout->checkState())); - cg.writeEntry("interval", QString::number(uiWidConfig.spinBox_interval->value())); cg.writeEntry("mark", uiWidConfig.comboBox_mark->currentText()); - cg.writeEntry("desktopcmd", uiWidConfig.lineEdit_desktopcmd->text()); cg.writeEntry("currentFontFamily", uiAppConfig.fontComboBox_fontActive->currentFont().family()); cg.writeEntry("currentFontSize", uiAppConfig.spinBox_fontSizeActive->value()); @@ -518,14 +501,10 @@ void DesktopPanel::configChanged() configuration[QString("tooltip")] = cg.readEntry("tooltip", "2"); configuration[QString("tooltipWidth")] = cg.readEntry("tooltipWidth", "200"); configuration[QString("background")] = cg.readEntry("background", "2"); - configuration[QString("desktopcmd")] = cg.readEntry("desktopcmd", "qdbus org.kde.kwin /KWin setCurrentDesktop $number"); - configuration[QString("interval")] = cg.readEntry("interval", "1000"); configuration[QString("layout")] = cg.readEntry("layout", "0"); configuration[QString("mark")] = cg.readEntry("mark", "ยค"); configuration[QString("panels")] = cg.readEntry("panels", "-1"); - extsysmonEngine->connectSource(QString("desktop"), this, configuration[QString("interval")].toInt()); - CFont font = CFont(cg.readEntry("currentFontFamily", "Terminus")); font.setPointSize(cg.readEntry("currentFontSize", 10)); font.setCurrentColor(QColor(cg.readEntry("currentFontColor", "#ff0000"))); diff --git a/sources/desktop-panel/desktop-panel.h b/sources/desktop-panel/desktop-panel.h index 828f0f7..b716563 100644 --- a/sources/desktop-panel/desktop-panel.h +++ b/sources/desktop-panel/desktop-panel.h @@ -30,6 +30,7 @@ class QGraphicsGridLayout; class QGraphicsProxyWidget; +class QTimer; class DesktopPanel; @@ -73,8 +74,6 @@ public: QString parsePattern(const QString rawLine, const int num); public slots: - // dataengine - void dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data); // configuration interface void configAccepted(); void configChanged(); @@ -86,6 +85,8 @@ private slots: void reinit(); void setFontFormating(); void setFormating(); + void updateText(const int active); + void updateTooltip(); protected: void createConfigurationInterface(KConfigDialog *parent); @@ -94,17 +95,14 @@ private: // functions QList getPanels(); QString panelLocationToStr(Plasma::Location loc); - void updateText(const bool first = false); // ui QGraphicsGridLayout *layout; QList proxyWidgets; QList labels; + QTimer *timer; // debug bool debug; - // data engine - int currentDesktop; int oldState; - Plasma::DataEngine *extsysmonEngine; // configuration interface Ui::AppearanceWidget uiAppConfig; Ui::ConfigWindow uiWidConfig; diff --git a/sources/desktop-panel/widget.ui b/sources/desktop-panel/widget.ui index 07efabe..c4f0de2 100644 --- a/sources/desktop-panel/widget.ui +++ b/sources/desktop-panel/widget.ui @@ -6,8 +6,8 @@ 0 0 - 723 - 422 + 721 + 420 @@ -27,93 +27,7 @@ - - - - - - - 200 - 0 - - - - Command to change desktop - - - - - - - Command which will change the current desktop - - - - - - - - - - - 200 - 0 - - - - Time interval - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 180 - 0 - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - 1 - - - 10000 - - - 500 - - - 1000 - - - - - - - - - Enable background - - - - @@ -220,6 +134,62 @@ + + + + Enable tooltip + + + + + + + + + Tooltip width + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 180 + 0 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + px + + + 100 + + + 1000 + + + 25 + + + + + @@ -402,62 +372,13 @@ - - + + - Enable tooltip + Enable background - - - - - - Tooltip width - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 180 - 0 - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - px - - - 100 - - - 1000 - - - 25 - - - - - diff --git a/sources/ext-sysmon/extsysmon.conf b/sources/ext-sysmon/extsysmon.conf index 9379b5a..8b142b1 100644 --- a/sources/ext-sysmon/extsysmon.conf +++ b/sources/ext-sysmon/extsysmon.conf @@ -4,9 +4,6 @@ # ACPI devices #ACPIPATH=/sys/class/power_supply/ -# Command which returns number of the current desktop -#DESKTOPCMD=qdbus org.kde.kwin /KWin currentDesktop - # Set GPU device # May be 'nvidia' (for nvidia), 'ati' (for ATI RADEON), 'disable' or 'auto' #GPUDEV=auto diff --git a/sources/ext-sysmon/extsysmon.cpp b/sources/ext-sysmon/extsysmon.cpp index b2c9b86..68cb1c2 100644 --- a/sources/ext-sysmon/extsysmon.cpp +++ b/sources/ext-sysmon/extsysmon.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -111,43 +112,6 @@ QString ExtendedSysMon::getAutoMpris() } -QStringList ExtendedSysMon::getDesktopNames() -{ - if (debug) qDebug() << PDEBUG; - - QStringList list; - QString fileName = KGlobal::dirs()->findResource("config", "kwinrc"); - if (debug) qDebug() << PDEBUG << ":" << "Configuration file" << fileName; - QFile configFile(fileName); - if (!configFile.open(QIODevice::ReadOnly)) return list; - - QString fileStr; - QStringList value; - bool desktopSection = false; - while (true) { - fileStr = QString(configFile.readLine()).trimmed(); - if ((fileStr.isEmpty()) && (!configFile.atEnd())) continue; - if ((fileStr[0] == QChar('#')) && (!configFile.atEnd())) continue; - if ((fileStr[0] == QChar(';')) && (!configFile.atEnd())) continue; - if (fileStr[0] == QChar('[')) desktopSection = false; - if (fileStr == QString("[Desktops]")) desktopSection = true; - if (desktopSection) { - if (fileStr.contains(QChar('='))) { - value.clear(); - for (int i=1; i ExtendedSysMon::getBattery(const QString acpiPath) } -QMap ExtendedSysMon::getCurrentDesktop(const QString cmd) +QMap ExtendedSysMon::getCurrentDesktop() { if (debug) qDebug() << PDEBUG; - if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd; - TaskResult process = runTask(QString("bash -c \"") + cmd + QString("\"")); - if (debug) qDebug() << PDEBUG << ":" << "Cmd returns" << process.exitCode; - - QString qoutput = QTextCodec::codecForMib(106)->toUnicode(process.output).trimmed(); - int number = qoutput.toInt(); + int number = KWindowSystem::currentDesktop(); + int total = KWindowSystem::numberOfDesktops(); QMap currentDesktop; - currentDesktop[QString("currentName")] = configuration[QString("DESKTOP")].split(QString(";;"))[number-1]; + currentDesktop[QString("currentName")] = KWindowSystem::desktopName(number); currentDesktop[QString("currentNumber")] = number; - currentDesktop[QString("list")] = configuration[QString("DESKTOP")]; - currentDesktop[QString("number")] = configuration[QString("DESKTOP")].split(QString(";;")).count(); + QStringList list; + for (int i=1; i desktop = getCurrentDesktop(configuration[QString("DESKTOPCMD")]); + QMap desktop = getCurrentDesktop(); for (int i=0; i getBattery(const QString acpiPath); - QMap getCurrentDesktop(const QString cmd); + QMap getCurrentDesktop(); float getGpu(const QString device); float getGpuTemp(const QString device); float getHddTemp(const QString cmd, const QString device); @@ -58,7 +58,6 @@ private: QString getAllHdd(); QString getAutoGpu(); QString getAutoMpris(); - QStringList getDesktopNames(); void initScripts(); void readConfiguration(); QMap updateConfiguration(const QMap rawConfig);