import QtQuick 6.0 import QtQuick.Layouts 1.15 import QtQuick.Controls 6.0 as Controls import org.kde.kirigami as Kirigami import org.kde.kcmutils as KCM import org.kde.plasma.workspace.dbus as DBus KCM.SimpleKCM { id: page // KCM properties that will be automatically managed property alias cfg_mqttClientId: mqttClientIdField.text property alias cfg_mqttHosts: mqttHostsField.text property alias cfg_mqttUsername: mqttUsernameField.text property alias cfg_mqttPassword: mqttPasswordField.text property alias cfg_refreshIntervalSeconds: refreshIntervalField.value // Default values for KCM system property string cfg_mqttClientIdDefault: "camper-widget-refresh" property string cfg_mqttHostsDefault: "127.0.0.1:1883" property string cfg_mqttUsernameDefault: "" property string cfg_mqttPasswordDefault: "" property int cfg_refreshIntervalSecondsDefault: 60 Kirigami.FormLayout { anchors.fill: parent Controls.TextField { id: mqttClientIdField Kirigami.FormData.label: i18n("MQTT client ID") placeholderText: "camper-widget-refresh" } Controls.TextField { id: mqttHostsField Kirigami.FormData.label: i18n("MQTT hosts") placeholderText: "127.0.0.1:1883" Controls.ToolTip.visible: hovered Controls.ToolTip.text: i18n("Comma separated list, e.g. 127.0.0.1 or 127.0.0.1,192.168.1.111 or 127.0.0.1:1883,192.168.1.111:1883") } Controls.TextField { id: mqttUsernameField Kirigami.FormData.label: i18n("MQTT username") placeholderText: "" } Controls.TextField { id: mqttPasswordField Kirigami.FormData.label: i18n("MQTT password") echoMode: Controls.TextField.Password placeholderText: "" } Controls.SpinBox { id: refreshIntervalField Kirigami.FormData.label: i18n("Refresh interval (seconds)") from: 1 to: 86400 stepSize: 1 } } // Notify config changes when KCM properties change onCfg_mqttClientIdChanged: notifyConfigChanged() onCfg_mqttHostsChanged: notifyConfigChanged() onCfg_mqttUsernameChanged: notifyConfigChanged() onCfg_mqttPasswordChanged: notifyConfigChanged() onCfg_refreshIntervalSecondsChanged: notifyConfigChanged() function notifyConfigChanged() { DBus.SessionBus.asyncCall({ service: "org.craftknight.CamperWidget", path: "/org/craftknight/camper_widget", iface: "org.craftknight.CamperWidget.Config", member: "Reload", signature: "" }) } }