Files
envi-code/SourceCode/Code2026/PipelineCmd/EquipmentLibraryDlg.h
T
2026-09-28 15:28:50 +08:00

235 lines
6.0 KiB
C++

#pragma once
#include "resource.h"
#include <functional>
#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<CString, CString> &bims);
void getSelectedFiles(std::vector<int> &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<CString> 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<std::shared_ptr<AcDbDatabase>> m_dbs;
};
typedef Singleton<CEquipmentLibraryDlg> 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;
};