#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 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 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; };