mirror of
https://github.com/arcan1s/awesome-widgets.git
synced 2025-04-24 23:47:20 +00:00
commit
4109f21bf6
28
.travis.yml
Normal file
28
.travis.yml
Normal file
@ -0,0 +1,28 @@
|
||||
sudo: required
|
||||
|
||||
arch:
|
||||
packages:
|
||||
- plasma-framework
|
||||
# build deps
|
||||
- cmake
|
||||
- extra-cmake-modules
|
||||
- python
|
||||
# test
|
||||
- xorg-server-xvfb
|
||||
# additional targets
|
||||
- clang
|
||||
- cppcheck
|
||||
script:
|
||||
- export DISPLAY=:99.0
|
||||
- git clone https://github.com/arcan1s/awesome-widgets/
|
||||
- cd awesome-widgets; git submodule update --init --recursive
|
||||
- mkdir awesome-widgets/build
|
||||
- cd awesome-widgets/build; cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_TESTING=ON ../sources
|
||||
- cd awesome-widgets/build; make
|
||||
- cd awesome-widgets/build; make cppcheck
|
||||
- cd awesome-widgets/build; make clangformat && ( [ `git status -s | wc -l` -eq 0 ] || exit 1 )
|
||||
- cd awesome-widgets/build; xvfb-run make test
|
||||
- sleep 3
|
||||
|
||||
script:
|
||||
- "curl -s https://raw.githubusercontent.com/mikkeloscar/arch-travis/master/arch-travis.sh | bash"
|
@ -54,6 +54,7 @@ for more details. To avoid manual labor there is automatic cmake target named
|
||||
```
|
||||
|
||||
* C-like `NULL`, use `nullptr` instead.
|
||||
* C-like constant definition, use `const vartype foo = bar` definition instead.
|
||||
* It is highly recommended to avoid implicit casts. Exception `nullptr` casts to
|
||||
boolean, e.g.:
|
||||
|
||||
|
@ -50,14 +50,14 @@ if (CMAKE_COMPILER_IS_GNUCXX)
|
||||
# avoid newer gcc warnings
|
||||
add_definitions(-D_DEFAULT_SOURCE)
|
||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
set(CMAKE_CXX_FLAGS "-Wall -std=c++11 -stdlib=libc++")
|
||||
set(CMAKE_CXX_FLAGS "-Wall -std=c++11")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_OPTIMIZATION "-Ofast -DNDEBUG")
|
||||
# linker flags
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-lc++abi")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "-lc++abi")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "-lc++abi")
|
||||
# set(CMAKE_EXE_LINKER_FLAGS "-lc++abi")
|
||||
# set(CMAKE_MODULE_LINKER_FLAGS "-lc++abi")
|
||||
# set(CMAKE_SHARED_LINKER_FLAGS "-lc++abi")
|
||||
else ()
|
||||
message(FATAL_ERROR "Unknown compiler")
|
||||
endif ()
|
||||
@ -65,6 +65,9 @@ if (CMAKE_BUILD_TYPE MATCHES Debug)
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
endif ()
|
||||
|
||||
# required by successfully coverity and cppcheck build
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
set(PROJECT_TRDPARTY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty)
|
||||
set(PROJECT_LIBRARY awesomewidgets)
|
||||
set(PROJECT_MONITORSOURCES extsysmonsources)
|
||||
@ -79,6 +82,7 @@ add_subdirectory(awesomewidgets)
|
||||
add_subdirectory(extsysmonsources)
|
||||
add_subdirectory(extsysmon)
|
||||
if (BUILD_PLASMOIDS)
|
||||
add_subdirectory(qml)
|
||||
add_subdirectory(awesome-widget)
|
||||
add_subdirectory(desktop-panel)
|
||||
add_subdirectory(translations)
|
||||
@ -89,3 +93,4 @@ if (BUILD_TESTING)
|
||||
endif ()
|
||||
|
||||
include(packages-recipe.cmake)
|
||||
|
||||
|
@ -16,11 +16,14 @@
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include <KI18n/KLocalizedString>
|
||||
|
||||
#include "awdebug.h"
|
||||
|
||||
|
||||
Q_LOGGING_CATEGORY(LOG_AW, "org.kde.plasma.awesomewidget",
|
||||
QtMsgType::QtWarningMsg)
|
||||
Q_LOGGING_CATEGORY(LOG_DBUS, "org.kde.plasma.awdbus", QtMsgType::QtWarningMsg)
|
||||
Q_LOGGING_CATEGORY(LOG_DP, "org.kde.plasma.desktoppanel",
|
||||
QtMsgType::QtWarningMsg)
|
||||
Q_LOGGING_CATEGORY(LOG_ESM, "org.kde.plasma.extsysmon", QtMsgType::QtWarningMsg)
|
||||
@ -30,7 +33,80 @@ Q_LOGGING_CATEGORY(LOG_LIB, "org.kde.plasma.awesomewidgets",
|
||||
QtMsgType::QtWarningMsg)
|
||||
|
||||
|
||||
const QStringList getBuildData()
|
||||
QString AWDebug::getAboutText(const QString type)
|
||||
{
|
||||
QString text;
|
||||
if (type == QString("header")) {
|
||||
text = QString(NAME);
|
||||
} else if (type == QString("version")) {
|
||||
text = i18n("Version %1 (build date %2)", QString(VERSION),
|
||||
QString(BUILD_DATE));
|
||||
if (!QString(COMMIT_SHA).isEmpty())
|
||||
text += QString(" (%1)").arg(QString(COMMIT_SHA));
|
||||
} else if (type == QString("description")) {
|
||||
text = i18n("A set of minimalistic plasmoid widgets");
|
||||
} else if (type == QString("links")) {
|
||||
text = i18n("Links:") + QString("<ul>")
|
||||
+ QString("<li><a href=\"%1\">%2</a></li>")
|
||||
.arg(QString(HOMEPAGE))
|
||||
.arg(i18n("Homepage"))
|
||||
+ QString("<li><a href=\"%1\">%2</a></li>")
|
||||
.arg(QString(REPOSITORY))
|
||||
.arg(i18n("Repository"))
|
||||
+ QString("<li><a href=\"%1\">%2</a></li>")
|
||||
.arg(QString(BUGTRACKER))
|
||||
.arg(i18n("Bugtracker"))
|
||||
+ QString("<li><a href=\"%1\">%2</a></li>")
|
||||
.arg(QString(TRANSLATION))
|
||||
.arg(i18n("Translation issue"))
|
||||
+ QString("<li><a href=\"%1\">%2</a></li>")
|
||||
.arg(QString(AUR_PACKAGES))
|
||||
.arg(i18n("AUR packages"))
|
||||
+ QString("<li><a href=\"%1\">%2</a></li>")
|
||||
.arg(QString(OPENSUSE_PACKAGES))
|
||||
.arg(i18n("openSUSE packages"))
|
||||
+ QString("</ul>");
|
||||
} else if (type == QString("copy")) {
|
||||
text = QString("<small>© %1 <a href=\"mailto:%2\">%3</a><br>")
|
||||
.arg(QString(DATE))
|
||||
.arg(QString(EMAIL))
|
||||
.arg(QString(AUTHOR))
|
||||
+ i18n("This software is licensed under %1", QString(LICENSE))
|
||||
+ QString("</small>");
|
||||
} else if (type == QString("translators")) {
|
||||
QStringList translatorList = QString(TRANSLATORS).split(QChar(','));
|
||||
for (auto &translator : translatorList)
|
||||
translator = QString("<li>%1</li>").arg(translator);
|
||||
text = i18n("Translators:") + QString("<ul>")
|
||||
+ translatorList.join(QString("")) + QString("</ul>");
|
||||
} else if (type == QString("3rdparty")) {
|
||||
QStringList trdPartyList
|
||||
= QString(TRDPARTY_LICENSE)
|
||||
.split(QChar(';'), QString::SkipEmptyParts);
|
||||
for (int i = 0; i < trdPartyList.count(); i++)
|
||||
trdPartyList[i]
|
||||
= QString("<li><a href=\"%3\">%1</a> (%2 license)</li>")
|
||||
.arg(trdPartyList.at(i).split(QChar(','))[0])
|
||||
.arg(trdPartyList.at(i).split(QChar(','))[1])
|
||||
.arg(trdPartyList.at(i).split(QChar(','))[2]);
|
||||
text = i18n("This software uses:") + QString("<ul>")
|
||||
+ trdPartyList.join(QString("")) + QString("</ul>");
|
||||
} else if (type == QString("thanks")) {
|
||||
QStringList thanks = QString(SPECIAL_THANKS)
|
||||
.split(QChar(';'), QString::SkipEmptyParts);
|
||||
for (int i = 0; i < thanks.count(); i++)
|
||||
thanks[i] = QString("<li><a href=\"%2\">%1</a></li>")
|
||||
.arg(thanks.at(i).split(QChar(','))[0])
|
||||
.arg(thanks.at(i).split(QChar(','))[1]);
|
||||
text = i18n("Special thanks to:") + QString("<ul>")
|
||||
+ thanks.join(QString("")) + QString("</ul>");
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
|
||||
QStringList AWDebug::getBuildData()
|
||||
{
|
||||
QStringList metadata;
|
||||
metadata.append(QString("=== Awesome Widgets configuration details ==="));
|
||||
@ -41,12 +117,14 @@ const QStringList getBuildData()
|
||||
metadata.append(QString(" BUILD_DATE: %1").arg(BUILD_DATE));
|
||||
// configuration
|
||||
metadata.append(QString("API details:"));
|
||||
metadata.append(QString(" AWGIAPI: %1").arg(AWGIAPI));
|
||||
metadata.append(QString(" AWEQAPI: %1").arg(AWEQAPI));
|
||||
metadata.append(QString(" AWESAPI: %1").arg(AWESAPI));
|
||||
metadata.append(QString(" AWEUAPI: %1").arg(AWEUAPI));
|
||||
metadata.append(QString(" AWEWAPI: %1").arg(AWEWAPI));
|
||||
metadata.append(QString(" AWEFAPI: %1").arg(AWEFAPI));
|
||||
metadata.append(QString(" AW_GRAPHITEM_API: %1").arg(AW_GRAPHITEM_API));
|
||||
metadata.append(QString(" AW_EXTQUOTES_API: %1").arg(AW_EXTQUOTES_API));
|
||||
metadata.append(QString(" AW_EXTSCRIPT_API: %1").arg(AW_EXTSCRIPT_API));
|
||||
metadata.append(
|
||||
QString(" AW_EXTUPGRADE_API: %1").arg(AW_EXTUPGRADE_API));
|
||||
metadata.append(
|
||||
QString(" AW_EXTWEATHER_API: %1").arg(AW_EXTWEATHER_API));
|
||||
metadata.append(QString(" AW_FORMATTER_API: %1").arg(AW_FORMATTER_API));
|
||||
metadata.append(QString(" REQUEST_TIMEOUT: %1").arg(REQUEST_TIMEOUT));
|
||||
metadata.append(QString(" TIME_KEYS: %1").arg(TIME_KEYS));
|
||||
metadata.append(QString(" STATIC_KEYS: %1").arg(STATIC_KEYS));
|
||||
|
@ -23,21 +23,25 @@
|
||||
|
||||
#include "version.h"
|
||||
|
||||
#ifndef LOG_FORMAT
|
||||
#define LOG_FORMAT \
|
||||
"[%{time process}][%{if-debug}DD%{endif}%{if-info}II%{endif}%{if-" \
|
||||
"warning}WW%{endif}%{if-critical}CC%{endif}%{if-fatal}FF%{endif}][%{" \
|
||||
"category}][%{function}] %{message}"
|
||||
#endif /* LOG_FORMAT */
|
||||
namespace AWDebug
|
||||
{
|
||||
const char LOG_FORMAT[] = "[%{time "
|
||||
"process}][%{if-debug}DD%{endif}%{if-info}II%{endif}%"
|
||||
"{if-warning}WW%{endif}%{if-critical}CC%{endif}%{if-"
|
||||
"fatal}FF%{endif}][%{category}][%{function}] "
|
||||
"%{message}";
|
||||
|
||||
QString getAboutText(const QString type);
|
||||
QStringList getBuildData();
|
||||
}
|
||||
|
||||
|
||||
Q_DECLARE_LOGGING_CATEGORY(LOG_AW)
|
||||
Q_DECLARE_LOGGING_CATEGORY(LOG_DBUS)
|
||||
Q_DECLARE_LOGGING_CATEGORY(LOG_DP)
|
||||
Q_DECLARE_LOGGING_CATEGORY(LOG_ESM)
|
||||
Q_DECLARE_LOGGING_CATEGORY(LOG_ESS)
|
||||
Q_DECLARE_LOGGING_CATEGORY(LOG_LIB)
|
||||
|
||||
const QStringList getBuildData();
|
||||
|
||||
|
||||
#endif /* AWDEBUG_H */
|
||||
|
@ -62,6 +62,15 @@
|
||||
<entry name="acOffline" type="string">
|
||||
<default>( )</default>
|
||||
</entry>
|
||||
<entry name="telemetryCount" type="int">
|
||||
<default>100</default>
|
||||
</entry>
|
||||
<entry name="telemetryRemote" type="bool">
|
||||
<default>false</default>
|
||||
</entry>
|
||||
<entry name="telemetryId" type="string">
|
||||
<default></default>
|
||||
</entry>
|
||||
</group>
|
||||
|
||||
<group name="Tooltip">
|
||||
@ -138,6 +147,12 @@
|
||||
<entry name="fontStyle" type="string">
|
||||
<default>normal</default>
|
||||
</entry>
|
||||
<entry name="textStyle" type="string">
|
||||
<default>normal</default>
|
||||
</entry>
|
||||
<entry name="textStyleColor" type="string">
|
||||
<default>#000000</default>
|
||||
</entry>
|
||||
</group>
|
||||
|
||||
</kcfg>
|
||||
|
@ -16,112 +16,24 @@
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Layouts 1.0 as QtLayouts
|
||||
|
||||
import org.kde.plasma.private.awesomewidget 1.0
|
||||
|
||||
|
||||
Item {
|
||||
id: aboutPage
|
||||
// backend
|
||||
AWActions {
|
||||
id: awActions
|
||||
}
|
||||
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
implicitWidth: pageColumn.implicitWidth
|
||||
implicitHeight: pageColumn.implicitHeight
|
||||
|
||||
property bool debug: awActions.isDebugEnabled()
|
||||
|
||||
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
QtControls.TabView {
|
||||
height: parent.height
|
||||
width: parent.width
|
||||
QtControls.Tab {
|
||||
anchors.margins: 10.0
|
||||
title: i18n("About")
|
||||
|
||||
QtLayouts.ColumnLayout {
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: awActions.getAboutText("header")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: awActions.getAboutText("version")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
text: awActions.getAboutText("description")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
textFormat: Text.RichText
|
||||
text: awActions.getAboutText("links")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillHeight: true
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
font.capitalization: Font.SmallCaps
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignBottom
|
||||
textFormat: Text.RichText
|
||||
text: awActions.getAboutText("copy")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.Tab {
|
||||
anchors.margins: 10.0
|
||||
title: i18n("Acknowledgment")
|
||||
|
||||
QtLayouts.ColumnLayout {
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
text: awActions.getAboutText("translators")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
textFormat: Text.RichText
|
||||
text: awActions.getAboutText("3rdparty")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillHeight: true
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
verticalAlignment: Text.AlignTop
|
||||
textFormat: Text.RichText
|
||||
text: awActions.getAboutText("thanks")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
AboutTab {
|
||||
textProvider: awActions
|
||||
}
|
||||
|
||||
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
}
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Dialogs 1.2 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.awesomewidget 1.0
|
||||
|
||||
@ -28,9 +27,6 @@ Item {
|
||||
AWActions {
|
||||
id: awActions
|
||||
}
|
||||
AWConfigHelper {
|
||||
id: awConfig
|
||||
}
|
||||
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
@ -50,420 +46,210 @@ Item {
|
||||
property alias cfg_width: widgetWidth.value
|
||||
property alias cfg_interval: update.value
|
||||
property alias cfg_queueLimit: queueLimit.value
|
||||
property string cfg_tempUnits: tempUnits.currentText
|
||||
property alias cfg_customTime: customTime.text
|
||||
property alias cfg_customUptime: customUptime.text
|
||||
property alias cfg_acOnline: acOnline.text
|
||||
property alias cfg_acOffline: acOffline.text
|
||||
property string cfg_tempUnits: tempUnits.value
|
||||
property alias cfg_customTime: customTime.value
|
||||
property alias cfg_customUptime: customUptime.value
|
||||
property alias cfg_acOnline: acOnline.value
|
||||
property alias cfg_acOffline: acOffline.value
|
||||
property alias cfg_telemetryCount: telemetryCount.value
|
||||
property alias cfg_telemetryRemote: telemetryRemote.checked
|
||||
property alias cfg_telemetryId: telemetryId.value
|
||||
|
||||
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: background
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Enable background")
|
||||
}
|
||||
|
||||
CheckBoxSelector {
|
||||
id: background
|
||||
text: i18n("Enable background")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: translate
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Translate strings")
|
||||
}
|
||||
CheckBoxSelector {
|
||||
id: translate
|
||||
text: i18n("Translate strings")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: wrapNewLines
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Wrap new lines")
|
||||
}
|
||||
CheckBoxSelector {
|
||||
id: wrapNewLines
|
||||
text: i18n("Wrap new lines")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: wordWrap
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Enable word wrap")
|
||||
}
|
||||
CheckBoxSelector {
|
||||
id: wordWrap
|
||||
text: i18n("Enable word wrap")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: notify
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Enable notifications")
|
||||
}
|
||||
CheckBoxSelector {
|
||||
id: notify
|
||||
text: i18n("Enable notifications")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: updates
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Check updates on startup")
|
||||
}
|
||||
CheckBoxSelector {
|
||||
id: updates
|
||||
text: i18n("Check updates on startup")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: optimize
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Optimize subscription")
|
||||
}
|
||||
CheckBoxSelector {
|
||||
id: optimize
|
||||
text: i18n("Optimize subscription")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Widget height, px")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: widgetHeight
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 0
|
||||
maximumValue: 4096
|
||||
stepSize: 50
|
||||
value: plasmoid.configuration.height
|
||||
}
|
||||
IntegerSelector {
|
||||
id: widgetHeight
|
||||
maximumValue: 4096
|
||||
minimumValue: 0
|
||||
stepSize: 50
|
||||
text: i18n("Widget height, px")
|
||||
value: plasmoid.configuration.height
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Widget width, px")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: widgetWidth
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 0
|
||||
maximumValue: 4096
|
||||
stepSize: 50
|
||||
value: plasmoid.configuration.width
|
||||
}
|
||||
IntegerSelector {
|
||||
id: widgetWidth
|
||||
maximumValue: 4096
|
||||
minimumValue: 0
|
||||
stepSize: 50
|
||||
text: i18n("Widget width, px")
|
||||
value: plasmoid.configuration.width
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Time interval")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: update
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 1000
|
||||
maximumValue: 10000
|
||||
stepSize: 500
|
||||
value: plasmoid.configuration.interval
|
||||
}
|
||||
IntegerSelector {
|
||||
id: update
|
||||
maximumValue: 10000
|
||||
minimumValue: 1000
|
||||
stepSize: 500
|
||||
text: i18n("Time interval")
|
||||
value: plasmoid.configuration.interval
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Messages queue limit")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: queueLimit
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 0
|
||||
maximumValue: 99
|
||||
stepSize: 1
|
||||
value: plasmoid.configuration.queueLimit
|
||||
}
|
||||
IntegerSelector {
|
||||
id: queueLimit
|
||||
maximumValue: 99
|
||||
minimumValue: 0
|
||||
stepSize: 1
|
||||
text: i18n("Messages queue limit")
|
||||
value: plasmoid.configuration.queueLimit
|
||||
}
|
||||
|
||||
Row {
|
||||
ComboBoxSelector {
|
||||
id: tempUnits
|
||||
model: [
|
||||
{
|
||||
'label': i18n("Celsius"),
|
||||
'name': "Celsius"
|
||||
},
|
||||
{
|
||||
'label': i18n("Fahrenheit"),
|
||||
'name': "Fahrenheit"
|
||||
},
|
||||
{
|
||||
'label': i18n("Kelvin"),
|
||||
'name': "Kelvin"
|
||||
},
|
||||
{
|
||||
'label': i18n("Reaumur"),
|
||||
'name': "Reaumur"
|
||||
},
|
||||
{
|
||||
'label': i18n("cm^-1"),
|
||||
'name': "cm^-1"
|
||||
},
|
||||
{
|
||||
'label': i18n("kJ/mol"),
|
||||
'name': "kJ/mol"
|
||||
},
|
||||
{
|
||||
'label': i18n("kcal/mol"),
|
||||
'name': "kcal/mol"
|
||||
}
|
||||
]
|
||||
text: i18n("Temperature units")
|
||||
value: plasmoid.configuration.tempUnits
|
||||
onValueEdited: cfg_tempUnits = newValue
|
||||
}
|
||||
|
||||
LineSelector {
|
||||
id: customTime
|
||||
text: i18n("Custom time format")
|
||||
value: plasmoid.configuration.customTime
|
||||
}
|
||||
|
||||
LineSelector {
|
||||
id: customUptime
|
||||
text: i18n("Custom uptime format")
|
||||
value: plasmoid.configuration.customUptime
|
||||
}
|
||||
|
||||
LineSelector {
|
||||
id: acOnline
|
||||
text: i18n("AC online tag")
|
||||
value: plasmoid.configuration.acOnline
|
||||
}
|
||||
|
||||
LineSelector {
|
||||
id: acOffline
|
||||
text: i18n("AC offline tag")
|
||||
value: plasmoid.configuration.acOffline
|
||||
}
|
||||
|
||||
QtControls.GroupBox {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Temperature units")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: tempUnits
|
||||
width: parent.width * 3 / 5
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("Celsius"),
|
||||
'name': "Celsius"
|
||||
},
|
||||
{
|
||||
'label': i18n("Fahrenheit"),
|
||||
'name': "Fahrenheit"
|
||||
},
|
||||
{
|
||||
'label': i18n("Kelvin"),
|
||||
'name': "Kelvin"
|
||||
},
|
||||
{
|
||||
'label': i18n("Reaumur"),
|
||||
'name': "Reaumur"
|
||||
},
|
||||
{
|
||||
'label': i18n("cm^-1"),
|
||||
'name': "cm^-1"
|
||||
},
|
||||
{
|
||||
'label': i18n("kJ/mol"),
|
||||
'name': "kJ/mol"
|
||||
},
|
||||
{
|
||||
'label': i18n("kcal/mol"),
|
||||
'name': "kcal/mol"
|
||||
title: i18n("Actions")
|
||||
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
ButtonSelector {
|
||||
value: i18n("Drop key cache")
|
||||
onButtonActivated: awActions.dropCache()
|
||||
}
|
||||
ButtonSelector {
|
||||
ExportDialog {
|
||||
id: saveConfigAs
|
||||
configuration: plasmoid.configuration
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_tempUnits = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.tempUnits) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
tempUnits.currentIndex = i
|
||||
value: i18n("Export configuration")
|
||||
onButtonActivated: saveConfigAs.open()
|
||||
}
|
||||
ButtonSelector {
|
||||
ImportDialog {
|
||||
id: loadConfigFrom
|
||||
onConfigurationReceived: {
|
||||
for (var key in configuration)
|
||||
plasmoid.configuration[key] = configuration[key]
|
||||
}
|
||||
}
|
||||
value: i18n("Import configuration")
|
||||
onButtonActivated: loadConfigFrom.open()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
QtControls.GroupBox {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Custom time format")
|
||||
}
|
||||
QtControls.TextField {
|
||||
id: customTime
|
||||
width: parent.width * 3 / 5
|
||||
text: plasmoid.configuration.customTime
|
||||
}
|
||||
}
|
||||
title: i18n("Telemetry")
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Custom uptime format")
|
||||
}
|
||||
QtControls.TextField {
|
||||
id: customUptime
|
||||
width: parent.width * 3 / 5
|
||||
text: plasmoid.configuration.customUptime
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("AC online tag")
|
||||
}
|
||||
QtControls.TextField {
|
||||
id: acOnline
|
||||
width: parent.width * 3 / 5
|
||||
text: plasmoid.configuration.acOnline
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("AC offline tag")
|
||||
}
|
||||
QtControls.TextField {
|
||||
id: acOffline
|
||||
width: parent.width * 3 / 5
|
||||
text: plasmoid.configuration.acOffline
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Drop key cache")
|
||||
onClicked: awActions.dropCache()
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Export configuration")
|
||||
onClicked: saveConfigAs.open()
|
||||
}
|
||||
|
||||
QtDialogs.FileDialog {
|
||||
id: saveConfigAs
|
||||
selectExisting: false
|
||||
title: i18n("Export")
|
||||
folder: awConfig.configurationDirectory()
|
||||
onAccepted: {
|
||||
var status = awConfig.exportConfiguration(
|
||||
plasmoid.configuration,
|
||||
saveConfigAs.fileUrl.toString().replace("file://", ""))
|
||||
if (status) {
|
||||
messageDialog.title = i18n("Success")
|
||||
messageDialog.text = i18n("Please note that binary files were not copied")
|
||||
} else {
|
||||
messageDialog.title = i18n("Ooops...")
|
||||
messageDialog.text = i18n("Could not save configuration file")
|
||||
}
|
||||
messageDialog.open()
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
CheckBoxSelector {
|
||||
id: telemetryRemote
|
||||
text: i18n("Enable remote telemetry")
|
||||
}
|
||||
}
|
||||
|
||||
QtDialogs.MessageDialog {
|
||||
id: messageDialog
|
||||
standardButtons: QtDialogs.StandardButton.Ok
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Import configuration")
|
||||
onClicked: openConfig.open()
|
||||
}
|
||||
|
||||
QtDialogs.FileDialog {
|
||||
id: openConfig
|
||||
title: i18n("Import")
|
||||
folder: awConfig.configurationDirectory()
|
||||
onAccepted: importSelection.open()
|
||||
}
|
||||
|
||||
QtDialogs.Dialog {
|
||||
id: importSelection
|
||||
|
||||
Column {
|
||||
QtControls.CheckBox {
|
||||
id: importPlasmoid
|
||||
text: i18n("Import plasmoid settings")
|
||||
}
|
||||
|
||||
QtControls.CheckBox {
|
||||
id: importExtensions
|
||||
text: i18n("Import extensions")
|
||||
}
|
||||
|
||||
QtControls.CheckBox {
|
||||
id: importAdds
|
||||
text: i18n("Import additional files")
|
||||
}
|
||||
IntegerSelector {
|
||||
id: telemetryCount
|
||||
maximumValue: 10000
|
||||
minimumValue: 0
|
||||
stepSize: 50
|
||||
text: i18n("History count")
|
||||
value: plasmoid.configuration.telemetryCount
|
||||
}
|
||||
|
||||
onAccepted: {
|
||||
if (debug) console.debug()
|
||||
var importConfig = awConfig.importConfiguration(
|
||||
openConfig.fileUrl.toString().replace("file://", ""),
|
||||
importPlasmoid.checked, importExtensions.checked,
|
||||
importAdds.checked)
|
||||
for (var key in importConfig)
|
||||
plasmoid.configuration[key] = importConfig[key]
|
||||
LineSelector {
|
||||
id: telemetryId
|
||||
text: i18n("Telemetry ID")
|
||||
value: plasmoid.configuration.telemetryId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,11 +16,9 @@
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Controls.Styles 1.3 as QtStyles
|
||||
import QtQuick.Dialogs 1.1 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.awesomewidget 1.0
|
||||
import "."
|
||||
|
||||
|
||||
Item {
|
||||
@ -44,195 +42,68 @@ Item {
|
||||
87: 5
|
||||
}
|
||||
|
||||
property alias cfg_fontFamily: selectFont.text
|
||||
property alias cfg_fontFamily: font.value
|
||||
property alias cfg_fontSize: fontSize.value
|
||||
property string cfg_fontWeight: fontWeight.currentText
|
||||
property string cfg_fontStyle: fontStyle.currentText
|
||||
property alias cfg_fontColor: selectColor.text
|
||||
property string cfg_fontWeight: fontWeight.value
|
||||
property string cfg_fontStyle: fontStyle.value
|
||||
property alias cfg_fontColor: selectColor.value
|
||||
property alias cfg_textStyleColor: selectStyleColor.value
|
||||
property string cfg_textStyle: textStyle.value
|
||||
|
||||
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: selectFont
|
||||
width: parent.width * 2 / 3
|
||||
text: plasmoid.configuration.fontFamily
|
||||
onClicked: {
|
||||
if (debug) console.debug()
|
||||
fontDialog.setFont()
|
||||
fontDialog.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
FontSelector {
|
||||
id: font
|
||||
text: i18n("Font")
|
||||
value: plasmoid.configuration.fontFamily
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font size")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: fontSize
|
||||
width: parent.width * 2 / 3
|
||||
minimumValue: 8
|
||||
maximumValue: 32
|
||||
stepSize: 1
|
||||
value: plasmoid.configuration.fontSize
|
||||
}
|
||||
IntegerSelector {
|
||||
id: fontSize
|
||||
maximumValue: 32
|
||||
minimumValue: 8
|
||||
stepSize: 1
|
||||
text: i18n("Font size")
|
||||
value: plasmoid.configuration.fontSize
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font weight")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: fontWeight
|
||||
width: parent.width * 2 / 3
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("light"),
|
||||
'name': "light"
|
||||
},
|
||||
{
|
||||
'label': i18n("normal"),
|
||||
'name': "normal"
|
||||
},
|
||||
{
|
||||
'label': i18n("demi bold"),
|
||||
'name': "demibold"
|
||||
},
|
||||
{
|
||||
'label': i18n("bold"),
|
||||
'name': "bold"
|
||||
},
|
||||
{
|
||||
'label': i18n("black"),
|
||||
'name': "black"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_fontWeight = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.fontWeight) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
fontWeight.currentIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: fontWeight
|
||||
model: general.fontWeightModel
|
||||
text: i18n("Font weight")
|
||||
value: plasmoid.configuration.fontWeight
|
||||
onValueEdited: cfg_fontWeight = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font style")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: fontStyle
|
||||
width: parent.width * 2 / 3
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("normal"),
|
||||
'name': "normal"
|
||||
},
|
||||
{
|
||||
'label': i18n("italic"),
|
||||
'name': "italic"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_fontStyle = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.fontStyle) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
fontStyle.currentIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: fontStyle
|
||||
model: general.fontStyleModel
|
||||
text: i18n("Font style")
|
||||
value: plasmoid.configuration.fontStyle
|
||||
onValueEdited: cfg_fontStyle = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: selectColor
|
||||
width: parent.width * 2 / 3
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.fontColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.fontColor
|
||||
onClicked: colorDialog.visible = true
|
||||
}
|
||||
ColorSelector {
|
||||
id: selectColor
|
||||
text: i18n("Font color")
|
||||
value: plasmoid.configuration.fontColor
|
||||
}
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: colorDialog
|
||||
title: i18n("Select a color")
|
||||
color: selectColor.text
|
||||
onAccepted: selectColor.text = colorDialog.color
|
||||
}
|
||||
|
||||
QtDialogs.FontDialog {
|
||||
id: fontDialog
|
||||
title: i18n("Select a font")
|
||||
signal setFont
|
||||
|
||||
onAccepted: {
|
||||
if (debug) console.debug()
|
||||
selectFont.text = fontDialog.font.family
|
||||
fontSize.value = fontDialog.font.pointSize
|
||||
fontStyle.currentIndex = fontDialog.font.italic ? 1 : 0
|
||||
fontWeight.currentIndex = weight[fontDialog.font.weight]
|
||||
ComboBoxSelector {
|
||||
id: textStyle
|
||||
model: general.textStyleModel
|
||||
text: i18n("Style")
|
||||
value: plasmoid.configuration.textStyle
|
||||
onValueEdited: cfg_textStyle = newValue
|
||||
}
|
||||
onSetFont: {
|
||||
if (debug) console.debug()
|
||||
fontDialog.font = Qt.font({
|
||||
family: selectFont.text,
|
||||
pointSize: fontSize.value > 0 ? fontSize.value : 12,
|
||||
italic: fontStyle.currentIndex == 1,
|
||||
weight: Font.Normal,
|
||||
})
|
||||
|
||||
ColorSelector {
|
||||
id: selectStyleColor
|
||||
text: i18n("Style color")
|
||||
value: plasmoid.configuration.textStyleColor
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,21 +52,10 @@ Item {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
title: i18n("ACPI")
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("ACPI path")
|
||||
}
|
||||
QtControls.TextField {
|
||||
width: parent.width * 3 / 5
|
||||
text: cfg_dataengine["ACPIPATH"]
|
||||
onEditingFinished: cfg_dataengine["ACPIPATH"] = text
|
||||
}
|
||||
LineSelector {
|
||||
text: i18n("ACPI path")
|
||||
value: cfg_dataengine["ACPIPATH"]
|
||||
onValueEdited: cfg_dataengine["ACPIPATH"] = newValue
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,30 +63,28 @@ Item {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
title: i18n("GPU")
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("GPU device")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: gpuDev
|
||||
width: parent.width * 3 / 5
|
||||
model: ["auto", "disable", "ati", "nvidia"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i=0; i<model.length; i++) {
|
||||
if (model[i] == cfg_dataengine["GPUDEV"]) {
|
||||
if (debug) console.info("Found", model[i], "on", i)
|
||||
currentIndex = i
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
model: [
|
||||
{
|
||||
'label': "auto",
|
||||
'name': "auto"
|
||||
},
|
||||
{
|
||||
'label': "disable",
|
||||
'name': "disable"
|
||||
},
|
||||
{
|
||||
'label': "ati",
|
||||
'name': "ati"
|
||||
},
|
||||
{
|
||||
'label': "nvidia",
|
||||
'name': "nvidia"
|
||||
}
|
||||
}
|
||||
]
|
||||
text: i18n("GPU device")
|
||||
value: cfg_dataengine["GPUDEV"]
|
||||
onValueEdited: cfg_dataengine["GPUDEV"] = newValue
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,37 +95,17 @@ Item {
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("HDD")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: hdd
|
||||
width: parent.width * 3 / 5
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: hdd
|
||||
text: i18n("HDD")
|
||||
value: cfg_dataengine["HDDDEV"]
|
||||
onValueEdited: cfg_dataengine["HDDDEV"] = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("hddtemp cmd")
|
||||
}
|
||||
QtControls.TextField {
|
||||
width: parent.width * 3 / 5
|
||||
text: cfg_dataengine["HDDTEMPCMD"]
|
||||
onEditingFinished: cfg_dataengine["HDDTEMPCMD"] = text
|
||||
}
|
||||
LineSelector {
|
||||
text: i18n("hddtemp cmd")
|
||||
value: cfg_dataengine["HDDTEMPCMD"]
|
||||
onValueEdited: cfg_dataengine["HDDTEMPCMD"] = newValue
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -150,107 +117,93 @@ Item {
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Player data symbols")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 1
|
||||
maximumValue: 100
|
||||
stepSize: 1
|
||||
value: cfg_dataengine["PLAYERSYMBOLS"]
|
||||
onEditingFinished: cfg_dataengine["PLAYERSYMBOLS"] = value
|
||||
}
|
||||
IntegerSelector {
|
||||
maximumValue: 100
|
||||
minimumValue: 1
|
||||
stepSize: 1
|
||||
text: i18n("Player data symbols")
|
||||
value: cfg_dataengine["PLAYERSYMBOLS"]
|
||||
onValueEdited: cfg_dataengine["PLAYERSYMBOLS"] = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Music player")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: player
|
||||
width: parent.width * 3 / 5
|
||||
model: ["disable", "mpris", "mpd"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i=0; i<model.length; i++) {
|
||||
if (model[i] == cfg_dataengine["PLAYER"]) {
|
||||
if (debug) console.info("Found", model[i], "on", i)
|
||||
player.currentIndex = i
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
model: [
|
||||
{
|
||||
'label': "disable",
|
||||
'name': "disable"
|
||||
},
|
||||
{
|
||||
'label': "mpris",
|
||||
'name': "mpris"
|
||||
},
|
||||
{
|
||||
'label': "mpd",
|
||||
'name': "mpd"
|
||||
}
|
||||
}
|
||||
]
|
||||
text: i18n("Music player")
|
||||
value: cfg_dataengine["PLAYER"]
|
||||
onValueEdited: cfg_dataengine["PLAYER"] = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("MPRIS player name")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: mpris
|
||||
width: parent.width * 3 / 5
|
||||
editable: true
|
||||
model: ["auto", "amarok", "audacious", "clementine", "deadbeef",
|
||||
"vlc", "qmmp", "xmms2", cfg_dataengine["MPRIS"]]
|
||||
currentIndex: model.length - 1
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: mpris
|
||||
editable: true
|
||||
model: [
|
||||
{
|
||||
'label': 'auto',
|
||||
'name': 'auto'
|
||||
},
|
||||
{
|
||||
'label': 'amarok',
|
||||
'name': 'amarok'
|
||||
},
|
||||
{
|
||||
'label': 'audacious',
|
||||
'name': 'audacious'
|
||||
},
|
||||
{
|
||||
'label': 'clementine',
|
||||
'name': 'clementine'
|
||||
},
|
||||
{
|
||||
'label': 'deadbeef',
|
||||
'name': 'deadbeef'
|
||||
},
|
||||
{
|
||||
'label': 'vlc',
|
||||
'name': 'vlc'
|
||||
},
|
||||
{
|
||||
'label': 'qmmp',
|
||||
'name': 'qmmp'
|
||||
},
|
||||
{
|
||||
'label': 'xmms2',
|
||||
'name': 'xmms2'
|
||||
},
|
||||
{
|
||||
'label': cfg_dataengine["MPRIS"],
|
||||
'name': cfg_dataengine["MPRIS"]
|
||||
}
|
||||
]
|
||||
text: i18n("MPRIS player name")
|
||||
currentIndex: model.length - 1
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("MPD address")
|
||||
}
|
||||
QtControls.TextField {
|
||||
width: parent.width * 3 / 5
|
||||
text: cfg_dataengine["MPDADDRESS"]
|
||||
onEditingFinished: cfg_dataengine["MPDADDRESS"] = text
|
||||
}
|
||||
LineSelector {
|
||||
text: i18n("MPD address")
|
||||
value: cfg_dataengine["MPDADDRESS"]
|
||||
onValueEdited: cfg_dataengine["MPDADDRESS"] = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("MPD port")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 1000
|
||||
maximumValue: 65535
|
||||
stepSize: 1
|
||||
value: cfg_dataengine["MPDPORT"]
|
||||
onEditingFinished: cfg_dataengine["MPDPORT"] = value
|
||||
}
|
||||
IntegerSelector {
|
||||
maximumValue: 65535
|
||||
minimumValue: 1000
|
||||
stepSize: 1
|
||||
text: i18n("MPD port")
|
||||
value: cfg_dataengine["MPDPORT"]
|
||||
onValueEdited: cfg_dataengine["MPDPORT"] = newValue
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -262,72 +215,29 @@ Item {
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Custom scripts")
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Edit scripts")
|
||||
onClicked: awKeys.editItem("extscript")
|
||||
}
|
||||
ButtonSelector {
|
||||
value: i18n("Custom scripts")
|
||||
onButtonActivated: awKeys.editItem("extscript")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Quotes monitor")
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Edit tickers")
|
||||
onClicked: awKeys.editItem("extquotes")
|
||||
}
|
||||
ButtonSelector {
|
||||
value: i18n("Network requests")
|
||||
onButtonActivated: awKeys.editItem("extnetworkrequest")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Package manager")
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Edit command")
|
||||
onClicked: awKeys.editItem("extupgrade")
|
||||
}
|
||||
ButtonSelector {
|
||||
value: i18n("Package manager")
|
||||
onButtonActivated: awKeys.editItem("extupgrade")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Weather")
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Edit weather")
|
||||
onClicked: awKeys.editItem("extweather")
|
||||
}
|
||||
ButtonSelector {
|
||||
value: i18n("Quotes monitor")
|
||||
onButtonActivated: awKeys.editItem("extquotes")
|
||||
}
|
||||
|
||||
ButtonSelector {
|
||||
value: i18n("Weather")
|
||||
onButtonActivated: awKeys.editItem("extweather")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -342,21 +252,13 @@ Item {
|
||||
|
||||
// update hdd model
|
||||
hdd.model = awKeys.getHddDevices()
|
||||
for (var i=0; i<hdd.model.length; i++) {
|
||||
if (hdd.model[i] == cfg_dataengine["HDDDEV"]) {
|
||||
if (debug) console.info("Found", hdd.model[i], "on", i)
|
||||
hdd.currentIndex = i
|
||||
}
|
||||
}
|
||||
hdd.onCompleted
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
if (debug) console.debug()
|
||||
|
||||
cfg_dataengine["GPUDEV"] = gpuDev.currentText
|
||||
cfg_dataengine["HDDDEV"] = hdd.currentText
|
||||
cfg_dataengine["PLAYER"] = player.currentText
|
||||
cfg_dataengine["MPRIS"] = mpris.currentText
|
||||
cfg_dataengine["MPRIS"] = mpris.editText
|
||||
awConfig.writeDataEngineConfiguration(cfg_dataengine)
|
||||
}
|
||||
}
|
||||
|
@ -104,6 +104,9 @@ Item {
|
||||
font.pointSize: plasmoid.configuration.fontSize
|
||||
font.weight: general.fontWeight[plasmoid.configuration.fontWeight]
|
||||
|
||||
style: general.textStyle[plasmoid.configuration.textStyle]
|
||||
styleColor: plasmoid.configuration.textStyleColor
|
||||
|
||||
PlasmaCore.ToolTipArea {
|
||||
height: tooltip.height
|
||||
width: tooltip.width
|
||||
@ -207,7 +210,13 @@ Item {
|
||||
awKeys.setAggregatorProperty("customUptime", plasmoid.configuration.customUptime)
|
||||
awKeys.setAggregatorProperty("tempUnits", plasmoid.configuration.tempUnits)
|
||||
awKeys.setAggregatorProperty("translate", plasmoid.configuration.translateStrings)
|
||||
// update telemetry ID
|
||||
if (plasmoid.configuration.telemetryId.length == 0)
|
||||
plasmoid.configuration.telemetryId = generateUuid()
|
||||
// save telemetry
|
||||
awTelemetryHandler.init(plasmoid.configuration.telemetryCount,
|
||||
plasmoid.configuration.telemetryRemote,
|
||||
plasmoid.configuration.telemetryId)
|
||||
if (awTelemetryHandler.put("awwidgetconfig", plasmoid.configuration.text))
|
||||
awTelemetryHandler.uploadTelemetry("awwidgetconfig", plasmoid.configuration.text)
|
||||
}
|
||||
@ -238,4 +247,12 @@ Item {
|
||||
tagSelectorBox.model = awKeys.dictKeys(true)
|
||||
return tagSelector.open()
|
||||
}
|
||||
|
||||
// code from http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
|
||||
function generateUuid() {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,2 +1,27 @@
|
||||
singleton general 1.0 general.qml
|
||||
BugReport ./BugReport.qml
|
||||
# Do not edit qmldir directly it will be overrided during compilation,
|
||||
# edit qml/qmldir.in file instead.
|
||||
|
||||
|
||||
# common QML constants
|
||||
singleton general 1.0 file:///usr/share/awesomewidgets/qml/general.qml
|
||||
|
||||
# custom QML UI classes
|
||||
AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml
|
||||
AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml
|
||||
AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml
|
||||
AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml
|
||||
AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml
|
||||
BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml
|
||||
ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml
|
||||
CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml
|
||||
ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml
|
||||
ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml
|
||||
ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml
|
||||
FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml
|
||||
HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml
|
||||
HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml
|
||||
HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml
|
||||
HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml
|
||||
ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml
|
||||
IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml
|
||||
LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml
|
||||
|
@ -17,8 +17,6 @@
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Controls.Styles 1.3 as QtStyles
|
||||
import QtQuick.Dialogs 1.1 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.awesomewidget 1.0
|
||||
|
||||
@ -39,21 +37,21 @@ Item {
|
||||
|
||||
property alias cfg_tooltipNumber: tooltipNumber.value
|
||||
property alias cfg_useTooltipBackground: useTooltipBackground.checked
|
||||
property alias cfg_tooltipBackground: tooltipBackground.text
|
||||
property alias cfg_tooltipBackground: tooltipBackground.value
|
||||
property alias cfg_cpuTooltip: cpuTooltip.checked
|
||||
property alias cfg_cpuTooltipColor: cpuTooltipColor.text
|
||||
property alias cfg_cpuTooltipColor: cpuTooltipColor.value
|
||||
property alias cfg_cpuclTooltip: cpuclTooltip.checked
|
||||
property alias cfg_cpuclTooltipColor: cpuclTooltipColor.text
|
||||
property alias cfg_cpuclTooltipColor: cpuclTooltipColor.value
|
||||
property alias cfg_memTooltip: memTooltip.checked
|
||||
property alias cfg_memTooltipColor: memTooltipColor.text
|
||||
property alias cfg_memTooltipColor: memTooltipColor.value
|
||||
property alias cfg_swapTooltip: swapTooltip.checked
|
||||
property alias cfg_swapTooltipColor: swapTooltipColor.text
|
||||
property alias cfg_swapTooltipColor: swapTooltipColor.value
|
||||
property alias cfg_downkbTooltip: downkbTooltip.checked
|
||||
property alias cfg_downkbTooltipColor: downkbTooltipColor.text
|
||||
property alias cfg_upkbTooltipColor: upkbTooltipColor.text
|
||||
property alias cfg_downkbTooltipColor: downkbTooltipColor.value
|
||||
property alias cfg_upkbTooltipColor: upkbTooltipColor.value
|
||||
property alias cfg_batTooltip: batTooltip.checked
|
||||
property alias cfg_batTooltipColor: batTooltipColor.text
|
||||
property alias cfg_batInTooltipColor: batInTooltipColor.text
|
||||
property alias cfg_batTooltipColor: batTooltipColor.value
|
||||
property alias cfg_batInTooltipColor: batInTooltipColor.value
|
||||
|
||||
|
||||
Column {
|
||||
@ -67,24 +65,13 @@ Item {
|
||||
text: i18n("CPU, CPU clock, memory, swap and network labels support graphical tooltip. To enable them just make needed checkbox checked.")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Number of values for tooltips")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: tooltipNumber
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 50
|
||||
maximumValue: 1000
|
||||
stepSize: 25
|
||||
value: plasmoid.configuration.tooltipNumber
|
||||
}
|
||||
IntegerSelector {
|
||||
id: tooltipNumber
|
||||
maximumValue: 1000
|
||||
minimumValue: 50
|
||||
stepSize: 25
|
||||
text: i18n("Number of values for tooltips")
|
||||
value: plasmoid.configuration.tooltipNumber
|
||||
}
|
||||
|
||||
QtControls.GroupBox {
|
||||
@ -93,34 +80,10 @@ Item {
|
||||
width: parent.width
|
||||
checkable: true
|
||||
title: i18n("Background")
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Background color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: tooltipBackground
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.tooltipBackground
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.tooltipBackground
|
||||
onClicked: tooltipBackgroundDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: tooltipBackgroundDialog
|
||||
title: i18n("Select a color")
|
||||
color: tooltipBackground.text
|
||||
onAccepted: tooltipBackground.text = tooltipBackgroundDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: tooltipBackground
|
||||
text: i18n("Background color")
|
||||
value: plasmoid.configuration.tooltipBackground
|
||||
}
|
||||
}
|
||||
|
||||
@ -130,34 +93,10 @@ Item {
|
||||
width: parent.width
|
||||
checkable: true
|
||||
title: i18n("CPU")
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("CPU color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: cpuTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.cpuTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.cpuTooltipColor
|
||||
onClicked: cpuTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: cpuTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: cpuTooltipColor.text
|
||||
onAccepted: cpuTooltipColor.text = cpuTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: cpuTooltipColor
|
||||
text: i18n("CPU color")
|
||||
value: plasmoid.configuration.cpuTooltipColor
|
||||
}
|
||||
}
|
||||
|
||||
@ -167,34 +106,10 @@ Item {
|
||||
width: parent.width
|
||||
checkable: true
|
||||
title: i18n("CPU clock")
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("CPU clock color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: cpuclTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.cpuclTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.cpuclTooltipColor
|
||||
onClicked: cpuclTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: cpuclTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: cpuclTooltipColor.text
|
||||
onAccepted: cpuclTooltipColor.text = cpuclTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: cpuclTooltipColor
|
||||
text: i18n("CPU clock color")
|
||||
value: plasmoid.configuration.cpuclTooltipColor
|
||||
}
|
||||
}
|
||||
|
||||
@ -204,34 +119,10 @@ Item {
|
||||
width: parent.width
|
||||
checkable: true
|
||||
title: i18n("Memory")
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Memory color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: memTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.memTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.memTooltipColor
|
||||
onClicked: memTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: memTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: memTooltipColor.text
|
||||
onAccepted: memTooltipColor.text = memTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: memTooltipColor
|
||||
text: i18n("Memory color")
|
||||
value: plasmoid.configuration.memTooltipColor
|
||||
}
|
||||
}
|
||||
|
||||
@ -241,34 +132,10 @@ Item {
|
||||
width: parent.width
|
||||
checkable: true
|
||||
title: i18n("Swap")
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Swap color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: swapTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.swapTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.swapTooltipColor
|
||||
onClicked: swapTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: swapTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: swapTooltipColor.text
|
||||
onAccepted: swapTooltipColor.text = swapTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: swapTooltipColor
|
||||
text: i18n("Swap color")
|
||||
value: plasmoid.configuration.swapTooltipColor
|
||||
}
|
||||
}
|
||||
|
||||
@ -281,63 +148,15 @@ Item {
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Download speed color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: downkbTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.downkbTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.downkbTooltipColor
|
||||
onClicked: downkbTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: downkbTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: downkbTooltipColor.text
|
||||
onAccepted: downkbTooltipColor.text = downkbTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: downkbTooltipColor
|
||||
text: i18n("Download speed color")
|
||||
value: plasmoid.configuration.downkbTooltipColor
|
||||
}
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Upload speed color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: upkbTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.upkbTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.upkbTooltipColor
|
||||
onClicked: upkbTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: upkbTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: upkbTooltipColor.text
|
||||
onAccepted: upkbTooltipColor.text = upkbTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: upkbTooltipColor
|
||||
text: i18n("Upload speed color")
|
||||
value: plasmoid.configuration.upkbTooltipColor
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -351,63 +170,15 @@ Item {
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Battery active color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: batTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.batTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.batTooltipColor
|
||||
onClicked: batTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: batTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: batTooltipColor.text
|
||||
onAccepted: batTooltipColor.text = batTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: batTooltipColor
|
||||
text: i18n("Battery active color")
|
||||
value: plasmoid.configuration.batTooltipColor
|
||||
}
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Battery inactive color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: batInTooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.batInTooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.batInTooltipColor
|
||||
onClicked: batInTooltipColorDialog.visible = true
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: batInTooltipColorDialog
|
||||
title: i18n("Select a color")
|
||||
color: batInTooltipColor.text
|
||||
onAccepted: batInTooltipColor.text = batInTooltipColorDialog.color
|
||||
}
|
||||
ColorSelector {
|
||||
id: batInTooltipColor
|
||||
text: i18n("Battery inactive color")
|
||||
value: plasmoid.configuration.batInTooltipColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,10 +16,9 @@
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Dialogs 1.2 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.awesomewidget 1.0
|
||||
import "."
|
||||
|
||||
|
||||
Item {
|
||||
@ -31,12 +30,6 @@ Item {
|
||||
AWActions {
|
||||
id: awActions
|
||||
}
|
||||
AWFormatterConfigFactory {
|
||||
id: awFormatter
|
||||
}
|
||||
AWTelemetryHandler {
|
||||
id: awTelemetryHandler
|
||||
}
|
||||
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
@ -54,329 +47,33 @@ Item {
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
QtControls.Label {
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.WordWrap
|
||||
text: i18n("Detailed information may be found on <a href=\"https://arcanis.me/projects/awesome-widgets/\">project homepage</a>")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
|
||||
AWInfoLabel {}
|
||||
|
||||
HtmlDefaultFunctionsBar {
|
||||
textArea: textPattern
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 15
|
||||
text: i18n("Bgcolor")
|
||||
|
||||
onClicked: backgroundDialog.visible = true
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: backgroundDialog
|
||||
title: i18n("Select a color")
|
||||
onAccepted: {
|
||||
var text = textPattern.text
|
||||
textPattern.text = "<body bgcolor=\"" +
|
||||
backgroundDialog.color + "\">" +
|
||||
text + "</body>"
|
||||
}
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 15
|
||||
text: i18n("Font")
|
||||
iconName: "font"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Font button")
|
||||
var defaultFont = {
|
||||
"color": plasmoid.configuration.fontColor,
|
||||
"family": plasmoid.configuration.fontFamily,
|
||||
"size": plasmoid.configuration.fontSize
|
||||
}
|
||||
var font = awActions.getFont(defaultFont)
|
||||
if (font.applied != 1) {
|
||||
if (debug) console.debug("No font selected")
|
||||
return
|
||||
}
|
||||
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition,
|
||||
"<span style=\"color:" + font.color +
|
||||
"; font-family:'" + font.family +
|
||||
"'; font-size:" + font.size + "pt;\">" +
|
||||
selected + "</span>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-indent-more"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Indent button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, selected + "<br>\n")
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-bold"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Bold button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<b>" + selected + "</b>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-italic"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Italic button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<i>" + selected + "</i>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-underline"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Underline button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<u>" + selected + "</u>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-strikethrough"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Strike button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<s>" + selected + "</s>")
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-left"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Left button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"left\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-center"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Center button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"center\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-right"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Right button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"right\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-fill"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Justify button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"justify\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
AWTagSelector {
|
||||
backend: awKeys
|
||||
notifyBackend: awActions
|
||||
textArea: textPattern
|
||||
groups: general.awTagRegexp
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.ComboBox {
|
||||
width: parent.width * 2 / 5
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("AC"),
|
||||
'regexp': "^(ac|bat).*"
|
||||
},
|
||||
{
|
||||
'label': i18n("Bars"),
|
||||
'regexp': "^bar.*"
|
||||
},
|
||||
{
|
||||
'label': i18n("CPU"),
|
||||
'regexp': "^(cpu|gpu|la|ps|temp(?!erature)).*"
|
||||
},
|
||||
{
|
||||
'label': i18n("Desktops"),
|
||||
'regexp': "^(n|t)?desktop(s)?"
|
||||
},
|
||||
{
|
||||
'label': i18n("HDD"),
|
||||
'regexp': "^hdd.*"
|
||||
},
|
||||
{
|
||||
'label': i18n("Memory"),
|
||||
'regexp': "^(mem|swap).*"
|
||||
},
|
||||
{
|
||||
'label': i18n("Network"),
|
||||
'regexp': "^(netdev|(down|up(?!time)).*)"
|
||||
},
|
||||
{
|
||||
'label': i18n("Music player"),
|
||||
'regexp': "(^|d|s)(album|artist|duration|progress|title)"
|
||||
},
|
||||
{
|
||||
'label': i18n("Scripts"),
|
||||
'regexp': "^custom.*"
|
||||
},
|
||||
{
|
||||
'label': i18n("Time"),
|
||||
'regexp': ".*time$"
|
||||
},
|
||||
{
|
||||
'label': i18n("Quotes"),
|
||||
'regexp': "^(perc)?(ask|bid|price)(chg)?.*"
|
||||
},
|
||||
{
|
||||
'label': i18n("Upgrades"),
|
||||
'regexp': "^pkgcount.*"
|
||||
},
|
||||
{
|
||||
'label': i18n("Weathers"),
|
||||
'regexp': "^(weather(Id)?|humidity|pressure|temperature|timestamp)"
|
||||
},
|
||||
{
|
||||
'label': i18n("Functions"),
|
||||
'regexp': "functions"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: {
|
||||
if (debug) console.debug()
|
||||
if (model[currentIndex]["regexp"] == "functions")
|
||||
tags.model = ["{{\n\n}}", "template{{\n\n}}",
|
||||
"aw_all<>{{}}", "aw_count<>{{}}", "aw_keys<>{{}}",
|
||||
"aw_macro<>{{}}", "aw_names<>{{}}"]
|
||||
else
|
||||
tags.model = awKeys.dictKeys(true, model[currentIndex]["regexp"])
|
||||
if (debug) console.info("Init model", tags.model, "for", model[currentIndex]["label"])
|
||||
tags.currentIndex = -1
|
||||
}
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: tags
|
||||
width: parent.width * 1 / 5
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 1 / 5
|
||||
text: i18n("Add")
|
||||
|
||||
onClicked: {
|
||||
if (!tags.currentText) return
|
||||
if (debug) console.debug("Add tag button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, selected + "$" + tags.currentText)
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 1 / 5
|
||||
text: i18n("Show value")
|
||||
|
||||
onClicked: {
|
||||
if (!tags.currentText) return
|
||||
if (debug) console.debug("Show tag button")
|
||||
var message = i18n("Tag: %1", tags.currentText)
|
||||
message += "<br>"
|
||||
message += i18n("Value: %1", awKeys.valueByKey(tags.currentText))
|
||||
message += "<br>"
|
||||
message += i18n("Info: %1", awKeys.infoByKey(tags.currentText))
|
||||
awActions.sendNotification("tag", message)
|
||||
}
|
||||
}
|
||||
AWExtensions {
|
||||
id: extensions
|
||||
backend: awKeys
|
||||
textArea: textPattern
|
||||
onUnlock: lock = false
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 10
|
||||
text: i18n("Edit bars")
|
||||
onClicked: awKeys.editItem("graphicalitem")
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 10
|
||||
text: i18n("Formatters")
|
||||
onClicked: awFormatter.showDialog(awKeys.dictKeys(true))
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 5 / 15
|
||||
text: i18n("Preview")
|
||||
onClicked: {
|
||||
lock = false
|
||||
awKeys.initKeys(textPattern.text, plasmoid.configuration.interval,
|
||||
plasmoid.configuration.queueLimit, false)
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "view-history"
|
||||
menu: QtControls.Menu {
|
||||
id: historyConfig
|
||||
Instantiator {
|
||||
model: awTelemetryHandler.get("awwidgetconfig")
|
||||
QtControls.MenuItem {
|
||||
text: modelData
|
||||
onTriggered: textPattern.text = modelData
|
||||
}
|
||||
onObjectAdded: historyConfig.insertItem(index, object)
|
||||
onObjectRemoved: historyConfig.removeItem(object)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.TextArea {
|
||||
AWTextEditor {
|
||||
id: textPattern
|
||||
width: parent.width
|
||||
height: parent.height * 4 / 5
|
||||
textFormat: TextEdit.PlainText
|
||||
text: plasmoid.configuration.text
|
||||
backend: awKeys
|
||||
}
|
||||
}
|
||||
|
||||
QtDialogs.MessageDialog {
|
||||
id: compiledText
|
||||
modality: Qt.NonModal
|
||||
title: i18n("Preview")
|
||||
}
|
||||
|
||||
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
@ -397,8 +94,7 @@ Item {
|
||||
if (lock) return
|
||||
if (debug) console.debug()
|
||||
|
||||
compiledText.text = newText.replace(/ /g, " ")
|
||||
compiledText.open()
|
||||
extensions.showMessage(newText)
|
||||
lock = true
|
||||
}
|
||||
}
|
||||
|
@ -21,13 +21,16 @@
|
||||
#include "awdebug.h"
|
||||
|
||||
|
||||
AWAbstractSelector::AWAbstractSelector(QWidget *parent)
|
||||
AWAbstractSelector::AWAbstractSelector(QWidget *parent,
|
||||
const QPair<bool, bool> editable)
|
||||
: QWidget(parent)
|
||||
, ui(new Ui::AWAbstractSelector)
|
||||
{
|
||||
qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
|
||||
|
||||
ui->setupUi(this);
|
||||
ui->comboBox_key->setEditable(editable.first);
|
||||
ui->comboBox_value->setEditable(editable.second);
|
||||
|
||||
connect(ui->comboBox_key, SIGNAL(currentIndexChanged(int)), this,
|
||||
SIGNAL(selectionChanged()));
|
||||
|
@ -32,7 +32,9 @@ class AWAbstractSelector : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit AWAbstractSelector(QWidget *parent = nullptr);
|
||||
explicit AWAbstractSelector(QWidget *parent = nullptr,
|
||||
const QPair<bool, bool> editable
|
||||
= {false, false});
|
||||
virtual ~AWAbstractSelector();
|
||||
QPair<QString, QString> current() const;
|
||||
void init(const QStringList keys, const QStringList values,
|
||||
|
@ -118,66 +118,7 @@ QString AWActions::getAboutText(const QString type) const
|
||||
{
|
||||
qCDebug(LOG_AW) << "Type" << type;
|
||||
|
||||
QString text;
|
||||
if (type == QString("header")) {
|
||||
text = QString(NAME);
|
||||
} else if (type == QString("version")) {
|
||||
text = i18n("Version %1 (build date %2)", QString(VERSION),
|
||||
QString(BUILD_DATE));
|
||||
if (!QString(COMMIT_SHA).isEmpty())
|
||||
text += QString(" (%1)").arg(QString(COMMIT_SHA));
|
||||
} else if (type == QString("description")) {
|
||||
text = i18n("A set of minimalistic plasmoid widgets");
|
||||
} else if (type == QString("links")) {
|
||||
text = i18n("Links:") + QString("<br>")
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(HOMEPAGE))
|
||||
.arg(i18n("Homepage"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(REPOSITORY))
|
||||
.arg(i18n("Repository"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(BUGTRACKER))
|
||||
.arg(i18n("Bugtracker"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(TRANSLATION))
|
||||
.arg(i18n("Translation issue"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(AUR_PACKAGES))
|
||||
.arg(i18n("AUR packages"))
|
||||
+ QString("<a href=\"%1\">%2</a>")
|
||||
.arg(QString(OPENSUSE_PACKAGES))
|
||||
.arg(i18n("openSUSE packages"));
|
||||
} else if (type == QString("copy")) {
|
||||
text = QString("<small>© %1 <a href=\"mailto:%2\">%3</a><br>")
|
||||
.arg(QString(DATE))
|
||||
.arg(QString(EMAIL))
|
||||
.arg(QString(AUTHOR))
|
||||
+ i18n("This software is licensed under %1", QString(LICENSE))
|
||||
+ QString("</small>");
|
||||
} else if (type == QString("translators")) {
|
||||
text = i18n("Translators: %1", QString(TRANSLATORS));
|
||||
} else if (type == QString("3rdparty")) {
|
||||
QStringList trdPartyList
|
||||
= QString(TRDPARTY_LICENSE)
|
||||
.split(QChar(';'), QString::SkipEmptyParts);
|
||||
for (int i = 0; i < trdPartyList.count(); i++)
|
||||
trdPartyList[i] = QString("<a href=\"%3\">%1</a> (%2 license)")
|
||||
.arg(trdPartyList.at(i).split(QChar(','))[0])
|
||||
.arg(trdPartyList.at(i).split(QChar(','))[1])
|
||||
.arg(trdPartyList.at(i).split(QChar(','))[2]);
|
||||
text = i18n("This software uses: %1", trdPartyList.join(QString(", ")));
|
||||
} else if (type == QString("thanks")) {
|
||||
QStringList thanks = QString(SPECIAL_THANKS)
|
||||
.split(QChar(';'), QString::SkipEmptyParts);
|
||||
for (int i = 0; i < thanks.count(); i++)
|
||||
thanks[i] = QString("<a href=\"%2\">%1</a>")
|
||||
.arg(thanks.at(i).split(QChar(','))[0])
|
||||
.arg(thanks.at(i).split(QChar(','))[1]);
|
||||
text = i18n("Special thanks to %1", thanks.join(QString(", ")));
|
||||
}
|
||||
|
||||
return text;
|
||||
return AWDebug::getAboutText(type);
|
||||
}
|
||||
|
||||
|
||||
|
@ -66,7 +66,7 @@ QString AWBugReporter::generateText(const QString description,
|
||||
output += QString("**Step to reproduce**\n\n%1\n\n").arg(reproduce);
|
||||
output += QString("**Expected result**\n\n%1\n\n").arg(expected);
|
||||
output += QString("**Version**\n\n%1\n\n")
|
||||
.arg(getBuildData().join(QString("\n")));
|
||||
.arg(AWDebug::getBuildData().join(QString("\n")));
|
||||
// append logs
|
||||
output += QString("**Logs**\n\n%1").arg(logs);
|
||||
|
||||
@ -83,7 +83,7 @@ void AWBugReporter::sendBugReport(const QString title, const QString body)
|
||||
connect(manager, SIGNAL(finished(QNetworkReply *)), this,
|
||||
SLOT(issueReplyRecieved(QNetworkReply *)));
|
||||
|
||||
QNetworkRequest request(QUrl(BUGTRACKER_API));
|
||||
QNetworkRequest request = QNetworkRequest(QUrl(BUGTRACKER_API));
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
|
||||
// generate payload
|
||||
|
@ -69,13 +69,12 @@ bool AWConfigHelper::dropCache() const
|
||||
}
|
||||
|
||||
|
||||
bool AWConfigHelper::exportConfiguration(const QObject *nativeConfig,
|
||||
bool AWConfigHelper::exportConfiguration(QObject *nativeConfig,
|
||||
const QString fileName) const
|
||||
{
|
||||
qCDebug(LOG_AW) << "Selected filename" << fileName;
|
||||
|
||||
QSettings settings(fileName, QSettings::IniFormat);
|
||||
|
||||
// plasmoid configuration
|
||||
const QQmlPropertyMap *configuration
|
||||
= static_cast<const QQmlPropertyMap *>(nativeConfig);
|
||||
|
@ -35,7 +35,7 @@ public:
|
||||
virtual ~AWConfigHelper();
|
||||
Q_INVOKABLE QString configurationDirectory() const;
|
||||
Q_INVOKABLE bool dropCache() const;
|
||||
Q_INVOKABLE bool exportConfiguration(const QObject *nativeConfig,
|
||||
Q_INVOKABLE bool exportConfiguration(QObject *nativeConfig,
|
||||
const QString fileName) const;
|
||||
Q_INVOKABLE QVariantMap importConfiguration(const QString fileName,
|
||||
const bool importPlasmoid,
|
||||
|
@ -143,9 +143,9 @@ QPixmap AWDataAggregator::tooltipImage()
|
||||
for (int j = 0; j < m_values[key].count() - 1; j++) {
|
||||
// some magic here
|
||||
float x1 = j * normX + shift;
|
||||
float y1 = -fabs(m_values[key].at(j)) * normY + 5.0f;
|
||||
float y1 = -std::fabs(m_values[key].at(j)) * normY + 5.0f;
|
||||
float x2 = (j + 1) * normX + shift;
|
||||
float y2 = -fabs(m_values[key].at(j + 1)) * normY + 5.0f;
|
||||
float y2 = -std::fabs(m_values[key].at(j + 1)) * normY + 5.0f;
|
||||
if (key == QString("batTooltip")) {
|
||||
if (m_values[key].at(j + 1) > 0)
|
||||
pen.setColor(
|
||||
|
92
sources/awesome-widget/plugin/awdbusadaptor.cpp
Normal file
92
sources/awesome-widget/plugin/awdbusadaptor.cpp
Normal file
@ -0,0 +1,92 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
#include "awdbusadaptor.h"
|
||||
|
||||
#include "awdebug.h"
|
||||
#include "awkeys.h"
|
||||
|
||||
|
||||
AWDBusAdaptor::AWDBusAdaptor(AWKeys *parent)
|
||||
: QDBusAbstractAdaptor(parent)
|
||||
, m_plugin(parent)
|
||||
{
|
||||
qCDebug(LOG_DBUS) << __PRETTY_FUNCTION__;
|
||||
}
|
||||
|
||||
|
||||
AWDBusAdaptor::~AWDBusAdaptor()
|
||||
{
|
||||
qCDebug(LOG_DBUS) << __PRETTY_FUNCTION__;
|
||||
}
|
||||
|
||||
|
||||
QString AWDBusAdaptor::Info(const QString key) const
|
||||
{
|
||||
return m_plugin->infoByKey(key);
|
||||
}
|
||||
|
||||
|
||||
QStringList AWDBusAdaptor::Keys(const QString regexp) const
|
||||
{
|
||||
return m_plugin->dictKeys(true, regexp);
|
||||
}
|
||||
|
||||
|
||||
QString AWDBusAdaptor::Value(const QString key) const
|
||||
{
|
||||
return m_plugin->valueByKey(key);
|
||||
}
|
||||
|
||||
|
||||
qlonglong AWDBusAdaptor::WhoAmI() const
|
||||
{
|
||||
return reinterpret_cast<qlonglong>(m_plugin);
|
||||
}
|
||||
|
||||
|
||||
void AWDBusAdaptor::SetLogLevel(const QString what, const int level)
|
||||
{
|
||||
qCDebug(LOG_DBUS) << "Set log level" << level << "for" << what;
|
||||
|
||||
if (level >= m_logLevels.count()) {
|
||||
qCDebug(LOG_DBUS) << "Invalid logging level" << level
|
||||
<< "should be less than" << m_logLevels.count();
|
||||
return;
|
||||
}
|
||||
|
||||
for (auto lev : m_logLevels)
|
||||
SetLogLevel(what, lev, m_logLevels.indexOf(lev) >= level);
|
||||
}
|
||||
|
||||
|
||||
void AWDBusAdaptor::SetLogLevel(const QString what, const QString level,
|
||||
const bool enabled)
|
||||
{
|
||||
qCDebug(LOG_DBUS) << "Set log level" << level << "enabled" << enabled
|
||||
<< "for" << what;
|
||||
|
||||
if (!m_logLevels.contains(level)) {
|
||||
qCDebug(LOG_DBUS) << "Invalid logging level" << level << "should be in"
|
||||
<< m_logLevels;
|
||||
return;
|
||||
}
|
||||
|
||||
QString state = enabled ? QString("true") : QString("false");
|
||||
QLoggingCategory::setFilterRules(
|
||||
QString("%1.%2=%3").arg(what).arg(level).arg(state));
|
||||
}
|
57
sources/awesome-widget/plugin/awdbusadaptor.h
Normal file
57
sources/awesome-widget/plugin/awdbusadaptor.h
Normal file
@ -0,0 +1,57 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef AWDBUSADAPTOR_H
|
||||
#define AWDBUSADAPTOR_H
|
||||
|
||||
#include <QDBusAbstractAdaptor>
|
||||
|
||||
#include "version.h"
|
||||
|
||||
|
||||
class AWKeys;
|
||||
|
||||
class AWDBusAdaptor : public QDBusAbstractAdaptor
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("D-Bus Interface", AWDBUS_SERVICE_NAME)
|
||||
|
||||
public:
|
||||
explicit AWDBusAdaptor(AWKeys *parent = nullptr);
|
||||
virtual ~AWDBusAdaptor();
|
||||
|
||||
public slots:
|
||||
// get methods
|
||||
QString Info(const QString key) const;
|
||||
QStringList Keys(const QString regexp) const;
|
||||
QString Value(const QString key) const;
|
||||
qlonglong WhoAmI() const;
|
||||
// set methods
|
||||
void SetLogLevel(const QString what, const int level);
|
||||
void SetLogLevel(const QString what, const QString level,
|
||||
const bool enabled);
|
||||
|
||||
private:
|
||||
AWKeys *m_plugin = nullptr;
|
||||
QStringList m_logLevels = QStringList()
|
||||
<< QString("debug") << QString("info")
|
||||
<< QString("warning") << QString("critical");
|
||||
};
|
||||
|
||||
|
||||
#endif /* AWDBUSADAPTOR_H */
|
@ -80,12 +80,14 @@ void AWFormatterConfig::updateUi()
|
||||
= m_selectors.indexOf(static_cast<AWAbstractSelector *>(sender()));
|
||||
|
||||
if ((current.first.isEmpty()) && (current.second.isEmpty())) {
|
||||
// remove current selector if it is empty and does not last
|
||||
if (sender() == m_selectors.last())
|
||||
return;
|
||||
AWAbstractSelector *selector = m_selectors.takeAt(index);
|
||||
ui->verticalLayout->removeWidget(selector);
|
||||
selector->deleteLater();
|
||||
} else {
|
||||
// add new selector if something changed
|
||||
if (sender() != m_selectors.last())
|
||||
return;
|
||||
auto keys = initKeys();
|
||||
@ -140,7 +142,7 @@ void AWFormatterConfig::execDialog()
|
||||
case 1:
|
||||
default:
|
||||
m_helper->writeFormatters(data);
|
||||
m_helper->writeFormatters(data.keys());
|
||||
m_helper->removeUnusedFormatters(data.keys());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "awdatetimeformatter.h"
|
||||
#include "awdebug.h"
|
||||
#include "awfloatformatter.h"
|
||||
#include "awjsonformatter.h"
|
||||
#include "awlistformatter.h"
|
||||
#include "awnoformatter.h"
|
||||
#include "awscriptformatter.h"
|
||||
@ -37,6 +38,7 @@ AWFormatterHelper::AWFormatterHelper(QWidget *parent)
|
||||
{
|
||||
qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
|
||||
|
||||
m_filePath = QString("awesomewidgets/formatters/formatters.ini");
|
||||
initItems();
|
||||
}
|
||||
|
||||
@ -92,13 +94,14 @@ QStringList AWFormatterHelper::knownFormatters() const
|
||||
}
|
||||
|
||||
|
||||
bool AWFormatterHelper::writeFormatters(const QStringList keys) const
|
||||
bool AWFormatterHelper::removeUnusedFormatters(const QStringList keys) const
|
||||
{
|
||||
qCDebug(LOG_AW) << "Remove formatters" << keys;
|
||||
|
||||
QString fileName = QString("%1/awesomewidgets/formatters/formatters.ini")
|
||||
QString fileName = QString("%1/%2")
|
||||
.arg(QStandardPaths::writableLocation(
|
||||
QStandardPaths::GenericDataLocation));
|
||||
QStandardPaths::GenericDataLocation))
|
||||
.arg(m_filePath);
|
||||
QSettings settings(fileName, QSettings::IniFormat);
|
||||
qCInfo(LOG_AW) << "Configuration file" << fileName;
|
||||
|
||||
@ -122,9 +125,10 @@ bool AWFormatterHelper::writeFormatters(
|
||||
{
|
||||
qCDebug(LOG_AW) << "Write configuration" << configuration;
|
||||
|
||||
QString fileName = QString("%1/awesomewidgets/formatters/formatters.ini")
|
||||
QString fileName = QString("%1/%2")
|
||||
.arg(QStandardPaths::writableLocation(
|
||||
QStandardPaths::GenericDataLocation));
|
||||
QStandardPaths::GenericDataLocation))
|
||||
.arg(m_filePath);
|
||||
QSettings settings(fileName, QSettings::IniFormat);
|
||||
qCInfo(LOG_AW) << "Configuration file" << fileName;
|
||||
|
||||
@ -166,6 +170,8 @@ AWFormatterHelper::defineFormatterClass(const QString stringType) const
|
||||
formatter = AWAbstractFormatter::FormatterClass::Script;
|
||||
else if (stringType == QString("String"))
|
||||
formatter = AWAbstractFormatter::FormatterClass::String;
|
||||
else if (stringType == QString("Json"))
|
||||
formatter = AWAbstractFormatter::FormatterClass::Json;
|
||||
else
|
||||
qCWarning(LOG_AW) << "Unknown formatter" << stringType;
|
||||
|
||||
@ -213,6 +219,9 @@ void AWFormatterHelper::initFormatters()
|
||||
m_formattersClasses[name]
|
||||
= new AWStringFormatter(this, filePath);
|
||||
break;
|
||||
case AWAbstractFormatter::FormatterClass::Json:
|
||||
m_formattersClasses[name] = new AWJsonFormatter(this, filePath);
|
||||
break;
|
||||
case AWAbstractFormatter::FormatterClass::NoFormat:
|
||||
m_formattersClasses[name] = new AWNoFormatter(this, filePath);
|
||||
break;
|
||||
@ -227,8 +236,7 @@ void AWFormatterHelper::initKeys()
|
||||
m_formatters.clear();
|
||||
|
||||
QStringList configs = QStandardPaths::locateAll(
|
||||
QStandardPaths::GenericDataLocation,
|
||||
QString("awesomewidgets/formatters/formatters.ini"));
|
||||
QStandardPaths::GenericDataLocation, m_filePath);
|
||||
|
||||
for (auto fileName : configs) {
|
||||
QSettings settings(fileName, QSettings::IniFormat);
|
||||
@ -245,8 +253,8 @@ void AWFormatterHelper::initKeys()
|
||||
continue;
|
||||
}
|
||||
if (!m_formattersClasses.contains(name)) {
|
||||
qCWarning(LOG_AW) << "Invalid formatter" << name << "found in"
|
||||
<< key;
|
||||
qCWarning(LOG_AW)
|
||||
<< "Invalid formatter" << name << "found in" << key;
|
||||
continue;
|
||||
}
|
||||
m_formatters[key] = m_formattersClasses[name];
|
||||
@ -294,7 +302,8 @@ void AWFormatterHelper::doCreateItem()
|
||||
QStringList selection = QStringList()
|
||||
<< QString("NoFormat") << QString("DateTime")
|
||||
<< QString("Float") << QString("List")
|
||||
<< QString("Script") << QString("String");
|
||||
<< QString("Script") << QString("String")
|
||||
<< QString("Json");
|
||||
bool ok;
|
||||
QString select = QInputDialog::getItem(
|
||||
this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok);
|
||||
@ -317,6 +326,8 @@ void AWFormatterHelper::doCreateItem()
|
||||
return createItem<AWScriptFormatter>();
|
||||
case AWAbstractFormatter::FormatterClass::String:
|
||||
return createItem<AWStringFormatter>();
|
||||
case AWAbstractFormatter::FormatterClass::Json:
|
||||
return createItem<AWJsonFormatter>();
|
||||
case AWAbstractFormatter::FormatterClass::NoFormat:
|
||||
return createItem<AWNoFormatter>();
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public:
|
||||
QHash<QString, QString> getFormatters() const;
|
||||
QList<AbstractExtItem *> items() const;
|
||||
QStringList knownFormatters() const;
|
||||
bool writeFormatters(const QStringList keys) const;
|
||||
bool removeUnusedFormatters(const QStringList keys) const;
|
||||
bool writeFormatters(const QHash<QString, QString> configuration) const;
|
||||
|
||||
public slots:
|
||||
@ -58,6 +58,7 @@ private:
|
||||
void initItems();
|
||||
// properties
|
||||
QStringList m_directories;
|
||||
QString m_filePath;
|
||||
QHash<QString, AWAbstractFormatter *> m_formatters;
|
||||
QHash<QString, AWAbstractFormatter *> m_formattersClasses;
|
||||
};
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "awkeycache.h"
|
||||
#include "awpatternfunctions.h"
|
||||
// extensions
|
||||
#include "extnetworkrequest.h"
|
||||
#include "extquotes.h"
|
||||
#include "extscript.h"
|
||||
#include "extupgrade.h"
|
||||
@ -46,6 +47,7 @@ AWKeyOperations::~AWKeyOperations()
|
||||
|
||||
// extensions
|
||||
delete m_graphicalItems;
|
||||
delete m_extNetRequest;
|
||||
delete m_extQuotes;
|
||||
delete m_extScripts;
|
||||
delete m_extUpgrade;
|
||||
@ -151,13 +153,14 @@ QStringList AWKeyOperations::dictKeys() const
|
||||
// custom
|
||||
for (auto item : m_extScripts->activeItems())
|
||||
allKeys.append(item->tag(QString("custom")));
|
||||
// network requests
|
||||
for (auto item : m_extNetRequest->activeItems())
|
||||
allKeys.append(item->tag(QString("response")));
|
||||
// bars
|
||||
for (auto item : m_graphicalItems->activeItems())
|
||||
allKeys.append(item->tag(QString("bar")));
|
||||
// static keys
|
||||
QStringList staticKeys = QString(STATIC_KEYS).split(QChar(','));
|
||||
std::for_each(staticKeys.cbegin(), staticKeys.cend(),
|
||||
[&allKeys](const QString &key) { allKeys.append(key); });
|
||||
allKeys.append(QString(STATIC_KEYS).split(QChar(',')));
|
||||
|
||||
// sort in valid order
|
||||
allKeys.sort();
|
||||
@ -227,6 +230,10 @@ QString AWKeyOperations::infoByKey(QString key) const
|
||||
} else if (key.startsWith(QString("temp"))) {
|
||||
output
|
||||
= m_devices[QString("temp")][key.remove(QString("temp")).toInt()];
|
||||
} else if (key.startsWith(QString("response"))) {
|
||||
AbstractExtItem *item = m_extNetRequest->itemByTag(key, stripped);
|
||||
if (item)
|
||||
output = item->uniq();
|
||||
} else {
|
||||
output = QString("(none)");
|
||||
}
|
||||
@ -259,6 +266,8 @@ void AWKeyOperations::editItem(const QString type)
|
||||
keys.sort();
|
||||
m_graphicalItems->setConfigArgs(keys);
|
||||
return m_graphicalItems->editItems();
|
||||
} else if (type == QString("extnetworkrequest")) {
|
||||
return m_extNetRequest->editItems();
|
||||
} else if (type == QString("extquotes")) {
|
||||
return m_extQuotes->editItems();
|
||||
} else if (type == QString("extscript")) {
|
||||
@ -310,6 +319,8 @@ void AWKeyOperations::reinitKeys()
|
||||
// delete them if any
|
||||
delete m_graphicalItems;
|
||||
m_graphicalItems = nullptr;
|
||||
delete m_extNetRequest;
|
||||
m_extNetRequest = nullptr;
|
||||
delete m_extQuotes;
|
||||
m_extQuotes = nullptr;
|
||||
delete m_extScripts;
|
||||
@ -321,6 +332,8 @@ void AWKeyOperations::reinitKeys()
|
||||
// create
|
||||
m_graphicalItems
|
||||
= new ExtItemAggregator<GraphicalItem>(nullptr, QString("desktops"));
|
||||
m_extNetRequest = new ExtItemAggregator<ExtNetworkRequest>(
|
||||
nullptr, QString("requests"));
|
||||
m_extQuotes = new ExtItemAggregator<ExtQuotes>(nullptr, QString("quotes"));
|
||||
m_extScripts
|
||||
= new ExtItemAggregator<ExtScript>(nullptr, QString("scripts"));
|
||||
|
@ -30,6 +30,7 @@
|
||||
class AWDataAggregator;
|
||||
class AWDataEngineAggregator;
|
||||
class AWKeysAggregator;
|
||||
class ExtNetworkRequest;
|
||||
class ExtQuotes;
|
||||
class ExtScript;
|
||||
class ExtUpgrade;
|
||||
@ -70,6 +71,7 @@ private:
|
||||
void reinitKeys();
|
||||
// objects
|
||||
ExtItemAggregator<GraphicalItem> *m_graphicalItems = nullptr;
|
||||
ExtItemAggregator<ExtNetworkRequest> *m_extNetRequest = nullptr;
|
||||
ExtItemAggregator<ExtQuotes> *m_extQuotes = nullptr;
|
||||
ExtItemAggregator<ExtScript> *m_extScripts = nullptr;
|
||||
ExtItemAggregator<ExtUpgrade> *m_extUpgrade = nullptr;
|
||||
|
@ -17,7 +17,8 @@
|
||||
|
||||
#include "awkeys.h"
|
||||
|
||||
#include <QJSEngine>
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusError>
|
||||
#include <QRegExp>
|
||||
#include <QThread>
|
||||
#include <QTimer>
|
||||
@ -25,6 +26,7 @@
|
||||
|
||||
#include "awdataaggregator.h"
|
||||
#include "awdataengineaggregator.h"
|
||||
#include "awdbusadaptor.h"
|
||||
#include "awdebug.h"
|
||||
#include "awkeycache.h"
|
||||
#include "awkeyoperations.h"
|
||||
@ -36,9 +38,9 @@
|
||||
AWKeys::AWKeys(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
qSetMessagePattern(LOG_FORMAT);
|
||||
qSetMessagePattern(AWDebug::LOG_FORMAT);
|
||||
qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
|
||||
for (auto metadata : getBuildData())
|
||||
for (auto &metadata : AWDebug::getBuildData())
|
||||
qCDebug(LOG_AW) << metadata;
|
||||
|
||||
// thread pool
|
||||
@ -52,6 +54,8 @@ AWKeys::AWKeys(QObject *parent)
|
||||
m_timer = new QTimer(this);
|
||||
m_timer->setSingleShot(false);
|
||||
|
||||
createDBusInterface();
|
||||
|
||||
// update key data if required
|
||||
connect(m_keyOperator, SIGNAL(updateKeys(QStringList)), this,
|
||||
SLOT(reinitKeys(QStringList)));
|
||||
@ -74,6 +78,10 @@ AWKeys::~AWKeys()
|
||||
m_timer->stop();
|
||||
delete m_timer;
|
||||
|
||||
// delete dbus session
|
||||
qlonglong id = reinterpret_cast<qlonglong>(this);
|
||||
QDBusConnection::sessionBus().unregisterObject(QString("/%1").arg(id));
|
||||
|
||||
// core
|
||||
delete m_dataEngineAggregator;
|
||||
delete m_threadPool;
|
||||
@ -83,6 +91,12 @@ AWKeys::~AWKeys()
|
||||
}
|
||||
|
||||
|
||||
bool AWKeys::isDBusActive() const
|
||||
{
|
||||
return m_dbusActive;
|
||||
}
|
||||
|
||||
|
||||
void AWKeys::initDataAggregator(const QVariantMap tooltipParams)
|
||||
{
|
||||
qCDebug(LOG_AW) << "Tooltip parameters" << tooltipParams;
|
||||
@ -144,6 +158,10 @@ QStringList AWKeys::dictKeys(const bool sorted, const QString regexp) const
|
||||
qCDebug(LOG_AW) << "Should be sorted" << sorted << "and filter applied"
|
||||
<< regexp;
|
||||
|
||||
// check if functions asked
|
||||
if (regexp == QString("functions"))
|
||||
return QString(STATIC_FUNCTIONS).split(QChar(','));
|
||||
|
||||
QStringList allKeys = m_keyOperator->dictKeys();
|
||||
// sort if required
|
||||
if (sorted)
|
||||
@ -153,12 +171,21 @@ QStringList AWKeys::dictKeys(const bool sorted, const QString regexp) const
|
||||
}
|
||||
|
||||
|
||||
QStringList AWKeys::getHddDevices() const
|
||||
QVariantList AWKeys::getHddDevices() const
|
||||
{
|
||||
QStringList devices = m_keyOperator->devices(QString("hdd"));
|
||||
QStringList hddDevices = m_keyOperator->devices(QString("hdd"));
|
||||
// required by selector in the UI
|
||||
devices.insert(0, QString("disable"));
|
||||
devices.insert(0, QString("auto"));
|
||||
hddDevices.insert(0, QString("disable"));
|
||||
hddDevices.insert(0, QString("auto"));
|
||||
|
||||
// build model
|
||||
QVariantList devices;
|
||||
for (auto device : hddDevices) {
|
||||
QVariantMap model;
|
||||
model[QString("label")] = device;
|
||||
model[QString("name")] = device;
|
||||
devices.append(model);
|
||||
}
|
||||
|
||||
return devices;
|
||||
}
|
||||
@ -306,6 +333,27 @@ void AWKeys::calculateValues()
|
||||
}
|
||||
|
||||
|
||||
void AWKeys::createDBusInterface()
|
||||
{
|
||||
// get this object id
|
||||
qlonglong id = reinterpret_cast<qlonglong>(this);
|
||||
|
||||
// create session
|
||||
QDBusConnection bus = QDBusConnection::sessionBus();
|
||||
if (!bus.registerService(AWDBUS_SERVICE))
|
||||
qCWarning(LOG_AW) << "Could not register DBus service, last error"
|
||||
<< bus.lastError().message();
|
||||
if (!bus.registerObject(QString("/%1").arg(id), new AWDBusAdaptor(this),
|
||||
QDBusConnection::ExportAllContents)) {
|
||||
qCWarning(LOG_AW) << "Could not register DBus object, last error"
|
||||
<< bus.lastError().message();
|
||||
m_dbusActive = false;
|
||||
} else {
|
||||
m_dbusActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString AWKeys::parsePattern(QString pattern) const
|
||||
{
|
||||
// screen sign
|
||||
|
@ -39,6 +39,7 @@ class AWKeys : public QObject
|
||||
public:
|
||||
explicit AWKeys(QObject *parent = nullptr);
|
||||
virtual ~AWKeys();
|
||||
bool isDBusActive() const;
|
||||
Q_INVOKABLE void initDataAggregator(const QVariantMap tooltipParams);
|
||||
Q_INVOKABLE void initKeys(const QString currentPattern, const int interval,
|
||||
const int limit, const bool optimize);
|
||||
@ -51,7 +52,7 @@ public:
|
||||
// keys
|
||||
Q_INVOKABLE QStringList dictKeys(const bool sorted = false,
|
||||
const QString regexp = QString()) const;
|
||||
Q_INVOKABLE QStringList getHddDevices() const;
|
||||
Q_INVOKABLE QVariantList getHddDevices() const;
|
||||
// values
|
||||
Q_INVOKABLE QString infoByKey(QString key) const;
|
||||
Q_INVOKABLE QString valueByKey(QString key) const;
|
||||
@ -76,6 +77,7 @@ private slots:
|
||||
private:
|
||||
// methods
|
||||
void calculateValues();
|
||||
void createDBusInterface();
|
||||
QString parsePattern(QString pattern) const;
|
||||
void setDataBySource(const QString &sourceName, const QVariantMap &data);
|
||||
// objects
|
||||
@ -85,6 +87,7 @@ private:
|
||||
AWKeyOperations *m_keyOperator = nullptr;
|
||||
QTimer *m_timer = nullptr;
|
||||
// variables
|
||||
bool m_dbusActive = false;
|
||||
QVariantMap m_tooltipParams;
|
||||
QStringList m_foundBars, m_foundKeys, m_foundLambdas, m_requiredKeys;
|
||||
QVariantHash m_values;
|
||||
|
@ -441,6 +441,12 @@ QStringList AWKeysAggregator::registerSource(const QString &source,
|
||||
// network device
|
||||
m_map[source] = QString("netdev");
|
||||
m_formatter[QString("netdev")] = FormatterType::NoFormat;
|
||||
} else if (source.startsWith(QString("network/response"))) {
|
||||
// network response
|
||||
QString key = source;
|
||||
key.remove(QString("network/"));
|
||||
m_map[source] = key;
|
||||
m_formatter[key] = FormatterType::NoFormat;
|
||||
} else if (source.contains(netRegExp)) {
|
||||
// network speed
|
||||
QString type = source.contains(QString("receiver")) ? QString("down")
|
||||
|
@ -234,9 +234,9 @@ QString AWPatternFunctions::insertMacros(QString code)
|
||||
QString("aw_macro_%1").arg(name), code);
|
||||
for (auto function : macroUsage) {
|
||||
if (function.args.count() != macro.args.count()) {
|
||||
qCWarning(LOG_AW) << "Invalid args count found for call"
|
||||
<< function.what << "with macro"
|
||||
<< macro.what;
|
||||
qCWarning(LOG_AW)
|
||||
<< "Invalid args count found for call" << function.what
|
||||
<< "with macro" << macro.what;
|
||||
continue;
|
||||
}
|
||||
// generate body to replace
|
||||
@ -267,12 +267,14 @@ QStringList AWPatternFunctions::findKeys(const QString code,
|
||||
<< keys;
|
||||
|
||||
QStringList selectedKeys;
|
||||
QString replacedCode = code;
|
||||
for (auto key : keys)
|
||||
if ((key.startsWith(QString("bar")) == isBars)
|
||||
&& (code.contains(QString("$%1").arg(key)))) {
|
||||
&& (replacedCode.contains(QString("$%1").arg(key)))) {
|
||||
qCInfo(LOG_AW) << "Found key" << key << "with bar enabled"
|
||||
<< isBars;
|
||||
selectedKeys.append(key);
|
||||
replacedCode.replace(QString("$%1").arg(key), "");
|
||||
}
|
||||
if (selectedKeys.isEmpty())
|
||||
qCWarning(LOG_AW) << "No keys found";
|
||||
|
@ -34,14 +34,10 @@ AWTelemetryHandler::AWTelemetryHandler(QObject *parent, const QString clientId)
|
||||
{
|
||||
qCDebug(LOG_AW) << __PRETTY_FUNCTION__;
|
||||
|
||||
m_genericConfig = QString("%1/awesomewidgets/general.ini")
|
||||
.arg(QStandardPaths::writableLocation(
|
||||
QStandardPaths::GenericDataLocation));
|
||||
m_localFile = QString("%1/awesomewidgets/telemetry.ini")
|
||||
.arg(QStandardPaths::writableLocation(
|
||||
QStandardPaths::GenericDataLocation));
|
||||
|
||||
init();
|
||||
// override client id if any
|
||||
if (!clientId.isEmpty())
|
||||
m_clientId = clientId;
|
||||
@ -78,6 +74,18 @@ QString AWTelemetryHandler::getLast(const QString group) const
|
||||
}
|
||||
|
||||
|
||||
void AWTelemetryHandler::init(const int count, const bool enableRemote,
|
||||
const QString clientId)
|
||||
{
|
||||
qCDebug(LOG_AW) << "Init telemetry with count" << count << "enable remote"
|
||||
<< enableRemote << "client ID" << clientId;
|
||||
|
||||
m_storeCount = count;
|
||||
m_uploadEnabled = enableRemote;
|
||||
m_clientId = clientId;
|
||||
}
|
||||
|
||||
|
||||
bool AWTelemetryHandler::put(const QString group, const QString value) const
|
||||
{
|
||||
qCDebug(LOG_AW) << "Store data with group" << group << "and value" << value;
|
||||
@ -130,13 +138,12 @@ void AWTelemetryHandler::uploadTelemetry(const QString group,
|
||||
SLOT(telemetryReplyRecieved(QNetworkReply *)));
|
||||
|
||||
QUrl url(REMOTE_TELEMETRY_URL);
|
||||
url.setPort(REMOTE_TELEMETRY_PORT);
|
||||
QNetworkRequest request(url);
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
|
||||
// generate payload
|
||||
QVariantMap payload;
|
||||
payload[QString("api")] = AWTEAPI;
|
||||
payload[QString("api")] = AW_TELEMETRY_API;
|
||||
payload[QString("client_id")] = m_clientId;
|
||||
payload[QString("metadata")] = value;
|
||||
payload[QString("type")] = group;
|
||||
@ -181,44 +188,3 @@ QString AWTelemetryHandler::getKey(const int count) const
|
||||
|
||||
return QString("%1").arg(count, 3, 10, QChar('0'));
|
||||
}
|
||||
|
||||
|
||||
void AWTelemetryHandler::init()
|
||||
{
|
||||
QSettings settings(m_genericConfig, QSettings::IniFormat);
|
||||
settings.beginGroup(QString("Telemetry"));
|
||||
|
||||
// unique client id
|
||||
m_clientId
|
||||
= settings.value(QString("ClientID"), QUuid::createUuid().toString())
|
||||
.toString();
|
||||
setConfiguration(QString("ClientID"), m_clientId, false);
|
||||
// count items to store
|
||||
m_storeCount = settings.value(QString("StoreHistory"), 100).toInt();
|
||||
setConfiguration(QString("StoreHistory"), m_storeCount, false);
|
||||
// check if upload enabled
|
||||
m_uploadEnabled = settings.value(QString("Upload"), false).toBool();
|
||||
setConfiguration(QString("Upload"), m_uploadEnabled, false);
|
||||
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
|
||||
bool AWTelemetryHandler::setConfiguration(const QString key,
|
||||
const QVariant value,
|
||||
const bool override) const
|
||||
{
|
||||
qCDebug(LOG_AW) << "Set configuration key" << key << "to value" << value
|
||||
<< "force override enabled" << override;
|
||||
|
||||
QSettings settings(m_genericConfig, QSettings::IniFormat);
|
||||
settings.beginGroup(QString("Telemetry"));
|
||||
if (settings.childKeys().contains(key) && !override)
|
||||
return true;
|
||||
|
||||
settings.setValue(key, value);
|
||||
settings.endGroup();
|
||||
settings.sync();
|
||||
|
||||
return (settings.status() == QSettings::NoError);
|
||||
}
|
||||
|
@ -31,14 +31,15 @@ class AWTelemetryHandler : public QObject
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
const char *REMOTE_TELEMETRY_URL = "http://arcanis.me/telemetry";
|
||||
const int REMOTE_TELEMETRY_PORT = 8080;
|
||||
const char *REMOTE_TELEMETRY_URL = "https://arcanis.me/telemetry";
|
||||
|
||||
explicit AWTelemetryHandler(QObject *parent = nullptr,
|
||||
const QString clientId = QString());
|
||||
virtual ~AWTelemetryHandler();
|
||||
Q_INVOKABLE QStringList get(const QString group) const;
|
||||
Q_INVOKABLE QString getLast(const QString group) const;
|
||||
Q_INVOKABLE void init(const int count, const bool enableRemote,
|
||||
const QString clientId);
|
||||
Q_INVOKABLE bool put(const QString group, const QString value) const;
|
||||
Q_INVOKABLE void uploadTelemetry(const QString group, const QString value);
|
||||
|
||||
@ -50,11 +51,7 @@ private slots:
|
||||
|
||||
private:
|
||||
QString getKey(const int count) const;
|
||||
void init();
|
||||
bool setConfiguration(const QString key, const QVariant value,
|
||||
const bool override) const;
|
||||
QString m_clientId;
|
||||
QString m_genericConfig;
|
||||
QString m_localFile;
|
||||
int m_storeCount = 0;
|
||||
bool m_uploadEnabled = false;
|
||||
|
@ -19,6 +19,7 @@ set(SUBPROJECT_FORMATTERS ${CMAKE_CURRENT_SOURCE_DIR}/formatters)
|
||||
set(SUBPROJECT_GRAPHITEMS ${CMAKE_CURRENT_SOURCE_DIR}/desktops)
|
||||
set(SUBPROJECT_QUOTES ${CMAKE_CURRENT_SOURCE_DIR}/quotes)
|
||||
set(SUBPROJECT_SCRIPTS ${CMAKE_CURRENT_SOURCE_DIR}/scripts)
|
||||
set(SUBPROJECT_REQUESTS ${CMAKE_CURRENT_SOURCE_DIR}/requests)
|
||||
set(SUBPROJECT_UPGRADE ${CMAKE_CURRENT_SOURCE_DIR}/upgrade)
|
||||
set(SUBPROJECT_WEATHER ${CMAKE_CURRENT_SOURCE_DIR}/weather)
|
||||
file(GLOB SUBPROJECT_WEATHER_JSON_IN *.json)
|
||||
@ -37,6 +38,7 @@ install(DIRECTORY ${SUBPROJECT_FORMATTERS} DESTINATION ${DATA_INSTALL_DIR}/${PRO
|
||||
install(DIRECTORY ${SUBPROJECT_GRAPHITEMS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
|
||||
install(DIRECTORY ${SUBPROJECT_QUOTES} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
|
||||
install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
|
||||
install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
|
||||
install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
|
||||
install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
|
||||
install(FILES ${SUBPROJECT_INI} DESTINATION ${CONFIG_INSTALL_DIR})
|
||||
|
@ -18,12 +18,14 @@
|
||||
#include "abstractextitem.h"
|
||||
|
||||
#include <QDir>
|
||||
#include <QLocalServer>
|
||||
#include <QSettings>
|
||||
#include <QStandardPaths>
|
||||
#include <QTime>
|
||||
|
||||
#include "abstractextitemaggregator.h"
|
||||
#include "awdebug.h"
|
||||
#include "qcronscheduler.h"
|
||||
|
||||
|
||||
AbstractExtItem::AbstractExtItem(QWidget *parent, const QString filePath)
|
||||
@ -41,6 +43,12 @@ AbstractExtItem::AbstractExtItem(QWidget *parent, const QString filePath)
|
||||
AbstractExtItem::~AbstractExtItem()
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
if (m_socket) {
|
||||
m_socket->close();
|
||||
m_socket->removeServer(socket());
|
||||
delete m_socket;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -63,8 +71,29 @@ void AbstractExtItem::copyDefaults(AbstractExtItem *_other) const
|
||||
_other->setActive(isActive());
|
||||
_other->setApiVersion(apiVersion());
|
||||
_other->setComment(comment());
|
||||
_other->setCron(cron());
|
||||
_other->setInterval(interval());
|
||||
_other->setName(name());
|
||||
_other->setSocket(socket());
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::startTimer()
|
||||
{
|
||||
if (!socket().isEmpty())
|
||||
// check if there is active socket setup
|
||||
return;
|
||||
else if (!cron().isEmpty())
|
||||
// check if there is active scheduler
|
||||
return;
|
||||
else if (m_times == 1)
|
||||
// check if it is time to update
|
||||
emit(requestDataUpdate());
|
||||
|
||||
// update counter value
|
||||
if (m_times >= interval())
|
||||
m_times = 0;
|
||||
m_times++;
|
||||
}
|
||||
|
||||
|
||||
@ -95,6 +124,12 @@ QString AbstractExtItem::comment() const
|
||||
}
|
||||
|
||||
|
||||
QString AbstractExtItem::cron() const
|
||||
{
|
||||
return m_cron;
|
||||
}
|
||||
|
||||
|
||||
QString AbstractExtItem::fileName() const
|
||||
{
|
||||
return m_fileName;
|
||||
@ -125,6 +160,12 @@ int AbstractExtItem::number() const
|
||||
}
|
||||
|
||||
|
||||
QString AbstractExtItem::socket() const
|
||||
{
|
||||
return m_socketFile;
|
||||
}
|
||||
|
||||
|
||||
QString AbstractExtItem::tag(const QString _type) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Tag type" << _type;
|
||||
@ -157,6 +198,28 @@ void AbstractExtItem::setComment(const QString _comment)
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::setCron(const QString _cron)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Cron string" << _cron;
|
||||
// deinit module first
|
||||
if (m_scheduler) {
|
||||
disconnect(m_scheduler, SIGNAL(activated()), this,
|
||||
SIGNAL(requestDataUpdate()));
|
||||
delete m_scheduler;
|
||||
}
|
||||
|
||||
m_cron = _cron;
|
||||
if (cron().isEmpty())
|
||||
return;
|
||||
|
||||
// init scheduler
|
||||
m_scheduler = new QCronScheduler(this);
|
||||
m_scheduler->parse(cron());
|
||||
connect(m_scheduler, SIGNAL(activated()), this,
|
||||
SIGNAL(requestDataUpdate()));
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::setInterval(const int _interval)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Interval" << _interval;
|
||||
@ -196,6 +259,42 @@ void AbstractExtItem::setNumber(int _number)
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::setSocket(const QString _socket)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Socket" << _socket;
|
||||
// remove old socket first
|
||||
deinitSocket();
|
||||
|
||||
m_socketFile = _socket;
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::deinitSocket()
|
||||
{
|
||||
if (!m_socket)
|
||||
return;
|
||||
|
||||
m_socket->close();
|
||||
m_socket->removeServer(socket());
|
||||
delete m_socket;
|
||||
disconnect(m_socket, SIGNAL(newConnection()), this,
|
||||
SLOT(newConnectionReceived()));
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::initSocket()
|
||||
{
|
||||
// remove old socket first
|
||||
deinitSocket();
|
||||
|
||||
m_socket = new QLocalServer(this);
|
||||
bool listening = m_socket->listen(socket());
|
||||
qCInfo(LOG_LIB) << "Server listening on" << socket() << listening;
|
||||
connect(m_socket, SIGNAL(newConnection()), this,
|
||||
SLOT(newConnectionReceived()));
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::readConfiguration()
|
||||
{
|
||||
QSettings settings(m_fileName, QSettings::IniFormat);
|
||||
@ -210,6 +309,8 @@ void AbstractExtItem::readConfiguration()
|
||||
== QString("true"));
|
||||
setInterval(settings.value(QString("X-AW-Interval"), interval()).toInt());
|
||||
setNumber(settings.value(QString("X-AW-Number"), number()).toInt());
|
||||
setCron(settings.value(QString("X-AW-Schedule"), cron()).toString());
|
||||
setSocket(settings.value(QString("X-AW-Socket"), socket()).toString());
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
@ -234,9 +335,19 @@ void AbstractExtItem::writeConfiguration() const
|
||||
settings.setValue(QString("Comment"), comment());
|
||||
settings.setValue(QString("X-AW-ApiVersion"), apiVersion());
|
||||
settings.setValue(QString("X-AW-Active"), QVariant(isActive()).toString());
|
||||
settings.setValue(QString("X-AW-Interval"), interval());
|
||||
settings.setValue(QString("X-AW-Interval"),
|
||||
cron().isEmpty() ? QVariant(interval())
|
||||
: QVariant(cron()));
|
||||
settings.setValue(QString("X-AW-Number"), number());
|
||||
settings.setValue(QString("X-AW-Schedule"), cron());
|
||||
settings.setValue(QString("X-AW-Socket"), socket());
|
||||
settings.endGroup();
|
||||
|
||||
settings.sync();
|
||||
}
|
||||
|
||||
|
||||
void AbstractExtItem::newConnectionReceived()
|
||||
{
|
||||
emit(requestDataUpdate());
|
||||
}
|
||||
|
@ -22,16 +22,21 @@
|
||||
#include <QVariant>
|
||||
|
||||
|
||||
class QCronScheduler;
|
||||
class QLocalServer;
|
||||
|
||||
class AbstractExtItem : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool active READ isActive WRITE setActive)
|
||||
Q_PROPERTY(int apiVersion READ apiVersion WRITE setApiVersion)
|
||||
Q_PROPERTY(QString comment READ comment WRITE setComment)
|
||||
Q_PROPERTY(QString cron READ cron WRITE setCron)
|
||||
Q_PROPERTY(QString fileName READ fileName)
|
||||
Q_PROPERTY(int interval READ interval WRITE setInterval)
|
||||
Q_PROPERTY(QString name READ name WRITE setName)
|
||||
Q_PROPERTY(int number READ number WRITE setNumber)
|
||||
Q_PROPERTY(QString socket READ socket WRITE setSocket)
|
||||
Q_PROPERTY(QString uniq READ uniq)
|
||||
|
||||
public:
|
||||
@ -42,45 +47,61 @@ public:
|
||||
virtual AbstractExtItem *copy(const QString _fileName, const int _number)
|
||||
= 0;
|
||||
virtual void copyDefaults(AbstractExtItem *_other) const;
|
||||
virtual void startTimer();
|
||||
QString writtableConfig() const;
|
||||
// get methods
|
||||
int apiVersion() const;
|
||||
QString comment() const;
|
||||
QString cron() const;
|
||||
QString fileName() const;
|
||||
int interval() const;
|
||||
bool isActive() const;
|
||||
QString name() const;
|
||||
int number() const;
|
||||
QString socket() const;
|
||||
QString tag(const QString _type) const;
|
||||
virtual QString uniq() const = 0;
|
||||
// set methods
|
||||
void setApiVersion(const int _apiVersion = 0);
|
||||
void setActive(const bool _state = true);
|
||||
void setComment(const QString _comment = QString("empty"));
|
||||
void setCron(const QString _cron = "");
|
||||
void setInterval(const int _interval = 1);
|
||||
void setName(const QString _name = QString("none"));
|
||||
void setNumber(int _number = -1);
|
||||
void setSocket(const QString _socket = QString(""));
|
||||
|
||||
signals:
|
||||
void dataReceived(const QVariantHash &data);
|
||||
void requestDataUpdate();
|
||||
|
||||
public slots:
|
||||
virtual void deinitSocket();
|
||||
virtual void initSocket();
|
||||
virtual void readConfiguration();
|
||||
virtual QVariantHash run() = 0;
|
||||
virtual int showConfiguration(const QVariant args = QVariant()) = 0;
|
||||
bool tryDelete() const;
|
||||
virtual bool tryDelete() const;
|
||||
virtual void writeConfiguration() const;
|
||||
|
||||
private slots:
|
||||
void newConnectionReceived();
|
||||
|
||||
private:
|
||||
QCronScheduler *m_scheduler = nullptr;
|
||||
QString m_fileName = QString("/dev/null");
|
||||
int m_times = 0;
|
||||
virtual void translate() = 0;
|
||||
// properties
|
||||
int m_apiVersion = 0;
|
||||
bool m_active = true;
|
||||
QString m_comment = QString("empty");
|
||||
QString m_cron = "";
|
||||
int m_interval = 1;
|
||||
QString m_name = QString("none");
|
||||
int m_number = -1;
|
||||
QLocalServer *m_socket = nullptr;
|
||||
QString m_socketFile = QString("");
|
||||
};
|
||||
|
||||
|
||||
|
@ -69,6 +69,9 @@ QString AWAbstractFormatter::strType() const
|
||||
case FormatterClass::String:
|
||||
value = QString("String");
|
||||
break;
|
||||
case FormatterClass::Json:
|
||||
value = QString("Json");
|
||||
break;
|
||||
case FormatterClass::NoFormat:
|
||||
value = QString("NoFormat");
|
||||
break;
|
||||
@ -98,6 +101,8 @@ void AWAbstractFormatter::setStrType(const QString _type)
|
||||
m_type = FormatterClass::Script;
|
||||
else if (_type == QString("String"))
|
||||
m_type = FormatterClass::String;
|
||||
else if (_type == QString("Json"))
|
||||
m_type = FormatterClass::Json;
|
||||
else
|
||||
m_type = FormatterClass::NoFormat;
|
||||
}
|
||||
|
@ -34,7 +34,8 @@ public:
|
||||
List,
|
||||
Script,
|
||||
String,
|
||||
NoFormat
|
||||
NoFormat,
|
||||
Json
|
||||
};
|
||||
|
||||
explicit AWAbstractFormatter(QWidget *parent,
|
||||
|
@ -115,7 +115,7 @@ void AWDateTimeFormatter::readConfiguration()
|
||||
settings.value(QString("X-AW-Translate"), translateString()).toBool());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEFAPI);
|
||||
bumpApi(AW_FORMATTER_API);
|
||||
}
|
||||
|
||||
|
||||
@ -135,7 +135,7 @@ int AWDateTimeFormatter::showConfiguration(const QVariant args)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AWEFAPI);
|
||||
setApiVersion(AW_FORMATTER_API);
|
||||
setStrType(ui->label_typeValue->text());
|
||||
setFormat(ui->lineEdit_format->text());
|
||||
setTranslateString(ui->checkBox_translate->checkState() == Qt::Checked);
|
||||
|
@ -210,7 +210,7 @@ void AWFloatFormatter::readConfiguration()
|
||||
setSummand(settings.value(QString("X-AW-Summand"), summand()).toDouble());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEFAPI);
|
||||
bumpApi(AW_FORMATTER_API);
|
||||
}
|
||||
|
||||
|
||||
@ -236,7 +236,7 @@ int AWFloatFormatter::showConfiguration(const QVariant args)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AWEFAPI);
|
||||
setApiVersion(AW_FORMATTER_API);
|
||||
setStrType(ui->label_typeValue->text());
|
||||
setFormat(ui->comboBox_format->currentText().at(0).toLatin1());
|
||||
setPrecision(ui->spinBox_precision->value());
|
||||
|
207
sources/awesomewidgets/awjsonformatter.cpp
Normal file
207
sources/awesomewidgets/awjsonformatter.cpp
Normal file
@ -0,0 +1,207 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "awjsonformatter.h"
|
||||
#include "ui_awjsonformatter.h"
|
||||
|
||||
#include <KI18n/KLocalizedString>
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QSettings>
|
||||
|
||||
#include "awdebug.h"
|
||||
|
||||
|
||||
AWJsonFormatter::AWJsonFormatter(QWidget *parent, const QString filePath)
|
||||
: AWAbstractFormatter(parent, filePath)
|
||||
, ui(new Ui::AWJsonFormatter)
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
if (!filePath.isEmpty())
|
||||
readConfiguration();
|
||||
ui->setupUi(this);
|
||||
translate();
|
||||
}
|
||||
|
||||
|
||||
AWJsonFormatter::~AWJsonFormatter()
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
QString AWJsonFormatter::convert(const QVariant &_value) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Convert value" << _value;
|
||||
|
||||
// check if _value is string and parse first if required
|
||||
QJsonDocument json
|
||||
= _value.type() == QVariant::String
|
||||
? QJsonDocument::fromJson(_value.toString().toUtf8())
|
||||
: QJsonDocument::fromVariant(_value);
|
||||
QVariant converted = json.toVariant();
|
||||
for (auto &element : m_splittedPath)
|
||||
converted = getFromJson(converted, element);
|
||||
|
||||
return converted.toString();
|
||||
}
|
||||
|
||||
|
||||
AWJsonFormatter *AWJsonFormatter::copy(const QString _fileName,
|
||||
const int _number)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
|
||||
|
||||
AWJsonFormatter *item
|
||||
= new AWJsonFormatter(static_cast<QWidget *>(parent()), _fileName);
|
||||
AWAbstractFormatter::copyDefaults(item);
|
||||
item->setNumber(_number);
|
||||
item->setPath(path());
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
QString AWJsonFormatter::path() const
|
||||
{
|
||||
return m_path;
|
||||
}
|
||||
|
||||
|
||||
void AWJsonFormatter::setPath(const QString _path)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Path" << _path;
|
||||
|
||||
m_path = _path;
|
||||
initPath();
|
||||
}
|
||||
|
||||
|
||||
void AWJsonFormatter::readConfiguration()
|
||||
{
|
||||
AWAbstractFormatter::readConfiguration();
|
||||
|
||||
QSettings settings(fileName(), QSettings::IniFormat);
|
||||
|
||||
settings.beginGroup(QString("Desktop Entry"));
|
||||
setPath(settings.value(QString("X-AW-Path"), path()).toString());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AW_FORMATTER_API);
|
||||
}
|
||||
|
||||
|
||||
int AWJsonFormatter::showConfiguration(const QVariant args)
|
||||
{
|
||||
Q_UNUSED(args)
|
||||
|
||||
ui->lineEdit_name->setText(name());
|
||||
ui->lineEdit_comment->setText(comment());
|
||||
ui->label_typeValue->setText(QString("Json"));
|
||||
ui->lineEdit_path->setText(path());
|
||||
|
||||
int ret = exec();
|
||||
if (ret != 1)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AW_FORMATTER_API);
|
||||
setStrType(ui->label_typeValue->text());
|
||||
setPath(ui->lineEdit_path->text());
|
||||
|
||||
writeConfiguration();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void AWJsonFormatter::writeConfiguration() const
|
||||
{
|
||||
AWAbstractFormatter::writeConfiguration();
|
||||
|
||||
QSettings settings(writtableConfig(), QSettings::IniFormat);
|
||||
qCInfo(LOG_LIB) << "Configuration file" << settings.fileName();
|
||||
|
||||
settings.beginGroup(QString("Desktop Entry"));
|
||||
settings.setValue(QString("X-AW-Path"), path());
|
||||
settings.endGroup();
|
||||
|
||||
settings.sync();
|
||||
}
|
||||
|
||||
|
||||
QVariant AWJsonFormatter::getFromJson(const QVariant &value,
|
||||
const QVariant &element) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Looking for element" << element << "in" << value;
|
||||
|
||||
if (element.type() == QVariant::String) {
|
||||
return getFromMap(value, element.toString());
|
||||
} else if (element.type() == QVariant::Int) {
|
||||
return getFromList(value, element.toInt());
|
||||
} else {
|
||||
qCWarning(LOG_LIB) << "Unknown type" << element.typeName();
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QVariant AWJsonFormatter::getFromList(const QVariant &value,
|
||||
const int index) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Looking for index" << index << "in" << value;
|
||||
|
||||
return value.toList()[index];
|
||||
}
|
||||
|
||||
|
||||
QVariant AWJsonFormatter::getFromMap(const QVariant &value,
|
||||
const QString &key) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Looking for key" << key << "in" << value;
|
||||
|
||||
return value.toMap()[key];
|
||||
}
|
||||
|
||||
|
||||
void AWJsonFormatter::initPath()
|
||||
{
|
||||
m_splittedPath.clear();
|
||||
QStringList splittedByDot
|
||||
= m_path.split(QChar('.'), QString::SkipEmptyParts);
|
||||
|
||||
for (auto &element : splittedByDot) {
|
||||
bool ok;
|
||||
int number = element.toInt(&ok);
|
||||
if (ok)
|
||||
m_splittedPath.append(number);
|
||||
else
|
||||
m_splittedPath.append(element);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AWJsonFormatter::translate()
|
||||
{
|
||||
ui->label_name->setText(i18n("Name"));
|
||||
ui->label_comment->setText(i18n("Comment"));
|
||||
ui->label_type->setText(i18n("Type"));
|
||||
ui->label_path->setText(i18n("Path"));
|
||||
}
|
62
sources/awesomewidgets/awjsonformatter.h
Normal file
62
sources/awesomewidgets/awjsonformatter.h
Normal file
@ -0,0 +1,62 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef AWJSONFORMATTER_H
|
||||
#define AWJSONFORMATTER_H
|
||||
|
||||
#include "awabstractformatter.h"
|
||||
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class AWJsonFormatter;
|
||||
}
|
||||
|
||||
class AWJsonFormatter : public AWAbstractFormatter
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QString path READ path WRITE setPath)
|
||||
|
||||
public:
|
||||
explicit AWJsonFormatter(QWidget *parent,
|
||||
const QString filePath = QString());
|
||||
virtual ~AWJsonFormatter();
|
||||
QString convert(const QVariant &_value) const;
|
||||
AWJsonFormatter *copy(const QString _fileName, const int _number);
|
||||
// properties
|
||||
QString path() const;
|
||||
void setPath(const QString _path);
|
||||
|
||||
public slots:
|
||||
void readConfiguration();
|
||||
int showConfiguration(const QVariant args = QVariant());
|
||||
void writeConfiguration() const;
|
||||
|
||||
private:
|
||||
Ui::AWJsonFormatter *ui = nullptr;
|
||||
QVariant getFromJson(const QVariant &value, const QVariant &element) const;
|
||||
QVariant getFromList(const QVariant &value, const int index) const;
|
||||
QVariant getFromMap(const QVariant &value, const QString &key) const;
|
||||
void initPath();
|
||||
void translate();
|
||||
// properties
|
||||
QString m_path;
|
||||
QVariantList m_splittedPath;
|
||||
};
|
||||
|
||||
|
||||
#endif /* AWJSONFORMATTER_H */
|
167
sources/awesomewidgets/awjsonformatter.ui
Normal file
167
sources/awesomewidgets/awjsonformatter.ui
Normal file
@ -0,0 +1,167 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>AWJsonFormatter</class>
|
||||
<widget class="QDialog" name="AWJsonFormatter">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>420</width>
|
||||
<height>128</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Configuration</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_name">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_name">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_name"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_comment">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_comment">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Comment</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_comment"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_type">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_type">
|
||||
<property name="text">
|
||||
<string>Type</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_typeValue">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_path">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_path">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Path</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_path"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>AWJsonFormatter</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>AWJsonFormatter</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
@ -132,7 +132,7 @@ void AWListFormatter::readConfiguration()
|
||||
setSorted(settings.value(QString("X-AW-Sort"), isSorted()).toBool());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEFAPI);
|
||||
bumpApi(AW_FORMATTER_API);
|
||||
}
|
||||
|
||||
|
||||
@ -153,7 +153,7 @@ int AWListFormatter::showConfiguration(const QVariant args)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AWEFAPI);
|
||||
setApiVersion(AW_FORMATTER_API);
|
||||
setStrType(ui->label_typeValue->text());
|
||||
setFilter(ui->lineEdit_filter->text());
|
||||
setSeparator(ui->lineEdit_separator->text());
|
||||
|
@ -79,7 +79,7 @@ int AWNoFormatter::showConfiguration(const QVariant args)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AWEFAPI);
|
||||
setApiVersion(AW_FORMATTER_API);
|
||||
setStrType(ui->label_typeValue->text());
|
||||
|
||||
writeConfiguration();
|
||||
|
@ -152,7 +152,7 @@ void AWScriptFormatter::readConfiguration()
|
||||
settings.value(QString("X-AW-HasReturn"), hasReturn()).toBool());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEFAPI);
|
||||
bumpApi(AW_FORMATTER_API);
|
||||
}
|
||||
|
||||
|
||||
@ -174,7 +174,7 @@ int AWScriptFormatter::showConfiguration(const QVariant args)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AWEFAPI);
|
||||
setApiVersion(AW_FORMATTER_API);
|
||||
setStrType(ui->label_typeValue->text());
|
||||
setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked);
|
||||
setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked);
|
||||
|
@ -133,7 +133,7 @@ void AWStringFormatter::readConfiguration()
|
||||
settings.value(QString("X-AW-ForceWidth"), forceWidth()).toBool());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEFAPI);
|
||||
bumpApi(AW_FORMATTER_API);
|
||||
}
|
||||
|
||||
|
||||
@ -154,7 +154,7 @@ int AWStringFormatter::showConfiguration(const QVariant args)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AWEFAPI);
|
||||
setApiVersion(AW_FORMATTER_API);
|
||||
setStrType(ui->label_typeValue->text());
|
||||
setCount(ui->spinBox_width->value());
|
||||
setFillChar(ui->lineEdit_fill->text().at(0));
|
||||
|
@ -34,9 +34,9 @@ public:
|
||||
explicit ExtItemAggregator(QWidget *parent, const QString type)
|
||||
: AbstractExtItemAggregator(parent, type)
|
||||
{
|
||||
qSetMessagePattern(LOG_FORMAT);
|
||||
qSetMessagePattern(AWDebug::LOG_FORMAT);
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
for (auto metadata : getBuildData())
|
||||
for (auto &metadata : AWDebug::getBuildData())
|
||||
qCDebug(LOG_LIB) << metadata;
|
||||
|
||||
qCDebug(LOG_LIB) << "Type" << type;
|
||||
@ -61,6 +61,15 @@ public:
|
||||
qCInfo(LOG_LIB) << "Dialog returns" << ret;
|
||||
};
|
||||
|
||||
void initSockets()
|
||||
{
|
||||
// HACK as soon as per one widget instance we have two objects each of
|
||||
// them will try to control socket, whereas actually only one of them
|
||||
// should be owner of the socket
|
||||
for (auto item : m_items)
|
||||
item->initSocket();
|
||||
}
|
||||
|
||||
T *itemByTag(const QString _tag, const QString _type) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Tag" << _tag << "with used type" << _type;
|
||||
|
216
sources/awesomewidgets/extnetworkrequest.cpp
Normal file
216
sources/awesomewidgets/extnetworkrequest.cpp
Normal file
@ -0,0 +1,216 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
#include "extnetworkrequest.h"
|
||||
#include "ui_extnetworkrequest.h"
|
||||
|
||||
#include <KI18n/KLocalizedString>
|
||||
|
||||
#include <QDir>
|
||||
#include <QNetworkAccessManager>
|
||||
#include <QNetworkRequest>
|
||||
#include <QSettings>
|
||||
#include <QTextCodec>
|
||||
|
||||
#include <qreplytimeout/qreplytimeout.h>
|
||||
|
||||
#include "awdebug.h"
|
||||
|
||||
|
||||
ExtNetworkRequest::ExtNetworkRequest(QWidget *parent, const QString filePath)
|
||||
: AbstractExtItem(parent, filePath)
|
||||
, ui(new Ui::ExtNetworkRequest)
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
if (!filePath.isEmpty())
|
||||
readConfiguration();
|
||||
ui->setupUi(this);
|
||||
translate();
|
||||
|
||||
m_values[tag(QString("response"))] = QString();
|
||||
|
||||
// HACK declare as child of nullptr to avoid crash with plasmawindowed
|
||||
// in the destructor
|
||||
m_manager = new QNetworkAccessManager(nullptr);
|
||||
connect(m_manager, SIGNAL(finished(QNetworkReply *)), this,
|
||||
SLOT(networkReplyReceived(QNetworkReply *)));
|
||||
|
||||
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
|
||||
}
|
||||
|
||||
|
||||
ExtNetworkRequest::~ExtNetworkRequest()
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this,
|
||||
SLOT(networkReplyReceived(QNetworkReply *)));
|
||||
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
|
||||
|
||||
m_manager->deleteLater();
|
||||
delete ui;
|
||||
}
|
||||
|
||||
|
||||
ExtNetworkRequest *ExtNetworkRequest::copy(const QString _fileName,
|
||||
const int _number)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "File" << _fileName << "with number" << _number;
|
||||
|
||||
ExtNetworkRequest *item
|
||||
= new ExtNetworkRequest(static_cast<QWidget *>(parent()), _fileName);
|
||||
copyDefaults(item);
|
||||
item->setNumber(_number);
|
||||
item->setStringUrl(stringUrl());
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
QString ExtNetworkRequest::stringUrl() const
|
||||
{
|
||||
return m_stringUrl;
|
||||
}
|
||||
|
||||
|
||||
QString ExtNetworkRequest::uniq() const
|
||||
{
|
||||
return m_url.toString();
|
||||
}
|
||||
|
||||
|
||||
void ExtNetworkRequest::setStringUrl(const QString _url)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Url" << _url;
|
||||
|
||||
m_stringUrl = _url;
|
||||
initUrl();
|
||||
}
|
||||
|
||||
|
||||
void ExtNetworkRequest::readConfiguration()
|
||||
{
|
||||
AbstractExtItem::readConfiguration();
|
||||
|
||||
QSettings settings(fileName(), QSettings::IniFormat);
|
||||
|
||||
settings.beginGroup(QString("Desktop Entry"));
|
||||
setStringUrl(settings.value(QString("X-AW-Url"), stringUrl()).toString());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AW_EXTNETREQUEST_API);
|
||||
}
|
||||
|
||||
|
||||
QVariantHash ExtNetworkRequest::run()
|
||||
{
|
||||
if (m_isRunning)
|
||||
return m_values;
|
||||
startTimer();
|
||||
|
||||
return m_values;
|
||||
}
|
||||
|
||||
|
||||
int ExtNetworkRequest::showConfiguration(const QVariant args)
|
||||
{
|
||||
Q_UNUSED(args)
|
||||
|
||||
ui->lineEdit_name->setText(name());
|
||||
ui->lineEdit_comment->setText(comment());
|
||||
ui->label_numberValue->setText(QString("%1").arg(number()));
|
||||
ui->lineEdit_url->setText(stringUrl());
|
||||
ui->checkBox_active->setCheckState(isActive() ? Qt::Checked
|
||||
: Qt::Unchecked);
|
||||
ui->lineEdit_schedule->setText(cron());
|
||||
ui->lineEdit_socket->setText(socket());
|
||||
ui->spinBox_interval->setValue(interval());
|
||||
|
||||
int ret = exec();
|
||||
if (ret != 1)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setNumber(ui->label_numberValue->text().toInt());
|
||||
setApiVersion(AW_EXTNETREQUEST_API);
|
||||
setStringUrl(ui->lineEdit_url->text());
|
||||
setActive(ui->checkBox_active->checkState() == Qt::Checked);
|
||||
setCron(ui->lineEdit_schedule->text());
|
||||
setSocket(ui->lineEdit_socket->text());
|
||||
setInterval(ui->spinBox_interval->value());
|
||||
|
||||
writeConfiguration();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void ExtNetworkRequest::writeConfiguration() const
|
||||
{
|
||||
AbstractExtItem::writeConfiguration();
|
||||
|
||||
QSettings settings(writtableConfig(), QSettings::IniFormat);
|
||||
qCInfo(LOG_LIB) << "Configuration file" << settings.fileName();
|
||||
|
||||
settings.beginGroup(QString("Desktop Entry"));
|
||||
settings.setValue(QString("X-AW-Url"), stringUrl());
|
||||
settings.endGroup();
|
||||
|
||||
settings.sync();
|
||||
}
|
||||
|
||||
void ExtNetworkRequest::networkReplyReceived(QNetworkReply *reply)
|
||||
{
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
qCWarning(LOG_AW) << "An error occurs" << reply->error()
|
||||
<< "with message" << reply->errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
m_isRunning = false;
|
||||
m_values[tag(QString("response"))]
|
||||
= QTextCodec::codecForMib(106)->toUnicode(reply->readAll()).trimmed();
|
||||
|
||||
emit(dataReceived(m_values));
|
||||
}
|
||||
|
||||
|
||||
void ExtNetworkRequest::sendRequest()
|
||||
{
|
||||
m_isRunning = true;
|
||||
QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url));
|
||||
new QReplyTimeout(reply, REQUEST_TIMEOUT);
|
||||
}
|
||||
|
||||
|
||||
void ExtNetworkRequest::initUrl()
|
||||
{
|
||||
m_url = QUrl(m_stringUrl);
|
||||
}
|
||||
|
||||
|
||||
void ExtNetworkRequest::translate()
|
||||
{
|
||||
ui->label_name->setText(i18n("Name"));
|
||||
ui->label_comment->setText(i18n("Comment"));
|
||||
ui->label_number->setText(i18n("Tag"));
|
||||
ui->label_url->setText(i18n("URL"));
|
||||
ui->checkBox_active->setText(i18n("Active"));
|
||||
ui->label_schedule->setText(i18n("Schedule"));
|
||||
ui->label_socket->setText(i18n("Socket"));
|
||||
ui->label_interval->setText(i18n("Interval"));
|
||||
}
|
72
sources/awesomewidgets/extnetworkrequest.h
Normal file
72
sources/awesomewidgets/extnetworkrequest.h
Normal file
@ -0,0 +1,72 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef EXTNETWORKREQUEST_H
|
||||
#define EXTNETWORKREQUEST_H
|
||||
|
||||
#include <QNetworkReply>
|
||||
|
||||
#include "abstractextitem.h"
|
||||
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class ExtNetworkRequest;
|
||||
}
|
||||
|
||||
class ExtNetworkRequest : public AbstractExtItem
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QString stringUrl READ stringUrl WRITE setStringUrl)
|
||||
|
||||
public:
|
||||
explicit ExtNetworkRequest(QWidget *parent,
|
||||
const QString filePath = QString());
|
||||
virtual ~ExtNetworkRequest();
|
||||
ExtNetworkRequest *copy(const QString _fileName, const int _number);
|
||||
// get methods
|
||||
QString stringUrl() const;
|
||||
QString uniq() const;
|
||||
// set methods
|
||||
void setStringUrl(const QString _url = QString("https://httpbin.org/get"));
|
||||
|
||||
public slots:
|
||||
void readConfiguration();
|
||||
QVariantHash run();
|
||||
int showConfiguration(const QVariant args = QVariant());
|
||||
void writeConfiguration() const;
|
||||
|
||||
private slots:
|
||||
void networkReplyReceived(QNetworkReply *reply);
|
||||
void sendRequest();
|
||||
|
||||
private:
|
||||
QNetworkAccessManager *m_manager = nullptr;
|
||||
QUrl m_url;
|
||||
bool m_isRunning = false;
|
||||
Ui::ExtNetworkRequest *ui = nullptr;
|
||||
void initUrl();
|
||||
void translate();
|
||||
// properties
|
||||
QString m_stringUrl = QString("https://httpbin.org/get");
|
||||
// values
|
||||
int m_times = 0;
|
||||
QVariantHash m_values;
|
||||
};
|
||||
|
||||
|
||||
#endif /* EXTNETWORKREQUEST_H */
|
273
sources/awesomewidgets/extnetworkrequest.ui
Normal file
273
sources/awesomewidgets/extnetworkrequest.ui
Normal file
@ -0,0 +1,273 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ExtNetworkRequest</class>
|
||||
<widget class="QDialog" name="ExtNetworkRequest">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>420</width>
|
||||
<height>301</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Configuration</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_name">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_name">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Name</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_name"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_comment">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_comment">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Comment</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_comment"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_number">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_number">
|
||||
<property name="text">
|
||||
<string>Tag</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_numberValue">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_url">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_url">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>URL</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_url"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_active">
|
||||
<item>
|
||||
<spacer name="spacer_active">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="checkBox_active">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Active</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_schedule">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_schedule">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Schedule</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_schedule"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_socket">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_socket">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Socket</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_socket"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_interval">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_interval">
|
||||
<property name="text">
|
||||
<string>Interval</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="spinBox_interval">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>10000</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>60</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>ExtNetworkRequest</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>ExtNetworkRequest</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
@ -59,6 +59,8 @@ ExtQuotes::ExtQuotes(QWidget *parent, const QString filePath)
|
||||
m_manager = new QNetworkAccessManager(nullptr);
|
||||
connect(m_manager, SIGNAL(finished(QNetworkReply *)), this,
|
||||
SLOT(quotesReplyReceived(QNetworkReply *)));
|
||||
|
||||
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
|
||||
}
|
||||
|
||||
|
||||
@ -68,6 +70,7 @@ ExtQuotes::~ExtQuotes()
|
||||
|
||||
disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this,
|
||||
SLOT(quotesReplyReceived(QNetworkReply *)));
|
||||
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
|
||||
|
||||
m_manager->deleteLater();
|
||||
delete ui;
|
||||
@ -119,26 +122,15 @@ void ExtQuotes::readConfiguration()
|
||||
setTicker(settings.value(QString("X-AW-Ticker"), ticker()).toString());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEQAPI);
|
||||
bumpApi(AW_EXTQUOTES_API);
|
||||
}
|
||||
|
||||
|
||||
QVariantHash ExtQuotes::run()
|
||||
{
|
||||
if ((!isActive()) || (m_isRunning))
|
||||
if (m_isRunning)
|
||||
return m_values;
|
||||
|
||||
if (m_times == 1) {
|
||||
qCInfo(LOG_LIB) << "Send request";
|
||||
m_isRunning = true;
|
||||
QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url));
|
||||
new QReplyTimeout(reply, REQUEST_TIMEOUT);
|
||||
}
|
||||
|
||||
// update value
|
||||
if (m_times >= interval())
|
||||
m_times = 0;
|
||||
m_times++;
|
||||
startTimer();
|
||||
|
||||
return m_values;
|
||||
}
|
||||
@ -154,6 +146,8 @@ int ExtQuotes::showConfiguration(const QVariant args)
|
||||
ui->lineEdit_ticker->setText(ticker());
|
||||
ui->checkBox_active->setCheckState(isActive() ? Qt::Checked
|
||||
: Qt::Unchecked);
|
||||
ui->lineEdit_schedule->setText(cron());
|
||||
ui->lineEdit_socket->setText(socket());
|
||||
ui->spinBox_interval->setValue(interval());
|
||||
|
||||
int ret = exec();
|
||||
@ -162,9 +156,11 @@ int ExtQuotes::showConfiguration(const QVariant args)
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setNumber(ui->label_numberValue->text().toInt());
|
||||
setApiVersion(AWEQAPI);
|
||||
setApiVersion(AW_EXTQUOTES_API);
|
||||
setTicker(ui->lineEdit_ticker->text());
|
||||
setActive(ui->checkBox_active->checkState() == Qt::Checked);
|
||||
setCron(ui->lineEdit_schedule->text());
|
||||
setSocket(ui->lineEdit_socket->text());
|
||||
setInterval(ui->spinBox_interval->value());
|
||||
|
||||
writeConfiguration();
|
||||
@ -245,6 +241,14 @@ void ExtQuotes::quotesReplyReceived(QNetworkReply *reply)
|
||||
}
|
||||
|
||||
|
||||
void ExtQuotes::sendRequest()
|
||||
{
|
||||
m_isRunning = true;
|
||||
QNetworkReply *reply = m_manager->get(QNetworkRequest(m_url));
|
||||
new QReplyTimeout(reply, REQUEST_TIMEOUT);
|
||||
}
|
||||
|
||||
|
||||
void ExtQuotes::initUrl()
|
||||
{
|
||||
// init query
|
||||
@ -271,5 +275,7 @@ get quotes for the instrument. Refer to <a href=\"http://finance.yahoo.com/\">\
|
||||
</span></a></p></body></html>"));
|
||||
ui->label_ticker->setText(i18n("Ticker"));
|
||||
ui->checkBox_active->setText(i18n("Active"));
|
||||
ui->label_schedule->setText(i18n("Schedule"));
|
||||
ui->label_socket->setText(i18n("Socket"));
|
||||
ui->label_interval->setText(i18n("Interval"));
|
||||
}
|
||||
|
@ -22,10 +22,6 @@
|
||||
|
||||
#include "abstractextitem.h"
|
||||
|
||||
#define YAHOO_QUOTES_URL "https://query.yahooapis.com/v1/public/yql"
|
||||
#define YAHOO_QUOTES_QUERY \
|
||||
"select * from yahoo.finance.quotes where symbol='%1'"
|
||||
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
@ -38,6 +34,10 @@ class ExtQuotes : public AbstractExtItem
|
||||
Q_PROPERTY(QString ticker READ ticker WRITE setTicker)
|
||||
|
||||
public:
|
||||
const char *YAHOO_QUOTES_URL = "https://query.yahooapis.com/v1/public/yql";
|
||||
const char *YAHOO_QUOTES_QUERY
|
||||
= "select * from yahoo.finance.quotes where symbol='%1'";
|
||||
|
||||
explicit ExtQuotes(QWidget *parent, const QString filePath = QString());
|
||||
virtual ~ExtQuotes();
|
||||
ExtQuotes *copy(const QString _fileName, const int _number);
|
||||
@ -55,6 +55,7 @@ public slots:
|
||||
|
||||
private slots:
|
||||
void quotesReplyReceived(QNetworkReply *reply);
|
||||
void sendRequest();
|
||||
|
||||
private:
|
||||
QNetworkAccessManager *m_manager = nullptr;
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>420</width>
|
||||
<height>301</height>
|
||||
<height>339</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -150,6 +150,52 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_schedule">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_schedule">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Schedule</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_schedule"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_socket">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_socket">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Socket</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_socket"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_interval">
|
||||
<item>
|
||||
|
@ -48,6 +48,8 @@ ExtScript::ExtScript(QWidget *parent, const QString filePath)
|
||||
connect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this,
|
||||
SLOT(updateValue()));
|
||||
m_process->waitForFinished(0);
|
||||
|
||||
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess()));
|
||||
}
|
||||
|
||||
|
||||
@ -55,8 +57,11 @@ ExtScript::~ExtScript()
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
disconnect(m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this,
|
||||
SLOT(updateValue()));
|
||||
m_process->kill();
|
||||
m_process->deleteLater();
|
||||
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess()));
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@ -78,6 +83,18 @@ ExtScript *ExtScript::copy(const QString _fileName, const int _number)
|
||||
}
|
||||
|
||||
|
||||
QString ExtScript::jsonFiltersFile() const
|
||||
{
|
||||
QString fileName = QStandardPaths::locate(
|
||||
QStandardPaths::GenericDataLocation,
|
||||
QString(
|
||||
"awesomewidgets/scripts/awesomewidgets-extscripts-filters.json"));
|
||||
qCInfo(LOG_LIB) << "Filters file" << fileName;
|
||||
|
||||
return fileName;
|
||||
}
|
||||
|
||||
|
||||
QString ExtScript::executable() const
|
||||
{
|
||||
return m_executable;
|
||||
@ -186,8 +203,8 @@ QString ExtScript::applyFilters(QString _value) const
|
||||
qCInfo(LOG_LIB) << "Found filter" << filt;
|
||||
QVariantMap filter = m_jsonFilters[filt].toMap();
|
||||
if (filter.isEmpty()) {
|
||||
qCWarning(LOG_LIB) << "Could not find filter" << _value
|
||||
<< "in the json";
|
||||
qCWarning(LOG_LIB)
|
||||
<< "Could not find filter" << _value << "in the json";
|
||||
continue;
|
||||
}
|
||||
for (auto f : filter.keys())
|
||||
@ -229,17 +246,13 @@ void ExtScript::readConfiguration()
|
||||
.split(QChar(','), QString::SkipEmptyParts));
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWESAPI);
|
||||
bumpApi(AW_EXTSCRIPT_API);
|
||||
}
|
||||
|
||||
|
||||
void ExtScript::readJsonFilters()
|
||||
{
|
||||
QString fileName = QStandardPaths::locate(
|
||||
QStandardPaths::GenericDataLocation,
|
||||
QString(
|
||||
"awesomewidgets/scripts/awesomewidgets-extscripts-filters.json"));
|
||||
qCInfo(LOG_LIB) << "Filters file" << fileName;
|
||||
QString fileName = jsonFiltersFile();
|
||||
QFile jsonFile(fileName);
|
||||
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qCWarning(LOG_LIB) << "Could not open" << fileName;
|
||||
@ -262,25 +275,9 @@ void ExtScript::readJsonFilters()
|
||||
|
||||
QVariantHash ExtScript::run()
|
||||
{
|
||||
if (!isActive())
|
||||
return m_values;
|
||||
if (m_process->state() != QProcess::NotRunning)
|
||||
qCWarning(LOG_LIB) << "Another process is already running"
|
||||
<< m_process->state();
|
||||
|
||||
if ((m_times == 1) && (m_process->state() == QProcess::NotRunning)) {
|
||||
QStringList cmdList;
|
||||
if (!prefix().isEmpty())
|
||||
cmdList.append(prefix());
|
||||
cmdList.append(executable());
|
||||
qCInfo(LOG_LIB) << "Run cmd" << cmdList.join(QChar(' '));
|
||||
m_process->start(cmdList.join(QChar(' ')));
|
||||
}
|
||||
|
||||
// update value
|
||||
if (m_times >= interval())
|
||||
m_times = 0;
|
||||
m_times++;
|
||||
return m_values;
|
||||
startTimer();
|
||||
|
||||
return m_values;
|
||||
}
|
||||
@ -298,6 +295,8 @@ int ExtScript::showConfiguration(const QVariant args)
|
||||
ui->checkBox_active->setCheckState(isActive() ? Qt::Checked
|
||||
: Qt::Unchecked);
|
||||
ui->comboBox_redirect->setCurrentIndex(static_cast<int>(redirect()));
|
||||
ui->lineEdit_schedule->setText(cron());
|
||||
ui->lineEdit_socket->setText(socket());
|
||||
ui->spinBox_interval->setValue(interval());
|
||||
// filters
|
||||
ui->checkBox_colorFilter->setCheckState(
|
||||
@ -313,11 +312,13 @@ int ExtScript::showConfiguration(const QVariant args)
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setNumber(ui->label_numberValue->text().toInt());
|
||||
setApiVersion(AWESAPI);
|
||||
setApiVersion(AW_EXTSCRIPT_API);
|
||||
setExecutable(ui->lineEdit_command->text());
|
||||
setPrefix(ui->lineEdit_prefix->text());
|
||||
setActive(ui->checkBox_active->checkState() == Qt::Checked);
|
||||
setRedirect(static_cast<Redirect>(ui->comboBox_redirect->currentIndex()));
|
||||
setCron(ui->lineEdit_schedule->text());
|
||||
setSocket(ui->lineEdit_socket->text());
|
||||
setInterval(ui->spinBox_interval->value());
|
||||
// filters
|
||||
updateFilter(QString("color"),
|
||||
@ -350,6 +351,17 @@ void ExtScript::writeConfiguration() const
|
||||
}
|
||||
|
||||
|
||||
void ExtScript::startProcess()
|
||||
{
|
||||
QStringList cmdList;
|
||||
if (!prefix().isEmpty())
|
||||
cmdList.append(prefix());
|
||||
cmdList.append(executable());
|
||||
qCInfo(LOG_LIB) << "Run cmd" << cmdList.join(QChar(' '));
|
||||
m_process->start(cmdList.join(QChar(' ')));
|
||||
}
|
||||
|
||||
|
||||
void ExtScript::updateValue()
|
||||
{
|
||||
qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode();
|
||||
@ -392,6 +404,8 @@ void ExtScript::translate()
|
||||
ui->label_prefix->setText(i18n("Prefix"));
|
||||
ui->checkBox_active->setText(i18n("Active"));
|
||||
ui->label_redirect->setText(i18n("Redirect"));
|
||||
ui->label_schedule->setText(i18n("Schedule"));
|
||||
ui->label_socket->setText(i18n("Socket"));
|
||||
ui->label_interval->setText(i18n("Interval"));
|
||||
ui->groupBox_filters->setTitle(i18n("Additional filters"));
|
||||
ui->checkBox_colorFilter->setText(i18n("Wrap colors"));
|
||||
|
@ -47,6 +47,7 @@ public:
|
||||
explicit ExtScript(QWidget *parent, const QString filePath = QString());
|
||||
virtual ~ExtScript();
|
||||
ExtScript *copy(const QString _fileName, const int _number);
|
||||
QString jsonFiltersFile() const;
|
||||
// get methods
|
||||
QString executable() const;
|
||||
QStringList filters() const;
|
||||
@ -73,6 +74,7 @@ public slots:
|
||||
void writeConfiguration() const;
|
||||
|
||||
private slots:
|
||||
void startProcess();
|
||||
void updateValue();
|
||||
|
||||
private:
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>420</width>
|
||||
<height>424</height>
|
||||
<height>473</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -195,6 +195,52 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_schedule">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_schedule">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Schedule</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_schedule"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_socket">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_socket">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Socket</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_socket"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_interval">
|
||||
<item>
|
||||
|
@ -44,6 +44,8 @@ ExtUpgrade::ExtUpgrade(QWidget *parent, const QString filePath)
|
||||
m_process = new QProcess(nullptr);
|
||||
connect(m_process, SIGNAL(finished(int)), this, SLOT(updateValue()));
|
||||
m_process->waitForFinished(0);
|
||||
|
||||
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess()));
|
||||
}
|
||||
|
||||
|
||||
@ -53,6 +55,7 @@ ExtUpgrade::~ExtUpgrade()
|
||||
|
||||
m_process->kill();
|
||||
m_process->deleteLater();
|
||||
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(startProcess()));
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@ -136,25 +139,15 @@ void ExtUpgrade::readConfiguration()
|
||||
setFilter(settings.value(QString("X-AW-Filter"), filter()).toString());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEUAPI);
|
||||
bumpApi(AW_EXTUPGRADE_API);
|
||||
}
|
||||
|
||||
|
||||
QVariantHash ExtUpgrade::run()
|
||||
{
|
||||
if (!isActive())
|
||||
if (m_process->state() != QProcess::NotRunning)
|
||||
return m_values;
|
||||
|
||||
if ((m_times == 1) && (m_process->state() == QProcess::NotRunning)) {
|
||||
QString cmd = QString("sh -c \"%1\"").arg(executable());
|
||||
qCInfo(LOG_LIB) << "Run cmd" << cmd;
|
||||
m_process->start(cmd);
|
||||
}
|
||||
|
||||
// update value
|
||||
if (m_times >= interval())
|
||||
m_times = 0;
|
||||
m_times++;
|
||||
startTimer();
|
||||
|
||||
return m_values;
|
||||
}
|
||||
@ -172,6 +165,8 @@ int ExtUpgrade::showConfiguration(const QVariant args)
|
||||
ui->checkBox_active->setCheckState(isActive() ? Qt::Checked
|
||||
: Qt::Unchecked);
|
||||
ui->spinBox_null->setValue(null());
|
||||
ui->lineEdit_schedule->setText(cron());
|
||||
ui->lineEdit_socket->setText(socket());
|
||||
ui->spinBox_interval->setValue(interval());
|
||||
|
||||
int ret = exec();
|
||||
@ -180,11 +175,13 @@ int ExtUpgrade::showConfiguration(const QVariant args)
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setNumber(ui->label_numberValue->text().toInt());
|
||||
setApiVersion(AWEUAPI);
|
||||
setApiVersion(AW_EXTUPGRADE_API);
|
||||
setExecutable(ui->lineEdit_command->text());
|
||||
setFilter(ui->lineEdit_filter->text());
|
||||
setActive(ui->checkBox_active->checkState() == Qt::Checked);
|
||||
setNull(ui->spinBox_null->value());
|
||||
setCron(ui->lineEdit_schedule->text());
|
||||
setSocket(ui->lineEdit_socket->text());
|
||||
setInterval(ui->spinBox_interval->value());
|
||||
|
||||
writeConfiguration();
|
||||
@ -209,6 +206,14 @@ void ExtUpgrade::writeConfiguration() const
|
||||
}
|
||||
|
||||
|
||||
void ExtUpgrade::startProcess()
|
||||
{
|
||||
QString cmd = QString("sh -c \"%1\"").arg(executable());
|
||||
qCInfo(LOG_LIB) << "Run cmd" << cmd;
|
||||
m_process->start(cmd);
|
||||
}
|
||||
|
||||
|
||||
void ExtUpgrade::updateValue()
|
||||
{
|
||||
qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode();
|
||||
@ -239,5 +244,7 @@ void ExtUpgrade::translate()
|
||||
ui->label_filter->setText(i18n("Filter"));
|
||||
ui->checkBox_active->setText(i18n("Active"));
|
||||
ui->label_null->setText(i18n("Null"));
|
||||
ui->label_socket->setText(i18n("Socket"));
|
||||
ui->label_schedule->setText(i18n("Schedule"));
|
||||
ui->label_interval->setText(i18n("Interval"));
|
||||
}
|
||||
|
@ -56,6 +56,7 @@ public slots:
|
||||
void writeConfiguration() const;
|
||||
|
||||
private slots:
|
||||
void startProcess();
|
||||
void updateValue();
|
||||
|
||||
private:
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>420</width>
|
||||
<height>301</height>
|
||||
<height>349</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -181,6 +181,52 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_schedule">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_schedule">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Schedule</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_schedule"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_socket">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_socket">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Socket</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_socket"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_interval">
|
||||
<item>
|
||||
|
@ -58,6 +58,8 @@ ExtWeather::ExtWeather(QWidget *parent, const QString filePath)
|
||||
m_manager = new QNetworkAccessManager(nullptr);
|
||||
connect(m_manager, SIGNAL(finished(QNetworkReply *)), this,
|
||||
SLOT(weatherReplyReceived(QNetworkReply *)));
|
||||
|
||||
connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
|
||||
}
|
||||
|
||||
|
||||
@ -67,6 +69,7 @@ ExtWeather::~ExtWeather()
|
||||
|
||||
disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this,
|
||||
SLOT(weatherReplyReceived(QNetworkReply *)));
|
||||
disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest()));
|
||||
|
||||
m_manager->deleteLater();
|
||||
delete m_providerObject;
|
||||
@ -92,6 +95,17 @@ ExtWeather *ExtWeather::copy(const QString _fileName, const int _number)
|
||||
}
|
||||
|
||||
|
||||
QString ExtWeather::jsonMapFile() const
|
||||
{
|
||||
QString fileName = QStandardPaths::locate(
|
||||
QStandardPaths::GenericDataLocation,
|
||||
QString("awesomewidgets/weather/awesomewidgets-extweather-ids.json"));
|
||||
qCInfo(LOG_LIB) << "Map file" << fileName;
|
||||
|
||||
return fileName;
|
||||
}
|
||||
|
||||
|
||||
QString ExtWeather::weatherFromInt(const int _id) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Weather ID" << _id;
|
||||
@ -227,16 +241,13 @@ void ExtWeather::readConfiguration()
|
||||
settings.value(QString("X-AW-Provider"), strProvider()).toString());
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWEWAPI);
|
||||
bumpApi(AW_EXTWEATHER_API);
|
||||
}
|
||||
|
||||
|
||||
void ExtWeather::readJsonMap()
|
||||
{
|
||||
QString fileName = QStandardPaths::locate(
|
||||
QStandardPaths::GenericDataLocation,
|
||||
QString("awesomewidgets/weather/awesomewidgets-extweather-ids.json"));
|
||||
qCInfo(LOG_LIB) << "Map file" << fileName;
|
||||
QString fileName = jsonMapFile();
|
||||
QFile jsonFile(fileName);
|
||||
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qCWarning(LOG_LIB) << "Could not open" << fileName;
|
||||
@ -259,21 +270,9 @@ void ExtWeather::readJsonMap()
|
||||
|
||||
QVariantHash ExtWeather::run()
|
||||
{
|
||||
if ((!isActive()) || (m_isRunning))
|
||||
if (m_isRunning)
|
||||
return m_values;
|
||||
|
||||
if (m_times == 1) {
|
||||
qCInfo(LOG_LIB) << "Send request";
|
||||
m_isRunning = true;
|
||||
QNetworkReply *reply
|
||||
= m_manager->get(QNetworkRequest(m_providerObject->url()));
|
||||
new QReplyTimeout(reply, REQUEST_TIMEOUT);
|
||||
}
|
||||
|
||||
// update value
|
||||
if (m_times >= interval())
|
||||
m_times = 0;
|
||||
m_times++;
|
||||
startTimer();
|
||||
|
||||
return m_values;
|
||||
}
|
||||
@ -293,6 +292,8 @@ int ExtWeather::showConfiguration(const QVariant args)
|
||||
ui->checkBox_image->setCheckState(image() ? Qt::Checked : Qt::Unchecked);
|
||||
ui->checkBox_active->setCheckState(isActive() ? Qt::Checked
|
||||
: Qt::Unchecked);
|
||||
ui->lineEdit_schedule->setText(cron());
|
||||
ui->lineEdit_socket->setText(socket());
|
||||
ui->spinBox_interval->setValue(interval());
|
||||
|
||||
int ret = exec();
|
||||
@ -301,13 +302,15 @@ int ExtWeather::showConfiguration(const QVariant args)
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setNumber(ui->label_numberValue->text().toInt());
|
||||
setApiVersion(AWEWAPI);
|
||||
setApiVersion(AW_EXTWEATHER_API);
|
||||
setCity(ui->lineEdit_city->text());
|
||||
setCountry(ui->lineEdit_country->text());
|
||||
setProvider(static_cast<Provider>(ui->comboBox_provider->currentIndex()));
|
||||
setTs(ui->spinBox_timestamp->value());
|
||||
setImage(ui->checkBox_image->checkState() == Qt::Checked);
|
||||
setActive(ui->checkBox_active->checkState() == Qt::Checked);
|
||||
setCron(ui->lineEdit_schedule->text());
|
||||
setSocket(ui->lineEdit_socket->text());
|
||||
setInterval(ui->spinBox_interval->value());
|
||||
|
||||
writeConfiguration();
|
||||
@ -334,6 +337,15 @@ void ExtWeather::writeConfiguration() const
|
||||
}
|
||||
|
||||
|
||||
void ExtWeather::sendRequest()
|
||||
{
|
||||
m_isRunning = true;
|
||||
QNetworkReply *reply
|
||||
= m_manager->get(QNetworkRequest(m_providerObject->url()));
|
||||
new QReplyTimeout(reply, REQUEST_TIMEOUT);
|
||||
}
|
||||
|
||||
|
||||
void ExtWeather::weatherReplyReceived(QNetworkReply *reply)
|
||||
{
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
@ -390,5 +402,7 @@ void ExtWeather::translate()
|
||||
ui->label_timestamp->setText(i18n("Timestamp"));
|
||||
ui->checkBox_image->setText(i18n("Use images"));
|
||||
ui->checkBox_active->setText(i18n("Active"));
|
||||
ui->label_schedule->setText(i18n("Schedule"));
|
||||
ui->label_socket->setText(i18n("Socket"));
|
||||
ui->label_interval->setText(i18n("Interval"));
|
||||
}
|
||||
|
@ -45,6 +45,7 @@ public:
|
||||
explicit ExtWeather(QWidget *parent, const QString filePath = QString());
|
||||
virtual ~ExtWeather();
|
||||
ExtWeather *copy(const QString _fileName, const int _number);
|
||||
QString jsonMapFile() const;
|
||||
QString weatherFromInt(const int _id) const;
|
||||
// get methods
|
||||
QString city() const;
|
||||
@ -70,6 +71,7 @@ public slots:
|
||||
void writeConfiguration() const;
|
||||
|
||||
private slots:
|
||||
void sendRequest();
|
||||
void weatherReplyReceived(QNetworkReply *reply);
|
||||
|
||||
private:
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>420</width>
|
||||
<height>333</height>
|
||||
<height>413</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -248,6 +248,52 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_schedule">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_schedule">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Schedule</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_schedule"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_socket">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_socket">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Socket</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineEdit_socket"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="layout_interval">
|
||||
<item>
|
||||
|
@ -3,7 +3,7 @@ Comment=Default float formatter
|
||||
Encoding=UTF-8
|
||||
Name=Float
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-FillChar=@Variant(\0\0\0\a\0\0)
|
||||
X-AW-ForceWidth=false
|
||||
X-AW-Format=f
|
||||
|
@ -3,7 +3,7 @@ Comment=Default integer formatter
|
||||
Encoding=UTF-8
|
||||
Name=Integer
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-FillChar=@Variant(\0\0\0\a\0\0)
|
||||
X-AW-ForceWidth=false
|
||||
X-AW-Format=f
|
||||
|
@ -3,7 +3,7 @@ Comment=Default list formatter
|
||||
Encoding=UTF-8
|
||||
Name=List
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-Filter=
|
||||
X-AW-Interval=1
|
||||
X-AW-Number=5
|
||||
|
@ -3,7 +3,7 @@ Comment=Float formatter with two symbols
|
||||
Encoding=UTF-8
|
||||
Name=FloatTwoSymbols
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-FillChar=@Variant(\0\0\0\a\0\0)
|
||||
X-AW-ForceWidth=false
|
||||
X-AW-Format=f
|
||||
|
@ -3,7 +3,7 @@ Comment=Long integer formatter
|
||||
Encoding=UTF-8
|
||||
Name=LongInteger
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-FillChar=@Variant(\0\0\0\a\0\0)
|
||||
X-AW-ForceWidth=false
|
||||
X-AW-Format=f
|
||||
|
@ -3,7 +3,7 @@ Comment=Memory in GB formatter
|
||||
Encoding=UTF-8
|
||||
Name=MemGB
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-FillChar=@Variant(\0\0\0\a\0\0)
|
||||
X-AW-ForceWidth=false
|
||||
X-AW-Format=f
|
||||
|
@ -3,7 +3,7 @@ Comment=Memory in MB formatter
|
||||
Encoding=UTF-8
|
||||
Name=MemMB
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-FillChar=@Variant(\0\0\0\a\0\0)
|
||||
X-AW-ForceWidth=false
|
||||
X-AW-Format=f
|
||||
|
@ -3,7 +3,7 @@ Comment=Short integer formatter
|
||||
Encoding=UTF-8
|
||||
Name=ShortInteger
|
||||
X-AW-Active=true
|
||||
X-AW-ApiVersion=2
|
||||
X-AW-ApiVersion=3
|
||||
X-AW-FillChar=@Variant(\0\0\0\a\0\0)
|
||||
X-AW-ForceWidth=false
|
||||
X-AW-Format=f
|
||||
|
@ -455,7 +455,7 @@ void GraphicalItem::readConfiguration()
|
||||
}
|
||||
settings.endGroup();
|
||||
|
||||
bumpApi(AWGIAPI);
|
||||
bumpApi(AW_GRAPHITEM_API);
|
||||
initScene();
|
||||
}
|
||||
|
||||
@ -504,7 +504,7 @@ int GraphicalItem::showConfiguration(const QVariant args)
|
||||
return ret;
|
||||
setName(ui->lineEdit_name->text());
|
||||
setComment(ui->lineEdit_comment->text());
|
||||
setApiVersion(AWGIAPI);
|
||||
setApiVersion(AW_GRAPHITEM_API);
|
||||
setCount(ui->spinBox_count->value());
|
||||
setCustom(ui->checkBox_custom->isChecked());
|
||||
setBar(m_custom ? ui->lineEdit_customValue->text()
|
||||
|
@ -20,17 +20,17 @@
|
||||
|
||||
#include "abstractweatherprovider.h"
|
||||
|
||||
// we are using own server to pass requests to OpenWeatherMap because it
|
||||
// requires specific APPID which belongs to developer not user
|
||||
#define OWM_WEATHER_URL "http://arcanis.me/weather"
|
||||
#define OWM_FORECAST_URL "http://arcanis.me/forecast"
|
||||
|
||||
|
||||
class OWMWeatherProvider : public AbstractWeatherProvider
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
// we are using own server to pass requests to OpenWeatherMap because it
|
||||
// requires specific APPID which belongs to developer not user
|
||||
const char *OWM_WEATHER_URL = "https://arcanis.me/weather";
|
||||
const char *OWM_FORECAST_URL = "https://arcanis.me/forecast";
|
||||
|
||||
explicit OWMWeatherProvider(QObject *parent, const int number);
|
||||
virtual ~OWMWeatherProvider();
|
||||
void initUrl(const QString city, const QString country, const int);
|
||||
|
158
sources/awesomewidgets/qcronscheduler.cpp
Normal file
158
sources/awesomewidgets/qcronscheduler.cpp
Normal file
@ -0,0 +1,158 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "qcronscheduler.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QTimer>
|
||||
|
||||
#include "awdebug.h"
|
||||
|
||||
|
||||
QCronScheduler::QCronScheduler(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
m_timer = new QTimer(this);
|
||||
m_timer->setSingleShot(false);
|
||||
m_timer->setInterval(60 * 1000);
|
||||
|
||||
connect(m_timer, SIGNAL(timeout()), this, SLOT(expired()));
|
||||
|
||||
m_timer->start();
|
||||
}
|
||||
|
||||
|
||||
QCronScheduler::~QCronScheduler()
|
||||
{
|
||||
qCDebug(LOG_LIB) << __PRETTY_FUNCTION__;
|
||||
|
||||
m_timer->stop();
|
||||
delete m_timer;
|
||||
}
|
||||
|
||||
|
||||
void QCronScheduler::parse(const QString &timer)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Parse timer string" << timer;
|
||||
|
||||
QStringList fields = timer.split(' ');
|
||||
if (fields.count() != 5)
|
||||
return;
|
||||
|
||||
m_schedule.minutes = parseField(fields.at(0), 0, 59);
|
||||
m_schedule.hours = parseField(fields.at(1), 0, 23);
|
||||
m_schedule.days = parseField(fields.at(2), 1, 31);
|
||||
m_schedule.months = parseField(fields.at(3), 1, 12);
|
||||
m_schedule.weekdays = parseField(fields.at(4), 1, 7);
|
||||
}
|
||||
|
||||
|
||||
void QCronScheduler::expired()
|
||||
{
|
||||
QDateTime now = QDateTime::currentDateTime();
|
||||
|
||||
if (m_schedule.minutes.contains(now.time().minute())
|
||||
&& m_schedule.hours.contains(now.time().hour())
|
||||
&& m_schedule.days.contains(now.date().day())
|
||||
&& m_schedule.months.contains(now.date().month())
|
||||
&& m_schedule.weekdays.contains(now.date().dayOfWeek()))
|
||||
emit(activated());
|
||||
}
|
||||
|
||||
|
||||
QList<int> QCronScheduler::parseField(const QString &value, const int min,
|
||||
const int max) const
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Parse field" << value << "with corner values" << min
|
||||
<< max;
|
||||
|
||||
QList<int> parsed;
|
||||
auto fields = value.split(',');
|
||||
for (auto &field : fields) {
|
||||
QCronField parsedField;
|
||||
parsedField.fromRange(field.split('/').first(), min, max);
|
||||
if (field.contains('/')) {
|
||||
bool status;
|
||||
parsedField.div = field.split('/', QString::SkipEmptyParts)
|
||||
.at(1)
|
||||
.toInt(&status);
|
||||
if (!status)
|
||||
parsedField.div = 1;
|
||||
}
|
||||
// append
|
||||
parsed.append(parsedField.toList());
|
||||
}
|
||||
|
||||
return parsed;
|
||||
}
|
||||
|
||||
|
||||
void QCronScheduler::QCronField::fromRange(const QString &range, const int min,
|
||||
const int max)
|
||||
{
|
||||
qCDebug(LOG_LIB) << "Parse field from range" << range
|
||||
<< "with corner values" << min << max;
|
||||
|
||||
if (range == '*') {
|
||||
minValue = min;
|
||||
maxValue = max;
|
||||
} else if (range.contains('-')) {
|
||||
auto interval = range.split('-', QString::SkipEmptyParts);
|
||||
if (interval.count() != 2)
|
||||
return;
|
||||
bool status;
|
||||
// minimal value
|
||||
minValue = std::max(min, interval.at(0).toInt(&status));
|
||||
if (!status)
|
||||
minValue = -1;
|
||||
// maximal value
|
||||
maxValue = std::min(max, interval.at(1).toInt(&status));
|
||||
if (!status)
|
||||
maxValue = -1;
|
||||
// error check
|
||||
if (minValue > maxValue)
|
||||
std::swap(minValue, maxValue);
|
||||
} else {
|
||||
bool status;
|
||||
int value = range.toInt(&status);
|
||||
if (!status || (value < min) || (value > max))
|
||||
value = -1;
|
||||
minValue = value;
|
||||
maxValue = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QList<int> QCronScheduler::QCronField::toList()
|
||||
{
|
||||
// error checking
|
||||
if ((minValue == -1) || (maxValue == -1))
|
||||
return QList<int>();
|
||||
|
||||
QList<int> output;
|
||||
for (auto i = minValue; i <= maxValue; ++i) {
|
||||
if (i % div != 0)
|
||||
continue;
|
||||
output.append(i);
|
||||
}
|
||||
|
||||
std::sort(output.begin(), output.end());
|
||||
return output;
|
||||
}
|
64
sources/awesomewidgets/qcronscheduler.h
Normal file
64
sources/awesomewidgets/qcronscheduler.h
Normal file
@ -0,0 +1,64 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef QCRONSCHEDULER_H
|
||||
#define QCRONSCHEDULER_H
|
||||
|
||||
#include "QObject"
|
||||
|
||||
|
||||
class QTimer;
|
||||
|
||||
class QCronScheduler : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
typedef struct {
|
||||
QList<int> minutes;
|
||||
QList<int> hours;
|
||||
QList<int> days;
|
||||
QList<int> months;
|
||||
QList<int> weekdays;
|
||||
} QCronRunSchedule;
|
||||
typedef struct {
|
||||
int minValue = -1;
|
||||
int maxValue = -1;
|
||||
int div = 1;
|
||||
void fromRange(const QString &range, const int min, const int max);
|
||||
QList<int> toList();
|
||||
} QCronField;
|
||||
|
||||
explicit QCronScheduler(QObject *parent);
|
||||
virtual ~QCronScheduler();
|
||||
void parse(const QString &timer);
|
||||
|
||||
signals:
|
||||
void activated();
|
||||
|
||||
private slots:
|
||||
void expired();
|
||||
|
||||
private:
|
||||
QCronRunSchedule m_schedule;
|
||||
QTimer *m_timer = nullptr;
|
||||
QList<int> parseField(const QString &value, const int min,
|
||||
const int max) const;
|
||||
};
|
||||
|
||||
|
||||
#endif /* QCRONSCHEDULER_H */
|
9
sources/awesomewidgets/requests/httpbin.desktop
Normal file
9
sources/awesomewidgets/requests/httpbin.desktop
Normal file
@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Encoding=UTF-8
|
||||
Name=httpbin
|
||||
Comment=httpbin example
|
||||
X-AW-Ticker=https://httpbin.org/get
|
||||
X-AW-Active=false
|
||||
X-AW-ApiVersion=1
|
||||
X-AW-Interval=10
|
||||
X-AW-Number=0
|
@ -93,8 +93,9 @@ YahooWeatherProvider::parseCurrent(const QVariantMap &json,
|
||||
= json[QString("condition")].toMap()[QString("date")].toString();
|
||||
values[QString("humidity%1").arg(number())]
|
||||
= atmosphere[QString("humidity")].toInt();
|
||||
values[QString("pressure%1").arg(number())]
|
||||
= static_cast<int>(atmosphere[QString("pressure")].toFloat());
|
||||
// HACK temporary fix of invalid values on Yahoo! side
|
||||
values[QString("pressure%1").arg(number())] = static_cast<int>(
|
||||
atmosphere[QString("pressure")].toFloat() / 33.863753);
|
||||
|
||||
return values;
|
||||
}
|
||||
|
@ -20,17 +20,17 @@
|
||||
|
||||
#include "abstractweatherprovider.h"
|
||||
|
||||
#define YAHOO_WEATHER_URL "https://query.yahooapis.com/v1/public/yql"
|
||||
#define YAHOO_WEATHER_QUERY \
|
||||
"select * from weather.forecast where u='c' and woeid in (select woeid " \
|
||||
"from geo.places(1) where text='%1, %2')"
|
||||
|
||||
|
||||
class YahooWeatherProvider : public AbstractWeatherProvider
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
const char *YAHOO_WEATHER_URL = "https://query.yahooapis.com/v1/public/yql";
|
||||
const char *YAHOO_WEATHER_QUERY = "select * from weather.forecast where "
|
||||
"u='c' and woeid in (select woeid from "
|
||||
"geo.places(1) where text='%1, %2')";
|
||||
|
||||
explicit YahooWeatherProvider(QObject *parent, const int number);
|
||||
virtual ~YahooWeatherProvider();
|
||||
void initUrl(const QString city, const QString country, const int);
|
||||
|
@ -14,7 +14,8 @@ endforeach ()
|
||||
add_custom_target(
|
||||
cppcheck
|
||||
COMMAND ${CPPCHECK_EXECUTABLE}
|
||||
--enable=warning,performance,portability,information,missingInclude
|
||||
--enable=warning,performance,portability
|
||||
--error-exitcode=1
|
||||
--std=c++11
|
||||
--language=c++
|
||||
--library=qt.cfg
|
||||
|
@ -60,6 +60,12 @@
|
||||
<entry name="fontStyle" type="string">
|
||||
<default>normal</default>
|
||||
</entry>
|
||||
<entry name="textStyle" type="string">
|
||||
<default>normal</default>
|
||||
</entry>
|
||||
<entry name="textStyleColor" type="string">
|
||||
<default>#000000</default>
|
||||
</entry>
|
||||
<!-- current -->
|
||||
<entry name="currentTextAlign" type="string">
|
||||
<default>center</default>
|
||||
@ -79,6 +85,12 @@
|
||||
<entry name="currentFontStyle" type="string">
|
||||
<default>normal</default>
|
||||
</entry>
|
||||
<entry name="currentTextStyle" type="string">
|
||||
<default>normal</default>
|
||||
</entry>
|
||||
<entry name="currentTextStyleColor" type="string">
|
||||
<default>#000000</default>
|
||||
</entry>
|
||||
</group>
|
||||
|
||||
</kcfg>
|
||||
|
@ -16,8 +16,6 @@
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Layouts 1.0 as QtLayouts
|
||||
|
||||
import org.kde.plasma.private.desktoppanel 1.0
|
||||
|
||||
@ -31,98 +29,11 @@ Item {
|
||||
|
||||
width: childrenRect.width
|
||||
height: childrenRect.height
|
||||
implicitWidth: pageColumn.implicitWidth
|
||||
implicitHeight: pageColumn.implicitHeight
|
||||
|
||||
property bool debug: dpAdds.isDebugEnabled()
|
||||
|
||||
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
QtControls.TabView {
|
||||
height: parent.height
|
||||
width: parent.width
|
||||
QtControls.Tab {
|
||||
anchors.margins: 10.0
|
||||
title: i18n("About")
|
||||
|
||||
QtLayouts.ColumnLayout {
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: dpAdds.getAboutText("header")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: dpAdds.getAboutText("version")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
text: dpAdds.getAboutText("description")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
textFormat: Text.RichText
|
||||
text: dpAdds.getAboutText("links")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillHeight: true
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
font.capitalization: Font.SmallCaps
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignBottom
|
||||
textFormat: Text.RichText
|
||||
text: dpAdds.getAboutText("copy")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.Tab {
|
||||
anchors.margins: 10.0
|
||||
title: i18n("Acknowledgment")
|
||||
|
||||
QtLayouts.ColumnLayout {
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
text: dpAdds.getAboutText("translators")
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
textFormat: Text.RichText
|
||||
text: dpAdds.getAboutText("3rdparty")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
|
||||
QtControls.Label {
|
||||
QtLayouts.Layout.fillHeight: true
|
||||
QtLayouts.Layout.fillWidth: true
|
||||
wrapMode: Text.WordWrap
|
||||
horizontalAlignment: Text.AlignJustify
|
||||
verticalAlignment: Text.AlignTop
|
||||
textFormat: Text.RichText
|
||||
text: dpAdds.getAboutText("thanks")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
AboutTab {
|
||||
textProvider: dpAdds
|
||||
}
|
||||
|
||||
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
}
|
||||
|
@ -16,11 +16,9 @@
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Controls.Styles 1.3 as QtStyles
|
||||
import QtQuick.Dialogs 1.1 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.desktoppanel 1.0
|
||||
import "."
|
||||
|
||||
|
||||
Item {
|
||||
@ -36,203 +34,69 @@ Item {
|
||||
implicitHeight: pageColumn.implicitHeight
|
||||
|
||||
property bool debug: dpAdds.isDebugEnabled()
|
||||
property variant weight: {
|
||||
25: 0,
|
||||
50: 1,
|
||||
63: 3,
|
||||
75: 4,
|
||||
87: 5
|
||||
}
|
||||
|
||||
property alias cfg_currentFontFamily: selectFont.text
|
||||
property alias cfg_currentFontFamily: font.value
|
||||
property alias cfg_currentFontSize: fontSize.value
|
||||
property string cfg_currentFontWeight: fontWeight.currentText
|
||||
property string cfg_currentFontStyle: fontStyle.currentText
|
||||
property string cfg_currentFontWeight: fontWeight.value
|
||||
property string cfg_currentFontStyle: fontStyle.value
|
||||
property alias cfg_currentFontColor: selectColor.text
|
||||
property alias cfg_currentTextStyleColor: selectStyleColor.text
|
||||
property string cfg_currentTextStyle: textStyle.value
|
||||
|
||||
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: selectFont
|
||||
width: parent.width * 2 / 3
|
||||
text: plasmoid.configuration.currentFontFamily
|
||||
onClicked: {
|
||||
if (debug) console.debug()
|
||||
fontDialog.setFont()
|
||||
fontDialog.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
FontSelector {
|
||||
id: font
|
||||
text: i18n("Font")
|
||||
value: plasmoid.configuration.currentFontFamily
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font size")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: fontSize
|
||||
width: parent.width * 2 / 3
|
||||
minimumValue: 8
|
||||
maximumValue: 32
|
||||
stepSize: 1
|
||||
value: plasmoid.configuration.currentFontSize
|
||||
}
|
||||
IntegerSelector {
|
||||
id: fontSize
|
||||
maximumValue: 32
|
||||
minimumValue: 8
|
||||
stepSize: 1
|
||||
text: i18n("Font size")
|
||||
value: plasmoid.configuration.currentFontSize
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font weight")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: fontWeight
|
||||
width: parent.width * 2 / 3
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("light"),
|
||||
'name': "light"
|
||||
},
|
||||
{
|
||||
'label': i18n("normal"),
|
||||
'name': "normal"
|
||||
},
|
||||
{
|
||||
'label': i18n("demi bold"),
|
||||
'name': "demibold"
|
||||
},
|
||||
{
|
||||
'label': i18n("bold"),
|
||||
'name': "bold"
|
||||
},
|
||||
{
|
||||
'label': i18n("black"),
|
||||
'name': "black"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_currentFontWeight = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.currentFontWeight) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
fontWeight.currentIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: fontWeight
|
||||
model: general.fontWeightModel
|
||||
text: i18n("Font weight")
|
||||
value: plasmoid.configuration.currentFontWeight
|
||||
onValueEdited: cfg_currentFontWeight = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font style")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: fontStyle
|
||||
width: parent.width * 2 / 3
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("normal"),
|
||||
'name': "normal"
|
||||
},
|
||||
{
|
||||
'label': i18n("italic"),
|
||||
'name': "italic"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_currentFontStyle = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.currentFontStyle) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
fontStyle.currentIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: fontStyle
|
||||
model: general.fontStyleModel
|
||||
text: i18n("Font style")
|
||||
value: plasmoid.configuration.currentFontStyle
|
||||
onValueEdited: cfg_currentFontStyle = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: selectColor
|
||||
width: parent.width * 2 / 3
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.currentFontColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.currentFontColor
|
||||
onClicked: colorDialog.visible = true
|
||||
}
|
||||
ColorSelector {
|
||||
id: selectColor
|
||||
text: i18n("Font color")
|
||||
value: plasmoid.configuration.currentFontColor
|
||||
}
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: colorDialog
|
||||
title: i18n("Select a color")
|
||||
color: selectColor.text
|
||||
onAccepted: selectColor.text = colorDialog.color
|
||||
}
|
||||
|
||||
QtDialogs.FontDialog {
|
||||
id: fontDialog
|
||||
title: i18n("Select a font")
|
||||
signal setFont
|
||||
|
||||
onAccepted: {
|
||||
if (debug) console.debug()
|
||||
selectFont.text = fontDialog.font.family
|
||||
fontSize.value = fontDialog.font.pointSize
|
||||
fontStyle.currentIndex = fontDialog.font.italic ? 1 : 0
|
||||
fontWeight.currentIndex = weight[fontDialog.font.weight]
|
||||
ComboBoxSelector {
|
||||
id: textStyle
|
||||
model: general.textStyleModel
|
||||
text: i18n("Style")
|
||||
value: plasmoid.configuration.currentTextStyle
|
||||
onValueEdited: cfg_currentTextStyle = newValue
|
||||
}
|
||||
onSetFont: {
|
||||
if (debug) console.debug()
|
||||
fontDialog.font = Qt.font({
|
||||
family: selectFont.text,
|
||||
pointSize: fontSize.value > 0 ? fontSize.value : 12,
|
||||
italic: fontStyle.currentIndex == 1,
|
||||
weight: Font.Normal,
|
||||
})
|
||||
|
||||
ColorSelector {
|
||||
id: selectStyleColor
|
||||
text: i18n("Style color")
|
||||
value: plasmoid.configuration.currentTextStyleColor
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,8 +17,6 @@
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Controls.Styles 1.3 as QtStyles
|
||||
import QtQuick.Dialogs 1.1 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.desktoppanel 1.0
|
||||
|
||||
@ -41,213 +39,154 @@ Item {
|
||||
property alias cfg_verticalLayout: verticalLayout.checked
|
||||
property alias cfg_height: widgetHeight.value
|
||||
property alias cfg_width: widgetWidth.value
|
||||
property string cfg_mark: mark.currentText
|
||||
property string cfg_tooltipType: tooltipType.currentText
|
||||
property string cfg_mark: mark.value
|
||||
property string cfg_tooltipType: tooltipType.value
|
||||
property alias cfg_tooltipWidth: tooltipWidth.value
|
||||
property alias cfg_tooltipColor: tooltipColor.text
|
||||
property alias cfg_tooltipColor: tooltipColor.value
|
||||
|
||||
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: background
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Enable background")
|
||||
}
|
||||
|
||||
CheckBoxSelector {
|
||||
id: background
|
||||
text: i18n("Enable background")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.heigth
|
||||
width: parent.width * 2 / 5
|
||||
}
|
||||
QtControls.CheckBox {
|
||||
id: verticalLayout
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Vertical layout")
|
||||
}
|
||||
CheckBoxSelector {
|
||||
id: verticalLayout
|
||||
text: i18n("Vertical layout")
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Widget height, px")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: widgetHeight
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 0
|
||||
maximumValue: 4096
|
||||
stepSize: 50
|
||||
value: plasmoid.configuration.height
|
||||
}
|
||||
IntegerSelector {
|
||||
id: widgetHeight
|
||||
maximumValue: 4096
|
||||
minimumValue: 0
|
||||
stepSize: 50
|
||||
text: i18n("Widget height, px")
|
||||
value: plasmoid.configuration.height
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Widget width, px")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: widgetWidth
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 0
|
||||
maximumValue: 4096
|
||||
stepSize: 50
|
||||
value: plasmoid.configuration.width
|
||||
}
|
||||
IntegerSelector {
|
||||
id: widgetWidth
|
||||
maximumValue: 4096
|
||||
minimumValue: 0
|
||||
stepSize: 50
|
||||
text: i18n("Widget width, px")
|
||||
value: plasmoid.configuration.width
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Mark")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: mark
|
||||
width: parent.width * 3 / 5
|
||||
editable: true
|
||||
model: ["#", "$", "%", "&", "*", "@", "¤", "¶", "·", "º",
|
||||
plasmoid.configuration.mark]
|
||||
currentIndex: model.length - 1
|
||||
onCurrentIndexChanged: cfg_mark = currentText
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: mark
|
||||
editable: true
|
||||
model: [
|
||||
{
|
||||
'label': '#',
|
||||
'name': '#'
|
||||
},
|
||||
{
|
||||
'label': '$',
|
||||
'name': '$'
|
||||
},
|
||||
{
|
||||
'label': '%',
|
||||
'name': '%'
|
||||
},
|
||||
{
|
||||
'label': '&',
|
||||
'name': '&'
|
||||
},
|
||||
{
|
||||
'label': '*',
|
||||
'name': '*'
|
||||
},
|
||||
{
|
||||
'label': '@',
|
||||
'name': '@'
|
||||
},
|
||||
{
|
||||
'label': '¤',
|
||||
'name': '¤'
|
||||
},
|
||||
{
|
||||
'label': '¶',
|
||||
'name': '¶'
|
||||
},
|
||||
{
|
||||
'label': '·',
|
||||
'name': '·'
|
||||
},
|
||||
{
|
||||
'label': 'º',
|
||||
'name': 'º'
|
||||
},
|
||||
{
|
||||
'label': plasmoid.configuration.mark,
|
||||
'name': plasmoid.configuration.mark
|
||||
}
|
||||
]
|
||||
text: i18n("Mark")
|
||||
currentIndex: model.length - 1
|
||||
onValueEdited: cfg_mark = newValue
|
||||
}
|
||||
|
||||
QtControls.GroupBox {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
title: i18n("Tooltip")
|
||||
|
||||
Column {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Tooltip type")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: tooltipType
|
||||
width: parent.width * 3 / 5
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("contours"),
|
||||
'name': "contours"
|
||||
},
|
||||
{
|
||||
'label': i18n("windows"),
|
||||
'name': "windows"
|
||||
},
|
||||
{
|
||||
'label': i18n("clean desktop"),
|
||||
'name': "clean"
|
||||
},
|
||||
{
|
||||
'label': i18n("names"),
|
||||
'name': "names"
|
||||
},
|
||||
{
|
||||
'label': i18n("none"),
|
||||
'name': "none"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_tooltipType = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.tooltipType) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
tooltipType.currentIndex = i
|
||||
}
|
||||
}
|
||||
|
||||
ComboBoxSelector {
|
||||
id: tooltipType
|
||||
model: [
|
||||
{
|
||||
'label': i18n("contours"),
|
||||
'name': "contours"
|
||||
},
|
||||
{
|
||||
'label': i18n("windows"),
|
||||
'name': "windows"
|
||||
},
|
||||
{
|
||||
'label': i18n("clean desktop"),
|
||||
'name': "clean"
|
||||
},
|
||||
{
|
||||
'label': i18n("names"),
|
||||
'name': "names"
|
||||
},
|
||||
{
|
||||
'label': i18n("none"),
|
||||
'name': "none"
|
||||
}
|
||||
}
|
||||
]
|
||||
text: i18n("Tooltip type")
|
||||
value: plasmoid.configuration.tooltipType
|
||||
onValueEdited: cfg_tooltipType = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Tooltip width")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: tooltipWidth
|
||||
width: parent.width * 3 / 5
|
||||
minimumValue: 100
|
||||
maximumValue: 1000
|
||||
stepSize: 50
|
||||
value: plasmoid.configuration.tooltipWidth
|
||||
}
|
||||
IntegerSelector {
|
||||
id: tooltipWidth
|
||||
maximumValue: 1000
|
||||
minimumValue: 100
|
||||
stepSize: 50
|
||||
text: i18n("Tooltip width")
|
||||
value: plasmoid.configuration.tooltipWidth
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width * 2 / 5
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: tooltipColor
|
||||
width: parent.width * 3 / 5
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.tooltipColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.tooltipColor
|
||||
onClicked: colorDialog.visible = true
|
||||
}
|
||||
ColorSelector {
|
||||
id: tooltipColor
|
||||
text: i18n("Font color")
|
||||
value: plasmoid.configuration.tooltipColor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: colorDialog
|
||||
title: i18n("Select a color")
|
||||
color: tooltipColor.text
|
||||
onAccepted: tooltipColor.text = colorDialog.color
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
}
|
||||
|
@ -16,11 +16,9 @@
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Controls.Styles 1.3 as QtStyles
|
||||
import QtQuick.Dialogs 1.1 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.desktoppanel 1.0
|
||||
import "."
|
||||
|
||||
|
||||
Item {
|
||||
@ -36,203 +34,69 @@ Item {
|
||||
implicitHeight: pageColumn.implicitHeight
|
||||
|
||||
property bool debug: dpAdds.isDebugEnabled()
|
||||
property variant weight: {
|
||||
25: 0,
|
||||
50: 1,
|
||||
63: 3,
|
||||
75: 4,
|
||||
87: 5
|
||||
}
|
||||
|
||||
property alias cfg_fontFamily: selectFont.text
|
||||
property alias cfg_fontFamily: font.value
|
||||
property alias cfg_fontSize: fontSize.value
|
||||
property string cfg_fontWeight: fontWeight.currentText
|
||||
property string cfg_fontStyle: fontStyle.currentText
|
||||
property alias cfg_fontColor: selectColor.text
|
||||
property string cfg_fontWeight: fontWeight.value
|
||||
property string cfg_fontStyle: fontStyle.value
|
||||
property alias cfg_fontColor: selectColor.value
|
||||
property alias cfg_textStyleColor: selectStyleColor.value
|
||||
property string cfg_textStyle: textStyle.value
|
||||
|
||||
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: selectFont
|
||||
width: parent.width * 2 / 3
|
||||
text: plasmoid.configuration.fontFamily
|
||||
onClicked: {
|
||||
if (debug) console.debug()
|
||||
fontDialog.setFont()
|
||||
fontDialog.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
FontSelector {
|
||||
id: font
|
||||
text: i18n("Font")
|
||||
value: plasmoid.configuration.fontFamily
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font size")
|
||||
}
|
||||
QtControls.SpinBox {
|
||||
id: fontSize
|
||||
width: parent.width * 2 / 3
|
||||
minimumValue: 8
|
||||
maximumValue: 32
|
||||
stepSize: 1
|
||||
value: plasmoid.configuration.fontSize
|
||||
}
|
||||
IntegerSelector {
|
||||
id: fontSize
|
||||
maximumValue: 32
|
||||
minimumValue: 8
|
||||
stepSize: 1
|
||||
text: i18n("Font size")
|
||||
value: plasmoid.configuration.fontSize
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font weight")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: fontWeight
|
||||
width: parent.width * 2 / 3
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("light"),
|
||||
'name': "light"
|
||||
},
|
||||
{
|
||||
'label': i18n("normal"),
|
||||
'name': "normal"
|
||||
},
|
||||
{
|
||||
'label': i18n("demi bold"),
|
||||
'name': "demibold"
|
||||
},
|
||||
{
|
||||
'label': i18n("bold"),
|
||||
'name': "bold"
|
||||
},
|
||||
{
|
||||
'label': i18n("black"),
|
||||
'name': "black"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_fontWeight = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.fontWeight) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
fontWeight.currentIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: fontWeight
|
||||
model: general.fontWeightModel
|
||||
text: i18n("Font weight")
|
||||
value: plasmoid.configuration.fontWeight
|
||||
onValueEdited: cfg_fontWeight = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font style")
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: fontStyle
|
||||
width: parent.width * 2 / 3
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
'label': i18n("normal"),
|
||||
'name': "normal"
|
||||
},
|
||||
{
|
||||
'label': i18n("italic"),
|
||||
'name': "italic"
|
||||
}
|
||||
]
|
||||
onCurrentIndexChanged: cfg_fontStyle = model[currentIndex]["name"]
|
||||
Component.onCompleted: {
|
||||
if (debug) console.debug()
|
||||
for (var i = 0; i < model.length; i++) {
|
||||
if (model[i]["name"] == plasmoid.configuration.fontStyle) {
|
||||
if (debug) console.info("Found", model[i]["name"], "on", i)
|
||||
fontStyle.currentIndex = i
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ComboBoxSelector {
|
||||
id: fontStyle
|
||||
model: general.fontStyleModel
|
||||
text: i18n("Font style")
|
||||
value: plasmoid.configuration.fontStyle
|
||||
onValueEdited: cfg_fontStyle = newValue
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Label {
|
||||
height: parent.height
|
||||
width: parent.width / 3
|
||||
horizontalAlignment: Text.AlignRight
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: i18n("Font color")
|
||||
}
|
||||
QtControls.Button {
|
||||
id: selectColor
|
||||
width: parent.width * 2 / 3
|
||||
style: QtStyles.ButtonStyle {
|
||||
background: Rectangle {
|
||||
color: plasmoid.configuration.fontColor
|
||||
}
|
||||
}
|
||||
text: plasmoid.configuration.fontColor
|
||||
onClicked: colorDialog.visible = true
|
||||
}
|
||||
ColorSelector {
|
||||
id: selectColor
|
||||
text: i18n("Font color")
|
||||
value: plasmoid.configuration.fontColor
|
||||
}
|
||||
}
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: colorDialog
|
||||
title: i18n("Select a color")
|
||||
color: selectColor.text
|
||||
onAccepted: selectColor.text = colorDialog.color
|
||||
}
|
||||
|
||||
QtDialogs.FontDialog {
|
||||
id: fontDialog
|
||||
title: i18n("Select a font")
|
||||
signal setFont
|
||||
|
||||
onAccepted: {
|
||||
if (debug) console.debug()
|
||||
selectFont.text = fontDialog.font.family
|
||||
fontSize.value = fontDialog.font.pointSize
|
||||
fontStyle.currentIndex = fontDialog.font.italic ? 1 : 0
|
||||
fontWeight.currentIndex = weight[fontDialog.font.weight]
|
||||
ComboBoxSelector {
|
||||
id: textStyle
|
||||
model: general.textStyleModel
|
||||
text: i18n("Style")
|
||||
value: plasmoid.configuration.textStyle
|
||||
onValueEdited: cfg_textStyle = newValue
|
||||
}
|
||||
onSetFont: {
|
||||
if (debug) console.debug()
|
||||
fontDialog.font = Qt.font({
|
||||
family: selectFont.text,
|
||||
pointSize: fontSize.value > 0 ? fontSize.value : 12,
|
||||
italic: fontStyle.currentIndex == 1,
|
||||
weight: Font.Normal,
|
||||
})
|
||||
|
||||
ColorSelector {
|
||||
id: selectStyleColor
|
||||
text: i18n("Style color")
|
||||
value: plasmoid.configuration.textStyleColor
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -124,12 +124,16 @@ Item {
|
||||
repeater.itemAt(i).font.italic = plasmoid.configuration.currentFontStyle == "italic" ? true : false
|
||||
repeater.itemAt(i).font.pointSize = plasmoid.configuration.currentFontSize
|
||||
repeater.itemAt(i).font.weight = general.fontWeight[plasmoid.configuration.currentFontWeight]
|
||||
repeater.itemAt(i).style = general.textStyle[plasmoid.configuration.currentTextStyle]
|
||||
repeater.itemAt(i).styleColor = plasmoid.configuration.currentTextStyleColor
|
||||
} else {
|
||||
repeater.itemAt(i).color = plasmoid.configuration.fontColor
|
||||
repeater.itemAt(i).font.family = plasmoid.configuration.fontFamily
|
||||
repeater.itemAt(i).font.italic = plasmoid.configuration.fontStyle == "italic" ? true : false
|
||||
repeater.itemAt(i).font.pointSize = plasmoid.configuration.fontSize
|
||||
repeater.itemAt(i).font.weight = general.fontWeight[plasmoid.configuration.fontWeight]
|
||||
repeater.itemAt(i).style = general.textStyle[plasmoid.configuration.textStyle]
|
||||
repeater.itemAt(i).styleColor = plasmoid.configuration.textStyleColor
|
||||
}
|
||||
repeater.itemAt(i).update()
|
||||
}
|
||||
|
@ -1 +1,27 @@
|
||||
singleton general 1.0 general.qml
|
||||
# Do not edit qmldir directly it will be overrided during compilation,
|
||||
# edit qml/qmldir.in file instead.
|
||||
|
||||
|
||||
# common QML constants
|
||||
singleton general 1.0 file:///usr/share/awesomewidgets/qml/general.qml
|
||||
|
||||
# custom QML UI classes
|
||||
AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml
|
||||
AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml
|
||||
AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml
|
||||
AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml
|
||||
AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml
|
||||
BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml
|
||||
ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml
|
||||
CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml
|
||||
ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml
|
||||
ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml
|
||||
ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml
|
||||
FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml
|
||||
HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml
|
||||
HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml
|
||||
HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml
|
||||
HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml
|
||||
ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml
|
||||
IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml
|
||||
LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml
|
||||
|
@ -16,10 +16,9 @@
|
||||
***************************************************************************/
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Dialogs 1.2 as QtDialogs
|
||||
|
||||
import org.kde.plasma.private.desktoppanel 1.0
|
||||
import "."
|
||||
|
||||
|
||||
Item {
|
||||
@ -42,204 +41,23 @@ Item {
|
||||
Column {
|
||||
id: pageColumn
|
||||
anchors.fill: parent
|
||||
QtControls.Label {
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.WordWrap
|
||||
text: i18n("Detailed information may be found on <a href=\"https://arcanis.me/projects/awesome-widgets/\">project homepage</a>")
|
||||
onLinkActivated: Qt.openUrlExternally(link)
|
||||
|
||||
AWInfoLabel {}
|
||||
|
||||
HtmlDefaultFunctionsBar {
|
||||
textArea: textPattern
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 15
|
||||
text: i18n("Bgcolor")
|
||||
|
||||
onClicked: backgroundDialog.visible = true
|
||||
|
||||
QtDialogs.ColorDialog {
|
||||
id: backgroundDialog
|
||||
title: i18n("Select a color")
|
||||
onAccepted: {
|
||||
var text = textPattern.text
|
||||
textPattern.text = "<body bgcolor=\"" +
|
||||
backgroundDialog.color + "\">" +
|
||||
text + "</body>"
|
||||
}
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 3 / 15
|
||||
text: i18n("Font")
|
||||
iconName: "font"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Font button")
|
||||
var defaultFont = {
|
||||
"color": plasmoid.configuration.fontColor,
|
||||
"family": plasmoid.configuration.fontFamily,
|
||||
"size": plasmoid.configuration.fontSize
|
||||
}
|
||||
var font = dpAdds.getFont(defaultFont)
|
||||
if (font.applied != 1) {
|
||||
if (debug) console.debug("No font selected")
|
||||
return
|
||||
}
|
||||
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition,
|
||||
"<span style=\"color:" + font.color +
|
||||
"; font-family:'" + font.family +
|
||||
"'; font-size:" + font.size + "pt;\">" +
|
||||
selected + "</span>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-indent-more"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Indent button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, selected + "<br>\n")
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-bold"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Bold button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<b>" + selected + "</b>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-italic"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Italic button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<i>" + selected + "</i>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-underline"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Underline button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<u>" + selected + "</u>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-text-strikethrough"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Strike button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<s>" + selected + "</s>")
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-left"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Left button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"left\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-center"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Center button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"center\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-right"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Right button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"right\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width / 15
|
||||
iconName: "format-justify-fill"
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Justify button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, "<p align=\"justify\">" + selected + "</p>")
|
||||
}
|
||||
}
|
||||
AWTagSelector {
|
||||
backend: dpAdds
|
||||
notifyBackend: dpAdds
|
||||
textArea: textPattern
|
||||
groups: general.dpTagRegexp
|
||||
}
|
||||
|
||||
Row {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.ComboBox {
|
||||
id: tags
|
||||
width: parent.width - addTagButton.width - showValueButton.width
|
||||
model: dpAdds.dictKeys()
|
||||
}
|
||||
QtControls.Button {
|
||||
id: addTagButton
|
||||
text: i18n("Add")
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Add tag button")
|
||||
var selected = textPattern.selectedText
|
||||
textPattern.remove(textPattern.selectionStart, textPattern.selectionEnd)
|
||||
textPattern.insert(textPattern.cursorPosition, selected + "$" + tags.currentText)
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
id: showValueButton
|
||||
text: i18n("Show value")
|
||||
|
||||
onClicked: {
|
||||
if (debug) console.debug("Show tag button")
|
||||
var message = i18n("Tag: %1", tags.currentText)
|
||||
message += "<br>"
|
||||
message += i18n("Value: %1", dpAdds.valueByKey(tags.currentText))
|
||||
dpAdds.sendNotification("tag", message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.TextArea {
|
||||
AWTextEditor {
|
||||
id: textPattern
|
||||
width: parent.width
|
||||
height: parent.height * 4 / 5
|
||||
textFormat: TextEdit.PlainText
|
||||
text: plasmoid.configuration.text
|
||||
backend: dpAdds
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,9 +39,9 @@
|
||||
DPAdds::DPAdds(QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
qSetMessagePattern(LOG_FORMAT);
|
||||
qSetMessagePattern(AWDebug::LOG_FORMAT);
|
||||
qCDebug(LOG_DP) << __PRETTY_FUNCTION__;
|
||||
for (auto metadata : getBuildData())
|
||||
for (auto &metadata : AWDebug::getBuildData())
|
||||
qCDebug(LOG_DP) << metadata;
|
||||
|
||||
connect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)), this,
|
||||
@ -72,15 +72,21 @@ int DPAdds::currentDesktop() const
|
||||
}
|
||||
|
||||
|
||||
QStringList DPAdds::dictKeys() const
|
||||
QStringList DPAdds::dictKeys(const bool sorted, const QString regexp) const
|
||||
{
|
||||
qCDebug(LOG_DP) << "Should be sorted" << sorted << "and filter applied"
|
||||
<< regexp;
|
||||
|
||||
QStringList allKeys;
|
||||
allKeys.append(QString("mark"));
|
||||
allKeys.append(QString("name"));
|
||||
allKeys.append(QString("number"));
|
||||
allKeys.append(QString("total"));
|
||||
|
||||
return allKeys;
|
||||
if (sorted)
|
||||
allKeys.sort();
|
||||
|
||||
return allKeys.filter(QRegExp(regexp));
|
||||
}
|
||||
|
||||
|
||||
@ -220,6 +226,14 @@ void DPAdds::setToolTipData(const QVariantMap tooltipData)
|
||||
}
|
||||
|
||||
|
||||
QString DPAdds::infoByKey(QString key) const
|
||||
{
|
||||
qCDebug(LOG_AW) << "Requested info for key" << key;
|
||||
|
||||
return QString("(none)");
|
||||
}
|
||||
|
||||
|
||||
QString DPAdds::valueByKey(const QString key, int desktop) const
|
||||
{
|
||||
qCDebug(LOG_DP) << "Requested key" << key << "for desktop" << desktop;
|
||||
@ -248,67 +262,7 @@ QString DPAdds::getAboutText(const QString type) const
|
||||
{
|
||||
qCDebug(LOG_DP) << "Type" << type;
|
||||
|
||||
QString text;
|
||||
if (type == QString("header")) {
|
||||
text = QString(NAME);
|
||||
} else if (type == QString("version")) {
|
||||
text = i18n("Version %1 (build date %2)", QString(VERSION),
|
||||
QString(BUILD_DATE));
|
||||
if (!QString(COMMIT_SHA).isEmpty())
|
||||
text += QString(" (%1)").arg(QString(COMMIT_SHA));
|
||||
} else if (type == QString("description")) {
|
||||
text = i18n("A set of minimalistic plasmoid widgets");
|
||||
} else if (type == QString("links")) {
|
||||
text = i18n("Links:") + QString("<br>")
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(HOMEPAGE))
|
||||
.arg(i18n("Homepage"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(REPOSITORY))
|
||||
.arg(i18n("Repository"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(BUGTRACKER))
|
||||
.arg(i18n("Bugtracker"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(TRANSLATION))
|
||||
.arg(i18n("Translation issue"))
|
||||
+ QString("<a href=\"%1\">%2</a><br>")
|
||||
.arg(QString(AUR_PACKAGES))
|
||||
.arg(i18n("AUR packages"))
|
||||
+ QString("<a href=\"%1\">%2</a>")
|
||||
.arg(QString(OPENSUSE_PACKAGES))
|
||||
.arg(i18n("openSUSE packages"));
|
||||
} else if (type == QString("copy")) {
|
||||
text = QString("<small>© %1 <a href=\"mailto:%2\">%3</a><br>")
|
||||
.arg(QString(DATE))
|
||||
.arg(QString(EMAIL))
|
||||
.arg(QString(AUTHOR))
|
||||
+ i18n("This software is licensed under %1", QString(LICENSE))
|
||||
+ QString("</small>");
|
||||
} else if (type == QString("translators")) {
|
||||
text = i18n("Translators: %1", QString(TRANSLATORS));
|
||||
} else if (type == QString("3rdparty")) {
|
||||
QStringList trdPartyList
|
||||
= QString(TRDPARTY_LICENSE)
|
||||
.split(QChar(';'), QString::SkipEmptyParts);
|
||||
for (int i = 0; i < trdPartyList.count(); i++)
|
||||
trdPartyList[i]
|
||||
= QString("<a href=\"%3\">%1</a> (%2 license)")
|
||||
.arg(trdPartyList.at(i).split(QChar(',')).at(0))
|
||||
.arg(trdPartyList.at(i).split(QChar(',')).at(1))
|
||||
.arg(trdPartyList.at(i).split(QChar(',')).at(2));
|
||||
text = i18n("This software uses: %1", trdPartyList.join(QString(", ")));
|
||||
} else if (type == QString("thanks")) {
|
||||
QStringList thanks = QString(SPECIAL_THANKS)
|
||||
.split(QChar(';'), QString::SkipEmptyParts);
|
||||
for (int i = 0; i < thanks.count(); i++)
|
||||
thanks[i] = QString("<a href=\"%2\">%1</a>")
|
||||
.arg(thanks.at(i).split(QChar(','))[0])
|
||||
.arg(thanks.at(i).split(QChar(','))[1]);
|
||||
text = i18n("Special thanks to %1", thanks.join(QString(", ")));
|
||||
}
|
||||
|
||||
return text;
|
||||
return AWDebug::getAboutText(type);
|
||||
}
|
||||
|
||||
|
||||
@ -364,9 +318,10 @@ DPAdds::DesktopWindowsInfo DPAdds::getInfoByDesktop(const int desktop) const
|
||||
|
||||
for (auto id : KWindowSystem::windows()) {
|
||||
KWindowInfo winInfo = KWindowInfo(
|
||||
id, NET::Property::WMDesktop | NET::Property::WMGeometry
|
||||
| NET::Property::WMState | NET::Property::WMWindowType
|
||||
| NET::Property::WMVisibleName);
|
||||
id,
|
||||
NET::Property::WMDesktop | NET::Property::WMGeometry
|
||||
| NET::Property::WMState | NET::Property::WMWindowType
|
||||
| NET::Property::WMVisibleName);
|
||||
if (!winInfo.isOnDesktop(desktop))
|
||||
continue;
|
||||
WindowData data;
|
||||
|
@ -45,7 +45,8 @@ public:
|
||||
virtual ~DPAdds();
|
||||
Q_INVOKABLE bool isDebugEnabled() const;
|
||||
Q_INVOKABLE int currentDesktop() const;
|
||||
Q_INVOKABLE QStringList dictKeys() const;
|
||||
Q_INVOKABLE QStringList dictKeys(const bool sorted = true,
|
||||
const QString regexp = QString()) const;
|
||||
Q_INVOKABLE int numberOfDesktops() const;
|
||||
Q_INVOKABLE QString toolTipImage(const int desktop) const;
|
||||
Q_INVOKABLE QString parsePattern(const QString pattern,
|
||||
@ -53,6 +54,7 @@ public:
|
||||
// values
|
||||
Q_INVOKABLE void setMark(const QString newMark);
|
||||
Q_INVOKABLE void setToolTipData(const QVariantMap tooltipData);
|
||||
Q_INVOKABLE QString infoByKey(QString key) const;
|
||||
Q_INVOKABLE QString valueByKey(const QString key, int desktop = -1) const;
|
||||
// configuration slots
|
||||
Q_INVOKABLE QString getAboutText(const QString type = "header") const;
|
||||
|
@ -32,9 +32,9 @@ ExtendedSysMon::ExtendedSysMon(QObject *parent, const QVariantList &args)
|
||||
: Plasma::DataEngine(parent, args)
|
||||
{
|
||||
Q_UNUSED(args)
|
||||
qSetMessagePattern(LOG_FORMAT);
|
||||
qSetMessagePattern(AWDebug::LOG_FORMAT);
|
||||
qCDebug(LOG_ESM) << __PRETTY_FUNCTION__;
|
||||
for (auto metadata : getBuildData())
|
||||
for (auto &metadata : AWDebug::getBuildData())
|
||||
qCDebug(LOG_ESM) << metadata;
|
||||
|
||||
setMinimumPollingInterval(333);
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "playersource.h"
|
||||
#include "processessource.h"
|
||||
#include "quotessource.h"
|
||||
#include "requestsource.h"
|
||||
#include "upgradesource.h"
|
||||
#include "weathersource.h"
|
||||
|
||||
@ -112,8 +113,9 @@ void ExtSysMonAggregator::init(const QHash<QString, QString> config)
|
||||
m_map[source] = gpuTempItem;
|
||||
// hdd temperature
|
||||
AbstractExtSysMonSource *hddTempItem = new HDDTemperatureSource(
|
||||
this, QStringList() << config[QString("HDDDEV")]
|
||||
<< config[QString("HDDTEMPCMD")]);
|
||||
this,
|
||||
QStringList() << config[QString("HDDDEV")]
|
||||
<< config[QString("HDDTEMPCMD")]);
|
||||
for (auto source : hddTempItem->sources())
|
||||
m_map[source] = hddTempItem;
|
||||
// network
|
||||
@ -123,10 +125,11 @@ void ExtSysMonAggregator::init(const QHash<QString, QString> config)
|
||||
m_map[source] = networkItem;
|
||||
// player
|
||||
AbstractExtSysMonSource *playerItem = new PlayerSource(
|
||||
this, QStringList()
|
||||
<< config[QString("PLAYER")] << config[QString("MPDADDRESS")]
|
||||
<< config[QString("MPDPORT")] << config[QString("MPRIS")]
|
||||
<< config[QString("PLAYERSYMBOLS")]);
|
||||
this,
|
||||
QStringList() << config[QString("PLAYER")]
|
||||
<< config[QString("MPDADDRESS")]
|
||||
<< config[QString("MPDPORT")] << config[QString("MPRIS")]
|
||||
<< config[QString("PLAYERSYMBOLS")]);
|
||||
for (auto source : playerItem->sources())
|
||||
m_map[source] = playerItem;
|
||||
// processes
|
||||
@ -134,6 +137,11 @@ void ExtSysMonAggregator::init(const QHash<QString, QString> config)
|
||||
= new ProcessesSource(this, QStringList());
|
||||
for (auto source : processesItem->sources())
|
||||
m_map[source] = processesItem;
|
||||
// network request
|
||||
AbstractExtSysMonSource *requestItem
|
||||
= new RequestSource(this, QStringList());
|
||||
for (auto source : requestItem->sources())
|
||||
m_map[source] = requestItem;
|
||||
// quotes
|
||||
AbstractExtSysMonSource *quotesItem = new QuotesSource(this, QStringList());
|
||||
for (auto source : quotesItem->sources())
|
||||
|
@ -30,6 +30,7 @@ CustomSource::CustomSource(QObject *parent, const QStringList args)
|
||||
|
||||
m_extScripts
|
||||
= new ExtItemAggregator<ExtScript>(nullptr, QString("scripts"));
|
||||
m_extScripts->initSockets();
|
||||
m_sources = getSources();
|
||||
}
|
||||
|
||||
|
@ -240,9 +240,9 @@ QString PlayerSource::buildString(const QString ¤t, const QString &value,
|
||||
|
||||
int index = value.indexOf(current);
|
||||
if ((current.isEmpty()) || ((index + s + 1) > value.count()))
|
||||
return QString("%1").arg(value.left(s), s, QLatin1Char(' '));
|
||||
return QString("%1").arg(value.left(s), -s, QLatin1Char(' '));
|
||||
else
|
||||
return QString("%1").arg(value.mid(index + 1, s), s, QLatin1Char(' '));
|
||||
return QString("%1").arg(value.mid(index + 1, s), -s, QLatin1Char(' '));
|
||||
}
|
||||
|
||||
|
||||
@ -255,6 +255,12 @@ QString PlayerSource::stripString(const QString &value, const int s)
|
||||
}
|
||||
|
||||
|
||||
bool PlayerSource::isMpdSocketConnected() const
|
||||
{
|
||||
return (m_mpdSocket.state() == QAbstractSocket::ConnectedState);
|
||||
}
|
||||
|
||||
|
||||
void PlayerSource::mpdSocketConnected()
|
||||
{
|
||||
qCDebug(LOG_ESS) << "MPD socket connected to" << m_mpdSocket.peerName()
|
||||
@ -323,8 +329,8 @@ QVariantHash PlayerSource::getPlayerMpdInfo()
|
||||
} else if (m_mpdSocket.state() == QAbstractSocket::ConnectedState) {
|
||||
// send request
|
||||
if (m_mpdSocket.write(MPD_STATUS_REQUEST) == -1)
|
||||
qCWarning(LOG_ESS) << "Could not write request to"
|
||||
<< m_mpdSocket.peerName();
|
||||
qCWarning(LOG_ESS)
|
||||
<< "Could not write request to" << m_mpdSocket.peerName();
|
||||
}
|
||||
|
||||
return m_mpdCached;
|
||||
|
@ -24,8 +24,6 @@
|
||||
|
||||
#include "abstractextsysmonsource.h"
|
||||
|
||||
#define MPD_STATUS_REQUEST "currentsong\nstatus\n"
|
||||
|
||||
|
||||
class QProcess;
|
||||
|
||||
@ -34,6 +32,8 @@ class PlayerSource : public AbstractExtSysMonSource
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
const char *MPD_STATUS_REQUEST = "currentsong\nstatus\n";
|
||||
|
||||
explicit PlayerSource(QObject *parent, const QStringList args);
|
||||
virtual ~PlayerSource();
|
||||
QVariant data(QString source);
|
||||
@ -45,6 +45,8 @@ public:
|
||||
static QString buildString(const QString ¤t, const QString &value,
|
||||
const int s);
|
||||
static QString stripString(const QString &value, const int s);
|
||||
// additional test method
|
||||
bool isMpdSocketConnected() const;
|
||||
|
||||
private slots:
|
||||
void mpdSocketConnected();
|
||||
@ -64,9 +66,9 @@ private:
|
||||
QMutex m_dbusMutex;
|
||||
QString m_player;
|
||||
int m_symbols;
|
||||
QStringList m_metadata = QStringList() << QString("album")
|
||||
<< QString("artist")
|
||||
<< QString("title");
|
||||
QStringList m_metadata = QStringList()
|
||||
<< QString("album") << QString("artist")
|
||||
<< QString("title");
|
||||
QVariantHash m_values;
|
||||
};
|
||||
|
||||
|
@ -29,6 +29,7 @@ QuotesSource::QuotesSource(QObject *parent, const QStringList args)
|
||||
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
||||
|
||||
m_extQuotes = new ExtItemAggregator<ExtQuotes>(nullptr, QString("quotes"));
|
||||
m_extQuotes->initSockets();
|
||||
m_sources = getSources();
|
||||
}
|
||||
|
||||
|
96
sources/extsysmonsources/requestsource.cpp
Normal file
96
sources/extsysmonsources/requestsource.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "requestsource.h"
|
||||
|
||||
#include "awdebug.h"
|
||||
#include "extnetworkrequest.h"
|
||||
|
||||
|
||||
RequestSource::RequestSource(QObject *parent, const QStringList args)
|
||||
: AbstractExtSysMonSource(parent, args)
|
||||
{
|
||||
Q_ASSERT(args.count() == 0);
|
||||
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
||||
|
||||
m_extNetRequest = new ExtItemAggregator<ExtNetworkRequest>(
|
||||
nullptr, QString("requests"));
|
||||
m_extNetRequest->initSockets();
|
||||
m_sources = getSources();
|
||||
}
|
||||
|
||||
|
||||
RequestSource::~RequestSource()
|
||||
{
|
||||
qCDebug(LOG_ESS) << __PRETTY_FUNCTION__;
|
||||
|
||||
delete m_extNetRequest;
|
||||
}
|
||||
|
||||
|
||||
QVariant RequestSource::data(QString source)
|
||||
{
|
||||
qCDebug(LOG_ESS) << "Source" << source;
|
||||
|
||||
int ind = index(source);
|
||||
source.remove(QString("network/"));
|
||||
if (!m_values.contains(source)) {
|
||||
QVariantHash data = m_extNetRequest->itemByTagNumber(ind)->run();
|
||||
for (auto key : data.keys())
|
||||
m_values[key] = data[key];
|
||||
}
|
||||
QVariant value = m_values.take(source);
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
QVariantMap RequestSource::initialData(QString source) const
|
||||
{
|
||||
qCDebug(LOG_ESS) << "Source" << source;
|
||||
|
||||
int ind = index(source);
|
||||
QVariantMap data;
|
||||
if (source.startsWith(QString("network/response"))) {
|
||||
data[QString("min")] = QString("");
|
||||
data[QString("max")] = QString("");
|
||||
data[QString("name")]
|
||||
= QString("Network response for %1")
|
||||
.arg(m_extNetRequest->itemByTagNumber(ind)->uniq());
|
||||
data[QString("type")] = QString("QString");
|
||||
data[QString("units")] = QString("");
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
QStringList RequestSource::sources() const
|
||||
{
|
||||
return m_sources;
|
||||
}
|
||||
|
||||
|
||||
QStringList RequestSource::getSources()
|
||||
{
|
||||
QStringList sources;
|
||||
for (auto item : m_extNetRequest->activeItems())
|
||||
sources.append(
|
||||
QString("network/%1").arg(item->tag(QString("response"))));
|
||||
|
||||
return sources;
|
||||
}
|
50
sources/extsysmonsources/requestsource.h
Normal file
50
sources/extsysmonsources/requestsource.h
Normal file
@ -0,0 +1,50 @@
|
||||
/***************************************************************************
|
||||
* This file is part of awesome-widgets *
|
||||
* *
|
||||
* awesome-widgets 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. *
|
||||
* *
|
||||
* awesome-widgets 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 awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef REQUESTSOURCE_H
|
||||
#define REQUESTSOURCE_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "abstractextsysmonsource.h"
|
||||
#include "extitemaggregator.h"
|
||||
|
||||
|
||||
class ExtNetworkRequest;
|
||||
|
||||
class RequestSource : public AbstractExtSysMonSource
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RequestSource(QObject *parent, const QStringList args);
|
||||
virtual ~RequestSource();
|
||||
QVariant data(QString source);
|
||||
QVariantMap initialData(QString source) const;
|
||||
void run(){};
|
||||
QStringList sources() const;
|
||||
|
||||
private:
|
||||
QStringList getSources();
|
||||
// configuration and values
|
||||
ExtItemAggregator<ExtNetworkRequest> *m_extNetRequest = nullptr;
|
||||
QStringList m_sources;
|
||||
QVariantHash m_values;
|
||||
};
|
||||
|
||||
|
||||
#endif /* REQUESTSOURCE_H */
|
@ -30,6 +30,7 @@ UpgradeSource::UpgradeSource(QObject *parent, const QStringList args)
|
||||
|
||||
m_extUpgrade
|
||||
= new ExtItemAggregator<ExtUpgrade>(nullptr, QString("upgrade"));
|
||||
m_extUpgrade->initSockets();
|
||||
m_sources = getSources();
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@ WeatherSource::WeatherSource(QObject *parent, const QStringList args)
|
||||
|
||||
m_extWeather
|
||||
= new ExtItemAggregator<ExtWeather>(nullptr, QString("weather"));
|
||||
m_extWeather->initSockets();
|
||||
m_sources = getSources();
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user