|
- /**
- * @file property_panel_controller.h
- * @brief 定义 HMI 和梯形图属性面板控制器
- * @version 1.0.0
- * @author suyu
- * @date 2026-08-22
- */
-
- #pragma once
-
- #include "domain/control_logic_model.h"
- #include "domain/hmi_model.h"
-
- #include <QString>
-
- #include <functional>
- #include <string>
-
- class HmiEditorService;
- class HmiEditorWidget;
- class LogicEditorService;
- class LogicEditorWidget;
- class ProjectService;
- class QWidget;
-
- namespace Ui {
- class MainWindow;
- }
-
- /**
- * 组织 HMI/梯形图选择状态、属性面板和编辑器信号
- *
- * 属性提交统一经过编辑服务,以便校验、原子回滚和撤销/重做
- */
- class PropertyPanelController final
- {
- public:
- /** 报告属性操作结果,参数依次为操作名、消息和是否成功 */
- using ResultReporter = std::function<void(
- const QString &action, const QString &message, bool succeeded)>;
- /** 向状态栏报告一条带超时的消息 */
- using StatusReporter = std::function<void(
- const QString &message, int timeout_ms)>;
-
- /** 创建属性面板控制器并注入编辑服务和选择状态 */
- PropertyPanelController(
- QWidget &parent,
- Ui::MainWindow &ui,
- ProjectService &project_service,
- HmiEditorService &hmi_editor_service,
- LogicEditorService &logic_editor_service,
- const HmiDefaultSettings &hmi_defaults,
- std::function<std::string()> current_page_id,
- std::function<std::string()> current_logic_id,
- std::string &selected_control_id,
- std::string &selected_logic_node_id,
- std::function<void()> refresh_project_ui,
- ResultReporter result_reporter,
- StatusReporter status_reporter);
-
- /** 连接属性面板按钮、输入框和服务信号 */
- void configure();
- /** 绑定 HMI 与梯形图编辑器,接收它们的选择变化 */
- void bindEditorWidgets(
- HmiEditorWidget &hmi_editor_widget,
- LogicEditorWidget &logic_editor_widget);
-
- /** 显示指定 HMI 控件的属性 */
- void showControlProperties(const std::string &control_id);
- /** 显示指定 HMI 页面尺寸属性 */
- void showPageProperties(const std::string &page_id);
- /** 显示指定梯形图节点的属性 */
- void showLogicNodeProperties(const std::string &node_id);
- /** 在当前页面添加指定类型的 HMI 控件 */
- void addHmiControl(HmiControlType type);
- /** 删除当前选中的 HMI 控件 */
- void deleteSelectedControl();
- /** 提交当前 HMI 控件属性 */
- void applySelectedControlProperties();
- /** 提交当前 HMI 页面属性 */
- void applySelectedPageProperties();
- /** 提交当前梯形图节点属性 */
- void applySelectedLogicNodeProperties();
-
- private:
- /** 显示 HMI 编辑服务返回的错误 */
- void handleHmiEditorError(const QString &message) const;
- /** 显示梯形图编辑服务返回的错误 */
- void handleLogicEditorError(const QString &message) const;
- /** 打开颜色选择器并写回属性输入框 */
- void chooseTextColor();
- /** 打开状态文本专用配置并原子更新控件 */
- void configureStatusText();
- /** 打开按钮启用条件专用配置并原子更新控件 */
- void configureButtonExtension();
- /** 统一报告属性操作失败 */
- void reportFailure(
- const QString &action, const std::string &message) const;
-
- /** 主窗口父对象,不由控制器拥有 */
- QWidget &parent_;
- /** 主窗口的 Designer 界面对象 */
- Ui::MainWindow &ui_;
- /** 工程服务,不由控制器拥有 */
- ProjectService &project_service_;
- /** HMI 编辑服务,不由控制器拥有 */
- HmiEditorService &hmi_editor_service_;
- /** 梯形图编辑服务,不由控制器拥有 */
- LogicEditorService &logic_editor_service_;
- /** 新建页面的启动期只读默认尺寸 */
- const HmiDefaultSettings &hmi_defaults_;
- /** 获取当前 HMI 页面标识的回调 */
- std::function<std::string()> current_page_id_;
- /** 获取当前控制逻辑标识的回调 */
- std::function<std::string()> current_logic_id_;
- /** 主窗口保存的当前控件标识 */
- std::string &selected_control_id_;
- /** 主窗口保存的当前逻辑节点标识 */
- std::string &selected_logic_node_id_;
- /** 请求主窗口刷新工程界面的回调 */
- std::function<void()> refresh_project_ui_;
- /** 属性操作结果回调 */
- ResultReporter result_reporter_;
- /** 状态栏消息回调 */
- StatusReporter status_reporter_;
- /** 绑定后的 HMI 编辑器 */
- HmiEditorWidget *hmi_editor_widget_ = nullptr;
- /** 绑定后的梯形图编辑器 */
- LogicEditorWidget *logic_editor_widget_ = nullptr;
- };
|