Merge PR #1097: Introduce overview for states and events of things

This commit is contained in:
jenkins 2024-09-10 16:20:28 +02:00
commit 3142e708b8
13 changed files with 873 additions and 483 deletions

View File

@ -318,5 +318,6 @@
<file>ui/mainviews/dashboard/DashboardSensorDelegate.qml</file>
<file>ui/devicepages/ThingStatusPage.qml</file>
<file>ui/customviews/MultiStateChart.qml</file>
<file>ui/devicepages/DeviceDetailsPage.qml</file>
</qresource>
</RCC>

View File

@ -177,7 +177,7 @@
</message>
<message>
<source>No data</source>
<translation type="unfinished">Žádná data</translation>
<translation>Žádná data</translation>
</message>
<message>
<source>This action has not been executed yet.</source>
@ -692,6 +692,10 @@
<source>Are you sure you want to remove %1 and all associated settings?</source>
<translation>Opravdu chcete odstranit %1 a všechna související nastavení?</translation>
</message>
<message>
<source>Details</source>
<translation>Detaily</translation>
</message>
</context>
<context>
<name>ConnectingPage</name>
@ -1233,7 +1237,7 @@
</message>
<message>
<source>State</source>
<translation type="unfinished">Stav</translation>
<translation>Stav</translation>
</message>
<message>
<source>Select depiction</source>
@ -1426,6 +1430,17 @@
<translation>Chyba: %1</translation>
</message>
</context>
<context>
<name>DeviceDetailsPage</name>
<message>
<source>States</source>
<translation>Podmínky</translation>
</message>
<message>
<source>Events</source>
<translation>Události</translation>
</message>
</context>
<context>
<name>DeviceLogPage</name>
<message>
@ -2124,7 +2139,7 @@
</message>
<message>
<source>No data</source>
<translation type="unfinished">Žádná data</translation>
<translation>Žádná data</translation>
</message>
<message>
<source>This event has not been triggered yet.</source>
@ -2404,7 +2419,7 @@ Prosím zkuste to znovu.</translation>
</message>
<message>
<source>ID copied to clipboard</source>
<translation type="unfinished">ID zkopírováno do schránky</translation>
<translation>ID zkopírováno do schránky</translation>
</message>
</context>
<context>
@ -4611,23 +4626,23 @@ Použijte hodnotu časového limitu větší nebo rovnou 10 ms.</translation>
<name>MultiStateChart</name>
<message>
<source>Hours</source>
<translation type="unfinished">Hodiny</translation>
<translation>Hodiny</translation>
</message>
<message>
<source>Days</source>
<translation type="unfinished">Dny</translation>
<translation>Dny</translation>
</message>
<message>
<source>Weeks</source>
<translation type="unfinished">Týdny</translation>
<translation>Týdny</translation>
</message>
<message>
<source>Months</source>
<translation type="unfinished">Měsíce</translation>
<translation>Měsíce</translation>
</message>
<message>
<source>No data</source>
<translation type="unfinished">Žádná data</translation>
<translation>Žádná data</translation>
</message>
</context>
<context>
@ -6985,7 +7000,7 @@ Toto prosím používejte pouze v případě, že jste si jisti tím co děláte
</message>
<message>
<source>Updating...</source>
<translation type="unfinished">Aktualizace probíhá...</translation>
<translation>Aktualizace probíhá...</translation>
</message>
<message>
<source>Installed version: %1</source>
@ -6993,11 +7008,11 @@ Toto prosím používejte pouze v případě, že jste si jisti tím co děláte
</message>
<message>
<source>Available version: %1</source>
<translation type="unfinished">Dostupná verze: %1</translation>
<translation>Dostupná verze: %1</translation>
</message>
<message>
<source>Update</source>
<translation type="unfinished">Aktualizace</translation>
<translation>Aktualizace</translation>
</message>
<message>
<source>Do you want to start the update now?</source>
@ -7005,7 +7020,7 @@ Toto prosím používejte pouze v případě, že jste si jisti tím co děláte
</message>
<message>
<source>Current version: %1</source>
<translation type="unfinished">Aktuální verze: %1</translation>
<translation>Aktuální verze: %1</translation>
</message>
<message>
<source>Connection information</source>
@ -7017,7 +7032,7 @@ Toto prosím používejte pouze v případě, že jste si jisti tím co děláte
</message>
<message>
<source>Disconnected</source>
<translation type="unfinished">Odpojeno</translation>
<translation>Odpojeno</translation>
</message>
<message>
<source>Signal strength: %1 %</source>
@ -7037,11 +7052,11 @@ Toto prosím používejte pouze v případě, že jste si jisti tím co děláte
</message>
<message>
<source>Critical</source>
<translation type="unfinished">Kritické</translation>
<translation>Kritické</translation>
</message>
<message>
<source>OK</source>
<translation type="unfinished">OK</translation>
<translation>OK</translation>
</message>
<message>
<source>Battery level: %1 %</source>

View File

@ -691,6 +691,10 @@
<source>Are you sure you want to remove %1 and all associated settings?</source>
<translation>Bist Du sicher, dass %1 und alle zugehörigen Einstellungen entfernt werden sollen?</translation>
</message>
<message>
<source>Details</source>
<translation>Details</translation>
</message>
</context>
<context>
<name>ConnectingPage</name>
@ -1425,6 +1429,17 @@
<translation>Fehler: %1</translation>
</message>
</context>
<context>
<name>DeviceDetailsPage</name>
<message>
<source>States</source>
<translation>Zustände</translation>
</message>
<message>
<source>Events</source>
<translation>Ereignisse</translation>
</message>
</context>
<context>
<name>DeviceLogPage</name>
<message>

View File

@ -691,6 +691,10 @@
<source>Are you sure you want to remove %1 and all associated settings?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConnectingPage</name>
@ -1425,6 +1429,17 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeviceDetailsPage</name>
<message>
<source>States</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Events</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeviceLogPage</name>
<message>

View File

@ -691,6 +691,10 @@
<source>Are you sure you want to remove %1 and all associated settings?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConnectingPage</name>
@ -1425,6 +1429,17 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeviceDetailsPage</name>
<message>
<source>States</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Events</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeviceLogPage</name>
<message>
@ -7876,14 +7891,14 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message numerus="yes">
<source>%n device(s)</source>
<translation type="unfinished">
<translation>
<numerusform>%n device</numerusform>
<numerusform>%n devices</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%n device(s) (%1 disconnected)</source>
<translation type="unfinished">
<translation>
<numerusform>%n device (%1 disconnected)</numerusform>
<numerusform>%n devices (%1 disconnected)</numerusform>
</translation>

View File

@ -79,7 +79,7 @@
</message>
<message>
<source>About %1</source>
<translation type="unfinished">Riguardo a %1</translation>
<translation>Riguardo a %1</translation>
</message>
<message>
<source>Device serial number</source>
@ -137,7 +137,7 @@
<name>ActionLogPage</name>
<message>
<source>History for %1</source>
<translation type="unfinished">Cronologia per %1</translation>
<translation>Cronologia per %1</translation>
</message>
<message>
<source>Remove logs?</source>
@ -196,7 +196,7 @@
</message>
<message>
<source>Add</source>
<translation type="unfinished">Aggiungi</translation>
<translation>Aggiungi</translation>
</message>
<message>
<source>WebSocket server interfaces</source>
@ -339,7 +339,7 @@
<name>AwningThingsListPage</name>
<message>
<source>Awnings</source>
<translation type="unfinished">Tende da sole</translation>
<translation>Tende da sole</translation>
</message>
</context>
<context>
@ -395,7 +395,7 @@
<name>BlindThingsListPage</name>
<message>
<source>Blinds</source>
<translation type="unfinished">Veneziane</translation>
<translation>Veneziane</translation>
</message>
</context>
<context>
@ -582,7 +582,7 @@
<name>Configuration</name>
<message>
<source>Help</source>
<translation type="unfinished">Aiuto</translation>
<translation>Aiuto</translation>
</message>
<message>
<source>Forum</source>
@ -691,6 +691,10 @@
<source>Are you sure you want to remove %1 and all associated settings?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConnectingPage</name>
@ -739,7 +743,7 @@
<name>ConnectionInfoDialog</name>
<message>
<source>Available connections</source>
<translation type="unfinished">Connessioni disponibili</translation>
<translation>Connessioni disponibili</translation>
</message>
<message>
<source>System information</source>
@ -747,11 +751,11 @@
</message>
<message>
<source>Add</source>
<translation type="unfinished">Aggiungi</translation>
<translation>Aggiungi</translation>
</message>
<message>
<source>Close</source>
<translation type="unfinished">Chiudi</translation>
<translation>Chiudi</translation>
</message>
</context>
<context>
@ -816,7 +820,7 @@
</message>
<message>
<source>Demo mode</source>
<translation type="unfinished">Modalità demo</translation>
<translation>Modalità demo</translation>
</message>
<message>
<source>In order to use nymea, you will need to install nymea:core on a computer in your network. This can be a Raspberry Pi or any generic Linux computer.</source>
@ -868,7 +872,7 @@
</message>
<message>
<source>Manual connection</source>
<translation type="unfinished">Connessione manuale</translation>
<translation>Connessione manuale</translation>
</message>
<message>
<source>Please wait while your nymea system is being discovered.</source>
@ -900,7 +904,7 @@
</message>
<message>
<source>Wireless setup</source>
<translation type="unfinished">Configurazione wireless</translation>
<translation>Configurazione wireless</translation>
</message>
<message>
<source>Searching for the nymea system...</source>
@ -1216,7 +1220,7 @@
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancella</translation>
<translation>Cancella</translation>
</message>
<message>
<source>Back</source>
@ -1224,7 +1228,7 @@
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
<message>
<source>Sensor</source>
@ -1425,6 +1429,17 @@
<translation></translation>
</message>
</context>
<context>
<name>DeviceDetailsPage</name>
<message>
<source>States</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Events</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeviceLogPage</name>
<message>
@ -1868,7 +1883,7 @@
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
<message>
<source>Assigned things</source>
@ -2093,7 +2108,7 @@
<name>EventLogPage</name>
<message>
<source>History for %1</source>
<translation type="unfinished">Cronologia per %1</translation>
<translation>Cronologia per %1</translation>
</message>
<message>
<source>Remove logs?</source>
@ -2388,11 +2403,11 @@ Please try again.</source>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancella</translation>
<translation>Cancella</translation>
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
<message>
<source>ID copied to clipboard</source>
@ -2488,11 +2503,11 @@ Please try again.</source>
<name>GroupsView</name>
<message>
<source>There are no groups set up yet.</source>
<translation type="unfinished">Non ci sono gruppi già impostati.</translation>
<translation>Non ci sono gruppi già impostati.</translation>
</message>
<message>
<source>Grouping things can be useful to control multiple devices at once, for example an entire room. Watch out for the group symbol when interacting with things and use it to add them to groups.</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -3635,7 +3650,7 @@ Please try again.</source>
</message>
<message>
<source>Temperature</source>
<translation type="unfinished">Temperatura</translation>
<translation>Temperatura</translation>
</message>
<message>
<source>Brightness</source>
@ -3650,7 +3665,7 @@ Please try again.</source>
<name>LightThingsListPage</name>
<message>
<source>Lights</source>
<translation type="unfinished">Luci</translation>
<translation>Luci</translation>
</message>
</context>
<context>
@ -3974,11 +3989,11 @@ Please try again.</source>
</message>
<message>
<source>App settings</source>
<translation type="unfinished">Impostazioni app</translation>
<translation>Impostazioni app</translation>
</message>
<message>
<source>System settings</source>
<translation type="unfinished">Impostazioni di sistema</translation>
<translation>Impostazioni di sistema</translation>
</message>
<message>
<source>New connection</source>
@ -4195,7 +4210,7 @@ Please try again.</source>
</message>
<message>
<source>Add</source>
<translation type="unfinished">Aggiungi</translation>
<translation>Aggiungi</translation>
</message>
<message>
<source>Select a serial port.</source>
@ -4972,7 +4987,7 @@ Use a timeout value greater or equal to 10 ms.</source>
<name>NotificationsThingPage</name>
<message>
<source>Title</source>
<translation type="unfinished">Titolo</translation>
<translation>Titolo</translation>
</message>
<message>
<source>Text</source>
@ -5004,7 +5019,7 @@ Use a timeout value greater or equal to 10 ms.</source>
</message>
<message>
<source>Close</source>
<translation type="unfinished">Chiudi</translation>
<translation>Chiudi</translation>
</message>
</context>
<context>
@ -6772,7 +6787,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
</context>
<context>
@ -6846,7 +6861,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
</context>
<context>
@ -6880,7 +6895,7 @@ Please only use this if you are sure you want this and consider reporting the is
<name>ThingLogPage</name>
<message>
<source>History for %1</source>
<translation type="unfinished">Cronologia per %1</translation>
<translation>Cronologia per %1</translation>
</message>
<message>
<source>Filter by</source>
@ -7005,7 +7020,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
<message>
<source>Battery level: %1 %</source>
@ -7016,7 +7031,7 @@ Please only use this if you are sure you want this and consider reporting the is
<name>ThingsView</name>
<message>
<source>Welcome to %1!</source>
<translation type="unfinished">Benvenuto in %1!</translation>
<translation>Benvenuto in %1!</translation>
</message>
<message>
<source>There are no things set up yet.</source>
@ -7134,7 +7149,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
</context>
<context>
@ -7481,7 +7496,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>Next</source>
<translation type="unfinished">Avanti</translation>
<translation>Avanti</translation>
</message>
</context>
<context>
@ -7546,7 +7561,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>Help</source>
<translation type="unfinished">Aiuto</translation>
<translation>Aiuto</translation>
</message>
<message>
<source>Network settings</source>
@ -7690,7 +7705,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
<message>
<source>Remove Z-Wave node</source>
@ -7961,7 +7976,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
<message>
<source>ZigBee network settings</source>
@ -8052,11 +8067,11 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>Help</source>
<translation type="unfinished">Aiuto</translation>
<translation>Aiuto</translation>
</message>
<message>
<source>OK</source>
<translation type="unfinished">Ok</translation>
<translation>Ok</translation>
</message>
<message>
<source>There are no ZigBee devices connected yet. Open the network for new devices to join and start the pairing procedure from the ZigBee device. Please refer to the devices manual for more information on how to start the pairing.</source>
@ -8108,7 +8123,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>Close</source>
<translation type="unfinished">Chiudi</translation>
<translation>Chiudi</translation>
</message>
<message numerus="yes">
<source>%n device(s)</source>
@ -8228,7 +8243,7 @@ Please only use this if you are sure you want this and consider reporting the is
</message>
<message>
<source>Help</source>
<translation type="unfinished">Aiuto</translation>
<translation>Aiuto</translation>
</message>
<message>
<source>Device</source>

File diff suppressed because it is too large Load Diff

View File

@ -177,7 +177,7 @@
</message>
<message>
<source>No data</source>
<translation type="unfinished">Geen gegevens</translation>
<translation>Geen gegevens</translation>
</message>
<message>
<source>This action has not been executed yet.</source>
@ -691,6 +691,10 @@
<source>Are you sure you want to remove %1 and all associated settings?</source>
<translation>Weet je zeker dat je %1 wilt verwijderen, samen met de bijbehorende instellingen?</translation>
</message>
<message>
<source>Details</source>
<translation>Details</translation>
</message>
</context>
<context>
<name>ConnectingPage</name>
@ -1232,7 +1236,7 @@
</message>
<message>
<source>State</source>
<translation type="unfinished">Status</translation>
<translation>Status</translation>
</message>
<message>
<source>Select depiction</source>
@ -1425,6 +1429,17 @@
<translation>Fout: %1</translation>
</message>
</context>
<context>
<name>DeviceDetailsPage</name>
<message>
<source>States</source>
<translation>Statussen</translation>
</message>
<message>
<source>Events</source>
<translation>Gebeurtenissen</translation>
</message>
</context>
<context>
<name>DeviceLogPage</name>
<message>
@ -2125,7 +2140,7 @@
</message>
<message>
<source>No data</source>
<translation type="unfinished">Geen gegevens</translation>
<translation>Geen gegevens</translation>
</message>
<message>
<source>This event has not been triggered yet.</source>
@ -4597,23 +4612,23 @@ Gebruik een timeout waarde die groter of gelijk is dan 10 ms.</translation>
<name>MultiStateChart</name>
<message>
<source>Hours</source>
<translation type="unfinished">Uren</translation>
<translation>Uren</translation>
</message>
<message>
<source>Days</source>
<translation type="unfinished">Dagen</translation>
<translation>Dagen</translation>
</message>
<message>
<source>Weeks</source>
<translation type="unfinished">Weken</translation>
<translation>Weken</translation>
</message>
<message>
<source>Months</source>
<translation type="unfinished">Maanden</translation>
<translation>Maanden</translation>
</message>
<message>
<source>No data</source>
<translation type="unfinished">Geen gegevens</translation>
<translation>Geen gegevens</translation>
</message>
</context>
<context>
@ -6971,7 +6986,7 @@ Als je fouten in de niet-officiële software vindt, geef deze dan door aan de on
</message>
<message>
<source>Updating...</source>
<translation type="unfinished">Aan het bijwerken...</translation>
<translation>Aan het bijwerken...</translation>
</message>
<message>
<source>Installed version: %1</source>
@ -6979,11 +6994,11 @@ Als je fouten in de niet-officiële software vindt, geef deze dan door aan de on
</message>
<message>
<source>Available version: %1</source>
<translation type="unfinished">Beschikbare versie: %1</translation>
<translation>Beschikbare versie: %1</translation>
</message>
<message>
<source>Update</source>
<translation type="unfinished">Bijwerken</translation>
<translation>Bijwerken</translation>
</message>
<message>
<source>Do you want to start the update now?</source>
@ -6991,7 +7006,7 @@ Als je fouten in de niet-officiële software vindt, geef deze dan door aan de on
</message>
<message>
<source>Current version: %1</source>
<translation type="unfinished">Huidige versie: %1</translation>
<translation>Huidige versie: %1</translation>
</message>
<message>
<source>Connection information</source>
@ -6999,11 +7014,11 @@ Als je fouten in de niet-officiële software vindt, geef deze dan door aan de on
</message>
<message>
<source>Connected</source>
<translation type="unfinished">Verbonden</translation>
<translation>Verbonden</translation>
</message>
<message>
<source>Disconnected</source>
<translation type="unfinished">Niet verbonden</translation>
<translation>Niet verbonden</translation>
</message>
<message>
<source>Signal strength: %1 %</source>
@ -7023,11 +7038,11 @@ Als je fouten in de niet-officiële software vindt, geef deze dan door aan de on
</message>
<message>
<source>Critical</source>
<translation type="unfinished">Kritiek</translation>
<translation>Kritiek</translation>
</message>
<message>
<source>OK</source>
<translation type="unfinished">OK</translation>
<translation>OK</translation>
</message>
<message>
<source>Battery level: %1 %</source>

File diff suppressed because it is too large Load Diff

View File

@ -690,6 +690,10 @@
<source>Are you sure you want to remove %1 and all associated settings?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConnectingPage</name>
@ -1424,6 +1428,17 @@
<translation></translation>
</message>
</context>
<context>
<name>DeviceDetailsPage</name>
<message>
<source>States</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Events</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeviceLogPage</name>
<message>

View File

@ -13,7 +13,7 @@ InfoPaneBase {
readonly property bool setupFailure: root.thing.setupStatus == Thing.ThingSetupStatusFailed
readonly property State batteryState: root.thing.stateByName("batteryLevel")
readonly property State batteryCriticalState: root.thing.stateByName("batteryCritical")
readonly property State connectedState: root.thing.thingClass.interfaces.indexOf("connectable") >= 0 && root.thing.stateByName("connected")
readonly property State connectedState: root.thing.thingClass.interfaces.indexOf("connectable") >= 0 ? root.thing.stateByName("connected") : null
readonly property State signalStrengthState: root.thing.stateByName("signalStrength")
readonly property State updateStatusState: root.thing.stateByName("updateStatus")
readonly property State childLockState: root.thing.stateByName("childLock")

View File

@ -0,0 +1,248 @@
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.2
import QtQuick.Controls.Material 2.2
import Nymea 1.0
import "../components"
import "../delegates"
Page {
id: root
property Thing thing: null
header: NymeaHeader {
text: thing ? thing.name : ""
backButtonVisible: true
onBackPressed: pageStack.pop()
}
ListView {
id: flickable
anchors.fill: parent
clip: true
SwipeDelegateGroup {}
section.property: "type"
section.delegate: ListSectionHeader {
text: {
switch (parseInt(section)) {
case ThingModel.TypeStateType:
return qsTr("States")
case ThingModel.TypeEventType:
return qsTr("Events")
}
}
}
model: ThingModel {
thing: root.thing
showActions: false
}
delegate: SwipeDelegate {
id: delegate
width: parent.width
readonly property StateType stateType: model.type === ThingModel.TypeStateType ? root.thing.thingClass.stateTypes.getStateType(model.id) : null
readonly property EventType eventType: model.type === ThingModel.TypeEventType ? root.thing.thingClass.eventTypes.getEventType(model.id) : null
Layout.fillWidth: true
bottomPadding: 0
contentItem: Loader {
id: inlineLoader
Layout.fillWidth: true
Layout.preferredHeight: Style.smallDelegateHeight
sourceComponent: {
switch (model.type) {
case ThingModel.TypeStateType:
return stateComponent;
case ThingModel.TypeEventType:
return eventComponent;
}
}
Binding {
target: inlineLoader.item
when: model.type === ThingModel.TypeStateType
property: "stateType"
value: delegate.stateType
}
Binding {
target: inlineLoader.item
when: model.type === ThingModel.TypeEventType
property: "eventType"
value: delegate.eventType
}
}
}
}
Component {
id: stateComponent
RowLayout {
id: stateDelegate
property StateType stateType: null
readonly property State thingState: stateType ? root.thing.states.getState(stateType.id) : null
Label {
Layout.fillWidth: true
Layout.minimumWidth: parent.width / 2
text: stateDelegate.stateType.displayName
elide: Text.ElideRight
}
Loader {
id: stateDelegateLoader
Layout.fillWidth: true
}
Label {
visible: text.length > 0 && stateDelegate.stateType.unit !== Types.UnitUnixTime
text: Types.toUiUnit(stateDelegate.stateType.unit)
}
Component.onCompleted: updateLoader()
onStateTypeChanged: updateLoader();
function updateLoader() {
if (stateDelegate.stateType == null) {
return;
}
var sourceComp;
switch (stateDelegate.stateType.type.toLowerCase()) {
case "string":
sourceComp = "LabelDelegate.qml";
break;
case "stringlist":
sourceComp = "ListDelegate.qml";
break;
case "bool":
sourceComp = "LedDelegate.qml";
break;
case "int":
case "uint":
case "double":
if (stateDelegate.stateType.unit === Types.UnitUnixTime) {
sourceComp = "DateTimeDelegate.qml";
} else {
sourceComp = "NumberLabelDelegate.qml";
}
break;
case "color":
sourceComp = "ColorDelegate.qml";
break;
}
if (!sourceComp) {
sourceComp = "LabelDelegate.qml";
print("GenericThingPage: unhandled entry", stateDelegate.stateType.displayName)
}
var minValue = stateDelegate.stateType.minValue !== undefined
? stateDelegate.stateType.minValue
: stateDelegate.stateType.type.toLowerCase() === "uint"
? 0
: -2000000000; // As per QML spec
var maxValue = stateDelegate.stateType.maxValue !== undefined
? stateDelegate.stateType.maxValue
: 2000000000;
print("pushing delegate for", stateDelegate.stateType.name, "from:", minValue, "to:", maxValue, "possible:", stateDelegate.stateType.possibleValuesDisplayNames)
stateDelegateLoader.setSource("../delegates/statedelegates/" + sourceComp,
{
value: root.thing.states.getState(stateType.id).value,
possibleValues: stateDelegate.stateType.possibleValues,
possibleValuesDisplayNames: stateDelegate.stateType.possibleValuesDisplayNames,
from: minValue,
to: maxValue,
unit: stateDelegate.stateType.unit,
writable: false,
stateType: stateDelegate.stateType
})
}
Binding {
target: stateDelegateLoader.item
property: "value"
value: stateDelegate.thingState.value
}
Binding {
target: stateDelegateLoader.item.hasOwnProperty("from") ? stateDelegateLoader.item : null
property: "from"
value: stateDelegate.thingState.minValue
}
Binding {
target: stateDelegateLoader.item.hasOwnProperty("to") ? stateDelegateLoader.item : null
property: "to"
value: stateDelegate.thingState.maxValue
}
Binding {
target: stateDelegateLoader.item.hasOwnProperty("possibleValues") ? stateDelegateLoader.item : null
property: "possibleValues"
value: stateDelegate.thingState.possibleValues
}
Binding {
target: stateDelegateLoader.item.hasOwnProperty("possibleValuesDisplayNames") ? stateDelegateLoader.item : null
property: "possibleValuesDisplayNames"
value: {
print("updating displayNames", stateDelegate.thingState.possibleValues)
var ret = []
for (var i = 0; i < stateDelegate.thingState.possibleValues.length; i++) {
var possibleValue = stateDelegate.thingState.possibleValues[i]
var idx = stateDelegate.stateType.possibleValues.indexOf(possibleValue)
print("value:", possibleValue, idx)
if (idx >= 0) {
ret.push(stateDelegate.stateType.possibleValuesDisplayNames[idx])
} else {
ret.push(possibleValue)
}
}
return ret
}
}
Binding {
target: stateDelegateLoader.item.hasOwnProperty("unit") ? stateDelegateLoader.item : null
property: "unit"
value: stateDelegate.stateType.unit
}
}
}
Component {
id: eventComponent
RowLayout {
id: eventComponentItem
property EventType eventType: null
Label {
Layout.fillWidth: true
text: eventComponentItem.eventType.displayName
}
Rectangle {
id: flashlight
Layout.preferredHeight: Style.iconSize * .8
Layout.preferredWidth: height
color: "lightgray"
radius: width / 2
border.color: Style.foregroundColor
border.width: 1
SequentialAnimation on color {
id: flashlightAnimation
running: false
ColorAnimation { to: "lightgreen"; duration: 100 }
ColorAnimation { to: "lightgray"; duration: 500 }
}
}
Connections {
target: root.thing
onEventTriggered: {
if (eventTypeId === eventComponentItem.eventType.id) {
flashlightAnimation.start();
}
}
}
}
}
}

View File

@ -73,6 +73,8 @@ SettingsPageBase {
if (!root.thing.isChild || root.thingClass.createMethods.indexOf("CreateMethodAuto") < 0) {
deviceMenu.addItem(menuEntryComponent.createObject(deviceMenu, {text: qsTr("Reconfigure"), iconSource: "../images/configure.svg", functionName: "reconfigureThing"}))
}
deviceMenu.addItem(menuEntryComponent.createObject(deviceMenu, {text: qsTr("Details"), iconSource: "../images/info.svg", functionName: "thingDetails"}))
}
function renameThing() {
@ -91,6 +93,10 @@ SettingsPageBase {
configPage.aborted.connect(function() {pageStack.pop(root)})
}
function thingDetails() {
pageStack.push(Qt.resolvedUrl("qrc:/ui/devicepages/DeviceDetailsPage.qml"), {thing: root.thing})
}
Component {
id: menuEntryComponent
IconMenuItem {