diff --git a/applets/systemmonitor/common/contents/config/main.xml b/applets/systemmonitor/common/contents/config/main.xml index 1ec8af24c..d125eda41 100644 --- a/applets/systemmonitor/common/contents/config/main.xml +++ b/applets/systemmonitor/common/contents/config/main.xml @@ -1,14 +1,18 @@ + + + 2000 + diff --git a/applets/systemmonitor/common/contents/ui/Applet.qml b/applets/systemmonitor/common/contents/ui/Applet.qml index c2fd8e5a7..f6280d191 100644 --- a/applets/systemmonitor/common/contents/ui/Applet.qml +++ b/applets/systemmonitor/common/contents/ui/Applet.qml @@ -1,158 +1,158 @@ /* * Copyright 2014 Marco Martin * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 or * (at your option) any later version. * * This program 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 Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import QtQuick 2.0 import QtQuick.Layouts 1.1 import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons Item { id: rootItem signal sourceAdded(string source) property Component delegate width: units.gridUnit * 10 height: units.gridUnit * 10 Plasmoid.preferredRepresentation: plasmoid.fullRepresentation Layout.minimumWidth: units.gridUnit * 12 * (plasmoid.formFactor == PlasmaCore.Types.Horizontal ? sourcesModel.count : 1) Layout.minimumHeight: units.gridUnit * 4 * (plasmoid.formFactor == PlasmaCore.Types.Vertical ? sourcesModel.count : 1) Layout.preferredHeight: Layout.minimumHeight function addSource(source1, friendlyName1, source2, friendlyName2) { var found = false; for (var i = 0; i < sourcesModel.count; ++i) { var obj = sourcesModel.get(i); if (obj.source1 == encodeURIComponent(source1) && obj.source2 == encodeURIComponent(source2)) { found = true; break; } } if (found) { return; } smSource.connectSource(source1); if (source2) { smSource.connectSource(source2); } sourcesModel.append( {"source1": encodeURIComponent(source1), "friendlyName1": friendlyName1, "source2": encodeURIComponent(source2), "friendlyName2": friendlyName2, "dataSource": smSource}); } ListModel { id: sourcesModel } Component.onCompleted: { for (var i in smSource.sources) { smSource.sourceAdded(smSource.sources[i]); } } PlasmaCore.DataSource { id: smSource engine: "systemmonitor" - interval: 2000 + interval: plasmoid.configuration.updateInterval onSourceAdded: { if (plasmoid.configuration.sources.length > 0 && plasmoid.configuration.sources.indexOf(encodeURIComponent(source)) === -1) { return; } rootItem.sourceAdded(source); } onSourceRemoved: { for (var i = sourcesModel.count - 1; i >= 0; --i) { var obj = sourcesModel.get(i); if (obj.source1 == source || obj.source2 == source) { sourcesModel.remove(i); } } smSource.disconnectSource(source); } } Connections { target: plasmoid.configuration onSourcesChanged: { if (plasmoid.configuration.sources.length == 0) { for (var i in smSource.sources) { var source = smSource.sources[i]; smSource.sourceAdded(source); } } else { var sourcesToRemove = []; for (var i = sourcesModel.count - 1; i >= 0; --i) { var obj = sourcesModel.get(i); if (plasmoid.configuration.sources.indexOf(encodeURIComponent(obj.source1)) === -1) { sourcesToRemove.push(obj.source1); } } for (i = 0; i < sourcesToRemove.length; ++i) { smSource.sourceRemoved(sourcesToRemove[i]); } for (var i in plasmoid.configuration.sources) { var source = decodeURIComponent(plasmoid.configuration.sources[i]); smSource.sourceAdded(source); } } } } PlasmaExtras.Heading { id: heading width: parent.width level: 2 text: plasmoid.title visible: plasmoid.formFactor != PlasmaCore.Types.Horizontal && plasmoid.formFactor != PlasmaCore.Types.Vertical } GridLayout { rows: 1 columns: 1 flow: plasmoid.formFactor != PlasmaCore.Types.Horizontal ? GridLayout.LeftToRight : GridLayout.TopToBottom anchors { top: heading.visible ? heading.bottom : parent.top bottom: parent.bottom } width: parent.width Repeater { model: sourcesModel delegate: rootItem.delegate } } } diff --git a/applets/systemmonitor/common/contents/ui/ConfigGeneral.qml b/applets/systemmonitor/common/contents/ui/ConfigGeneral.qml index f1b03f0e9..a41a8b64d 100644 --- a/applets/systemmonitor/common/contents/ui/ConfigGeneral.qml +++ b/applets/systemmonitor/common/contents/ui/ConfigGeneral.qml @@ -1,128 +1,145 @@ /* * Copyright 2013 Bhushan Shah * * This program 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 2 of the License, or * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.0 import QtQuick.Controls 1.1 as Controls import QtQuick.Layouts 1.1 as Layouts import org.kde.plasma.core 2.0 as PlasmaCore Item { id: iconsPage width: childrenRect.width height: childrenRect.height implicitWidth: mainColumn.implicitWidth implicitHeight: mainColumn.implicitHeight property var cfg_sources: [] onCfg_sourcesChanged: { if (cfg_sources.length == 0) { for (var i in mainColumn.children) { var child = mainColumn.children[i]; if (child.checked !== undefined) { child.checked = true; } } } else { for (var i in mainColumn.children) { var child = mainColumn.children[i]; if (child.checked !== undefined) { child.checked = cfg_sources.indexOf(child.source) !== -1; } } } } + property int cfg_updateInterval signal sourceAdded(string source) function addSource(source, friendlyName) { var found = false; for (var i = 0; i < sourcesModel.count; ++i) { var obj = sourcesModel.get(i); if (obj.source == source) { found = true; break; } } if (found) { return; } sourcesModel.append( {"source": encodeURIComponent(source), "friendlyName": friendlyName}); } PlasmaCore.DataSource { id: smSource engine: "systemmonitor" onSourceAdded: { iconsPage.sourceAdded(source); } onSourceRemoved: { for (var i = sourcesModel.count - 1; i >= 0; --i) { var obj = sourcesModel.get(i); if (obj.source == source) { sourcesModel.remove(i); } } } } Component.onCompleted: { for (var i in smSource.sources) { var source = smSource.sources[i]; iconsPage.sourceAdded(source); } } ListModel { id: sourcesModel } Layouts.ColumnLayout { id: mainColumn anchors.left: parent.left + Layouts.RowLayout { + Controls.Label { + text: i18n("Update Interval:") + } + + Controls.SpinBox { + id: updateIntervalSpinBox + decimals: 2 + suffix: i18nc("Suffix for spinbox (seconds)", " sec") + maximumValue: 1000 + stepSize: 0.5 + onValueChanged: cfg_updateInterval = value * 1000 + Component.onCompleted: value = cfg_updateInterval / 1000 + } + } + Repeater { id: repeater model: sourcesModel Controls.CheckBox { id: checkBox text: model.friendlyName property string source: model.source onCheckedChanged: { if (checked) { if (cfg_sources.indexOf(model.source) == -1) { cfg_sources.push(model.source); } } else { var idx = cfg_sources.indexOf(model.source); if (idx !== -1) { cfg_sources.splice(idx, 1); } } cfg_sourcesChanged(); } } } } }