综合平台编程器项目的远程存储
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 

127 rindas
4.5 KiB

  1. /**
  2. * @file property_panel_controller.h
  3. * @brief 定义 HMI 和梯形图属性面板控制器
  4. * @version 1.0.0
  5. * @author suyu
  6. * @date 2026-08-22
  7. */
  8. #pragma once
  9. #include "domain/control_logic_model.h"
  10. #include "domain/hmi_model.h"
  11. #include <QString>
  12. #include <functional>
  13. #include <string>
  14. class HmiEditorService;
  15. class HmiEditorWidget;
  16. class LogicEditorService;
  17. class LogicEditorWidget;
  18. class ProjectService;
  19. class QWidget;
  20. namespace Ui {
  21. class MainWindow;
  22. }
  23. /**
  24. * 组织 HMI/梯形图选择状态、属性面板和编辑器信号
  25. *
  26. * 属性提交统一经过编辑服务,以便校验、原子回滚和撤销/重做
  27. */
  28. class PropertyPanelController final
  29. {
  30. public:
  31. /** 报告属性操作结果,参数依次为操作名、消息和是否成功 */
  32. using ResultReporter = std::function<void(
  33. const QString &action, const QString &message, bool succeeded)>;
  34. /** 向状态栏报告一条带超时的消息 */
  35. using StatusReporter = std::function<void(
  36. const QString &message, int timeout_ms)>;
  37. /** 创建属性面板控制器并注入编辑服务和选择状态 */
  38. PropertyPanelController(
  39. QWidget &parent,
  40. Ui::MainWindow &ui,
  41. ProjectService &project_service,
  42. HmiEditorService &hmi_editor_service,
  43. LogicEditorService &logic_editor_service,
  44. const HmiDefaultSettings &hmi_defaults,
  45. std::function<std::string()> current_page_id,
  46. std::function<std::string()> current_logic_id,
  47. std::string &selected_control_id,
  48. std::string &selected_logic_node_id,
  49. std::function<void()> refresh_project_ui,
  50. ResultReporter result_reporter,
  51. StatusReporter status_reporter);
  52. /** 连接属性面板按钮、输入框和服务信号 */
  53. void configure();
  54. /** 绑定 HMI 与梯形图编辑器,接收它们的选择变化 */
  55. void bindEditorWidgets(
  56. HmiEditorWidget &hmi_editor_widget,
  57. LogicEditorWidget &logic_editor_widget);
  58. /** 显示指定 HMI 控件的属性 */
  59. void showControlProperties(const std::string &control_id);
  60. /** 显示指定 HMI 页面尺寸属性 */
  61. void showPageProperties(const std::string &page_id);
  62. /** 显示指定梯形图节点的属性 */
  63. void showLogicNodeProperties(const std::string &node_id);
  64. /** 在当前页面添加指定类型的 HMI 控件 */
  65. void addHmiControl(HmiControlType type);
  66. /** 删除当前选中的 HMI 控件 */
  67. void deleteSelectedControl();
  68. /** 提交当前 HMI 控件属性 */
  69. void applySelectedControlProperties();
  70. /** 提交当前 HMI 页面属性 */
  71. void applySelectedPageProperties();
  72. /** 提交当前梯形图节点属性 */
  73. void applySelectedLogicNodeProperties();
  74. private:
  75. /** 显示 HMI 编辑服务返回的错误 */
  76. void handleHmiEditorError(const QString &message) const;
  77. /** 显示梯形图编辑服务返回的错误 */
  78. void handleLogicEditorError(const QString &message) const;
  79. /** 打开颜色选择器并写回属性输入框 */
  80. void chooseTextColor();
  81. /** 统一报告属性操作失败 */
  82. void reportFailure(
  83. const QString &action, const std::string &message) const;
  84. /** 主窗口父对象,不由控制器拥有 */
  85. QWidget &parent_;
  86. /** 主窗口的 Designer 界面对象 */
  87. Ui::MainWindow &ui_;
  88. /** 工程服务,不由控制器拥有 */
  89. ProjectService &project_service_;
  90. /** HMI 编辑服务,不由控制器拥有 */
  91. HmiEditorService &hmi_editor_service_;
  92. /** 梯形图编辑服务,不由控制器拥有 */
  93. LogicEditorService &logic_editor_service_;
  94. /** 新建页面的启动期只读默认尺寸 */
  95. const HmiDefaultSettings &hmi_defaults_;
  96. /** 获取当前 HMI 页面标识的回调 */
  97. std::function<std::string()> current_page_id_;
  98. /** 获取当前控制逻辑标识的回调 */
  99. std::function<std::string()> current_logic_id_;
  100. /** 主窗口保存的当前控件标识 */
  101. std::string &selected_control_id_;
  102. /** 主窗口保存的当前逻辑节点标识 */
  103. std::string &selected_logic_node_id_;
  104. /** 请求主窗口刷新工程界面的回调 */
  105. std::function<void()> refresh_project_ui_;
  106. /** 属性操作结果回调 */
  107. ResultReporter result_reporter_;
  108. /** 状态栏消息回调 */
  109. StatusReporter status_reporter_;
  110. /** 绑定后的 HMI 编辑器 */
  111. HmiEditorWidget *hmi_editor_widget_ = nullptr;
  112. /** 绑定后的梯形图编辑器 */
  113. LogicEditorWidget *logic_editor_widget_ = nullptr;
  114. };