diff --git a/nymea-app/resources.qrc b/nymea-app/resources.qrc index e59eda11..276d5240 100644 --- a/nymea-app/resources.qrc +++ b/nymea-app/resources.qrc @@ -146,5 +146,6 @@ ui/system/MqttPolicyPage.qml ui/devicepages/BoolSensorDevicePage.qml ui/devicepages/PowersocketDevicePage.qml + ui/devicelistpages/PowerSocketsDeviceListPage.qml diff --git a/nymea-app/ui/Nymea.qml b/nymea-app/ui/Nymea.qml index 8c37124e..456764d4 100644 --- a/nymea-app/ui/Nymea.qml +++ b/nymea-app/ui/Nymea.qml @@ -52,7 +52,7 @@ ApplicationWindow { rootItem.handleCloseEvent(close) } - property var supportedInterfaces: ["light", "weather", "sensor", "media", "garagegate", "awning", "shutter", "blind", "heating", "smartmeter", "evcharger", "accesscontrol", "button", "powersocket", "notifications", "inputtrigger", "outputtrigger", "gateway"] + property var supportedInterfaces: ["light", "weather", "media", "garagegate", "awning", "shutter", "blind", "heating", "powersocket", "sensor", "smartmeter", "evcharger", "accesscontrol", "button", "notifications", "inputtrigger", "outputtrigger", "gateway"] function interfaceToString(name) { switch(name) { case "light": diff --git a/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml b/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml new file mode 100644 index 00000000..6de2cab5 --- /dev/null +++ b/nymea-app/ui/devicelistpages/PowerSocketsDeviceListPage.qml @@ -0,0 +1,98 @@ +import QtQuick 2.5 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.1 +import Nymea 1.0 +import "../components" +import "../delegates" +import QtQuick.Controls.Material 2.1 + +DeviceListPageBase { + id: root + + header: GuhHeader { + text: qsTr("My %1").arg(app.interfaceToString("powersocket")) + + onBackPressed: { + pageStack.pop() + } + } + + ListView { + anchors.fill: parent + model: devicesProxy + spacing: app.margins + + delegate: Pane { + id: itemDelegate + width: parent.width + + property var device: devicesProxy.get(index); + property var deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId); + + property var connectedStateType: deviceClass.stateTypes.findByName("connected"); + property var connectedState: connectedStateType ? device.states.getState(connectedStateType.id) : null + + property var powerStateType: deviceClass.stateTypes.findByName("power"); + property var powerActionType: deviceClass.actionTypes.findByName("power"); + property var powerState: device.states.getState(powerStateType.id) + + Material.elevation: 1 + topPadding: 0 + bottomPadding: 0 + leftPadding: 0 + rightPadding: 0 + contentItem: ItemDelegate { + id: contentItem + implicitHeight: nameRow.implicitHeight + topPadding: 0 + + contentItem: ColumnLayout { + spacing: 0 + RowLayout { + enabled: itemDelegate.connectedState === null || itemDelegate.connectedState.value === true + id: nameRow + z: 2 // make sure the switch in here is on top of the slider, given we cheated a bit and made them overlap + spacing: app.margins + Item { + Layout.preferredHeight: app.iconSize + Layout.preferredWidth: height + Layout.alignment: Qt.AlignVCenter + + ColorIcon { + id: icon + anchors.fill: parent + color: itemDelegate.connectedState !== null && itemDelegate.connectedState.value === false + ? "red" + : itemDelegate.powerState.value === true ? app.accentColor : keyColor + name: itemDelegate.connectedState !== null && itemDelegate.connectedState.value === false ? + "../images/dialog-warning-symbolic.svg" + : app.interfaceToIcon("powersocket") + } + } + + Label { + Layout.fillWidth: true + text: model.name + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + Switch { + checked: itemDelegate.powerState.value === true + onClicked: { + var params = []; + var param1 = {}; + param1["paramTypeId"] = itemDelegate.powerActionType.paramTypes.get(0).id; + param1["value"] = checked; + params.push(param1) + engine.deviceManager.executeAction(device.id, itemDelegate.powerActionType.id, params) + } + } + } + } + onClicked: { + enterPage(index, false) + } + } + } + } +} diff --git a/nymea-app/ui/mainviews/DevicesPageDelegate.qml b/nymea-app/ui/mainviews/DevicesPageDelegate.qml index 7e1d67b8..a92e3a0b 100644 --- a/nymea-app/ui/mainviews/DevicesPageDelegate.qml +++ b/nymea-app/ui/mainviews/DevicesPageDelegate.qml @@ -43,6 +43,9 @@ MainPageTile { case "extendedShutter": page = "ShutterDeviceListPage.qml"; break; + case "powersocket": + page = "PowerSocketsDeviceListPage.qml"; + break; default: page = "GenericDeviceListPage.qml" }