#pragma once #include "resource.h" #include #include "singleton.h" #include "GsPreviewCtrl.h" #include "xlistctrl.h" #include "ListBoxST.h" #include "bomreportdef.h" class AecDbEwEquipment; class CEquLibCopyTreeDlg; class CEquipmentLibraryDlg : public CDialog { public: DECLARE_DYNAMIC(CEquipmentLibraryDlg) public: enum EOPER { eMana = 0, // 管理设备 eIns = 1, // 插入设备到DWG eSel = 2, // 选择设备,返回设备表中的ID eManaZhSb = 3, eInsZhSb = 4, }; public: CEquipmentLibraryDlg(EOPER oper , LPCTSTR pszDir = NULL , LPCTSTR pszFile = NULL , bool bUIFangle = false , bool bUI2DCheck = false , CWnd* pParent = NULL); virtual ~CEquipmentLibraryDlg(); enum { IDD = IDD_EQU_LIB_DLG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual BOOL OnInitDialog(); virtual BOOL DestroyWindow(); DECLARE_MESSAGE_MAP() private: void initDbLibraryComb(); void initDirTree(); void initFileList(); void initBIMList(); void initPreviewCtrl(); void refreshFileList(HTREEITEM hItem); void refreshBimList(int idx); void getBimDatasByList(std::map &bims); void getSelectedFiles(std::vector &files); bool isFolderItem(HTREEITEM hItem); bool isRootItem(HTREEITEM hItem); bool isClassItem(HTREEITEM hItem); HTREEITEM getParentFolder(const HTREEITEM &hItem); CString getClassName(const HTREEITEM &hItem); CString getEquLibraryName(); // 根据锚点来锚定目录 void anchorDir(); public: CUIISQLiteServer& getSqliteDB() { return m_sqlDB; } public: // 设备管理 static void sbgl(); // 组合设备管理 static void zhsbgl(); // 插入组合设备 static void crzhsb(LPCTSTR pszDir = NULL); // 插入设备 static void crsb(LPCTSTR pszDir = NULL); static int selectSingleEquID(LPCTSTR pszDir = NULL // 目录锚点 , LPCTSTR pszFile = NULL // 文件名锚点 , bool bUIFangle = false // 是否显示“插入法兰”选项 , bool bUI2DCheck = false // 是否显示“二维显示为符号”选项 ); static AecDbEwEquipment* selectSingleEqu(LPCTSTR pszDir // 目录锚点 , LPCTSTR pszFile // 文件名锚点 , bool bUIFangle // 是否显示“插入法兰”选项 , bool bUI2DCheck // 是否显示“二维显示为符号”选项 , bool &bUseFangle // 返回“插入法兰”选项的选择结果 , bool &b2DCheck // 返回“二维显示为符号”选项的选择结果 ); static AecDbEwEquipment* selectCustomValve(LPCTSTR pszDir // 目录锚点 , double dDN // 文件中名中的中的公称直径,例:“DN100” , bool bUIFangle // 是否显示“插入法兰”选项 , bool bUI2DCheck // 是否显示“二维显示为符号”选项 , bool &bUseFangle // 返回“插入法兰”选项的选择结果 , bool &b2DCheck // 返回“二维显示为符号”选项的选择结果 ); static bool ExtractBomOfZHEqu(AcDbBlockReference *pRef, AecDbEwEquipment &equ); // 下面两个函数,只凭 数据库中的 Folder Class 和 文件名,来取出设备 // 用来取名称中带公称直径的设备 static AecDbEwEquipment* getEquipment(LPCTSTR pszPath, double dDN); // 用来取名称有 pszFile 做为子串的设备 static AecDbEwEquipment* getEquipment(LPCTSTR pszPath, LPCTSTR pszFile); static bool saveEquToDb(AcDbObjectId equID, LPCTSTR pszEquName); AecDbEwEquipment* getEquipment(int fid); public: afx_msg LONG_PTR onAcadKeepFocus(UINT_PTR, LONG_PTR); afx_msg void OnBnClickedDirAdd(); afx_msg void OnBnClickedDirRename(); afx_msg void OnBnClickedDirDel(); afx_msg void OnBnClickedDirOut(); afx_msg void OnBnClickedDirIn(); afx_msg void OnBnClickedFileAdd(); afx_msg void OnBnClickedFileNew(); afx_msg void OnBnClickedFileUpdateThumbnail(); afx_msg void OnBnClickedFileCopy(); afx_msg void OnBnClickedFileRename(); afx_msg void OnBnClickedFileAnchor(); afx_msg void OnBnClickedFileDel(); afx_msg void OnBnClickedFileOut(); afx_msg void OnBnClickedBimAdd(); afx_msg void OnBnClickedBimModi(); afx_msg void OnBnClickedBimDel(); afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedInsert(); afx_msg void OnCheckLineVlv(); afx_msg void OnCheckFlange(); afx_msg void OnTvnSelchangedDirTree(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnLbnSelchangeFileList(); afx_msg void OnTvnRBClickDirTree(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/); afx_msg void OnCbnSelchangeLibrary(); afx_msg void OnCheckSearch(); afx_msg void OnEnChangeSearch(); afx_msg void OnLbnDblClkFileList(); private: CComboBox m_cmbEquLib; CImageList m_imageList; CTreeCtrl m_ctrlDirTree; CListBoxST m_ctrlFileList; CXListCtrl m_ctrlBimList; CGsPreviewCtrl m_wndViewCtrl; CStatic m_ctrlStaticSep; CEdit m_ctrlSearchEdt; CStatic m_ctrlStaticDir, m_ctrlStaticFile; EOPER m_eOper; CUIISQLiteServer m_sqlDB; HBITMAP m_hBitmap; // 目录定位点 CString m_strDirAnchor; // 文件定位点 CString m_strFileAnchor; // 界面上是否显示 “插入法兰” 选项 bool m_bUI_Fangle; //法兰端面和垫片 CString m_sEndF1, m_sEndF2; CString m_sGaskets; // 界面上是否显示 “二维显示为符号” 选项 bool m_bUI_2DFlag; std::vector m_EquLibs; // 当前的设备库 int m_nIdxEquLib; public: int m_iSelectFileID; // 是否自动插入法兰 int m_bUseFangle; int m_bLineVlv;//单线阀门 // 是否二维显示为符号 int m_bCheck2DFlag; // 是否是电动阀门 int m_nValveType; // 是否开启搜索 BOOL m_bSearch; // 搜索内容 CString m_sSearch; std::vector> m_dbs; }; typedef Singleton g_EquLibDlg; class CEquLibCopyTreeDlg : public CDialog { public: DECLARE_DYNAMIC(CEquLibCopyTreeDlg) enum { IDD = IDD_EQU_LIB_COPY_TREE_DLG }; CEquLibCopyTreeDlg(CImageList &img , CUIISQLiteServer &db , const CEquipmentLibraryDlg::EOPER &oper , CWnd *pParent = NULL); ~CEquLibCopyTreeDlg(); protected: virtual void DoDataExchange(CDataExchange* pDX); virtual BOOL OnInitDialog(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel(); afx_msg void OnNewFolder(); int getClassId() { return m_iClassId; } private: CImageList &m_imageList; CUIISQLiteServer &m_sqlDB; CTreeCtrl m_ctrlDirTree; int m_iClassId; CEquipmentLibraryDlg::EOPER m_eOper; };