WindowAppUiScene.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #pragma once
  2. #include "Common.h"
  3. #include "VPCommand.h"
  4. #include "objectcontroller.h"
  5. #include "WindowAppRefLineManager.h"
  6. #include "WindowAppIsometricLineManager.h"
  7. class SelectWidget;
  8. class WindowAppUiView;
  9. class WindowAppUiFrame;
  10. class WindowAppItemRefLine;
  11. class WindowAppIsometricLine;
  12. class WindowAppUiScene : public QGraphicsScene
  13. {
  14. Q_OBJECT
  15. public:
  16. explicit WindowAppUiScene(QGraphicsView* parent = nullptr);
  17. // 获取本界面中的所有控件
  18. QList<SelectWidget*> getAllControls();
  19. // 刷新指定控件(用于更新属性表)
  20. void refreshControl(QWidget* pControl);
  21. // 刷新指定控件的选中效果(用于适配属性表更新后的选中效果更新)
  22. void refreshDrawPoint(QWidget* pControl);
  23. // 检查所有的属性和扩展属性是否有效
  24. bool checkAllProperties();
  25. //// 新建自定义控件(2022-10-19屏蔽,统一采用一个接口了)
  26. //VControlObject* newControl(
  27. // int row,
  28. // const QPoint& newPt,
  29. // const QString& controlID = "",
  30. // const QSize& newSize = QSize(0, 0),
  31. // CONTROL_PROPERTY* prop = nullptr,
  32. // CONTROL_PROPERTY_EX* propex = nullptr
  33. //);
  34. // 新建自定义控件(按类型)
  35. VControlObject* newControl(
  36. VALUE_TYPE controlType,
  37. const QPoint& newPt,
  38. const QString& controlID = "",
  39. const QSize& newSize = QSize(0, 0),
  40. CONTROL_PROPERTY* prop = nullptr,
  41. CONTROL_PROPERTY_EX* propex = nullptr
  42. );
  43. // 2022-10-19,获取当前控件(目前用于Undo体系中获取当前的控件信息)
  44. VControlObject* getCurrentControl()
  45. {
  46. return m_pCurrentObject;
  47. }
  48. // 2022-10-21,获取指定ID号的控件Widget
  49. SelectWidget* getSelectWidgetByID(const QString& strID);
  50. //===============================================================
  51. // 工具栏操作相关
  52. // 排序到最前
  53. void zorderTopCurrentControl();
  54. // 排序到最底
  55. void zorderBottomCurrentControl();
  56. // 排序到前一个
  57. void zorderUpCurrentControl();
  58. // 排序到后一个
  59. void zorderDownCurrentControl();
  60. // 删除当前控件
  61. void deleteCurrentControl();
  62. // 2022-10-7 删除指定ID的控件(用于在Undo体系中)
  63. void deleteControlByID(const QString& strID);
  64. // 序列化支持
  65. bool serialized(QDataStream& dataStream, bool in = true);
  66. public:
  67. // 父框架指针
  68. WindowAppUiFrame* m_pUiFrame;
  69. // 属性表控件
  70. ObjectController* m_pPropertyController;
  71. // 当前选中的控件
  72. // 2022-5-22 修改为静态变量,所有UiView共享此一个变量,标识当前用户选择的控件
  73. // 目前是为了方便在DialogDataLink对话框中使用,用于标识用户当前选择的控件
  74. static VControlObject* m_pCurrentObject;
  75. // 本UI页面的名称
  76. QString m_strPageName;
  77. // 2022-10-7,加入了Undo体系
  78. VPCommandManager m_CommandManager;
  79. protected slots:
  80. // 当控件被按下时
  81. void widgetPressed(QWidget* widget);
  82. // 当控件释放时
  83. void widgetRelease(QWidget* widget);
  84. // 当控件删除时
  85. void widgetDelete(QWidget* widget);
  86. // 当控件移动时
  87. void widgetMove(QWidget* widget);
  88. // 2022-9-16,当控件拉伸时(用于绘制等宽线)
  89. void widgetStretch(QWidget* widget, STRETCH_DIRECTION dir);
  90. //==========================================================
  91. // 用于控件同步的消息
  92. // 当Edit控件内容变更时
  93. void onVEditChanged(const QString& strText);
  94. // ComboBox变更消息
  95. void onVComboChanged(const int nIndex);
  96. // ListBox变更消息
  97. void onVListChanged(const int nRow);
  98. // RadioBox变更消息
  99. void onVRadioChanged(bool checked);
  100. // CheckBox变更消息
  101. void onVCheckChanged(int state);
  102. // 当ValueControl内容变更时
  103. void onValueControlChanged(const QString& strText);
  104. // 当ValueControl内容变更时
  105. void onResultControlChanged(const QString& strText);
  106. protected:
  107. // 清空所有控件焦点
  108. void clearFocus();
  109. // 将控件选入列表中
  110. void addSelection(
  111. VControlObject* pControl,
  112. VALUE_TYPE type,
  113. CONTROL_PROPERTY* pProperty,
  114. CONTROL_PROPERTY_EX* pPropertyEx = nullptr
  115. );
  116. // 2022-8-14 控件移动时,进行参考线相关的实时计算
  117. void checkRefLine(QWidget* widget);
  118. // 2022-9-16 控件被拉伸时,进行等宽线相关的实时计算
  119. void checkIsoLine(QWidget* widget, STRETCH_DIRECTION dir);
  120. // 2022-10-22,检查当前控件是否移动
  121. void checkCurrentControlMove();
  122. // 2022-10-22,检查当前控件是否缩放
  123. void checkCurrentControlZoom();
  124. protected:
  125. // 当前界面中的控件列表
  126. QList<SelectWidget*> m_SelectControls;
  127. // 当前选中控件
  128. QWidget* m_pCurrentWidget;
  129. // 本Scene对应的View指针
  130. WindowAppUiView* m_pUiView;
  131. // 用于管理和展示参考线的类
  132. WindowAppRefLineManager m_RefLineManager;
  133. // 用于管理和展示等宽线的类
  134. WindowAppIsometricLineManager m_IsoLineManager;
  135. // 2022-10-21增加,控件移动前的位置(用于执行Undo)
  136. QPoint m_oldPos;
  137. // 2022-10-21增加,控件移动前的尺寸(用于执行Undo)
  138. QRect m_oldGeometry;
  139. };