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/mGui/mGuiTree/TreeWx/TreeWxMain.h

182 lines
6.1 KiB
C

#pragma once
#include "TreeItemMain.h"
#include "TreeWxBase.h"
#include "TreeNodeDescBase.h"
class ZxDataObjectEx;
class ZxDataWell;
class ZxDataJobInfo;
class ZxRstJobUtils;
class ZxDataGaugeBase;
class M_GUI_TREE_EXPORT TreeWxMain : public TreeWxBase
{
Q_OBJECT
public:
TreeWxMain(QWidget* parent = 0);
~TreeWxMain();
// 全局项目指针
void setDataProject(ZxDataProject* p);
// 数据树与成果树需要相互关联+消息响应
void setBrother(TreeWxMain* p);
void setUnableSP(bool b);
// 根据某节点获取其父井节点的Code
virtual QString getParentWellCodeOf(TreeItemBase* p);
// 获取特定节点对应的井、Job信息
bool getObjCodeInfos(QTreeWidgetItem* p,
QString& sWell,
QString& sJob,
QString& sWndID);
// 当批量保存井基础数据后的刷新
// virtual void freshTreeEx();
// 刷新Brother
void freshBotherTreeWx();
// 根据井型油气水获取相应图标
static void getWellIcon(QString sType, QString& sIcon);
// 这是在SubWndData表格右键删除时触发然后借助树进行响应
// 不用tips进行确认在此之前已经确认
virtual bool forceDelByDataObjs(QStringList& listKeys, \
QString& sTable, \
QString& sError);
virtual bool collectItemsOfDataObjs(QList<TreeItemBase*>& list, \
QStringList& listKeys, \
QString& sTable, \
QString& sError);
bool collectItemsOfDataCodes(TreeItemBase* pItemP, \
bool bTopLevelOnly, \
QStringList& listKeys, \
QList<TreeItemBase*>& listTrItems);
// 遍历查找所有井一级的节点
virtual bool findAllWellNodes(TreeItemBase* pItemP, \
QList<TreeItemBase*>& listTrItems);
// 遍历查找数据对象所关联的节点
virtual TreeItemMain* findItemNodeOf(ZxDataObject* pObj, TreeItemBase* pItemP);
// 拖拽时,暂时移走
virtual void takeawayItemNode(TreeItemBase* pItem);
// 插入节点
virtual void insertItemNode(TreeItemBase* pItem, TreeItemBase* pItemP, int nIndex);
// 查找父级节点其中类型为oType
virtual TreeItemMain* findParentItemNodeOf(TreeItemBase* pItem, MainTreeNodeType oType);
// 是否父级节点
virtual bool isParentLevelsOf(TreeItemBase* pItem, TreeItemBase* pItemP);
// 改变当前选项状态
virtual void modifyCurrentItemStates(QString sItemName, bool bInit);
// 保存时确保树中的Node的存在
virtual TreeItemMain* makeureBlockNode(QString sBlockName);
virtual TreeItemMain* makeureWellNode(ZxDataWell* pWell);
protected:
// 填充
virtual void fillTree();
// 填写树
//virtual void initTopLevels();
virtual void initTopLevels();
virtual void initTopLevel_OneBlock(QString sBlockName, \
TreeItemMain*& pItem, \
ZxDataObjectList& vecObjs);
virtual void initTopLevel_OneWell(ZxDataObject* p, \
TreeItemMain*& pItem, \
TreeItemMain* pItemP, \
bool bExcusive = true);
virtual void initSubLevels(TreeItemMain* pItem);
// 填写时,该数据对象是否考虑,比如填写成果树时,如果井下面没有成果则不考虑
virtual bool isDataObjConsidered(ZxDataObject* pObj);
protected:
// 获取筛选后的区块名称(可能根据井进行适当筛选,比如没有成果的)
QStringList getFilteredBlocks(bool bAutoSort = true);
// 初始化节点信息,从INi获取
void loadCommonNodeDescs();
// 右键菜单功能_节点通用
virtual void initContextMenuCommonNode(QMenu* pMenu);
// 空节点通用
virtual void initContextMenuCommonAll(QMenu* pMenu);
// 右键节点级别的菜单
virtual void initContextMenuWell(QMenu* pMenu);
virtual void initContextMenuBlock(QMenu* pMenu);
// 右键的部分功能重载实现
virtual bool showOrEditNode(QTreeWidgetItem* pItem);
virtual bool delCurrentNodes(QList<TreeItemBase *> &listItems);
virtual bool delOneNode(TreeItemMain* pItem);
virtual bool renameCurrentNode(QString sNew);
virtual void doubleClickItem(QTreeWidgetItem* pItem);
virtual void enteredItem(QTreeWidgetItem* pItem);
// 当p的一孩子被删除后刷新p
// 此时,孩子已经被删除
virtual void updateParentWhenDel(QTreeWidgetItem* pParent);
// 拖拽相关的信号
virtual bool isDragAccepted(QDragEnterEvent* event);
virtual void dealwithDrop(QDropEvent* event);
ZxDataObjectEx* parseMimeData(const QMimeData* pMimeData, \
MainTreeNodeType& oType);
Q_SIGNALS:
// 当前井该变
void sigSetCurrentWell(const QString&, const QString&);
void sigConfirmChangingCurWell(bool& b);
protected:
// 更改节点属性
virtual void changeNodeAttrs(TreeItemMain*& p);
// 获取节点tips以\r\n换行
virtual QString getTipsOf(TreeItemMain*& p);
// 获取井的区块名称,如果为空,则返回“其他”
QString getBlockNameOf(ZxDataWell* pDataWell);
public slots:
// 右键响应
void slotSetCurrentWell(); //设为当前井
void slotScanData(); //浏览数据
void slotEditNodeObj(); //编辑Node
protected:
// 树节点特殊的节点标识
QString m_sAllDataTag;
QString m_sWellDataTag;
// 部分常用节点信息,从ini获取
vecTreeNodeDescPtr m_vecCommonNodeDescs;
// 数据对象载体
ZxDataProject* m_pDataProject;
// Brother
TreeWxMain* m_pBrother;
// 在其它brother刷新中不能触发信号
bool m_bUnableSP;
bool m_bEnableBlockOthers;//是否启用,区块没填写时,自动为其他
};