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