DiagramDesigner/diagramCavas/include/configEvent.h

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);
};