343 lines
8.4 KiB
C++
343 lines
8.4 KiB
C++
// ValveSpecDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "tapi.h"
|
|
//#include "cbclass.h"
|
|
|
|
#include "ValveSpecDlg.h"
|
|
#include "SelectBlkDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//#ifdef _WIN64
|
|
#include "TGAs.h"
|
|
//#endif
|
|
|
|
|
|
void SetValveSpec()
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
CValveSpecDlg dlg;
|
|
dlg.DoModal();
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CValveSpecDlg dialog
|
|
|
|
|
|
CValveSpecDlg::CValveSpecDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CValveSpecDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CValveSpecDlg)
|
|
m_iCurIndex = -1;
|
|
//}}AFX_DATA_INIT
|
|
m_iOld = -1;
|
|
}
|
|
|
|
|
|
void CValveSpecDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CValveSpecDlg)
|
|
DDX_Control(pDX, IDC_LIST_MAT, m_listValve);
|
|
DDX_LBIndex(pDX, IDC_LIST_MAT, m_iCurIndex);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CValveSpecDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CValveSpecDlg)
|
|
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
|
|
ON_WM_PAINT()
|
|
ON_LBN_SELCHANGE(IDC_LIST_MAT, OnSelchangeListMat)
|
|
ON_BN_CLICKED(IDC_BUTTON_REMOVE, OnButtonRemove)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CValveSpecDlg message handlers
|
|
|
|
BOOL CValveSpecDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
GetValveSpecList();
|
|
int len = m_lstValve.Length();
|
|
for(int i=0;i<len;i++){
|
|
CBlockStruct val = *m_lstValve[i];
|
|
m_listValve.AddString(val.m_csDesName);
|
|
}
|
|
|
|
|
|
m_grid.Clear();
|
|
|
|
m_grid.AppendCol(_T("管径"), 135);
|
|
m_grid.AppendCol(_T("长度"), 135);
|
|
|
|
m_grid.Create(this, IDC_LIST_SPEC);
|
|
m_grid.FitLastCol();
|
|
// m_grid.SetNoAppendButton(TRUE);
|
|
m_grid.SetNoDefaultMenu(true);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CValveSpecDlg::GetValveSpecList()
|
|
{
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("valve.dbf"), fullFile)) {
|
|
AfxMessageBox(_T("对不起,没有发现valve.dbf文件!"));
|
|
return;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
return;
|
|
CString csName, csBlkName;
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
|
|
GET_FIELD(pTable, _T("name"), csName);
|
|
GET_FIELD(pTable, _T("blkname"), csBlkName);
|
|
int len = m_lstValve.Length();
|
|
BOOL bFind = FALSE;
|
|
for(int i=0;i<len;i++){
|
|
CBlockStruct val = *m_lstValve[i];
|
|
if(_tcsicmp(val.m_csRecord, csBlkName) == 0){
|
|
bFind = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if(!bFind){
|
|
CBlockStruct *pValve = new CBlockStruct();
|
|
pValve->m_csDesName = csName;
|
|
pValve->m_csRecord = csBlkName;
|
|
m_lstValve.Append(pValve);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CValveSpecDlg::UpdateGrid()
|
|
{
|
|
if(m_iCurIndex < 0)
|
|
return;
|
|
|
|
m_grid.Clear();
|
|
CString csBlkName = m_lstValve[m_iCurIndex]->m_csRecord;
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("valve.dbf"), fullFile)) {
|
|
AfxMessageBox(_T("对不起,没有发现valve.dbf文件!"));
|
|
return;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
return;
|
|
CString csBlkName2, csDn, csLen;
|
|
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
|
|
GET_FIELD(pTable, _T("blkname"), csBlkName2);
|
|
GET_FIELD(pTable, _T("dn"), csDn);
|
|
GET_FIELD(pTable, _T("length"), csLen);
|
|
if(_tcsicmp(csBlkName, csBlkName2) == 0){
|
|
int idx = m_grid.GetRowNum();
|
|
m_grid.AppendRow();
|
|
m_grid.GetCell(idx, 0).SetText(csDn);
|
|
m_grid.GetCell(idx, 1).SetText(csLen);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CValveSpecDlg::OnButtonAdd()
|
|
{
|
|
CString csSldName;
|
|
|
|
CTemporaryResourceOverride vTemp;
|
|
CSelectBlkDlg dlg;
|
|
dlg.m_csTkName = _T("VALVE");
|
|
dlg.m_csType = _T("双线阀门");
|
|
CWnd *pWnd = GetDlgItem(IDC_BUTTON_ADD);
|
|
CRect rect;
|
|
dlg.m_staticSlide.m_csCurRecord = csSldName;
|
|
pWnd->GetWindowRect(&rect);
|
|
dlg.m_ptBase = rect.BottomRight();
|
|
if(dlg.DoModal() == IDOK){
|
|
CString csRet = dlg.m_staticSlide.m_csCurRecord;
|
|
CString csDes = dlg.m_staticSlide.m_csCurDesName;
|
|
|
|
|
|
XString xsTKName, xsRocord, xsTmp;
|
|
SplitSlbName(csRet, xsTKName, xsRocord);
|
|
AcDbDatabase *dwg=acdbCurDwg();
|
|
AcAxDocLock docLock(dwg);
|
|
VERIFY(docLock.lockStatus() == Acad::eOk);
|
|
if(LoadDwbBlock((const TCHAR*)xsTKName, (const TCHAR*)xsRocord, xsTmp) != RTNORM)
|
|
return;
|
|
|
|
int len = m_lstValve.Length();
|
|
BOOL bFind = FALSE;
|
|
for(int i=0;i<len;i++){
|
|
CBlockStruct val = *m_lstValve[i];
|
|
if(_tcsicmp(val.m_csRecord, xsTmp) == 0){
|
|
bFind = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if(!bFind){
|
|
CBlockStruct *pValve = new CBlockStruct();
|
|
pValve->m_csDesName = csDes;
|
|
pValve->m_csRecord = xsTmp;
|
|
m_lstValve.Append(pValve);
|
|
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("valve.dbf"), fullFile)) {
|
|
AfxMessageBox(_T("对不起,没有发现valve.dbf文件!"));
|
|
return;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(pTable) {
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("name"), (const TCHAR*)csDes);
|
|
SET_FIELD(pTable, _T("blkname"), xsTmp);
|
|
pTable->AppendEnd();
|
|
}
|
|
m_listValve.AddString(csDes);
|
|
}
|
|
}
|
|
}
|
|
|
|
void CValveSpecDlg::OnPaint()
|
|
{
|
|
CPaintDC dc(this); // device context for painting
|
|
OpenSlide();
|
|
}
|
|
|
|
void CValveSpecDlg::OpenSlide()
|
|
{
|
|
UpdateData(TRUE);
|
|
CWnd* pWnd = GetDlgItem(IDC_STATIC_PREVIEW);
|
|
if(m_iCurIndex > -1){
|
|
CString csBlkName = m_lstValve[m_iCurIndex]->m_csRecord;
|
|
CString csTK, csRecord, csPath;
|
|
SplitBlkStr(csBlkName, csTK, csRecord);
|
|
int idx = csRecord.Find(_T("("));
|
|
if(idx > -1){
|
|
csRecord = csRecord.Left(idx);
|
|
}
|
|
csPath = g_csDwbPath + csTK + _T("(") + csRecord + _T(")");//上华系统图库路径
|
|
DrawSlide((const TCHAR*)csPath, pWnd);
|
|
}
|
|
}
|
|
|
|
void CValveSpecDlg::OnSelchangeListMat()
|
|
{
|
|
UpdateData(TRUE);
|
|
OpenSlide();
|
|
SaveDbf();
|
|
UpdateGrid();
|
|
m_iOld = m_iCurIndex;
|
|
}
|
|
|
|
void CValveSpecDlg::SaveDbf()
|
|
{
|
|
if(m_iOld < 0)
|
|
return;
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("valve.dbf"), fullFile)) {
|
|
AfxMessageBox(_T("对不起,没有发现valve.dbf文件!"));
|
|
return;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
return;
|
|
|
|
CString csBlkName2, csDn2, csLen2;
|
|
|
|
CString csBlkName = m_lstValve[m_iOld]->m_csRecord;
|
|
CString csName = m_lstValve[m_iOld]->m_csDesName;
|
|
for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){
|
|
WDGridRow *pRow = m_grid.CurRow();
|
|
CString csDn = (*pRow)[0].GetText();
|
|
CString csLen = (*pRow)[1].GetText();
|
|
if(csDn == _T(""))
|
|
continue;
|
|
BOOL bModify = FALSE;
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
|
|
GET_FIELD(pTable, _T("blkname"), csBlkName2);
|
|
GET_FIELD(pTable, _T("dn"), csDn2);
|
|
if(_tcsicmp(csBlkName, csBlkName2) == 0 && _tcsicmp(csDn2, csDn) == 0){
|
|
SET_FIELD(pTable, _T("length"), (const TCHAR*)csLen);
|
|
bModify = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if(bModify)
|
|
continue;
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("name"), (const TCHAR*)csName);
|
|
SET_FIELD(pTable, _T("blkname"), (const TCHAR*)csBlkName);
|
|
SET_FIELD(pTable, _T("dn"), (const TCHAR*)csDn);
|
|
SET_FIELD(pTable, _T("length"), (const TCHAR*)csLen);
|
|
pTable->AppendEnd();
|
|
|
|
}
|
|
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
|
|
GET_FIELD(pTable, _T("blkname"), csBlkName2);
|
|
GET_FIELD(pTable, _T("dn"), csDn2);
|
|
if(_tcsicmp(csBlkName, csBlkName2) == 0){
|
|
BOOL bFind = FALSE;
|
|
for(m_grid.MoveToFirst(); !m_grid.IsOut(); m_grid.MoveToNext()){
|
|
WDGridRow *pRow = m_grid.CurRow();
|
|
CString csDn = (*pRow)[0].GetText();
|
|
if(_tcsicmp(csDn, csDn2) == 0){
|
|
bFind = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if(!bFind)
|
|
pTable->Delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CValveSpecDlg::OnButtonRemove()
|
|
{
|
|
UpdateData(TRUE);
|
|
if(m_iCurIndex < 0)
|
|
return;
|
|
CString csBlkName = m_lstValve[m_iCurIndex]->m_csRecord;
|
|
m_lstValve.Remove(m_iCurIndex);
|
|
m_listValve.DeleteString(m_iCurIndex);
|
|
|
|
CodeBase db;
|
|
XString fullFile;
|
|
if(!FindFile(_T("valve.dbf"), fullFile)) {
|
|
AfxMessageBox(_T("对不起,没有发现valve.dbf文件!"));
|
|
return;
|
|
}
|
|
XDbfTable *pTable = db.Open(fullFile);
|
|
if(!pTable)
|
|
return;
|
|
CString csBlkName2;
|
|
for(pTable->MoveFirst();!pTable->IsEOF();pTable->MoveNext()){
|
|
GET_FIELD(pTable, _T("blkname"), csBlkName2);
|
|
if(_tcsicmp(csBlkName, csBlkName2) == 0)
|
|
pTable->Delete();
|
|
}
|
|
m_iCurIndex = -1;
|
|
m_iOld = -1;
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CValveSpecDlg::OnOK()
|
|
{
|
|
SaveDbf();
|
|
CDialog::OnOK();
|
|
}
|
|
|