综合平台编程器项目的远程存储
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

140 linhas
4.3 KiB

  1. /**
  2. * @file main_window.h
  3. * @brief 定义综合平台编程器主窗口及运行模式界面协调逻辑
  4. * @version 0.2.0
  5. * @author suyu
  6. * @date 2026-08-08
  7. */
  8. #pragma once
  9. #include "domain/hmi_model.h"
  10. #include "domain/runtime_state.h"
  11. #include <QMainWindow>
  12. #include <memory>
  13. QT_BEGIN_NAMESPACE
  14. class QActionGroup;
  15. class QAction;
  16. class QComboBox;
  17. class QLabel;
  18. class QLineEdit;
  19. class QPushButton;
  20. class QSpinBox;
  21. class QTimer;
  22. class QToolBar;
  23. namespace Ui {
  24. class MainWindow;
  25. }
  26. QT_END_NAMESPACE
  27. class RuntimeModeService;
  28. class ProjectService;
  29. class HmiEditorService;
  30. class HmiRuntimeService;
  31. class HmiEditorWidget;
  32. /**
  33. * @brief 组织主界面区域并将用户操作转交给服务层
  34. *
  35. * 主窗口不直接访问寄存器、工程文件或 PLC 通信实现
  36. */
  37. class MainWindow final : public QMainWindow
  38. {
  39. Q_OBJECT
  40. public:
  41. /**
  42. * @brief 创建主窗口并注入 UI 所需的应用服务
  43. * @param runtime_mode_service 运行模式服务,调用方必须保证其生命周期覆盖窗口
  44. * @param project_service 工程管理服务,调用方必须保证其生命周期覆盖窗口
  45. * @param hmi_editor_service HMI 编辑服务,调用方必须保证其生命周期覆盖窗口
  46. * @param hmi_runtime_service HMI 运行服务,调用方必须保证其生命周期覆盖窗口
  47. * @param parent Qt 父对象
  48. */
  49. explicit MainWindow(
  50. RuntimeModeService &runtime_mode_service,
  51. ProjectService &project_service,
  52. HmiEditorService &hmi_editor_service,
  53. HmiRuntimeService &hmi_runtime_service,
  54. QWidget *parent = nullptr);
  55. ~MainWindow() override;
  56. private:
  57. void configureActions();
  58. void configureAppearance();
  59. void configureHmiEditor();
  60. void configurePropertyEditor();
  61. void refreshProjectUi();
  62. void showControlProperties(const std::string &control_id);
  63. void addHmiControl(HmiControlType type);
  64. void deleteSelectedControl();
  65. void applySelectedControlProperties();
  66. void createNewProject();
  67. void saveProject();
  68. void saveProjectAs();
  69. void loadProject();
  70. void showProjectResult(const QString &action, const QString &message, bool succeeded);
  71. /**
  72. * @brief 请求服务层切换模式并同步界面状态
  73. * @param requested_mode 目标应用模式
  74. *
  75. * 失败时恢复与服务层当前状态一致的工具栏选项
  76. */
  77. void requestMode(ApplicationMode requested_mode);
  78. /**
  79. * @brief 根据服务层模式策略更新编辑权限和状态反馈
  80. * @param message 要显示在状态栏和输出区的模式结果消息
  81. */
  82. void updateModeUi(const QString &message);
  83. /**
  84. * @brief 将互斥模式动作同步到服务层当前状态
  85. */
  86. void restoreCurrentModeAction();
  87. std::unique_ptr<Ui::MainWindow> ui_;
  88. /**
  89. * @brief 非拥有的运行模式服务依赖,由应用入口保证生命周期
  90. */
  91. RuntimeModeService &runtime_mode_service_;
  92. /**
  93. * @brief 非拥有的工程和 HMI 服务依赖,由应用入口保证生命周期
  94. */
  95. ProjectService &project_service_;
  96. HmiEditorService &hmi_editor_service_;
  97. HmiRuntimeService &hmi_runtime_service_;
  98. QActionGroup *mode_action_group_ = nullptr;
  99. QAction *new_project_action_ = nullptr;
  100. QAction *save_project_action_ = nullptr;
  101. QAction *save_as_project_action_ = nullptr;
  102. QAction *load_project_action_ = nullptr;
  103. QAction *add_button_action_ = nullptr;
  104. QAction *add_indicator_action_ = nullptr;
  105. QAction *add_numeric_display_action_ = nullptr;
  106. QAction *add_numeric_input_action_ = nullptr;
  107. QAction *delete_control_action_ = nullptr;
  108. QToolBar *hmi_tool_bar_ = nullptr;
  109. HmiEditorWidget *hmi_editor_widget_ = nullptr;
  110. QTimer *runtime_refresh_timer_ = nullptr;
  111. QLabel *mode_status_label_ = nullptr;
  112. QLabel *register_status_label_ = nullptr;
  113. QLabel *executor_status_label_ = nullptr;
  114. QLineEdit *control_id_edit_ = nullptr;
  115. QLineEdit *control_text_edit_ = nullptr;
  116. QSpinBox *control_x_spin_box_ = nullptr;
  117. QSpinBox *control_y_spin_box_ = nullptr;
  118. QSpinBox *control_width_spin_box_ = nullptr;
  119. QSpinBox *control_height_spin_box_ = nullptr;
  120. QComboBox *binding_area_combo_box_ = nullptr;
  121. QSpinBox *binding_index_spin_box_ = nullptr;
  122. QPushButton *apply_properties_button_ = nullptr;
  123. std::string selected_control_id_;
  124. };