/*************************************************************************** * 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 "desktop-panel.h" #include "ui_appearance.h" #include "ui_widget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include CustomPlasmaLabel::CustomPlasmaLabel(DesktopPanel *wid, const int num) : Plasma::Label(wid), number(num), widget(wid) { // debug QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QString debugEnv = environment.value(QString("PTM_DEBUG"), QString("no")); if (debugEnv == QString("yes")) debug = true; else debug = false; if (debug) qDebug() << "[PTM-DP]" << "Init label" << number; } CustomPlasmaLabel::~CustomPlasmaLabel() { } int CustomPlasmaLabel::getNumber() { if (debug) qDebug() << "[PTM-DP]" << "[" << number << "]" << "[getNumber]"; return number; } void CustomPlasmaLabel::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (debug) qDebug() << "[PTM-DP]" << "[" << number << "]" << "[mouseMoveEvent]"; if (debug) qDebug() << "[PTM-DP]" << "[" << number << "]" << "[mouseMoveEvent]" << "Get signal" << event->button(); if (event->button() == Qt::LeftButton) widget->setCurrentDesktop(number); } DesktopPanel::DesktopPanel(QObject *parent, const QVariantList &args) : Plasma::Applet(parent, args) { // debug QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); QString debugEnv = environment.value(QString("PTM_DEBUG"), QString("no")); if (debugEnv == QString("yes")) debug = true; else debug = false; setHasConfigurationInterface(true); // text format init currentFormatLine.append(QString("")); currentFormatLine.append(QString("")); formatLine.append(QString("")); formatLine.append(QString("")); } DesktopPanel::~DesktopPanel() { // for (int i=0; isetContentsMargins(1, 1, 1, 1); setLayout(layout); currentDesktop = 1; // read variables configChanged(); connect(this, SIGNAL(activate()), this, SLOT(changePanelsState())); } QStringList DesktopPanel::getDesktopNames() { if (debug) qDebug() << "[PTM-DP]" << "[getDesktopNames]"; QStringList list; QString fileName = KGlobal::dirs()->findResource("config", "kwinrc"); if (debug) qDebug() << "[PTM-DP]" << "[getDesktopNames]" << ":" << "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; iview()->isVisible(); int winId = panels[i]->view()->winId(); if (wasVisible) { if (debug) qDebug() << "[PTM-DP]" << "[changePanelsState]" << ":" << "Hide panel"; KWindowInfo oldInfo = KWindowSystem::windowInfo(winId, NET::WMState); oldState = oldInfo.state(); panels[i]->view()->setVisible(false); } else { if (debug) qDebug() << "[PTM-DP]" << "[changePanelsState]" << ":" << "Show panel"; panels[i]->view()->setVisible(true); KWindowSystem::clearState(winId, NET::KeepAbove); KWindowSystem::setState(winId, oldState | NET::StaysOnTop); KWindowSystem::setOnAllDesktops(winId, true); } } } void DesktopPanel::setCurrentDesktop(const int number) { if (debug) qDebug() << "[PTM-DP]" << "[setCurrentDesktop]"; if (debug) qDebug() << "[PTM-DP]" << "[setCurrentDesktop]" << "Set desktop" << number + 1; QString cmd = parsePattern(configuration[QString("desktopcmd")], number); if (debug) qDebug() << "[PTM-DP]" << "[setCurrentDesktop]" << "Run cmd " << cmd; QProcess command; command.startDetached(cmd); } void DesktopPanel::updateText() { if (debug) qDebug() << "[PTM-DP]" << "[updateText]"; if (labels.isEmpty()) return; QString line, text; for (int i=0; isetText(text); } } // data engine interaction void DesktopPanel::dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data) { if (debug) qDebug() << "[PTM-DP]" << "[dataUpdated]"; if (debug) qDebug() << "[PTM-DP]" << "[dataUpdated]" << ":" << "Run function with source name" << sourceName; if (data.keys().count() == 0) return; if (sourceName == QString("desktop")) { currentDesktop = data[QString("currentNumber")].toInt(); updateText(); } } // configuration interface void DesktopPanel::createConfigurationInterface(KConfigDialog *parent) { if (debug) qDebug() << "[PTM-DP]" << "[createConfigurationInterface]"; QWidget *appWidget = new QWidget; uiAppConfig.setupUi(appWidget); QWidget *configWidget = new QWidget; uiWidConfig.setupUi(configWidget); QWidget *toggleWidget = new QWidget; uiToggleConfig.setupUi(toggleWidget); if (configuration[QString("background")].toInt() == 0) uiWidConfig.checkBox_background->setCheckState(Qt::Unchecked); else uiWidConfig.checkBox_background->setCheckState(Qt::Checked); if (configuration[QString("layout")].toInt() == 0) uiWidConfig.checkBox_layout->setCheckState(Qt::Unchecked); else uiWidConfig.checkBox_layout->setCheckState(Qt::Checked); if (configuration[QString("leftStretch")].toInt() == 0) uiWidConfig.checkBox_leftStretch->setCheckState(Qt::Unchecked); else uiWidConfig.checkBox_leftStretch->setCheckState(Qt::Checked); if (configuration[QString("rightStretch")].toInt() == 0) uiWidConfig.checkBox_rightStretch->setCheckState(Qt::Unchecked); else uiWidConfig.checkBox_rightStretch->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_pattern->setText(configuration[QString("pattern")]); uiWidConfig.lineEdit_desktopcmd->setText(configuration[QString("desktopcmd")]); KConfigGroup cg = config(); QString fontFamily = cg.readEntry("currentFontFamily", "Terminus"); int fontSize = cg.readEntry("currentFontSize", 10); QString fontColor = cg.readEntry("currentFontColor", "#ff0000"); int fontWeight = cg.readEntry("currentFontWeight", 400); QString fontStyle = cg.readEntry("currentFontStyle", "normal"); QFont font = QFont(fontFamily, 12, 400, FALSE); uiAppConfig.fontComboBox_fontActive->setCurrentFont(font); uiAppConfig.spinBox_fontSizeActive->setValue(fontSize); uiAppConfig.kcolorcombo_fontColorActive->setColor(fontColor); uiAppConfig.spinBox_fontWeightActive->setValue(fontWeight); if (fontStyle == "normal") uiAppConfig.comboBox_fontStyleActive->setCurrentIndex(0); else if (fontStyle == "italic") uiAppConfig.comboBox_fontStyleActive->setCurrentIndex(1); fontFamily = cg.readEntry("fontFamily", "Terminus"); fontSize = cg.readEntry("fontSize", 10); fontColor = cg.readEntry("fontColor", "#000000"); fontWeight = cg.readEntry("fontWeight", 400); fontStyle = cg.readEntry("fontStyle", "normal"); font = QFont(fontFamily, 12, 400, FALSE); uiAppConfig.fontComboBox_fontInactive->setCurrentFont(font); uiAppConfig.spinBox_fontSizeInactive->setValue(fontSize); uiAppConfig.kcolorcombo_fontColorInactive->setColor(fontColor); uiAppConfig.spinBox_fontWeightInactive->setValue(fontWeight); if (fontStyle == "normal") uiAppConfig.comboBox_fontStyleInactive->setCurrentIndex(0); else if (fontStyle == "italic") uiAppConfig.comboBox_fontStyleInactive->setCurrentIndex(1); uiToggleConfig.listWidget_list->clear(); QList panels = getPanels(); for (int i=0; ilocation()), uiToggleConfig.listWidget_list); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); if ((configuration[QString("panels")].split(QChar(',')) .contains(QString::number(i))) || (configuration[QString("panels")] == QString("-1"))) item->setCheckState(Qt::Checked); else item->setCheckState(Qt::Unchecked); } parent->addPage(configWidget, i18n("Widget"), Applet::icon()); parent->addPage(appWidget, i18n("Appearance"), QString("preferences-desktop-theme")); parent->addPage(toggleWidget, i18n("Toggle panels"), QString("plasma")); connect(parent, SIGNAL(okClicked()), this, SLOT(configAccepted())); connect(parent, SIGNAL(applyClicked()), this, SLOT(configAccepted())); } void DesktopPanel::configAccepted() { if (debug) qDebug() << "[PTM-DP]" << "[configAccepted]"; extsysmonEngine->disconnectSource(QString("desktop"), this); KConfigGroup cg = config(); cg.writeEntry("background", QString::number(uiWidConfig.checkBox_background->checkState())); cg.writeEntry("layout", QString::number(uiWidConfig.checkBox_layout->checkState())); cg.writeEntry("leftStretch", QString::number(uiWidConfig.checkBox_leftStretch->checkState())); cg.writeEntry("rightStretch", QString::number(uiWidConfig.checkBox_rightStretch->checkState())); cg.writeEntry("interval", QString::number(uiWidConfig.spinBox_interval->value())); cg.writeEntry("mark", uiWidConfig.comboBox_mark->currentText()); cg.writeEntry("pattern", uiWidConfig.lineEdit_pattern->text()); cg.writeEntry("desktopcmd", uiWidConfig.lineEdit_desktopcmd->text()); cg.writeEntry("currentFontFamily", uiAppConfig.fontComboBox_fontActive->currentFont().family()); cg.writeEntry("currentFontSize", uiAppConfig.spinBox_fontSizeActive->value()); cg.writeEntry("currentFontColor", uiAppConfig.kcolorcombo_fontColorActive->color().name()); cg.writeEntry("currentFontWeight", uiAppConfig.spinBox_fontWeightActive->value()); cg.writeEntry("currentFontStyle", uiAppConfig.comboBox_fontStyleActive->currentText()); cg.writeEntry("fontFamily", uiAppConfig.fontComboBox_fontInactive->currentFont().family()); cg.writeEntry("fontSize", uiAppConfig.spinBox_fontSizeInactive->value()); cg.writeEntry("fontColor", uiAppConfig.kcolorcombo_fontColorInactive->color().name()); cg.writeEntry("fontWeight", uiAppConfig.spinBox_fontWeightInactive->value()); cg.writeEntry("fontStyle", uiAppConfig.comboBox_fontStyleInactive->currentText()); QStringList indexes; for (int i=0; icount(); i++) if (uiToggleConfig.listWidget_list->item(i)->checkState() == Qt::Checked) indexes.append(QString::number(i)); if (indexes.count() == uiToggleConfig.listWidget_list->count()) cg.writeEntry("panels", QString("-1")); else cg.writeEntry("panels", indexes.join(QChar(','))); } void DesktopPanel::configChanged() { if (debug) qDebug() << "[PTM-DP]" << "[configChanged]"; KConfigGroup cg = config(); 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("leftStretch")] = cg.readEntry("leftStretch", "2"); configuration[QString("mark")] = cg.readEntry("mark", "ยค"); configuration[QString("panels")] = cg.readEntry("panels", "-1"); configuration[QString("pattern")] = cg.readEntry("pattern", "[$mark$number/$total: $name]"); configuration[QString("rightStretch")] = cg.readEntry("rightStretch", "2"); desktopNames = getDesktopNames(); extsysmonEngine->connectSource(QString("desktop"), this, configuration[QString("interval")].toInt()); QString fontFamily = cg.readEntry("currentFontFamily", "Terminus"); int fontSize = cg.readEntry("currentFontSize", 10); QString fontColor = cg.readEntry("currentFontColor", "#ff0000"); int fontWeight = cg.readEntry("currentFontWeight", 400); QString fontStyle = cg.readEntry("currentFontStyle", "normal"); currentFormatLine[0] = ("

"); currentFormatLine[1] = ("

"); fontFamily = cg.readEntry("fontFamily", "Terminus"); fontSize = cg.readEntry("fontSize", 10); fontColor = cg.readEntry("fontColor", "#000000"); fontWeight = cg.readEntry("fontWeight", 400); fontStyle = cg.readEntry("fontStyle", "normal"); formatLine[0] = ("

"); formatLine[1] = ("

"); reinit(); } #include "desktop-panel.moc"