133 lines
3.5 KiB
C++
133 lines
3.5 KiB
C++
#pragma once
|
|
|
|
/*************************HMI事件组态**************************/
|
|
#include <QObject>
|
|
#include <QJsonObject>
|
|
#include <QVariant>
|
|
|
|
// 事件触发器类型
|
|
enum class TriggerType {
|
|
Click = 0,
|
|
DoubleClick,
|
|
RightClick,
|
|
HoverEnter,
|
|
HoverLeave,
|
|
PropertyChange,
|
|
Unknown
|
|
};
|
|
|
|
QString triggerTypeToString(TriggerType type) {
|
|
switch (type) {
|
|
case TriggerType::Click: return "click";
|
|
case TriggerType::DoubleClick: return "double_click";
|
|
case TriggerType::RightClick: return "right_click";
|
|
case TriggerType::HoverEnter: return "hover_enter";
|
|
case TriggerType::HoverLeave: return "hover_leave";
|
|
case TriggerType::PropertyChange: return "property_change";
|
|
default: return "unknown";
|
|
}
|
|
}
|
|
|
|
TriggerType stringToTriggerType(const QString& str) {
|
|
QMap<QString, TriggerType> mapping = {
|
|
{"click", TriggerType::Click},
|
|
{"double_click", TriggerType::DoubleClick},
|
|
{"right_click", TriggerType::RightClick},
|
|
{"hover_enter", TriggerType::HoverEnter},
|
|
{"hover_leave", TriggerType::HoverLeave},
|
|
{"property_change", TriggerType::PropertyChange}
|
|
};
|
|
return mapping.value(str, TriggerType::Unknown);
|
|
}
|
|
|
|
// 事件接口
|
|
class IConfigEvent {
|
|
public:
|
|
virtual ~IConfigEvent() = default;
|
|
virtual void execute() = 0;
|
|
virtual QString type() const = 0;
|
|
virtual QJsonObject toJson() const = 0;
|
|
virtual void fromJson(const QJsonObject& json) = 0;
|
|
virtual IConfigEvent* clone() const = 0;
|
|
};
|
|
|
|
// Panel可见性事件
|
|
class PanelVisibilityEvent : public IConfigEvent {
|
|
QString panelId;
|
|
bool visible = true;
|
|
|
|
public:
|
|
void setPanelId(const QString& id) { panelId = id; }
|
|
void setVisible(bool v) { visible = v; }
|
|
|
|
QString type() const override { return "panel_visibility"; }
|
|
|
|
void execute() override {
|
|
// 实现Panel控制逻辑
|
|
emit requestPanelControl(panelId, visible);
|
|
}
|
|
|
|
QJsonObject toJson() const override {
|
|
return {
|
|
{"type", type()},
|
|
{"panelId", panelId},
|
|
{"visible", visible}
|
|
};
|
|
}
|
|
|
|
void fromJson(const QJsonObject& json) override {
|
|
panelId = json["panelId"].toString();
|
|
visible = json["visible"].toBool();
|
|
}
|
|
|
|
IConfigEvent* clone() const override {
|
|
auto event = new PanelVisibilityEvent();
|
|
event->panelId = panelId;
|
|
event->visible = visible;
|
|
return event;
|
|
}
|
|
|
|
signals:
|
|
void requestPanelControl(const QString& panelId, bool visible);
|
|
};
|
|
|
|
// 变量赋值事件
|
|
class VariableAssignmentEvent : public IConfigEvent {
|
|
QString varName;
|
|
QVariant value;
|
|
|
|
public:
|
|
void setVariableName(const QString& name) { varName = name; }
|
|
void setValue(const QVariant& val) { value = val; }
|
|
|
|
QString type() const override { return "variable_assignment"; }
|
|
|
|
void execute() override {
|
|
// 变量赋值逻辑
|
|
emit requestVariableAssignment(varName, value);
|
|
}
|
|
|
|
QJsonObject toJson() const override {
|
|
return {
|
|
{"type", type()},
|
|
{"variable", varName},
|
|
{"value", value.toString()}
|
|
};
|
|
}
|
|
|
|
void fromJson(const QJsonObject& json) override {
|
|
varName = json["variable"].toString();
|
|
value = json["value"].toString();
|
|
}
|
|
|
|
IConfigEvent* clone() const override {
|
|
auto event = new VariableAssignmentEvent();
|
|
event->varName = varName;
|
|
event->value = value;
|
|
return event;
|
|
}
|
|
|
|
signals:
|
|
void requestVariableAssignment(const QString& name, const QVariant& value);
|
|
};
|