drop old delegates, clean up some stuff

This commit is contained in:
Michael Zanetti 2018-05-25 13:01:50 +02:00
parent 0b5fa2618c
commit 425572b3c7
27 changed files with 31 additions and 604 deletions

View File

@ -5,21 +5,14 @@
<file>ui/main.qml</file>
<file>ui/NewDeviceWizard.qml</file>
<file>ui/SettingsPage.qml</file>
<file>ui/actiondelegates/ActionDelegateBase.qml</file>
<file>ui/actiondelegates/ActionDelegateBool.qml</file>
<file>ui/actiondelegates/ActionDelegateSlider.qml</file>
<file>ui/components/GuhHeader.qml</file>
<file>ui/components/HeaderButton.qml</file>
<file>ui/images/add.svg</file>
<file>ui/images/back.svg</file>
<file>ui/images/close.svg</file>
<file>ui/MainPage.qml</file>
<file>ui/actiondelegates/ActionDelegateFallback.qml</file>
<file>ui/images/info.svg</file>
<file>ui/actiondelegates/ActionDelegateColor.qml</file>
<file>ui/components/ColorPicker.qml</file>
<file>ui/actiondelegates/ActionDelegateNoParams.qml</file>
<file>ui/actiondelegates/ActionDelegateStringFromStringList.qml</file>
<file>ui/customviews/CustomViewBase.qml</file>
<file>ui/customviews/WeatherView.qml</file>
<file>ui/customviews/MediaControllerView.qml</file>
@ -49,7 +42,6 @@
<file>ui/images/media-seek-forward.svg</file>
<file>ui/images/media-skip-backward.svg</file>
<file>ui/images/media-skip-forward.svg</file>
<file>ui/paramdelegates/BoolParamDelegate.qml</file>
<file>ui/components/ThinDivider.qml</file>
<file>ui/images/weather-app-symbolic.svg</file>
<file>ui/images/weathericons/weather-clear-day.svg</file>
@ -81,11 +73,7 @@
<file>ui/images/sensors.svg</file>
<file>ui/images/temperature.svg</file>
<file>ui/images/network-wired-symbolic.svg</file>
<file>ui/paramdelegates/StringParamDelegate.qml</file>
<file>ui/paramdelegates/ParamDelegate.qml</file>
<file>ui/paramdelegates/ParamDelegateBase.qml</file>
<file>ui/images/notification.svg</file>
<file>ui/paramdelegates/IntParamDelegate.qml</file>
<file>ui/customviews/NotificationsView.qml</file>
<file>ui/devicepages/DevicePageBase.qml</file>
<file>ui/images/battery/battery-000.svg</file>
@ -104,7 +92,6 @@
<file>ui/EditDevicesPage.qml</file>
<file>ui/devicepages/ConfigureThingPage.qml</file>
<file>ui/magic/DeviceRulesPage.qml</file>
<file>ui/magic/NewThingMagicPage.qml</file>
<file>ui/magic/EditRulePage.qml</file>
<file>ui/magic/SelectThingPage.qml</file>
<file>ui/magic/ComposeEventDescriptorPage.qml</file>
@ -115,14 +102,14 @@
<file>ui/images/tick.svg</file>
<file>ui/magic/SelectEventDescriptorParamsPage.qml</file>
<file>ui/magic/SelectEventDescriptorPage.qml</file>
<file>ui/paramdelegates/DoubleParamDelegate.qml</file>
<file>ui/paramdescriptordelegates/ParamDescriptorDelegateBase.qml</file>
<file>ui/delegates/ParamDescriptorDelegate.qml</file>
<file>ui/delegates/ParamDelegate.qml</file>
<file>ui/delegates/ActionDelegate.qml</file>
<file>ui/system/LogViewerPage.qml</file>
<file>ui/images/next.svg</file>
<file>ui/images/go-down.svg</file>
<file>ui/system/PluginsPage.qml</file>
<file>ui/system/PluginParamsPage.qml</file>
<file>ui/paramdelegates-ng/ParamDelegate.qml</file>
<file>ui/components/ErrorDialog.qml</file>
<file>ui/fonts/Ubuntu-B.ttf</file>
<file>ui/fonts/Ubuntu-BI.ttf</file>
@ -136,7 +123,6 @@
<file>ui/components/InterfacesModels.qml</file>
<file>ui/magic/StateEvaluatorDelegate.qml</file>
<file>ui/magic/EditStateEvaluatorPage.qml</file>
<file>ui/actiondelegates-ng/ActionDelegate.qml</file>
<file>ui/magic/SimpleStateEvaluatorDelegate.qml</file>
<file>ui/magic/SelectStateDescriptorParamsPage.qml</file>
<file>ui/magic/SelectStateDescriptorPage.qml</file>

View File

@ -3,7 +3,7 @@ import QtQuick.Layouts 1.1
import QtQuick.Controls 2.1
import Mea 1.0
import "components"
import "paramdelegates-ng"
import "delegates"
Page {
id: root

View File

@ -1,10 +0,0 @@
import QtQuick 2.5
Item {
id: root
property var actionType: null
property var actionState: null
signal executeAction(var params)
}

View File

@ -1,31 +0,0 @@
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.1
ActionDelegateBase {
id: root
height: rowLayout.implicitHeight
RowLayout {
id: rowLayout
anchors { left: parent.left; right: parent.right; margins: app.margins }
spacing: app.margins
Label {
Layout.fillWidth: true
verticalAlignment: Text.AlignVCenter
text: root.actionType ? root.actionType.displayName : ""
}
Switch {
position: root.actionState ? root.actionState : 0
onClicked: {
var params = [];
var param1 = new Object();
param1["paramTypeId"] = root.actionType.paramTypes.get(0).id;
param1["value"] = checked;
params.push(param1)
root.executeAction(params)
}
}
}
}

View File

@ -1,55 +0,0 @@
import QtQuick 2.5
import QtQuick.Controls.Material 2.1
import "../components"
ActionDelegateBase {
id: root
height: 200
onActionStateChanged: {
if (actionState && !colorPicker.pressed) {
colorPicker.color = actionState
}
}
ColorPicker {
id: colorPicker
anchors.fill: parent
anchors.margins: app.margins
color: root.actionState ? root.actionState : "white"
touchDelegate: Rectangle {
height: 15
width: height
radius: height / 2
color: Material.accent
Rectangle {
color: colorPicker.hovered || colorPicker.pressed ? "#11000000" : "transparent"
anchors.centerIn: parent
height: 30
width: height
radius: width / 2
Behavior on color {
ColorAnimation {
duration: 200
}
}
}
}
property var lastSentTime: new Date()
onColorChanged: {
var currentTime = new Date();
if (pressed && currentTime - lastSentTime > 200) {
var params = [];
var param1 = new Object();
param1["paramTypeId"] = root.actionType.paramTypes.get(0).id;
param1["value"] = color;
params.push(param1)
root.executeAction(params)
lastSentTime = currentTime
}
}
}
}

View File

@ -1,23 +0,0 @@
import QtQuick 2.5
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
ActionDelegateBase {
id: root
height: columnLayout.height + app.margins * 2
ColumnLayout {
id: columnLayout
anchors { left: parent.left; right: parent.right; top: parent.top; margins: app.margins }
Label {
Layout.fillWidth: true
text: actionType.displayName
}
Label {
Layout.fillWidth: true
text: qsTr("Note: This action type has not been implemented yet")
font.pixelSize: app.smallFont
}
}
}

View File

@ -1,21 +0,0 @@
import QtQuick 2.5
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
ActionDelegateBase {
id: root
height: layout.height + app.margins * 2
RowLayout {
id: layout
anchors { left: parent.left; right: parent.right; top: parent.top; margins: app.margins }
Label {
text: root.actionType.displayName
Layout.fillWidth: true
}
Button {
text: qsTr("Do it!")
onClicked: root.executeAction([])
}
}
}

View File

@ -1,35 +0,0 @@
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.1
ActionDelegateBase {
id: root
height: columnLayout.height + app.margins
ColumnLayout {
id: columnLayout
anchors { left: parent.left; right: parent.right; top: parent.top; margins: app.margins }
Label {
Layout.fillWidth: true
text: root.actionType.paramTypes.get(0).displayName
}
Slider {
Layout.fillWidth: true
from: root.actionType ? root.actionType.paramTypes.get(0).minValue : 0
to: root.actionType ? root.actionType.paramTypes.get(0).maxValue : 100000000
value: root.actionState
onValueChanged: {
if (pressed) {
var params = [];
var param1 = {};
param1["paramTypeId"] = root.actionType.paramTypes.get(0).id;
param1["value"] = value;
params.push(param1)
root.executeAction(params)
}
}
}
}
}

View File

@ -1,34 +0,0 @@
import QtQuick 2.5
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.1
ActionDelegateBase {
id: root
height: layout.height + app.margins * 2
property var paramType: actionType.paramTypes.get(0)
RowLayout {
id: layout
anchors { left: parent.left; top: parent.top; right: parent.right; margins: app.margins }
Label {
text: root.paramType.displayName
Layout.fillWidth: true
}
ComboBox {
model: root.paramType.allowedValues
currentIndex: root.paramType.allowedValues.indexOf(root.actionState)
onActivated: {
if (root.actionState === root.paramType.allowedValues[index]) {
return;
}
var params = [];
var param1 = {};
param1["paramTypeId"] = root.paramType.id;
param1["value"] = root.paramType.allowedValues[index];
params.push(param1);
root.executeAction(params)
}
}
}
}

View File

@ -3,109 +3,33 @@ import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
import Mea 1.0
import "../components"
import "../customviews"
DevicePageBase {
GenericDevicePage {
id: root
header: GuhHeader {
text: device.name
onBackPressed: {
print("popping")
pageStack.pop()
}
HeaderButton {
imageSource: "../images/info.svg"
onClicked: pageStack.push(Qt.resolvedUrl("GenericDeviceStateDetailsPage.qml"), {device: root.device})
}
}
GenericTypeLogView {
anchors.fill: parent
text: qsTr("This button has been pressed %1 times in the last 24 hours.")
device: root.device
typeId: root.deviceClass.eventTypes.findByName("pressed").id
ColumnLayout {
anchors { fill: parent }
spacing: app.margins
Label {
Layout.fillWidth: true
Layout.margins: app.margins
text: qsTr("When this switch is pressed...")
visible: actionListView.count > 0
}
ListView {
id: actionListView
Layout.fillWidth: true
Layout.fillHeight: true
model: RulesFilterModel {
id: rulesFilterModel
rules: Engine.ruleManager.rules
filterDeviceId: root.device.id
}
delegate: SwipeDelegate {
width: parent.width
property var ruleActions: rulesFilterModel.get(index).actions
property var ruleAction: ruleActions.count === 1 ? ruleActions.get(0) : null
property var ruleActionType: ruleAction ? ruleActionDeviceClass.actionTypes.getActionType(ruleAction.actionTypeId) : null
property var ruleActionDevice: ruleAction ? Engine.deviceManager.devices.getDevice(ruleAction.deviceId) : null
property var ruleActionDeviceClass: ruleActionDevice ? Engine.deviceManager.deviceClasses.getDeviceClass(ruleActionDevice.deviceClassId) : null
property var ruleActionParams: ruleAction && ruleAction ? ruleAction.ruleActionParams : null
property var ruleActionParam: ruleActionParams.count === 1 ? ruleActionParams.get(0) : null
text: {
if (ruleActions && ruleActions.count > 1) {
return qsTr("Multiple actions");
} else if (ruleActionParam) {
return qsTr("%1: Set %2 to %3").arg(ruleActionDevice.name).arg(ruleActionType.name).arg(ruleActionParam.value)
} else {
return qsTr("%1: Call %2").arg(ruleActionDevice.name).arg(ruleActionType.name)
}
}
swipe.right: MouseArea {
anchors.right: parent.right
height: parent.height
width: height
ColorIcon {
anchors.fill: parent
anchors.margins: app.margins
name: "../images/delete.svg"
color: "red"
}
onClicked: {
Engine.ruleManager.removeRule(rulesFilterModel.get(index).id)
}
}
}
Label {
width: parent.width - (app.margins * 2)
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
anchors.centerIn: parent
text: qsTr("No actions configured for this switch. You may add some actions for this switch by using the \"Add action\" button at the bottom.")
visible: actionListView.count == 0
}
}
Button {
Layout.fillWidth: true
Layout.margins: app.margins
text: qsTr("Add an action")
onClicked: {
var page = pageStack.push(Qt.resolvedUrl("../magic/SelectActionPage.qml"), {text: qsTr("When this switch is pressed...")});
page.complete.connect(function() {
print("have action:", page.device, page.actionType, page.params)
var rule = {};
rule["name"] = root.device.name + " pressed"
var events = [];
var event = {};
event["deviceId"] = root.device.id;
var eventDeviceClass = Engine.deviceManager.deviceClasses.getDeviceClass(root.device.deviceClassId)
event["eventTypeId"] = eventDeviceClass.eventTypes.findByName("pressed").id;
events.push(event);
rule["eventDescriptors"] = events;
rule["actions"] = page.actions;
Engine.ruleManager.addRule(rule);
pageStack.pop(root)
})
onAddRuleClicked: {
var rule = Engine.ruleManager.createNewRule();
var eventDescriptor = rule.eventDescriptors.createNewEventDescriptor();
eventDescriptor.deviceId = device.id;
var eventType = root.deviceClass.eventTypes.findByName("pressed");
eventDescriptor.eventTypeId = eventType.id;
rule.name = root.device.name + " - " + eventType.displayName;
if (eventType.paramTypes.count === 1) {
var paramType = eventType.paramTypes.get(0);
eventDescriptor.paramDescriptors.setParamDescriptor(paramType.id, value, ParamDescriptor.ValueOperatorEquals);
rule.eventDescriptors.addEventDescriptor(eventDescriptor);
rule.name = rule.name + " - " + value
}
var rulePage = pageStack.push(Qt.resolvedUrl("../magic/DeviceRulesPage.qml"), {device: root.device});
rulePage.addRule(rule);
}
}
}

View File

@ -3,7 +3,7 @@ import QtQuick.Controls 2.1
import QtQuick.Layouts 1.2
import Mea 1.0
import "../components"
import "../paramdelegates-ng"
import "../delegates"
Page {
id: root

View File

@ -97,33 +97,7 @@ DevicePageBase {
width: parent.width
property var actionType: deviceClass.actionTypes.get(index)
property var actionValue: device.hasState(actionType.id) ? device.states.getState(actionType.id).value : null
source: {
print("actiontype is", actionType.name, actionValue, actionType.paramTypes.count)
for (var i = 0; i < actionType.paramTypes.count; i++) {
print("have actionType param:", actionType.paramTypes.get(i).name, actionType.paramTypes.get(i).type)
}
return Qt.resolvedUrl("../actiondelegates-ng/ActionDelegate.qml");
var delegate = "ActionDelegateFallback.qml";
if (actionType.paramTypes.count === 0) {
delegate = "ActionDelegateNoParams.qml";
} else if (actionType.paramTypes.count === 1) {
var paramType = actionType.paramTypes.get(0)
if (paramType.type === "Int" && paramType.minValue !== null && paramType.maxValue !== null) {
delegate = "ActionDelegateSlider.qml";
} else if (paramType.type === "Bool") {
delegate = "ActionDelegateBool.qml";
} else if (paramType.type === "Color") {
delegate = "ActionDelegateColor.qml";
} else if (paramType.type === "String" && paramType.allowedValues.length > 0) {
delegate = "ActionDelegateStringFromStringList.qml";
}
} else {
}
return Qt.resolvedUrl("../actiondelegates/" + delegate);
}
source: Qt.resolvedUrl("../delegates/ActionDelegate.qml")
Binding {
target: delegateLoader.item ? delegateLoader.item : null

View File

@ -3,7 +3,6 @@ import QtQuick.Controls 2.1
import QtQuick.Layouts 1.1
import Mea 1.0
import "../components"
import "../paramdelegates"
Page {
id: root

View File

@ -1,94 +0,0 @@
import QtQuick 2.4
import QtQuick.Controls 2.1
import "../components"
import Mea 1.0
Page {
id: root
property alias text: header.text
property var device: null
readonly property var deviceClass: Engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId)
header: GuhHeader {
id: header
onBackPressed: pageStack.pop()
}
ListModel {
id: eventModel
ListElement { interfaceName: "temperaturesensor"; text: qsTr("When it's freezing..."); identifier: "freeze"}
ListElement { interfaceName: "battery"; text: qsTr("When the device runs out of battery..."); identifier: "lowBattery"}
ListElement { interfaceName: "weather"; text: qsTr("When it starts raining..."); identifier: "rain" }
ListElement { interfaceName: "weather"; text: qsTr("When it's freezing..."); identifier: "freeze"}
}
ListModel {
id: actionModel
ListElement { interfaceName: "light"; text: qsTr("Switch light when..."); identifier: "switchLight"}
ListElement { interfaceName: "dimmablelight"; text: qsTr("Dim light when..."); identifier: "dimLight"}
ListElement { interfaceName: "colorlight"; text: qsTr("Set light color when..."); identifier: "colorLight" }
ListElement { interfaceName: "mediacontroller"; text: qsTr("Pause playback when..."); identifier: "pausePlayback" }
ListElement { interfaceName: "mediacontroller"; text: qsTr("Resume playback when..."); identifier: "resumePlayback" }
ListElement { interfaceName: "extendedvolumecontroller"; text: qsTr("Set volume..."); identifier: "setVolume" }
ListElement { interfaceName: "extendedvolumecontroller"; text: qsTr("Mute when..."); identifier: "mute" }
ListElement { interfaceName: "extendedvolumecontroller"; text: qsTr("Unmute when..."); identifier: "unmute" }
ListElement { interfaceName: "notifications"; text: qsTr("Notify me when..."); identifier: "notify" }
}
function entrySelected(identifier) {
switch (identifier) {
case "freeze":
var page = pageStack.push(Qt.resolvedUrl("SelectActionPage.qml"), {device: root.device })
page.complete.connect(function() {
print("have action:", page.actions.length)
var rule = {};
rule["name"] = "Freeze in " + root.device.name
var stateEvaluator = {};
var stateDescriptor = {};
stateDescriptor["deviceId"] = root.device.id;
stateDescriptor["operator"] = "ValueOperatorLessOrEqual";
stateDescriptor["stateTypeId"] = root.deviceClass.stateTypes.findByName("temperature").id;
stateDescriptor["value"] = 0;
stateEvaluator["stateDescriptor"] = stateDescriptor;
rule["stateEvaluator"] = stateEvaluator;
rule["actions"] = page.actions;
Engine.ruleManager.addRule(rule);
pageStack.pop(root);
})
}
}
onDeviceClassChanged: {
actualModel.clear()
print("device supports interfaces", deviceClass.interfaces)
for (var i = 0; i < eventModel.count; i++) {
print("event is for interface", eventModel.get(i).interfaceName)
if (deviceClass.interfaces.indexOf(eventModel.get(i).interfaceName) >= 0) {
actualModel.append(eventModel.get(i))
}
}
print("huh")
for (var i = 0; i < actionModel.count; i++) {
print("action is for interface", actionModel.get(i).interfaceName)
if (deviceClass.interfaces.indexOf(actionModel.get(i).interfaceName) >= 0) {
actualModel.append(actionModel.get(i))
}
}
}
ListView {
anchors.fill: parent
model: ListModel {
id: actualModel
}
delegate: ItemDelegate {
width: parent.width
text: model.text
onClicked: root.entrySelected(model.identifier)
}
}
}

View File

@ -42,7 +42,7 @@ Page {
Layout.rightMargin: app.margins
}
ParamDescriptorDelegateBase {
ParamDescriptorDelegate {
id: paramDescriptorDelegate
enabled: paramCheckBox.checked
Layout.fillWidth: true

View File

@ -2,7 +2,7 @@ import QtQuick 2.8
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.2
import "../components"
import "../paramdelegates-ng"
import "../delegates"
import Mea 1.0
Page {

View File

@ -23,7 +23,7 @@ Page {
ColumnLayout {
anchors.fill: parent
ParamDescriptorDelegateBase {
ParamDescriptorDelegate {
id: paramDelegate
Layout.fillWidth: true
paramType: root.stateType

View File

@ -1,21 +0,0 @@
import QtQuick 2.8
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.1
ParamDelegateBase {
id: root
contentItem: RowLayout {
Label {
id: label
Layout.fillWidth: true
text: root.paramType.displayName + "- " + root.value
}
Switch {
id: theSwitch
checked: root.value == true
onClicked: root.value = checked
}
}
}

View File

@ -1,24 +0,0 @@
import QtQuick 2.8
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.1
ParamDelegateBase {
id: root
contentItem: RowLayout {
width: parent.width
Label {
id: label
text: root.paramType.displayName
}
TextField {
id: textField
Layout.fillWidth: true
text: root.value ? root.value : root.paramType.defaultValue
onTextChanged: {
root.value = text;
}
}
}
}

View File

@ -1,25 +0,0 @@
import QtQuick 2.8
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.1
ParamDelegateBase {
id: root
contentItem: RowLayout {
width: parent.width
Label {
id: label
text: root.paramType.displayName
Layout.fillWidth: true
}
TextField {
id: textField
text: root.value ? root.value : root.paramType.defaultValue
Layout.preferredWidth: implicitWidth
onTextChanged: {
root.value = text;
}
}
}
}

View File

@ -1,50 +0,0 @@
import QtQuick 2.8
import QtQuick.Controls 2.1
Loader {
id: loader
property var paramType: null
property var value: null
source: {
var comp;
switch (loader.paramType.type) {
case "bool":
case "Bool":
comp = "Bool";
break;
case "String":
comp = "String";
break;
case "Int":
comp = "Int";
break;
case "Double":
comp = "Double";
break;
default:
print("unhandled param type:", paramType.type)
}
return Qt.resolvedUrl(comp + "ParamDelegate.qml")
}
onStatusChanged: {
if (status == Loader.Ready) {
loader.item.value = root.value
}
}
Binding {
target: loader.item
when: loader.item
property: "paramType"
value: loader.paramType
}
Binding {
target: loader
when: loader.item
property: "value"
value: loader.item.value
}
}

View File

@ -1,9 +0,0 @@
import QtQuick 2.4
import QtQuick.Controls 2.1
ItemDelegate {
property var paramType: null
property var value: null
}

View File

@ -1,24 +0,0 @@
import QtQuick 2.8
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.1
ParamDelegateBase {
id: root
contentItem: RowLayout {
width: parent.width
Label {
id: label
text: root.paramType.name
}
TextField {
id: textField
Layout.fillWidth: true
text: root.value ? root.value : root.paramType.defaultValue
onTextChanged: {
root.value = text;
}
}
}
}

View File

@ -3,7 +3,7 @@ import QtQuick.Controls 2.1
import QtQuick.Controls.Material 2.1
import QtQuick.Layouts 1.3
import "../components"
import "../paramdelegates-ng"
import "../delegates"
import Mea 1.0
Page {