Implement basic register group saving
This commit is contained in:
@ -19,6 +19,8 @@ qt_add_executable(applightcontrol
|
||||
devicesmodel.h devicesmodel.cpp
|
||||
devicetyperegistersmodel.h devicetyperegistersmodel.cpp
|
||||
registergroupsmodel.h registergroupsmodel.cpp
|
||||
deviceregistervaluehelper.h deviceregistervaluehelper.cpp
|
||||
registergroupmodel.h registergroupmodel.cpp
|
||||
)
|
||||
|
||||
qt_add_qml_module(applightcontrol
|
||||
|
69
HomePage.qml
69
HomePage.qml
@ -2,6 +2,8 @@ import QtQuick
|
||||
import QtQuick.Controls.Material
|
||||
import QtQuick.Layouts
|
||||
|
||||
import lightcontrol
|
||||
|
||||
Item {
|
||||
id: homePage
|
||||
|
||||
@ -25,66 +27,23 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Flow{
|
||||
anchors.fill: parent
|
||||
flow: Flow.TopToBottom
|
||||
|
||||
GridLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
columns: 2
|
||||
|
||||
Label {
|
||||
text: qsTr("Alle Dimmer:")
|
||||
Repeater {
|
||||
model: RegisterGroupsModel {
|
||||
controller: __controller
|
||||
}
|
||||
|
||||
DmxSlider {
|
||||
onValueChanged: window.masterDimmer = value
|
||||
delegate: RowLayout {
|
||||
Label {
|
||||
text: model.name
|
||||
}
|
||||
DmxSlider {
|
||||
onValueChanged: __controller.setRegisterGroup(model.id, value);
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Alle Rot:")
|
||||
}
|
||||
|
||||
DmxSlider {
|
||||
onValueChanged: window.masterRed = value
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Alle Grün:")
|
||||
}
|
||||
|
||||
DmxSlider {
|
||||
onValueChanged: window.masterGreen = value
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Alle Blau:")
|
||||
}
|
||||
|
||||
DmxSlider {
|
||||
onValueChanged: window.masterBlue = value
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Alle Weiß:")
|
||||
}
|
||||
|
||||
DmxSlider {
|
||||
onValueChanged: window.masterWhite = value
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr("Alle Strobo:")
|
||||
}
|
||||
|
||||
DmxSlider {
|
||||
onValueChanged: window.masterStrobo = value
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,18 +12,11 @@ ApplicationWindow {
|
||||
Material.theme: Material.Dark
|
||||
Material.accent: Material.Purple
|
||||
|
||||
property int masterDimmer
|
||||
property int masterRed
|
||||
property int masterGreen
|
||||
property int masterBlue
|
||||
property int masterWhite
|
||||
property int masterStrobo
|
||||
|
||||
ColumnLayout {
|
||||
anchors.left: parent.left
|
||||
anchors.top: parent.top
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: lampRegistersPanel.top
|
||||
height: window.height - (lampRegistersPanel.active ? lampRegistersPanel.height : 0)
|
||||
|
||||
StatusBar {
|
||||
Layout.fillWidth: true
|
||||
|
@ -1,8 +1,6 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls.Material
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Window
|
||||
import QtQuick.VirtualKeyboard
|
||||
|
||||
import lightcontrol
|
||||
|
||||
@ -41,39 +39,22 @@ Pane {
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
|
||||
DeviceRegisterValueHelper {
|
||||
id: helper
|
||||
controller: __controller
|
||||
deviceId: light.id
|
||||
registerIndex: index
|
||||
value: slider.value
|
||||
}
|
||||
|
||||
DmxSlider {
|
||||
id: slider
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
value: helper.value
|
||||
|
||||
orientation: Qt.Vertical
|
||||
|
||||
onValueChanged: __controller.setChannel(registerAddress, value)
|
||||
|
||||
Binding on value {
|
||||
value: masterDimmer
|
||||
when: model.registerType === DeviceTypeRegisterType.Dimmer
|
||||
}
|
||||
Binding on value {
|
||||
value: masterRed
|
||||
when: model.registerType === DeviceTypeRegisterType.Red
|
||||
}
|
||||
Binding on value {
|
||||
value: masterGreen
|
||||
when: model.registerType === DeviceTypeRegisterType.Green
|
||||
}
|
||||
Binding on value {
|
||||
value: masterBlue
|
||||
when: model.registerType === DeviceTypeRegisterType.Blue
|
||||
}
|
||||
Binding on value {
|
||||
value: masterWhite
|
||||
when: model.registerType === DeviceTypeRegisterType.White
|
||||
}
|
||||
Binding on value {
|
||||
value: masterStrobo
|
||||
when: model.registerType === DeviceTypeRegisterType.Strobo
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
|
@ -65,8 +65,8 @@ ColumnLayout {
|
||||
enabled: listView.currentIndex !== -1
|
||||
|
||||
GridLayout {
|
||||
Layout.preferredWidth: 600
|
||||
Layout.maximumWidth: 600
|
||||
Layout.preferredWidth: 300
|
||||
Layout.maximumWidth: 300
|
||||
|
||||
columns: 2
|
||||
|
||||
@ -84,6 +84,36 @@ ColumnLayout {
|
||||
onTextEdited: if (listView.currentData) listView.currentData.name = text; else console.warn('discarded');
|
||||
}
|
||||
}
|
||||
|
||||
GridLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
columns: 2
|
||||
|
||||
RegisterGroupModel {
|
||||
id: registerGroupModel
|
||||
controller: __controller
|
||||
registerGroupId: listView.currentData ? listView.currentData.id : -1
|
||||
}
|
||||
|
||||
Button {
|
||||
text: qsTr('Auf Schieberegler\nunten kopieren');
|
||||
onPressed: registerGroupModel.copyToFaders()
|
||||
}
|
||||
Button {
|
||||
text: qsTr('Von Schieberegler\nunten kopieren');
|
||||
onPressed: registerGroupModel.copyFromFaders()
|
||||
}
|
||||
Button {
|
||||
text: qsTr('Alle auf\n0 setzen');
|
||||
onPressed: registerGroupModel.setAllFadersLow()
|
||||
}
|
||||
Button {
|
||||
text: qsTr('Alle auf\nMaximum setzen');
|
||||
onPressed: registerGroupModel.setAllFadersMax()
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
144
deviceregistervaluehelper.cpp
Normal file
144
deviceregistervaluehelper.cpp
Normal file
@ -0,0 +1,144 @@
|
||||
#include "deviceregistervaluehelper.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QCoreApplication>
|
||||
#include <QQmlEngine>
|
||||
|
||||
void DeviceRegisterValueHelper::setController(DmxController *controller)
|
||||
{
|
||||
if (m_controller == controller)
|
||||
return;
|
||||
|
||||
if (m_controller)
|
||||
{
|
||||
disconnect(m_controller, &DmxController::sliderStatesChanged,
|
||||
this, &DeviceRegisterValueHelper::sliderStatesChanged);
|
||||
}
|
||||
|
||||
m_controller = controller;
|
||||
|
||||
if (m_controller)
|
||||
{
|
||||
connect(m_controller, &DmxController::sliderStatesChanged,
|
||||
this, &DeviceRegisterValueHelper::sliderStatesChanged);
|
||||
}
|
||||
|
||||
emit controllerChanged(m_controller);
|
||||
}
|
||||
|
||||
void DeviceRegisterValueHelper::setDeviceId(int deviceId)
|
||||
{
|
||||
if (m_deviceId == deviceId)
|
||||
return;
|
||||
|
||||
m_deviceId = deviceId;
|
||||
|
||||
emit deviceIdChanged(m_deviceId);
|
||||
}
|
||||
|
||||
void DeviceRegisterValueHelper::setRegisterIndex(int registerIndex)
|
||||
{
|
||||
if (m_registerIndex == registerIndex)
|
||||
return;
|
||||
|
||||
m_registerIndex = registerIndex;
|
||||
|
||||
emit registerIndexChanged(m_registerIndex);
|
||||
}
|
||||
|
||||
quint8 DeviceRegisterValueHelper::value() const
|
||||
{
|
||||
if (!m_controller)
|
||||
{
|
||||
// qDebug() << "hilfe" << __LINE__;
|
||||
return 0;
|
||||
}
|
||||
if (m_deviceId == -1)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return 0;
|
||||
}
|
||||
if (m_registerIndex == -1)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const auto &devices = m_controller->lightProject().devices;
|
||||
auto devicePtr = devices.findById(m_deviceId);
|
||||
if (!devicePtr)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const auto index = devicePtr - &*std::cbegin(devices);
|
||||
|
||||
const auto &sliderStates = m_controller->sliderStates();
|
||||
|
||||
if (sliderStates.size() <= index)
|
||||
return 0;
|
||||
|
||||
const auto &sliderState = sliderStates.at(index);
|
||||
|
||||
if (sliderState.size() <= m_registerIndex)
|
||||
return 0;
|
||||
|
||||
return sliderState.at(m_registerIndex);
|
||||
}
|
||||
|
||||
void DeviceRegisterValueHelper::setValue(quint8 value)
|
||||
{
|
||||
if (m_deviceId == -1)
|
||||
{
|
||||
// qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
if (m_registerIndex == -1)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
if (m_registerIndex == -1)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
const auto &devices = m_controller->lightProject().devices;
|
||||
auto devicePtr = devices.findById(m_deviceId);
|
||||
if (!devicePtr)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
const auto index = devicePtr - &*std::cbegin(devices);
|
||||
|
||||
auto &sliderStates = m_controller->sliderStates();
|
||||
|
||||
if (sliderStates.size() <= index)
|
||||
sliderStates.resize(index + 1);
|
||||
|
||||
auto &sliderState = sliderStates.at(index);
|
||||
|
||||
if (sliderState.size() <= m_registerIndex)
|
||||
sliderState.resize(m_registerIndex + 1);
|
||||
|
||||
sliderState[m_registerIndex] = value;
|
||||
emit valueChanged(value);
|
||||
}
|
||||
|
||||
void DeviceRegisterValueHelper::sliderStatesChanged()
|
||||
{
|
||||
emit valueChanged(value());
|
||||
}
|
||||
|
||||
namespace {
|
||||
void registrierDenShit()
|
||||
{
|
||||
qmlRegisterType<DeviceRegisterValueHelper>("lightcontrol", 1, 0, "DeviceRegisterValueHelper");
|
||||
}
|
||||
}
|
||||
Q_COREAPP_STARTUP_FUNCTION(registrierDenShit)
|
||||
|
44
deviceregistervaluehelper.h
Normal file
44
deviceregistervaluehelper.h
Normal file
@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "dmxcontroller.h"
|
||||
|
||||
class DeviceRegisterValueHelper : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(DmxController* controller READ controller WRITE setController NOTIFY controllerChanged)
|
||||
Q_PROPERTY(int deviceId READ deviceId WRITE setDeviceId NOTIFY deviceIdChanged)
|
||||
Q_PROPERTY(int registerIndex READ registerIndex WRITE setRegisterIndex NOTIFY registerIndexChanged)
|
||||
Q_PROPERTY(quint8 value READ value WRITE setValue NOTIFY valueChanged)
|
||||
|
||||
public:
|
||||
using QObject::QObject;
|
||||
|
||||
DmxController *controller() { return m_controller; }
|
||||
const DmxController *controller() const { return m_controller; }
|
||||
void setController(DmxController *controller);
|
||||
|
||||
int deviceId() const { return m_deviceId; }
|
||||
void setDeviceId(int deviceId);
|
||||
|
||||
int registerIndex() const { return m_registerIndex; }
|
||||
void setRegisterIndex(int registerIndex);
|
||||
|
||||
quint8 value() const;
|
||||
void setValue(quint8 value);
|
||||
|
||||
signals:
|
||||
void controllerChanged(DmxController *controller);
|
||||
void deviceIdChanged(int deviceId);
|
||||
void registerIndexChanged(int registerIndex);
|
||||
void valueChanged(quint8 registerIndex);
|
||||
|
||||
private slots:
|
||||
void sliderStatesChanged();
|
||||
|
||||
private:
|
||||
DmxController *m_controller{};
|
||||
int m_deviceId{-1};
|
||||
int m_registerIndex{-1};
|
||||
};
|
@ -307,7 +307,7 @@ bool DevicesModel::insertRows(int row, int count, const QModelIndex &parent)
|
||||
beginInsertRows({}, row, row+count-1);
|
||||
auto iter = std::begin(devices) + row;
|
||||
for (auto i = 0; i < count; i++)
|
||||
iter = devices.insert(iter, LightConfig{ .id=id++, .name="<neu>", .deviceTypeId=0, .address=0, .position={} }) + 1;
|
||||
iter = devices.insert(iter, DeviceConfig{ .id=id++, .name="<neu>", .deviceTypeId=0, .address=0, .position={} }) + 1;
|
||||
endInsertRows();
|
||||
|
||||
disconnect(m_controller, &DmxController::deviceInserted,
|
||||
|
@ -1,5 +1,7 @@
|
||||
#include "devicetypesmodel.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QCoreApplication>
|
||||
#include <QQmlEngine>
|
||||
|
@ -95,32 +95,32 @@ DmxController::DmxController(QObject *parent) :
|
||||
{ .id=11, .name="Lampe 12", .deviceTypeId=4, .address=78 },
|
||||
{ .id=12, .name="Lampe 13", .deviceTypeId=4, .address=85 },
|
||||
{ .id=13, .name="Test 1", .deviceTypeId=1, .address=95 },
|
||||
{ .id=14, .name="Test 2", .deviceTypeId=2, .address=120 },
|
||||
{ .id=15, .name="Moving Head 1", .deviceTypeId=0, .address=150 },
|
||||
{ .id=16, .name="Moving Head 2", .deviceTypeId=0, .address=160 },
|
||||
{ .id=17, .name="Moving Head 3", .deviceTypeId=0, .address=170 },
|
||||
{ .id=18, .name="Moving Head 4", .deviceTypeId=0, .address=180 },
|
||||
{ .id=19, .name="Nebelmaschine", .deviceTypeId=3, .address=200 }
|
||||
{ .id=14, .name="Test 2", .deviceTypeId=2, .address=105 },
|
||||
{ .id=15, .name="Moving Head 1", .deviceTypeId=0, .address=115 },
|
||||
{ .id=16, .name="Moving Head 2", .deviceTypeId=0, .address=131 },
|
||||
{ .id=17, .name="Moving Head 3", .deviceTypeId=0, .address=147 },
|
||||
{ .id=18, .name="Moving Head 4", .deviceTypeId=0, .address=163 },
|
||||
{ .id=19, .name="Nebelmaschine", .deviceTypeId=3, .address=179 }
|
||||
},
|
||||
.registerGroups {
|
||||
{ .id=0, .name="Alle Dimmmer" },
|
||||
{ .id=0, .name="Alle Dimmer" },
|
||||
{ .id=1, .name="Alle Roten" },
|
||||
{ .id=2, .name="Alle Grünen" },
|
||||
{ .id=3, .name="Alle Blauen" },
|
||||
{ .id=4, .name="Alle Weißen" },
|
||||
{ .id=5, .name="Alle Shutter" },
|
||||
{ .id=6, .name="2n Dimmmer" },
|
||||
{ .id=5, .name="Alle Shutter" },
|
||||
{ .id=6, .name="2n Dimmer" },
|
||||
{ .id=7, .name="2n Roten" },
|
||||
{ .id=8, .name="2n Grünen" },
|
||||
{ .id=9, .name="2n Blauen" },
|
||||
{ .id=10, .name="2n Weißen" },
|
||||
{ .id=11, .name="2n Shutter" },
|
||||
{ .id=12, .name="2n+1 Dimmmer" },
|
||||
{ .id=11, .name="2n Shutter" },
|
||||
{ .id=12, .name="2n+1 Dimmer" },
|
||||
{ .id=13, .name="2n+1 Roten" },
|
||||
{ .id=14, .name="2n+1 Grünen" },
|
||||
{ .id=15, .name="2n+1 Blauen" },
|
||||
{ .id=16, .name="2n+1 Weißen" },
|
||||
{ .id=17, .name="2n+1 Shutter" },
|
||||
{ .id=17, .name="2n+1 Shutter" },
|
||||
}
|
||||
}
|
||||
{
|
||||
@ -166,10 +166,21 @@ bool DmxController::start()
|
||||
return true;
|
||||
}
|
||||
|
||||
void DmxController::setChannel(int channel, int value)
|
||||
void DmxController::setRegisterGroup(int registerGroupId, quint8 value)
|
||||
{
|
||||
Q_ASSERT(channel >= 0 && channel < std::size(buf));
|
||||
buf[channel] = value;
|
||||
qDebug() << registerGroupId << value;
|
||||
}
|
||||
|
||||
void DmxController::setSliderStates(sliders_state_t &&sliderStates)
|
||||
{
|
||||
m_sliderStates = std::move(sliderStates);
|
||||
emit sliderStatesChanged(m_sliderStates);
|
||||
}
|
||||
|
||||
void DmxController::setSliderStates(const sliders_state_t &sliderStates)
|
||||
{
|
||||
m_sliderStates = sliderStates;
|
||||
emit sliderStatesChanged(m_sliderStates);
|
||||
}
|
||||
|
||||
void DmxController::sendDmxBuffer()
|
||||
|
@ -18,7 +18,7 @@ public:
|
||||
|
||||
bool start();
|
||||
|
||||
Q_INVOKABLE void setChannel(int channel, int value);
|
||||
Q_INVOKABLE void setRegisterGroup(int registerGroupId, quint8 value);
|
||||
|
||||
LightProject &lightProject() { return m_lightProject; }
|
||||
const LightProject &lightProject() const { return m_lightProject; }
|
||||
@ -27,6 +27,11 @@ public:
|
||||
|
||||
int performance() const { return m_lastCounter; }
|
||||
|
||||
sliders_state_t &sliderStates() { return m_sliderStates; }
|
||||
const sliders_state_t &sliderStates() const { return m_sliderStates; }
|
||||
void setSliderStates(sliders_state_t &&sliderStates);
|
||||
void setSliderStates(const sliders_state_t &sliderStates);
|
||||
|
||||
signals:
|
||||
void performanceChanged(int performance);
|
||||
|
||||
@ -50,6 +55,8 @@ signals:
|
||||
void registerGroupRemoved(int first, int last);
|
||||
void registerGroupNameChanged(int row, const QString &name);
|
||||
|
||||
void sliderStatesChanged(const sliders_state_t &sliderStates);
|
||||
|
||||
protected:
|
||||
friend class DmxControllerThread;
|
||||
|
||||
@ -68,4 +75,6 @@ private:
|
||||
QDateTime m_lastInfo;
|
||||
int m_counter;
|
||||
std::atomic<int> m_lastCounter;
|
||||
|
||||
sliders_state_t m_sliderStates;
|
||||
};
|
||||
|
@ -80,7 +80,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
struct LightConfig
|
||||
struct DeviceConfig
|
||||
{
|
||||
int id;
|
||||
QString name;
|
||||
@ -89,15 +89,62 @@ struct LightConfig
|
||||
QVector3D position;
|
||||
};
|
||||
|
||||
class DevicesContainer : public std::vector<DeviceConfig>
|
||||
{
|
||||
using base_t = std::vector<DeviceConfig>;
|
||||
|
||||
public:
|
||||
using base_t::base_t;
|
||||
|
||||
DeviceConfig *findById(int id)
|
||||
{
|
||||
auto iter = std::find_if(std::begin(*this), std::end(*this),
|
||||
[&id](const DeviceConfig &device){ return device.id == id; });
|
||||
return iter != std::end(*this) ? &*iter : nullptr;
|
||||
}
|
||||
|
||||
const DeviceConfig *findById(int id) const
|
||||
{
|
||||
auto iter = std::find_if(std::begin(*this), std::end(*this),
|
||||
[&id](const DeviceConfig &device){ return device.id == id; });
|
||||
return iter != std::end(*this) ? &*iter : nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
using sliders_state_t = std::vector<std::vector<int>>;
|
||||
|
||||
struct RegisterGroupConfig
|
||||
{
|
||||
int id;
|
||||
QString name;
|
||||
sliders_state_t sliders;
|
||||
};
|
||||
|
||||
class RegisterGroupsContainer : public std::vector<RegisterGroupConfig>
|
||||
{
|
||||
using base_t = std::vector<RegisterGroupConfig>;
|
||||
|
||||
public:
|
||||
using base_t::base_t;
|
||||
|
||||
RegisterGroupConfig *findById(int id)
|
||||
{
|
||||
auto iter = std::find_if(std::begin(*this), std::end(*this),
|
||||
[&id](const RegisterGroupConfig ®isterGroup){ return registerGroup.id == id; });
|
||||
return iter != std::end(*this) ? &*iter : nullptr;
|
||||
}
|
||||
|
||||
const RegisterGroupConfig *findById(int id) const
|
||||
{
|
||||
auto iter = std::find_if(std::begin(*this), std::end(*this),
|
||||
[&id](const RegisterGroupConfig ®isterGroup){ return registerGroup.id == id; });
|
||||
return iter != std::end(*this) ? &*iter : nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
struct LightProject
|
||||
{
|
||||
DeviceTypesContainer deviceTypes;
|
||||
std::vector<LightConfig> devices;
|
||||
std::vector<RegisterGroupConfig> registerGroups;
|
||||
DevicesContainer devices;
|
||||
RegisterGroupsContainer registerGroups;
|
||||
};
|
||||
|
174
registergroupmodel.cpp
Normal file
174
registergroupmodel.cpp
Normal file
@ -0,0 +1,174 @@
|
||||
#include "registergroupmodel.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QCoreApplication>
|
||||
#include <QQmlEngine>
|
||||
|
||||
void RegisterGroupModel::setController(DmxController *controller)
|
||||
{
|
||||
if (m_controller == controller)
|
||||
return;
|
||||
|
||||
if (m_controller)
|
||||
{
|
||||
// disconnect(m_controller, &DmxController::registerGroupInserted,
|
||||
// this, &RegisterGroupsModel::otherRegisterGroupInserted);
|
||||
}
|
||||
|
||||
m_controller = controller;
|
||||
|
||||
if (m_controller)
|
||||
{
|
||||
// connect(m_controller, &DmxController::registerGroupInserted,
|
||||
// this, &RegisterGroupsModel::otherRegisterGroupInserted);
|
||||
}
|
||||
|
||||
emit controllerChanged(m_controller);
|
||||
}
|
||||
|
||||
void RegisterGroupModel::setRegisterGroupId(int registerGroupId)
|
||||
{
|
||||
if (m_registerGroupId == registerGroupId)
|
||||
return;
|
||||
|
||||
m_registerGroupId = registerGroupId;
|
||||
|
||||
emit registerGroupIdChanged(m_registerGroupId);
|
||||
}
|
||||
|
||||
void RegisterGroupModel::copyFromFaders()
|
||||
{
|
||||
if (!m_controller)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_registerGroupId == -1)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
auto registerGroupPtr = m_controller->lightProject().registerGroups.findById(m_registerGroupId);
|
||||
if (!registerGroupPtr)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
auto ®isterGroup = *registerGroupPtr;
|
||||
|
||||
registerGroup.sliders = m_controller->sliderStates();
|
||||
}
|
||||
|
||||
void RegisterGroupModel::copyToFaders()
|
||||
{
|
||||
if (!m_controller)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_registerGroupId == -1)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
const auto registerGroupPtr = m_controller->lightProject().registerGroups.findById(m_registerGroupId);
|
||||
if (!registerGroupPtr)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
const auto ®isterGroup = *registerGroupPtr;
|
||||
|
||||
m_controller->setSliderStates(registerGroup.sliders);
|
||||
}
|
||||
|
||||
void RegisterGroupModel::setAllFadersLow()
|
||||
{
|
||||
if (!m_controller)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
const auto &devices = m_controller->lightProject().devices;
|
||||
|
||||
sliders_state_t sliderStates;
|
||||
sliderStates.reserve(devices.size());
|
||||
|
||||
for (const auto &device : devices)
|
||||
{
|
||||
std::vector<int> sliderState;
|
||||
|
||||
if (device.deviceTypeId != -1)
|
||||
{
|
||||
const auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(device.deviceTypeId);
|
||||
if (!deviceTypePtr)
|
||||
qWarning() << "hilfe" << __LINE__;
|
||||
else
|
||||
{
|
||||
const auto &deviceType = *deviceTypePtr;
|
||||
sliderState.reserve(deviceType.registers.size());
|
||||
|
||||
for (const auto ®ister_ : deviceType.registers)
|
||||
sliderState.push_back(0);
|
||||
}
|
||||
}
|
||||
|
||||
sliderStates.push_back(std::move(sliderState));
|
||||
}
|
||||
|
||||
m_controller->setSliderStates(std::move(sliderStates));
|
||||
}
|
||||
|
||||
void RegisterGroupModel::setAllFadersMax()
|
||||
{
|
||||
if (!m_controller)
|
||||
{
|
||||
qDebug() << "hilfe" << __LINE__;
|
||||
return;
|
||||
}
|
||||
|
||||
const auto &devices = m_controller->lightProject().devices;
|
||||
|
||||
sliders_state_t sliderStates;
|
||||
sliderStates.reserve(devices.size());
|
||||
|
||||
for (const auto &device : devices)
|
||||
{
|
||||
std::vector<int> sliderState;
|
||||
|
||||
if (device.deviceTypeId != -1)
|
||||
{
|
||||
const auto deviceTypePtr = m_controller->lightProject().deviceTypes.findById(device.deviceTypeId);
|
||||
if (!deviceTypePtr)
|
||||
qWarning() << "hilfe" << __LINE__;
|
||||
else
|
||||
{
|
||||
const auto &deviceType = *deviceTypePtr;
|
||||
sliderState.reserve(deviceType.registers.size());
|
||||
|
||||
for (const auto ®ister_ : deviceType.registers)
|
||||
sliderState.push_back(255);
|
||||
}
|
||||
}
|
||||
|
||||
sliderStates.push_back(std::move(sliderState));
|
||||
}
|
||||
|
||||
m_controller->setSliderStates(std::move(sliderStates));
|
||||
}
|
||||
|
||||
namespace {
|
||||
void registrierDenShit()
|
||||
{
|
||||
qmlRegisterType<RegisterGroupModel>("lightcontrol", 1, 0, "RegisterGroupModel");
|
||||
}
|
||||
}
|
||||
Q_COREAPP_STARTUP_FUNCTION(registrierDenShit)
|
||||
|
35
registergroupmodel.h
Normal file
35
registergroupmodel.h
Normal file
@ -0,0 +1,35 @@
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "dmxcontroller.h"
|
||||
|
||||
class RegisterGroupModel : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(DmxController* controller READ controller WRITE setController NOTIFY controllerChanged)
|
||||
Q_PROPERTY(int registerGroupId READ registerGroupId WRITE setRegisterGroupId NOTIFY registerGroupIdChanged)
|
||||
|
||||
public:
|
||||
using QObject::QObject;
|
||||
|
||||
DmxController *controller() { return m_controller; }
|
||||
const DmxController *controller() const { return m_controller; }
|
||||
void setController(DmxController *controller);
|
||||
|
||||
int registerGroupId() const { return m_registerGroupId; }
|
||||
void setRegisterGroupId(int registerGroupId);
|
||||
|
||||
Q_INVOKABLE void copyFromFaders();
|
||||
Q_INVOKABLE void copyToFaders();
|
||||
Q_INVOKABLE void setAllFadersLow();
|
||||
Q_INVOKABLE void setAllFadersMax();
|
||||
|
||||
signals:
|
||||
void controllerChanged(DmxController *controller);
|
||||
void registerGroupIdChanged(int registerGroupId);
|
||||
|
||||
private:
|
||||
DmxController *m_controller{};
|
||||
int m_registerGroupId{-1};
|
||||
};
|
@ -1,5 +1,7 @@
|
||||
#include "registergroupsmodel.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QCoreApplication>
|
||||
#include <QQmlEngine>
|
||||
|
Reference in New Issue
Block a user