diff --git a/nymea-app/resources.qrc b/nymea-app/resources.qrc index 9c20fd4f..979bd4e9 100644 --- a/nymea-app/resources.qrc +++ b/nymea-app/resources.qrc @@ -215,5 +215,6 @@ ui/grouping/GroupInterfacesPage.qml ui/connection/CertificateErrorDialog.qml ui/devicepages/VentilationDevicePage.qml + ui/thingconfiguration/ThingClassDetailsPage.qml diff --git a/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml b/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml index b7119a30..72d38f11 100644 --- a/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml +++ b/nymea-app/ui/thingconfiguration/ConfigureThingPage.qml @@ -126,6 +126,7 @@ SettingsPageBase { subText: root.deviceClass.displayName progressive: false } + NymeaListItemDelegate { Layout.fillWidth: true text: qsTr("ID:") @@ -137,6 +138,15 @@ SettingsPageBase { } } + NymeaListItemDelegate { + Layout.fillWidth: true + text: qsTr("Thing class") + subText: qsTr("View the type definition for this thing") + onClicked: { + pageStack.push(Qt.resolvedUrl("ThingClassDetailsPage.qml"), {device: root.device}) + } + } + SettingsPageSectionHeader { text: qsTr("Parameters") visible: root.device.params.count > 0 diff --git a/nymea-app/ui/thingconfiguration/ThingClassDetailsPage.qml b/nymea-app/ui/thingconfiguration/ThingClassDetailsPage.qml new file mode 100644 index 00000000..5b7236c8 --- /dev/null +++ b/nymea-app/ui/thingconfiguration/ThingClassDetailsPage.qml @@ -0,0 +1,153 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU General Public License as published by the Free Software +* Foundation, GNU version 3. This project 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 project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +import QtQuick 2.8 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.2 +import Nymea 1.0 +import "../components" +import "../delegates" + +SettingsPageBase { + id: root + property Device device: null + readonly property DeviceClass thingClass: device ? device.deviceClass : null + + header: NymeaHeader { + text: root.thingClass.displayName + onBackPressed: pageStack.pop() + } + + SettingsPageSectionHeader { + text: qsTr("Type") + } + + NymeaListItemDelegate { + Layout.fillWidth: true + text: root.thingClass.displayName + subText: root.thingClass.id.toString().replace(/[{}]/g, "") + progressive: false + } + + SettingsPageSectionHeader { + text: qsTr("Parameters") + visible: root.thingClass.paramTypes.count > 0 + } + + Repeater { + model: root.thingClass.paramTypes + NymeaListItemDelegate { + Layout.fillWidth: true + text: root.thingClass.paramTypes.get(index).displayName + subText: root.thingClass.paramTypes.get(index).id.toString().replace(/[{}]/g, "") + progressive: false + onClicked: { + PlatformHelper.toClipBoard(subText); + ToolTip.show(qsTr("ID copied to clipboard"), 500); + } + } + } + + SettingsPageSectionHeader { + text: qsTr("Settings") + visible: root.thingClass.settingsTypes.count > 0 + } + + Repeater { + model: root.thingClass.settingsTypes + NymeaListItemDelegate { + Layout.fillWidth: true + text: root.thingClass.settingsTypes.get(index).displayName + subText: root.thingClass.settingsTypes.get(index).id.toString().replace(/[{}]/g, "") + progressive: false + onClicked: { + PlatformHelper.toClipBoard(subText); + ToolTip.show(qsTr("ID copied to clipboard"), 500); + } + } + } + + SettingsPageSectionHeader { + text: qsTr("Events") + visible: root.thingClass.eventTypes.count > 0 + } + + Repeater { + model: root.thingClass.eventTypes + NymeaListItemDelegate { + Layout.fillWidth: true + text: root.thingClass.eventTypes.get(index).displayName + subText: root.thingClass.eventTypes.get(index).id.toString().replace(/[{}]/g, "") + progressive: false + onClicked: { + PlatformHelper.toClipBoard(subText); + ToolTip.show(qsTr("ID copied to clipboard"), 500); + } + } + } + + SettingsPageSectionHeader { + text: qsTr("States") + visible: root.thingClass.stateTypes.count > 0 + } + + Repeater { + model: root.thingClass.stateTypes + NymeaListItemDelegate { + Layout.fillWidth: true + text: root.thingClass.stateTypes.get(index).displayName + subText: root.thingClass.stateTypes.get(index).id.toString().replace(/[{}]/g, "") + progressive: false + onClicked: { + PlatformHelper.toClipBoard(subText); + ToolTip.show(qsTr("ID copied to clipboard"), 500); + } + } + } + + SettingsPageSectionHeader { + text: qsTr("Actions") + visible: root.thingClass.actionTypes.count > 0 + } + + Repeater { + model: root.thingClass.actionTypes + NymeaListItemDelegate { + Layout.fillWidth: true + text: root.thingClass.actionTypes.get(index).displayName + subText: root.thingClass.actionTypes.get(index).id.toString().replace(/[{}]/g, "") + progressive: false + onClicked: { + PlatformHelper.toClipBoard(subText); + ToolTip.show(qsTr("ID copied to clipboard"), 500); + } + } + } +}