Files
envi-code/SourceCode/Code2026/EarthWormCmd/BimInfoDlg.cpp
T
2026-09-28 15:28:50 +08:00

310 lines
6.2 KiB
C++

#include "stdafx.h"
#include "BimInfoDlg.h"
#include "TJJUDlg.h"
#include "AecDbObjXDataMap.h"
#include "coreTools.h"
IMPLEMENT_DYNAMIC(CBimInfoDlg, CDialog)
CBimInfoDlg::CBimInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBimInfoDlg::IDD, pParent)
{
m_pXDataMap = NULL;
m_sClassKey = _T("");
}
CBimInfoDlg::~CBimInfoDlg()
{
}
void CBimInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_wndList);
}
BEGIN_MESSAGE_MAP(CBimInfoDlg, CDialog)
ON_BN_CLICKED(IDOK, &CBimInfoDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CBimInfoDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CBimInfoDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CBimInfoDlg::OnBnClickedButton5)
END_MESSAGE_MAP()
int CBimInfoDlg::ShowBimInfo(AecDbObjXDataMap* pMap,LPCTSTR pszClassKey,BOOL bShowDlg)
{
CAcModuleResourceOverride myResources;
CBimInfoDlg dlg;
dlg.SetXDataMap(pMap,pszClassKey);
if (bShowDlg)
{
return dlg.DoModal();
}
else
{
dlg.Create(CBimInfoDlg::IDD);
dlg.OnBnClickedOk();
}
return IDOK;
}
void CBimInfoDlg::SetXDataMap(AecDbObjXDataMap* pMap,LPCTSTR pszClassKey)
{
m_pXDataMap = pMap;
m_sClassKey = pszClassKey;
}
int CBimInfoDlg::SetDefaultBimInfo(AecDbObjXDataMap* pMap,LPCTSTR pszClassKey)
{
//写本地数据库文件
CString sClassKey = pszClassKey;
if (!sClassKey.IsEmpty())
{
//\\sys
CString sFullPath = FilePath::GetSysDir();
sFullPath.MakeLower();
sFullPath += _T("\\");
sFullPath += sClassKey;
sFullPath += _T(".bim");
int nPos = -1,nItem = -1;
CString sLine,sName,sVal,sData;
CStdioFile file;
int n = 0;
CString sUser;
if (file.Open(sFullPath,CFile::modeRead | CFile::typeText))
{
while( file.ReadString(sLine) )
{
sUser.Format(_T("user%d"),n);
n++;
sLine.TrimRight(_T('\n'));
nPos = sLine.Find(_T(':'));
if (nPos != -1)
{
sName = sLine.Mid(0,nPos);
sVal = sLine.Mid(nPos+1);
sName.TrimRight();
sName.TrimLeft();
sVal.TrimRight();
sVal.TrimLeft();
//NAME|VAL
sData.Format(_T("%s:%s"),sName,sVal);
int nVt = 0;
if (!pMap->HasKey(sUser,nVt))
{
pMap->SetAt(sUser,sData);
}
}
}
file.Close();
}
}
return 0;
}
BOOL CBimInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CBitmap bmp;
if (!bmp.LoadBitmap (IDB_BITMAPI))
{
AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAPI);
ASSERT (FALSE);
return FALSE;
}
BITMAP bmpObj;
bmp.GetBitmap (&bmpObj);
UINT nFlags = ILC_COLOR24 | ILC_MASK;
m_imageList.Create (16, bmpObj.bmHeight, nFlags, 0, 0);
m_imageList.Add (&bmp, RGB (255, 0, 0));
m_wndList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
m_wndList.InsertColumn(0,_T("名称"),LVCFMT_LEFT,120);
m_wndList.InsertColumn(1,_T("属性"),LVCFMT_LEFT,200);
m_wndList.SetColumnItemData(0,NULL,ET_Edit);
m_wndList.SetColumnItemData(1,NULL,ET_Edit);
ShowLocalBimDb();
ShowUserData();
return TRUE;
}
void CBimInfoDlg::ShowLocalBimDb()
{
//写本地数据库文件
if (!m_sClassKey.IsEmpty())
{
//\\sys
CString sFullPath = FilePath::GetSysDir();
sFullPath.MakeLower();
sFullPath += _T("\\");
sFullPath += m_sClassKey;
sFullPath += _T(".bim");
int nPos = -1,nItem = -1;
CString sLine,sName,sVal;
CStdioFile file;
if (file.Open(sFullPath,CFile::modeRead | CFile::typeText))
{
while( file.ReadString(sLine) )
{
sLine.TrimRight(_T('\n'));
nPos = sLine.Find(_T(':'));
if (nPos != -1)
{
sName = sLine.Mid(0,nPos);
sVal = sLine.Mid(nPos+1);
sName.TrimRight();
sName.TrimLeft();
sVal.TrimRight();
sVal.TrimLeft();
nItem = m_wndList.InsertItem(m_wndList.GetItemCount(),sName,0);
m_wndList.SetItemText(nItem,1,sVal);
}
}
file.Close();
}
}
}
int CBimInfoDlg::FindNameItem(LPCTSTR pszName)
{
CString sName;
for (int i = 0;i < m_wndList.GetItemCount();i++)
{
sName = m_wndList.GetItemText(i,0);
if (sName.CompareNoCase(pszName) == 0)
{
return i;
}
}
return -1;
}
void CBimInfoDlg::ShowUserData()
{
if (m_pXDataMap != NULL)
{
CString sVal, sName;
int nPos = -1,nItem = -1;
SH_BIM_BLOCK bims;
CoreTools::getBimDatas(*m_pXDataMap, bims);
for (size_t i = 0; i < bims.size(); ++i)
{
sName = bims[i].first;
sVal = bims[i].second;
nItem = FindNameItem(sName);
if (nItem == -1)
{
nItem = m_wndList.InsertItem(m_wndList.GetItemCount(), sName, 0);
}
m_wndList.SetItemText(nItem, 1, sVal);
}
}
}
void CBimInfoDlg::OnBnClickedOk()
{
if (m_pXDataMap != NULL)
{
SH_BIM_BLOCK bims;
CString sName,sVal;
for (int n = 0;n < m_wndList.GetItemCount();n++)
{
sName = m_wndList.GetItemText(n,0);
sVal = m_wndList.GetItemText(n,1);
bims.push_back(std::make_pair(sName, sVal));
}
CoreTools::setBimDatas(*m_pXDataMap, bims);
//写本地数据库文件
if (!m_sClassKey.IsEmpty())
{
//\\sys
CString sFullPath = FilePath::GetSysDir();
sFullPath.MakeLower();
sFullPath += _T("\\");
sFullPath += m_sClassKey;
sFullPath += _T(".bim");
CString sLine;
CStdioFile file;
if (file.Open(sFullPath,CFile::modeCreate | CFile::modeWrite | CFile::typeText))
{
for (int n = 0;n < m_wndList.GetItemCount();n++)
{
sName = m_wndList.GetItemText(n,0);
sVal = m_wndList.GetItemText(n,1);
sLine.Format(_T("%s : %s\n"),sName,sVal);
file.WriteString(sLine);
}
file.Close();
}
}
}
OnOK();
}
//增加
void CBimInfoDlg::OnBnClickedButton1()
{
int nCount = m_wndList.GetItemCount();
int nItem = m_wndList.InsertItem(nCount,_T("名称"),0);
m_wndList.SetItemText(nItem,1,_T("数据"));
}
//修改
void CBimInfoDlg::OnBnClickedButton4()
{
/*POSITION ps = m_wndList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndList.GetNextSelectedItem(ps);
if (nItem != -1)
{
CTJJUDlg dlg;
dlg.m_sName = m_wndList.GetItemText(nItem,0);
dlg.m_sVal = m_wndList.GetItemText(nItem,1);
if (IDOK == dlg.DoModal() )
{
m_wndList.InsertItem(nItem,dlg.m_sName,0);
m_wndList.SetItemText(nItem,1,dlg.m_sVal);
}
}
}*/
}
//删除
void CBimInfoDlg::OnBnClickedButton5()
{
POSITION ps = m_wndList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndList.GetNextSelectedItem(ps);
if (nItem != -1)
{
m_wndList.DeleteItem(nItem);
}
}
}