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);
+ }
+ }
+ }
+}