Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtPump/ValveSpecDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

343 lines
8.5 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();
}