diff --git a/nymea-app/ui/delegates/ActionDelegate.qml b/nymea-app/ui/delegates/ActionDelegate.qml index 7da1f75f..fd239d59 100644 --- a/nymea-app/ui/delegates/ActionDelegate.qml +++ b/nymea-app/ui/delegates/ActionDelegate.qml @@ -8,11 +8,13 @@ import "../components" ItemDelegate { id: root - property var actionType: null + property ActionType actionType: null property var actionState: null signal executeAction(var params) + readonly property bool multiParam: actionType.paramTypes.count > 1 + contentItem: ColumnLayout { RowLayout { Label { @@ -25,7 +27,7 @@ ItemDelegate { id: loader Layout.fillWidth: sourceComponent == textFieldComponent || sourceComponent == buttonComponent sourceComponent: { - if (root.actionType.paramTypes.count !== 1) { + if (root.multiParam || root.actionType.paramTypes.count === 0) { return buttonComponent } @@ -68,16 +70,21 @@ ItemDelegate { } Repeater { id: paramRepeater + model: root.actionType.paramTypes delegate: Loader { id: bottomLoader property var paramType: root.actionType.paramTypes.get(index) + Layout.fillWidth: true sourceComponent: { switch (paramType.type.toLowerCase()) { case "int": case "double": if (paramType.minValue !== undefined && paramType.maxValue !== undefined) { + if (root.multiParam) { + return labelledSpinnerComponent; + } return sliderComponent } return textFieldComponent; @@ -87,7 +94,7 @@ ItemDelegate { return paramType.allowedValues.length === 0 ? textFieldComponent : root.actionType.paramTypes.count === 1 ? null : comboBoxComponent case "bool": - if (root.actionType.paramTypes.count > 1) { + if (root.multiParam) { return labeledBoolComponent; } return null @@ -104,9 +111,9 @@ ItemDelegate { } Binding { target: bottomLoader.item - when: bottomLoader.item && root.actionState + when: bottomLoader.item property: "value" - value: root.actionState + value: (root.actionState && index == 0) ? root.actionState : root.actionType.paramTypes.get(index).defaultValue } } } @@ -147,8 +154,10 @@ ItemDelegate { id: switchRow property var paramType: null property var value + Label { text: paramType.displayName + Layout.fillWidth: true } Switch { checked: paramType.defaultValue @@ -196,7 +205,28 @@ ItemDelegate { text: sliderRow.paramType.maxValue } } + } + Component { + id: labelledSpinnerComponent + RowLayout { + id: sliderRow + property var paramType: null + property var value: null + Label { + text: sliderRow.paramType.displayName + Layout.fillWidth: true + } + SpinBox { + from: sliderRow.paramType.minValue + to: sliderRow.paramType.maxValue + value: sliderRow.value + editable: true + onValueModified: { + sliderRow.value = value + } + } + } } Component { diff --git a/nymea-app/ui/delegates/ParamDelegate.qml b/nymea-app/ui/delegates/ParamDelegate.qml index 71ba3bfe..3c0d7f7e 100644 --- a/nymea-app/ui/delegates/ParamDelegate.qml +++ b/nymea-app/ui/delegates/ParamDelegate.qml @@ -8,7 +8,7 @@ import "../components" ItemDelegate { id: root - property var paramType: null + property ParamType paramType: null property alias value: d.value property var param: Param { id: d @@ -39,10 +39,7 @@ ItemDelegate { case "bool": return boolComponent; case "int": - if (root.paramType.minimumValue !== undefined && root.paramType.maximumValue !== undefined) { - return sliderComponent; - } - return textFieldComponent; + return spinnerComponent; case "string": case "qstring": if (root.paramType.allowedValues.length > 0) { @@ -61,12 +58,12 @@ ItemDelegate { Layout.fillWidth: true sourceComponent: { switch (root.paramType.type.toLowerCase()) { - case "int": - case "double": - if (root.paramType.minValue !== undefined && root.paramType.maxValue !== undefined) { - return sliderComponent - } - break; +// case "int": +// case "double": +// if (root.paramType.minValue !== undefined && root.paramType.maxValue !== undefined) { +// return sliderComponent +// } +// break; case "color": return colorPickerComponent } @@ -143,6 +140,20 @@ ItemDelegate { } + Component { + id: spinnerComponent + SpinBox { + value: root.param.value + from: root.paramType.minValue + to: root.paramType.maxValue + editable: true + onValueModified: root.param.value = value + textFromValue: function(value) { + return value + } + } + } + Component { id: textFieldComponent TextField { diff --git a/nymea-app/ui/devicelistpages/DeviceListPageBase.qml b/nymea-app/ui/devicelistpages/DeviceListPageBase.qml index 652bebbf..76a600e6 100644 --- a/nymea-app/ui/devicelistpages/DeviceListPageBase.qml +++ b/nymea-app/ui/devicelistpages/DeviceListPageBase.qml @@ -22,7 +22,8 @@ Page { function enterPage(index, replace) { var device = devicesProxy.get(index); var deviceClass = engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId); - var page = app.interfaceListToDevicePage(deviceClass.interfaces); + var page = app.interfaceListToDevicePage(root.shownInterfaces); +// var page = "GenericDevicePage.qml"; if (replace) { pageStack.replace(Qt.resolvedUrl("../devicepages/" + page), {device: devicesProxy.get(index)}) } else { diff --git a/nymea-app/ui/devicepages/InputTriggerDevicePage.qml b/nymea-app/ui/devicepages/InputTriggerDevicePage.qml index ebd7ff77..eb8eaeca 100644 --- a/nymea-app/ui/devicepages/InputTriggerDevicePage.qml +++ b/nymea-app/ui/devicepages/InputTriggerDevicePage.qml @@ -9,6 +9,7 @@ DevicePageBase { id: root GenericTypeLogView { + id: logView anchors.fill: parent logsModel: engine.jsonRpcClient.ensureServerVersion("1.10") ? logsModelNg : logsModel @@ -28,6 +29,22 @@ DevicePageBase { typeIds: [root.deviceClass.eventTypes.findByName("triggered").id]; } +// delegate: MeaListItemDelegate { +// width: parent.width +// iconName: app.interfaceToIcon("inputtrigger") +// text: model.value.trim() +// subText: Qt.formatDateTime(model.timestamp) +// progressive: false + +// onClicked: { +// print("a", model.value.trim()) +// var parts = model.value.trim().split(', ') +// print("b", parts) +// var popup = detailsPopup.createObject(root, {timestamp: model.timestamp, notificationTitle: parts[1], notificationBody: parts[0]}); +// popup.open(); +// } +// } + onAddRuleClicked: { var value = logView.logsModel.get(index).value var typeId = logView.logsModel.get(index).typeId diff --git a/nymea-app/ui/devicepages/NotificationsDevicePage.qml b/nymea-app/ui/devicepages/NotificationsDevicePage.qml index 4f7cd7e8..4ee79901 100644 --- a/nymea-app/ui/devicepages/NotificationsDevicePage.qml +++ b/nymea-app/ui/devicepages/NotificationsDevicePage.qml @@ -88,6 +88,7 @@ DevicePageBase { id: logsModelNg deviceId: root.device.id engine: _engine + live: true typeIds: [root.deviceClass.actionTypes.findByName("notify").id]; } @@ -102,7 +103,7 @@ DevicePageBase { delegate: MeaListItemDelegate { width: parent.width - iconName: "../images/notification.svg" + iconName: app.interfaceToIcon("notifications") text: model.value.trim() subText: Qt.formatDateTime(model.timestamp) progressive: false