Merge PR #253: Fix device lists getting messed up when devices are reordered

This commit is contained in:
Jenkins nymea 2019-10-28 12:23:23 +01:00
commit 32145a4e02
10 changed files with 38 additions and 24 deletions

View File

@ -209,6 +209,19 @@ Device *DevicesProxy::get(int index) const
return getInternal(mapToSource(this->index(index, 0)).row());
}
Device *DevicesProxy::getDevice(const QUuid &deviceId) const
{
Devices *d = qobject_cast<Devices*>(sourceModel());
if (d) {
return d->getDevice(deviceId);
}
DevicesProxy *dp = qobject_cast<DevicesProxy*>(sourceModel());
if (dp) {
return dp->getDevice(deviceId);
}
return nullptr;
}
Device *DevicesProxy::getInternal(int source_index) const
{
Devices* d = qobject_cast<Devices*>(sourceModel());

View File

@ -85,6 +85,7 @@ public:
void setGroupByInterface(bool groupByInterface);
Q_INVOKABLE Device *get(int index) const;
Q_INVOKABLE Device *getDevice(const QUuid &deviceId) const;
signals:
void engineChanged();

View File

@ -64,8 +64,8 @@ DeviceListPageBase {
property bool inline: width > 500
property Device device: devicesProxy.get(index);
property DeviceClass deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId);
property Device device: devicesProxy.getDevice(model.id)
property DeviceClass deviceClass: device.deviceClass
property var connectedStateType: deviceClass.stateTypes.findByName("connected");
property var connectedState: connectedStateType ? device.states.getState(connectedStateType.id) : null

View File

@ -51,22 +51,22 @@ DeviceListPageBase {
property bool inline: width > 500
property var device: devicesProxy.get(index);
property var deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId);
property Device device: devicesProxy.getDevice(model.id)
property DeviceClass deviceClass: device.deviceClass
property var connectedStateType: deviceClass.stateTypes.findByName("connected");
property var connectedState: connectedStateType ? device.states.getState(connectedStateType.id) : null
property StateType connectedStateType: deviceClass.stateTypes.findByName("connected");
property State connectedState: connectedStateType ? device.states.getState(connectedStateType.id) : null
property var powerStateType: deviceClass.stateTypes.findByName("power");
property var powerActionType: deviceClass.actionTypes.findByName("power");
property var powerState: device.states.getState(powerStateType.id)
property StateType powerStateType: deviceClass.stateTypes.findByName("power");
property ActionType powerActionType: deviceClass.actionTypes.findByName("power");
property State powerState: device.states.getState(powerStateType.id)
property var brightnessStateType: deviceClass.stateTypes.findByName("brightness");
property var brightnessActionType: deviceClass.actionTypes.findByName("brightness");
property var brightnessState: brightnessStateType ? device.states.getState(brightnessStateType.id) : null
property StateType brightnessStateType: deviceClass.stateTypes.findByName("brightness");
property ActionType brightnessActionType: deviceClass.actionTypes.findByName("brightness");
property State brightnessState: brightnessStateType ? device.states.getState(brightnessStateType.id) : null
property var colorStateType: deviceClass.stateTypes.findByName("color");
property var colorState: colorStateType ? device.states.getState(colorStateType.id) : null
property StateType colorStateType: deviceClass.stateTypes.findByName("color");
property State colorState: colorStateType ? device.states.getState(colorStateType.id) : null
Material.elevation: 1
topPadding: 0

View File

@ -34,7 +34,7 @@ DeviceListPageBase {
property bool inline: width > 500
property Device device: devicesProxy.get(index);
property Device device: devicesProxy.getDevice(model.id)
property DeviceClass deviceClass: device.deviceClass
readonly property StateType playbackStateType: deviceClass.stateTypes.findByName("playbackStatus")

View File

@ -26,8 +26,8 @@ DeviceListPageBase {
id: itemDelegate
width: parent.width
property var device: devicesProxy.get(index);
property var deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId);
property Device device: devicesProxy.getDevice(model.id)
property DeviceClass deviceClass: device.deviceClass
property var connectedStateType: deviceClass.stateTypes.findByName("connected");
property var connectedState: connectedStateType ? device.states.getState(connectedStateType.id) : null

View File

@ -23,8 +23,8 @@ DeviceListPageBase {
property bool inline: width > 500
property var device: devicesProxy.get(index);
property var deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId);
property Device device: devicesProxy.getDevice(model.id)
property DeviceClass deviceClass: device.deviceClass
bottomPadding: index === ListView.view.count - 1 ? topPadding : 0
contentItem: Pane {

View File

@ -23,8 +23,8 @@ DeviceListPageBase {
property bool inline: width > 500
property var device: devicesProxy.get(index);
property var deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId);
property Device device: devicesProxy.getDevice(model.id)
property DeviceClass deviceClass: device.deviceClass
bottomPadding: index === ListView.view.count - 1 ? topPadding : 0
contentItem: Pane {

View File

@ -24,8 +24,8 @@ DeviceListPageBase {
property bool inline: width > 500
property var device: devicesProxy.get(index);
property var deviceClass: engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId);
property Device device: devicesProxy.getDevice(model.id)
property DeviceClass deviceClass: device.deviceClass
bottomPadding: index === ListView.view.count - 1 ? topPadding : 0
contentItem: Pane {

View File

@ -73,7 +73,7 @@ Page {
}
delegate: ThingDelegate {
device: deviceProxy.get(index)
device: deviceProxy.getDevice(model.id)
canDelete: true
onClicked: {
print("clicked:", model.id)