diff --git a/sources/awesome-widget/plugin/awdataaggregator.cpp b/sources/awesome-widget/plugin/awdataaggregator.cpp index 4bc886f..ed565b5 100644 --- a/sources/awesome-widget/plugin/awdataaggregator.cpp +++ b/sources/awesome-widget/plugin/awdataaggregator.cpp @@ -36,11 +36,11 @@ AWDataAggregator::AWDataAggregator(QObject *parent) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; // required by signals - qRegisterMetaType>("QHash"); + // qRegisterMetaType>("QHash"); initScene(); - connect(this, SIGNAL(updateData(const QHash &)), this, - SLOT(dataUpdate(const QHash &))); + connect(this, SIGNAL(updateData(const QVariantHash &)), this, + SLOT(dataUpdate(const QVariantHash &))); } @@ -168,7 +168,7 @@ QPixmap AWDataAggregator::tooltipImage() } -void AWDataAggregator::dataUpdate(const QHash &values) +void AWDataAggregator::dataUpdate(const QVariantHash &values) { // do not log these arguments setData(values); @@ -254,11 +254,12 @@ QString AWDataAggregator::notificationText(const QString source, } -void AWDataAggregator::setData(const QHash &values) +void AWDataAggregator::setData(const QVariantHash &values) { // do not log these arguments // battery update requires info is AC online or not - setData(values[QString("ac")] == configuration[QString("acOnline")], + setData(values[QString("ac")].toString() + == configuration[QString("acOnline")], QString("batTooltip"), values[QString("bat")].toFloat()); // usual case setData(QString("cpuTooltip"), values[QString("cpu")].toFloat(), 90.0); @@ -271,7 +272,7 @@ void AWDataAggregator::setData(const QHash &values) [this](const QString value) { checkValue(QString("netdev"), currentNetworkDevice, value); currentNetworkDevice = value; - }(values[QString("netdev")]); + }(values[QString("netdev")].toString()); // additional check for GPU load [this](const float value) { checkValue(QString("gpu"), value, 90.0); @@ -302,7 +303,7 @@ void AWDataAggregator::setData(const QString &source, float value, QList netValues = data[QString("downkbTooltip")] + data[QString("upkbTooltip")]; boundaries[QString("downkbTooltip")] - = 1.2 * *std::max_element(netValues.cbegin(), netValues.cend()); + = 1.2f * *std::max_element(netValues.cbegin(), netValues.cend()); boundaries[QString("upkbTooltip")] = boundaries[QString("downkbTooltip")]; } diff --git a/sources/awesome-widget/plugin/awdataaggregator.h b/sources/awesome-widget/plugin/awdataaggregator.h index 6abcddb..ef70d01 100644 --- a/sources/awesome-widget/plugin/awdataaggregator.h +++ b/sources/awesome-widget/plugin/awdataaggregator.h @@ -41,11 +41,11 @@ public: QPixmap tooltipImage(); signals: - void updateData(const QHash &values); + void updateData(const QVariantHash &values); void toolTipPainted(const QString image) const; public slots: - void dataUpdate(const QHash &values); + void dataUpdate(const QVariantHash &values); private: // ui @@ -59,9 +59,9 @@ private: QString notificationText(const QString source, const float value) const; QString notificationText(const QString source, const QString value) const; // main method - void setData(const QHash &values); + void setData(const QVariantHash &values); void setData(const QString &source, float value, - const float extremum = -1.0); + const float extremum = -1.0f); // different signature for battery device void setData(const bool dontInvert, const QString &source, float value); // variables diff --git a/sources/awesome-widget/plugin/awkeys.cpp b/sources/awesome-widget/plugin/awkeys.cpp index eab56e3..4526906 100644 --- a/sources/awesome-widget/plugin/awkeys.cpp +++ b/sources/awesome-widget/plugin/awkeys.cpp @@ -167,8 +167,8 @@ QString AWKeys::valueByKey(QString key) const { qCDebug(LOG_AW) << "Requested value for key" << key; - return values.value(key.remove(QRegExp(QString("^bar[0-9]{1,}"))), - QString("")); + key.remove(QRegExp(QString("^bar[0-9]{1,}"))); + return aggregator->formater(values[key], key); } @@ -236,34 +236,26 @@ void AWKeys::calculateValues() QStringList mountDevices = keyOperator->devices(QString("mount")); for (auto device : mountDevices) { int index = mountDevices.indexOf(device); - values[QString("hddtotmb%1").arg(index)] = QString("%1").arg( - values[QString("hddfreemb%1").arg(index)].toFloat() - + values[QString("hddmb%1").arg(index)].toFloat(), - 5, 'f', 0); - values[QString("hddtotgb%1").arg(index)] = QString("%1").arg( - values[QString("hddfreegb%1").arg(index)].toFloat() - + values[QString("hddgb%1").arg(index)].toFloat(), - 5, 'f', 1); + values[QString("hddtotmb%1").arg(index)] + = values[QString("hddfreemb%1").arg(index)].toFloat() + + values[QString("hddmb%1").arg(index)].toFloat(); + values[QString("hddtotgb%1").arg(index)] + = values[QString("hddfreegb%1").arg(index)].toFloat() + + values[QString("hddgb%1").arg(index)].toFloat(); } // memtot* - values[QString("memtotmb")] - = QString("%1").arg(values[QString("memusedmb")].toInt() - + values[QString("memfreemb")].toInt(), - 5); - values[QString("memtotgb")] - = QString("%1").arg(values[QString("memusedgb")].toFloat() - + values[QString("memfreegb")].toFloat(), - 5, 'f', 1); + values[QString("memtotmb")] = values[QString("memusedmb")].toInt() + + values[QString("memfreemb")].toInt(); + values[QString("memtotgb")] = values[QString("memusedgb")].toFloat() + + values[QString("memfreegb")].toFloat(); // mem - values[QString("mem")] - = QString("%1").arg(100.0 * values[QString("memmb")].toFloat() - / values[QString("memtotmb")].toFloat(), - 5, 'f', 1); + values[QString("mem")] = 100.0f * values[QString("memmb")].toFloat() + / values[QString("memtotmb")].toFloat(); // up, down, upkb, downkb, upunits, downunits int netIndex = keyOperator->devices(QString("net")) - .indexOf(values[QString("netdev")]); + .indexOf(values[QString("netdev")].toString()); values[QString("down")] = values[QString("down%1").arg(netIndex)]; values[QString("downkb")] = values[QString("downkb%1").arg(netIndex)]; values[QString("downunits")] = values[QString("downunits%1").arg(netIndex)]; @@ -272,28 +264,23 @@ void AWKeys::calculateValues() values[QString("upunits")] = values[QString("upunits%1").arg(netIndex)]; // swaptot* - values[QString("swaptotmb")] - = QString("%1").arg(values[QString("swapmb")].toInt() - + values[QString("swapfreemb")].toInt(), - 5); - values[QString("swaptotgb")] - = QString("%1").arg(values[QString("swapgb")].toFloat() - + values[QString("swapfreegb")].toFloat(), - 5, 'f', 1); + values[QString("swaptotmb")] = values[QString("swapmb")].toInt() + + values[QString("swapfreemb")].toInt(); + values[QString("swaptotgb")] = values[QString("swapgb")].toFloat() + + values[QString("swapfreegb")].toFloat(); // swap - values[QString("swap")] - = QString("%1").arg(100.0 * values[QString("swapmb")].toFloat() - / values[QString("swaptotmb")].toFloat(), - 5, 'f', 1); + values[QString("swap")] = 100.0f * values[QString("swapmb")].toFloat() + / values[QString("swaptotmb")].toFloat(); // lambdas for (auto key : m_foundLambdas) values[key] = [this](QString key) { QJSEngine engine; // apply $this values - key.replace(QString("$this"), values[key]); + key.replace(QString("$this"), values[key].toString()); for (auto lambdaKey : m_foundKeys) - key.replace(QString("$%1").arg(lambdaKey), values[lambdaKey]); + key.replace(QString("$%1").arg(lambdaKey), + aggregator->formater(values[lambdaKey], lambdaKey)); qCInfo(LOG_AW) << "Expression" << key; QJSValue result = engine.evaluate(key); if (result.isError()) { @@ -315,17 +302,18 @@ QString AWKeys::parsePattern(QString pattern) const // lambdas for (auto key : m_foundLambdas) - pattern.replace(QString("${{%1}}").arg(key), values[key]); + pattern.replace(QString("${{%1}}").arg(key), values[key].toString()); // main keys for (auto key : m_foundKeys) - pattern.replace(QString("$%1").arg(key), - [](QString key, QString value) { - if ((!key.startsWith(QString("custom"))) - && (!key.startsWith(QString("weather")))) - value.replace(QString(" "), QString(" ")); - return value; - }(key, values[key])); + pattern.replace(QString("$%1").arg(key), [this](const QString &tag, + const QVariant &value) { + QString strValue = aggregator->formater(value, tag); + if ((!tag.startsWith(QString("custom"))) + && (!tag.startsWith(QString("weather")))) + strValue.replace(QString(" "), QString(" ")); + return strValue; + }(key, values[key])); // bars for (auto bar : m_foundBars) { @@ -338,7 +326,8 @@ QString AWKeys::parsePattern(QString pattern) const return QVariant::fromValue>(data); }(dataAggregator->getData(key)))); else - pattern.replace(QString("$%1").arg(bar), item->image(values[key])); + pattern.replace(QString("$%1").arg(bar), + item->image(values[key].toFloat())); } // prepare strings @@ -368,10 +357,11 @@ void AWKeys::setDataBySource(const QString &sourceName, const QVariantMap &data) m_mutex.lock(); // HACK workaround for time values which are stored in the different path - QVariant value = sourceName == QString("Local") ? data[QString("DateTime")] - : data[QString("value")]; - std::for_each(tags.cbegin(), tags.cend(), [this, value](const QString tag) { - values[tag] = aggregator->formater(value, tag); - }); + std::for_each(tags.cbegin(), tags.cend(), + [this, &data, &sourceName](const QString &tag) { + values[tag] = sourceName == QString("Local") + ? data[QString("DateTime")] + : data[QString("value")]; + }); m_mutex.unlock(); } diff --git a/sources/awesome-widget/plugin/awkeys.h b/sources/awesome-widget/plugin/awkeys.h index b834462..ace101f 100644 --- a/sources/awesome-widget/plugin/awkeys.h +++ b/sources/awesome-widget/plugin/awkeys.h @@ -86,7 +86,7 @@ private: // variables QVariantMap m_tooltipParams; QStringList m_foundBars, m_foundKeys, m_foundLambdas, m_requiredKeys; - QHash values; + QVariantHash values; bool m_optimize = false; bool m_wrapNewLines = false; // multithread features diff --git a/sources/awesome-widget/plugin/awkeysaggregator.cpp b/sources/awesome-widget/plugin/awkeysaggregator.cpp index dc83ff6..ddc7c42 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.cpp +++ b/sources/awesome-widget/plugin/awkeysaggregator.cpp @@ -30,6 +30,23 @@ AWKeysAggregator::AWKeysAggregator(QObject *parent) : QObject(parent) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + // default formaters + // memory + m_formater[QString("mem")] = Float; + m_formater[QString("memtotmb")] = IntegerFive; + m_formater[QString("memtotgb")] = Float; + // network + m_formater[QString("down")] = NetSmartFormat; + m_formater[QString("downkb")] = Integer; + m_formater[QString("downunits")] = NetSmartUnits; + m_formater[QString("up")] = NetSmartFormat; + m_formater[QString("upkb")] = Integer; + m_formater[QString("upunits")] = NetSmartUnits; + // swap + m_formater[QString("swap")] = Float; + m_formater[QString("swaptotmb")] = IntegerFive; + m_formater[QString("swaptotgb")] = Float; } @@ -57,6 +74,9 @@ QString AWKeysAggregator::formater(const QVariant &data, case Integer: output = QString("%1").arg(data.toFloat(), 4, 'f', 0); break; + case IntegerFive: + output = QString("%1").arg(data.toFloat(), 5, 'f', 0); + break; case IntegerThree: output = QString("%1").arg(data.toFloat(), 3, 'f', 0); break; @@ -137,9 +157,11 @@ QString AWKeysAggregator::formater(const QVariant &data, static_cast(data.toFloat())); break; case NoFormat: - default: output = data.toString(); break; + default: + output = QString(); + break; } return output; @@ -315,6 +337,9 @@ QStringList AWKeysAggregator::registerSource(const QString &source, QString key = QString("hdd%1").arg(index); m_map[source] = key; m_formater[key] = Float; + // additional keys + m_formater[QString("hddtotmb%1").arg(index)] = IntegerFive; + m_formater[QString("hddtotgb%1").arg(index)] = Float; } } else if (source.contains(mountFreeRegExp)) { // free space diff --git a/sources/awesome-widget/plugin/awkeysaggregator.h b/sources/awesome-widget/plugin/awkeysaggregator.h index 1032d0d..1e2ef6c 100644 --- a/sources/awesome-widget/plugin/awkeysaggregator.h +++ b/sources/awesome-widget/plugin/awkeysaggregator.h @@ -42,6 +42,7 @@ class AWKeysAggregator : public QObject Float, FloatTwoSymbols, Integer, + IntegerFive, IntegerThree, List, // unit specific formaters @@ -78,7 +79,7 @@ public: public slots: QStringList registerSource(const QString &source, const QString &units, - const QStringList &keys = QStringList()); + const QStringList &keys); private: float temperature(const float temp) const;