123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #pragma once
- #include "Common.h"
- #include "VPCommand.h"
- #include "objectcontroller.h"
- #include "WindowAppRefLineManager.h"
- #include "WindowAppIsometricLineManager.h"
- class SelectWidget;
- class WindowAppUiView;
- class WindowAppUiFrame;
- class WindowAppItemRefLine;
- class WindowAppIsometricLine;
- class WindowAppUiScene : public QGraphicsScene
- {
- Q_OBJECT
- public:
- explicit WindowAppUiScene(QGraphicsView* parent = nullptr);
- // 获取本界面中的所有控件
- QList<SelectWidget*> getAllControls();
- // 刷新指定控件(用于更新属性表)
- void refreshControl(QWidget* pControl);
- // 刷新指定控件的选中效果(用于适配属性表更新后的选中效果更新)
- void refreshDrawPoint(QWidget* pControl);
- // 检查所有的属性和扩展属性是否有效
- bool checkAllProperties();
- //// 新建自定义控件(2022-10-19屏蔽,统一采用一个接口了)
- //VControlObject* newControl(
- // int row,
- // const QPoint& newPt,
- // const QString& controlID = "",
- // const QSize& newSize = QSize(0, 0),
- // CONTROL_PROPERTY* prop = nullptr,
- // CONTROL_PROPERTY_EX* propex = nullptr
- //);
- // 新建自定义控件(按类型)
- VControlObject* newControl(
- VALUE_TYPE controlType,
- const QPoint& newPt,
- const QString& controlID = "",
- const QSize& newSize = QSize(0, 0),
- CONTROL_PROPERTY* prop = nullptr,
- CONTROL_PROPERTY_EX* propex = nullptr
- );
- // 2022-10-19,获取当前控件(目前用于Undo体系中获取当前的控件信息)
- VControlObject* getCurrentControl()
- {
- return m_pCurrentObject;
- }
- // 2022-10-21,获取指定ID号的控件Widget
- SelectWidget* getSelectWidgetByID(const QString& strID);
- //===============================================================
- // 工具栏操作相关
- // 排序到最前
- void zorderTopCurrentControl();
- // 排序到最底
- void zorderBottomCurrentControl();
- // 排序到前一个
- void zorderUpCurrentControl();
- // 排序到后一个
- void zorderDownCurrentControl();
- // 删除当前控件
- void deleteCurrentControl();
- // 2022-10-7 删除指定ID的控件(用于在Undo体系中)
- void deleteControlByID(const QString& strID);
- // 序列化支持
- bool serialized(QDataStream& dataStream, bool in = true);
- public:
- // 父框架指针
- WindowAppUiFrame* m_pUiFrame;
- // 属性表控件
- ObjectController* m_pPropertyController;
- // 当前选中的控件
- // 2022-5-22 修改为静态变量,所有UiView共享此一个变量,标识当前用户选择的控件
- // 目前是为了方便在DialogDataLink对话框中使用,用于标识用户当前选择的控件
- static VControlObject* m_pCurrentObject;
- // 本UI页面的名称
- QString m_strPageName;
- // 2022-10-7,加入了Undo体系
- VPCommandManager m_CommandManager;
- protected slots:
- // 当控件被按下时
- void widgetPressed(QWidget* widget);
- // 当控件释放时
- void widgetRelease(QWidget* widget);
- // 当控件删除时
- void widgetDelete(QWidget* widget);
- // 当控件移动时
- void widgetMove(QWidget* widget);
- // 2022-9-16,当控件拉伸时(用于绘制等宽线)
- void widgetStretch(QWidget* widget, STRETCH_DIRECTION dir);
- //==========================================================
- // 用于控件同步的消息
- // 当Edit控件内容变更时
- void onVEditChanged(const QString& strText);
- // ComboBox变更消息
- void onVComboChanged(const int nIndex);
- // ListBox变更消息
- void onVListChanged(const int nRow);
- // RadioBox变更消息
- void onVRadioChanged(bool checked);
- // CheckBox变更消息
- void onVCheckChanged(int state);
- // 当ValueControl内容变更时
- void onValueControlChanged(const QString& strText);
- // 当ValueControl内容变更时
- void onResultControlChanged(const QString& strText);
- protected:
- // 清空所有控件焦点
- void clearFocus();
- // 将控件选入列表中
- void addSelection(
- VControlObject* pControl,
- VALUE_TYPE type,
- CONTROL_PROPERTY* pProperty,
- CONTROL_PROPERTY_EX* pPropertyEx = nullptr
- );
- // 2022-8-14 控件移动时,进行参考线相关的实时计算
- void checkRefLine(QWidget* widget);
- // 2022-9-16 控件被拉伸时,进行等宽线相关的实时计算
- void checkIsoLine(QWidget* widget, STRETCH_DIRECTION dir);
- // 2022-10-22,检查当前控件是否移动
- void checkCurrentControlMove();
- // 2022-10-22,检查当前控件是否缩放
- void checkCurrentControlZoom();
- protected:
- // 当前界面中的控件列表
- QList<SelectWidget*> m_SelectControls;
- // 当前选中控件
- QWidget* m_pCurrentWidget;
- // 本Scene对应的View指针
- WindowAppUiView* m_pUiView;
- // 用于管理和展示参考线的类
- WindowAppRefLineManager m_RefLineManager;
- // 用于管理和展示等宽线的类
- WindowAppIsometricLineManager m_IsoLineManager;
- // 2022-10-21增加,控件移动前的位置(用于执行Undo)
- QPoint m_oldPos;
- // 2022-10-21增加,控件移动前的尺寸(用于执行Undo)
- QRect m_oldGeometry;
- };
|