#pragma once
#include "GvlManager.h"
#include "Common.h"
///
/// 管理多个任务的树形控件
///
class WindowAppMdiFrame;
class WindowApp;
class WindowAppResourceManagerTree : public QTreeWidget
{
Q_OBJECT
public:
WindowAppResourceManagerTree(QTreeWidget* parent = nullptr);
~WindowAppResourceManagerTree();
public:
void setMdiFrame(WindowAppMdiFrame* pMdiFrame)
{
this->m_pMdiFrame = pMdiFrame;
}
//// 添加一个新节点
//QWidget* addNewNode(QString strName, SUBVIEW_TYPE viewType, bool bActive = false);
// 添加一个GVL节点
QWidget* addGvlNode(QString strName, GVL_MODE gvlType, DllTool* pHdwTool, bool bActive = false);
// 添加一个Pou节点
QWidget* addPouNode(QString strName, bool bActive = false);
// 添加一个Task节点
QWidget* addTaskNode(QString strName, bool bActive = false);
// 添加一个Ui节点
QWidget* addUiNode(QString strName, bool bActive = false, bool bFromDoc = false);
// 添加默认的总任务管理视图节点
QWidget* addDefaultTaskMonitorNode(QString strName);
// 添加默认的Log视图节点
QWidget* addDefaultLogViewNode(QString strName);
// 添加默认的Hardware组态视图节点
QWidget* addDefaultHWConfigViewNode(QString strName);
// 重置(删除所有创建的节点和子视图)
void reset();
// 查找子节点
QTreeWidgetItem* findChildItem(const QString& strItemName);
// 2022-2-22 创建默认的几个视图
void initDefaultViews();
// 2022-2-22 创建默认的几个节点
void initDefaultNodes();
// 创建初始 Task 节点
void initDefaultTaskNodes(QString strTaskName);
// 2022-9-20 绑定WindowApp指针,用于切换对应的ToolTab(Pou和UI)
void bindWindowApp(WindowApp* ptr)
{
m_pWindowApp = ptr;
}
// 2022-9-21 根据用户选择的子窗体,激活App中对应的工具箱Tab(仅Pou和UI)
void switchAppToolbox(QTreeWidgetItem* currentParentItem);
// 2022-9-21 根据用户激活的子窗体的名字,激活App中对应的工具箱Tab(仅Pou和UI)
void switchAppToolbox(const QString& strSubviewName);
// 各个菜单项的响应函数
public:
// Gvl - New
void doMenuGvlNew();
// Gvl - 删除
void doMenuGvlDelete(const QString& strName);
// Pou - New
void doMenuPouNew();
// Pou - Import
void doMenuPouImport();
// Pou - Export
void doMenuPouExport(const QString& strName);
// Pou - Rename
void doMenuPouRename(const QString& strName);
// Pou - Delete
void doMenuPouDelete(const QString& strName);
// Pou - Change Mode
void doMenuPouChangeMode(const QString& strName);
// Task - New
void doMenuTaskNew();
// Task - Rename
void doMenuTaskAddPou(const QString& strName);
// Task - Del
void doMenuTaskDelete(const QString& strName);
// UI - New
void doMenuUiNew();
// UI - setMainPage
void doMenuUiMainPage(const QString& strName);
// UI - Del
void doMenuUiDelete(const QString& strName);
private:
// 创建界面布局
void createLayouts();
// 创建各个节点的右键菜单
void createMenus();
// 添加子节点
void addChildItem( SUBVIEW_TYPE nodeIndex, const QString& strItemName);
// 删除所有子节点
void removeAllSubNodes();
//// 重写右键菜单事件
//void contextMenuEvent(QContextMenuEvent* event);
// 添加一个Pou节点到Task节点
void addPouNodeToTask(QString strPouName, QString strTaskName);
private slots:
// 弹出右键菜单
void onTreeContextMenu( const QPoint& pt);
// 节点双击,切换对应子页面
void onTreeItemDblClicked(QTreeWidgetItem*, int);
// 各个节点的右键消息响应
// GVL 菜单
void onMenuGVL(QAction* action);
// Pou 菜单
void onMenuPou(QAction* action);
// Task 菜单
void onMenuTask(QAction* action);
// UI 菜单
void onMenuUI(QAction* action);
protected:
//// MainPage的名字信息
//// (由于UI页面的主页后面要加main后缀,所以这里需要处理一下)
// 2022-9-25 去掉了此处理
//struct UI_MAINPAGE_TITLE
//{
// QString strShowTitle;
// QString strRealTitle;
//} m_uiMainTitle;
// MainPage的名字信息
QString m_strMainTitle;
// 节点的图标
QList m_appNodeIcons;
// 各个根节点
QList m_rootNodes;
// 各个根节点的名称
QVector m_appNodeNames;
// 顶层节点
QTreeWidgetItem* topAppItem;
QTreeWidgetItem* topHardwareItem;
QTreeWidgetItem* topDebugItem;
// 根节点的菜单
QMenu* m_menuGVLRoot;
QMenu* m_menuPouRoot;
QMenu* m_menuTaskRoot;
QMenu* m_menuUiRoot;
// 子节点的菜单
QMenu* m_menuGVLChild;
QMenu* m_menuPouChild;
QMenu* m_menuTaskChild;
QMenu* m_menuUiChild;
QMenu* m_menuScriptChild;
// GVL Action
QAction* m_actionGVLNew;
QAction* m_actionGVLEdit;
QAction* m_actionGVLRename;
QAction* m_actionGVLDelete;
// Pou Action
QAction* m_actionPouNew;
QAction* m_actionPouRename;
QAction* m_actionPouChangeMode;
QAction* m_actionPouDelete;
QAction* m_actionPouExport;
QAction* m_actionPouImport;
// Task Manager Action
QAction* m_actionTaskNew;
QAction* m_actionTaskAddPou;
//QAction* m_actionTaskRename;
QAction* m_actionTaskDelete;
// UI Action
QAction* m_actionUiNew;
QAction* m_actionUiMainPage;
QAction* m_actionUiDelete;
// Mdi控件管理单元
WindowAppMdiFrame* m_pMdiFrame;
// 2022-9-20,保存父窗体指针(目前用于在激活对应的子窗体时切换App界面中对应的工具箱Tab)
WindowApp* m_pWindowApp;
};