#pragma once #include "iDlgBase.h" #include "iParameter.h" #include "iGridResultItem.h" //class iGridResultItem; // 列表区统一处理的Utils(应用于模型选择) class X_GUI_GRIDPTY_EXPORT iGridResultUtils : public iDlgBase { Q_OBJECT // 右键拷贝内容范围 enum CopyDataMode { CDM_CurItem = 0,//当前项 CDM_CurGroup, //当前组 CDM_AllItems, //所有项 CDM_Unknown }; public: explicit iGridResultUtils(QWidget *parent = 0); ~iGridResultUtils(); public: // 初始化 virtual void initUI(); // 对外暴露接口 // void setLineItems(QVector& vec, \ // QWidget* pWxDlg); bool buildResultUtils(QVector& vecResults, \ QStringList& listTypes, \ QWidget* pWxDlg); iGridResultItem* buildResultItemOf(iParameter* pDataObj, \ iGridResultItem* pParent, \ QString sLastItem); void setModelType(QString s); // 边界相关 void setBounds(QRectF& rt); double getUtilHeight(); void connectSignalsOf(iGridResultItem* p); void bkAllItems(); QStringList getAllTags(); //不考虑层级 void setSplitPos(double f); void resetLayout(); //重置 // 清空 void clearAllItems(); // 刷新 void updateItem(iGridResultItem* p); /// @brief 改变某个item的状态 /// @note bExclusive表示是否排他性,比如只有一种激活 void changeItemState(iGridResultItem* p, \ iGridResultItem::ResultItemState o, \ bool bExclusive = true); // 模型解释选用了某一项 void setItemAsSelected(QString sAlias, bool bSelected = true); public slots: // 右键 virtual void showCustomContextMenu(const QPoint &pos); virtual void slotCopyCurrentItem(); virtual void slotCopyCurrentGroup(); virtual void slotCopyAllItems(); private: // 搭建过程 QStringList getParaTypes(QStringList listParas); iGridResultItem* createAndAddItem(iGridResultItem* pParent, \ iParameter* pDataObj, \ bool bGroup); void insertItem(int nIndex, iGridResultItem* pItem); // 把所有Item从上到下(不考虑层级记录下来) bool getAllItems(QVector& vec); //不考虑层级 // 范围及布局 void updateLayout(); void doLayout(); // 右键拷贝数据 void copyDataBy(CopyDataMode o); bool collectsDataBy(CopyDataMode o, QVector& vec); protected: virtual void mousePressEvent(QMouseEvent *); virtual void mouseDoubleClickEvent(QMouseEvent* e); virtual void mouseReleaseEvent(QMouseEvent *); virtual void mouseMoveEvent(QMouseEvent *); virtual void resizeEvent(QResizeEvent *); protected: virtual void paintEvent(QPaintEvent*); void paintGrid(QPainter* pPainter); signals: void sigHelpMsg(QString& s); protected: // 节点操作及属性更改 GridTickPos hitTest(QPoint pt); void expand(iGridResultItem* p); void collapse(iGridResultItem* p); // 获取上一个item iGridResultItem* getLastItemOfState(iGridResultItem::ResultItemState o); // 位置记录 int getPreferedSplitX(); void saveSplitX(); void loadSplitX(); public: // 组织数据 // 序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); private: // 窗体载体 QWidget* m_pWxDlg; // 子项 QVector m_vecGridItems; QVector m_vecAllItems;// 从上到下不考虑层级,所有 iGridResultItem* m_pItemSel; // 位置及布局 QRectF m_rtBounds; bool m_bNeedLayout; // 分割线 bool m_bHitSplit; double m_fSplitPos; // Header bool m_bHeaderVisible; double m_fRowHeight; QMenu* m_pContextMenu; bool m_bUnableSP; };