You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iGui/iGuiGridPty/iGridResultUtils.h

169 lines
4.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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<iGridResultItem*>& vec, \
// QWidget* pWxDlg);
bool buildResultUtils(QVector<iParameter*>& 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<iGridResultItem*>& vec); //不考虑层级
// 范围及布局
void updateLayout();
void doLayout();
// 右键拷贝数据
void copyDataBy(CopyDataMode o);
bool collectsDataBy(CopyDataMode o, QVector<iGridResultItem*>& 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<iGridResultItem*> m_vecGridItems;
QVector<iGridResultItem*> 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;
};