diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index fb26ab2..ae08f4b 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -131,6 +132,8 @@ QString AWKeys::parsePattern() const QString parsed = pattern; parsed.replace(QString("$$"), QString("$\\$\\")); + foreach(QString key, foundLambdas) + parsed.replace(QString("${{%1}}").arg(key), calculateLambda(key)); foreach(QString key, foundKeys) parsed.replace(QString("$%1").arg(key), htmlValue(key)); foreach(QString bar, foundBars) @@ -820,6 +823,7 @@ void AWKeys::reinitKeys() keys = dictKeys(); foundBars = findGraphicalItems(); foundKeys = findKeys(); + foundLambdas = findLambdas(); } @@ -868,6 +872,27 @@ void AWKeys::addKeyToCache(const QString type, const QString key) } +QString AWKeys::calculateLambda(QString key) const +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Lambda key" << key; + + QScriptEngine engine; + foreach(QString lambdaKey, foundKeys) + key.replace(QString("$%1").arg(lambdaKey), values[lambdaKey]); + if (debug) qDebug() << PDEBUG << ":" << "Expression" << key; + + QScriptValue result = engine.evaluate(key); + if (engine.hasUncaughtException()) { + int line = engine.uncaughtExceptionLineNumber(); + if (debug) qDebug() << PDEBUG << ":" << "Uncaught exception at line" + << line << ":" << result.toString(); + return QString(); + } else + return result.toString(); +} + + QString AWKeys::htmlValue(QString key) const { if (debug) qDebug() << PDEBUG; @@ -934,6 +959,8 @@ QStringList AWKeys::findGraphicalItems() const QStringList AWKeys::findKeys() const { + if (debug) qDebug() << PDEBUG; + QStringList selectedKeys; foreach(QString key, keys) { if (key.startsWith(QString("bar"))) continue; @@ -947,6 +974,31 @@ QStringList AWKeys::findKeys() const } +QStringList AWKeys::findLambdas() const +{ + if (debug) qDebug() << PDEBUG; + + QStringList selectedKeys; + // substring inside ${{ }} (with brackets) which should not contain ${{ + QRegularExpression lambdaRegexp(QString("\\$\\{\\{((?!\\$\\{\\{).)*?\\}\\}")); + lambdaRegexp.setPatternOptions(QRegularExpression::DotMatchesEverythingOption); + + QRegularExpressionMatchIterator it = lambdaRegexp.globalMatch(pattern); + while (it.hasNext()) { + QRegularExpressionMatch match = it.next(); + QString lambda = match.captured(); + // drop brakets + lambda.remove(QRegExp(QString("^\\$\\{\\{"))); + lambda.remove(QRegExp(QString("\\}\\}$"))); + // append + if (debug) qDebug() << PDEBUG << ":" << "Found lambda" << lambda; + selectedKeys.append(lambda); + } + + return selectedKeys; +} + + GraphicalItem *AWKeys::getItemByTag(const QString tag) const { if (debug) qDebug() << PDEBUG; diff --git a/sources/awesome-widget/plugin/awkeys.h b/sources/awesome-widget/plugin/awkeys.h index 5f982ff..5917302 100644 --- a/sources/awesome-widget/plugin/awkeys.h +++ b/sources/awesome-widget/plugin/awkeys.h @@ -75,12 +75,14 @@ private slots: private: // methods void addKeyToCache(const QString type, const QString key = QString("")); + QString calculateLambda(QString key) const; QString htmlValue(QString key) const; int numberCpus() const; float temperature(const float temp, const QString units) const; // find methods QStringList findGraphicalItems() const; QStringList findKeys() const; + QStringList findLambdas() const; // get methods GraphicalItem *getItemByTag(const QString tag) const; QStringList getTimeKeys() const; @@ -94,7 +96,7 @@ private: ExtItemAggregator *extUpgrade; ExtItemAggregator *extWeather; QString pattern; - QStringList foundBars, foundKeys, keys; + QStringList foundBars, foundKeys, foundLambdas, keys; QHash values; QStringList diskDevices, hddDevices, mountDevices, networkDevices, tempDevices; }; diff --git a/sources/awesomewidgets/extitemaggregator.h b/sources/awesomewidgets/extitemaggregator.h index ecd4062..e3dc0d4 100644 --- a/sources/awesomewidgets/extitemaggregator.h +++ b/sources/awesomewidgets/extitemaggregator.h @@ -67,21 +67,35 @@ public: m_items = getItems(); }; + T *itemByTagNumber(const int _number) const + { + if (debug) qDebug() << PDEBUG; + + T *found = nullptr; + foreach(T *item, m_items) { + if (item->number() != _number) continue; + found = item; + break; + } + + return found; + } + T *itemFromWidget() const { if (debug) qDebug() << PDEBUG; - QListWidgetItem *item = widgetDialog->currentItem(); - if (item == nullptr) return nullptr; + QListWidgetItem *widgetItem = widgetDialog->currentItem(); + if (widgetItem == nullptr) return nullptr; - int originalItem = -1; - for (int i=0; ifileName() != item->text()) continue; - originalItem = i; + T *found = nullptr; + foreach(T *item, m_items) { + if (item->fileName() != widgetItem->text()) continue; + found = item; break; } - return originalItem == -1 ? nullptr : m_items[originalItem]; + return found; }; QList items() const diff --git a/sources/desktop-panel/package/contents/ui/advanced.qml b/sources/desktop-panel/package/contents/ui/advanced.qml index fe40517..0545f65 100644 --- a/sources/desktop-panel/package/contents/ui/advanced.qml +++ b/sources/desktop-panel/package/contents/ui/advanced.qml @@ -29,7 +29,7 @@ Item { DPAdds { id: dpAdds; } - + width: childrenRect.width height: childrenRect.height implicitWidth: pageColumn.implicitWidth diff --git a/sources/libraries.cmake b/sources/libraries.cmake index f0153df..cb34cf8 100644 --- a/sources/libraries.cmake +++ b/sources/libraries.cmake @@ -1,5 +1,5 @@ find_package(Gettext REQUIRED) -find_package(Qt5 REQUIRED COMPONENTS Core DBus Network Qml Widgets) +find_package(Qt5 REQUIRED COMPONENTS Core DBus Network Script Qml Widgets) find_package(ECM 0.0.11 REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) find_package(KF5 REQUIRED COMPONENTS I18n Notifications Plasma Service WindowSystem) @@ -10,16 +10,16 @@ include(KDECompilerSettings) add_definitions( ${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Network_DEFINITIONS} - ${Qt5Qml_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} + ${Qt5Script_DEFINITIONS} ${Qt5Qml_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} ) set(Qt_INCLUDE ${Qt5Core_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS} - ${Qt5Qml_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} + ${Qt5Script_INCLUDE_DIRS} ${Qt5Qml_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ) set(Kf5_INCLUDE ${I18n_INCLUDE_DIR} ${Notifications_INCLUDE_DIR} ${Plasma_INCLUDE_DIR}) set(Qt_LIBRARIES ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Network_LIBRARIES} - ${Qt5Qml_LIBRARIES} ${Qt5Widgets_LIBRARIES} + ${Qt5Script_LIBRARIES} ${Qt5Qml_LIBRARIES} ${Qt5Widgets_LIBRARIES} ) set(Kf5_LIBRARIES KF5::I18n KF5::Notifications KF5::Plasma KF5::WindowSystem)