Warning, /plasma/plasma-systemmonitor/src/page/FaceConfigurationPage.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 import QtQuick 2.14 0008 import QtQuick.Controls 2.14 0009 import QtQuick.Layouts 1.14 0010 0011 import Qt.labs.platform 1.1 as Platform 0012 0013 import org.kde.kirigami 2.12 as Kirigami 0014 import org.kde.newstuff 1.81 as NewStuff 0015 0016 import org.kde.ksysguard.faces 1.0 as Faces 0017 import org.kde.ksysguard.page 1.0 0018 0019 Kirigami.ScrollablePage { 0020 id: page 0021 0022 property FaceLoader loader 0023 0024 property int activeSection: 0 0025 0026 title: i18nc("@title:window %1 is face name", "Configure %1", loader.controller.title) 0027 0028 Kirigami.ColumnView.fillWidth: false 0029 0030 actions.main: Kirigami.Action { 0031 icon.name: "dialog-close" 0032 text: i18nc("@action", "Close") 0033 onTriggered: applicationWindow().pageStack.pop() 0034 } 0035 0036 actions.contextualActions: [ 0037 Kirigami.Action { 0038 text: i18nc("@action", "Load Preset…") 0039 icon.name: "document-new-from-template" 0040 onTriggered: loadPresetDialog.open() 0041 }, 0042 NewStuff.Action { 0043 text: i18nc("@action", "Get new presets…") 0044 configFile: "systemmonitor-presets.knsrc" 0045 pageStack: applicationWindow().pageStack.layers 0046 onChangedEntriesChanged: loader.controller.availablePresetsModel.reload(); 0047 }, 0048 Kirigami.Action { 0049 text: i18nc("@action", "Save Settings as Preset") 0050 icon.name: "document-save-as-template" 0051 onTriggered: { 0052 loader.controller.savePreset() 0053 message.text = i18nc("@info:status %1 is preset name", "Saved settings as preset %1.", loader.controller.title) 0054 message.visible = true 0055 } 0056 }, 0057 Kirigami.Action { 0058 text: i18nc("@action", "Add Chart as Desktop Widget") 0059 icon.name: "document-export" 0060 enabled: WidgetExporter.plasmashellAvailable 0061 onTriggered: { 0062 WidgetExporter.exportAsWidget(loader) 0063 } 0064 }, 0065 Kirigami.Action { separator: true }, 0066 NewStuff.Action { 0067 text: i18nc("@action", "Get new display styles…") 0068 configFile: "systemmonitor-faces.knsrc" 0069 pageStack: applicationWindow().pageStack.layers 0070 onChangedEntriesChanged: loader.controller.availableFacesModel.reload(); 0071 } 0072 ] 0073 0074 DialogLoader { 0075 id: loadPresetDialog 0076 sourceComponent: LoadPresetDialog { 0077 0078 controller: loader.controller 0079 0080 onAccepted: { 0081 loader.controller.title = selectedTitle; 0082 if (selectedFace) { 0083 loader.controller.faceId = selectedFace 0084 } 0085 loader.controller.loadPreset(selectedPreset); 0086 message.text = i18nc("@info:status %1 is preset name", "Loaded preset %1.", selectedTitle); 0087 message.visible = true 0088 } 0089 } 0090 } 0091 0092 ColumnLayout { 0093 id: layout 0094 0095 Kirigami.InlineMessage { 0096 id: message 0097 Layout.fillWidth: true 0098 showCloseButton: true 0099 } 0100 0101 Label { 0102 Layout.fillWidth: true 0103 text: i18nc("@label:textbox", "Title") 0104 0105 CheckBox { 0106 id: showTitleCheckbox 0107 anchors.right: parent.right 0108 anchors.verticalCenter: parent.verticalCenter 0109 text: i18nc("@option:check", "Show Title") 0110 checked: page.loader.controller.showTitle 0111 onToggled: page.loader.controller.showTitle = checked 0112 } 0113 } 0114 0115 TextField { 0116 id: titleField 0117 0118 text: page.loader.controller.title 0119 0120 Layout.fillWidth: true 0121 0122 onTextEdited: page.loader.controller.title = text 0123 } 0124 0125 Label { 0126 Layout.fillWidth: true 0127 text: i18nc("@label:textbox", "Display Style") 0128 } 0129 0130 ComboBox { 0131 id: faceCombo 0132 0133 property string faceId: page.loader.controller.faceId 0134 0135 model: page.loader.controller.availableFacesModel 0136 textRole: "display" 0137 currentIndex: { 0138 // TODO just make an indexOf invokable on the model? 0139 for (var i = 0; i < count; ++i) { 0140 if (model.pluginId(i) === faceId) { 0141 return i; 0142 } 0143 } 0144 return -1; 0145 } 0146 onActivated: { 0147 page.loader.controller.faceId = model.pluginId(index); 0148 } 0149 0150 Layout.fillWidth: true 0151 } 0152 0153 Label { 0154 Layout.fillWidth: true 0155 text: i18nc("@label", "Minimum time between updates:") 0156 } 0157 0158 SpinBox { 0159 id: updateRateLimitSpinBox 0160 0161 Layout.fillWidth: true 0162 0163 from: 0 0164 to: 600000 0165 stepSize: 500 0166 editable: true 0167 0168 value: page.loader.controller.updateRateLimit 0169 0170 textFromValue: function(value, locale) { 0171 if (value <= 0) { 0172 return i18n("No Limit"); 0173 } else { 0174 var seconds = value / 1000; 0175 if (seconds == 1) { // Manual plural handling because i18ndp doesn't handle floats :( 0176 return i18n("1 second"); 0177 } else { 0178 return i18n("%1 seconds", seconds); 0179 } 0180 } 0181 } 0182 valueFromText: function(value, locale) { 0183 // Don't use fromLocaleString here since it will error out on extra 0184 // characters like the (potentially translated) seconds that gets 0185 // added above. Instead parseInt ignores non-numeric characters. 0186 var v = parseInt(value) 0187 if (isNaN(v)) { 0188 return 0; 0189 } else { 0190 return v * 1000; 0191 } 0192 } 0193 0194 onValueModified: page.loader.controller.updateRateLimit = value 0195 } 0196 0197 Item { 0198 Layout.fillWidth: true 0199 implicitHeight: children.length > 0 ? children[0].implicitHeight : 0 0200 0201 children: loader.controller.faceConfigUi 0202 0203 onWidthChanged: { 0204 if (children.length > 0) { 0205 children[0].width = width 0206 } 0207 } 0208 0209 Connections { 0210 target: loader.controller.faceConfigUi 0211 0212 function onConfigurationChanged() { 0213 loader.controller.faceConfigUi.saveConfig() 0214 loader.dataObject.markDirty() 0215 } 0216 } 0217 } 0218 0219 Item { 0220 Layout.fillWidth: true 0221 implicitHeight: children.length > 0 ? children[0].implicitHeight : 0 0222 0223 children: loader.controller.sensorsConfigUi 0224 0225 onWidthChanged: { 0226 if (children.length > 0) { 0227 children[0].width = width 0228 } 0229 } 0230 0231 Connections { 0232 target: loader.controller.sensorsConfigUi 0233 0234 function onConfigurationChanged() { 0235 loader.controller.sensorsConfigUi.saveConfig() 0236 loader.dataObject.markDirty() 0237 } 0238 } 0239 } 0240 0241 Item { Layout.fillHeight: true; width: 1 } 0242 } 0243 }