Files
envi-code/SourceCode/Code2026/tg_shs/shs_annotate/LeaderTextDlg.cpp
T
2026-09-28 15:28:50 +08:00

424 lines
10 KiB
C++

// LeaderTextDlg.cpp : implementation file
//
#include "stdafx.h"
#include "LeaderTextDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLeaderDlg dialog
const int maxHisList = 10;
extern double g_nHeight;
static int g_nArrowStyle = 1;
static TDbSymbMultiLeader::TArrowStyle
g_ArrowStyle[] = {TDbSymbMultiLeader::kArrow,
TDbSymbMultiLeader::kDote, TDbSymbMultiLeader::kCrossing, TDbSymbMultiLeader::kNone};
CString CLeaderDlg::g_csArrowSize=_T("3.0");
CString CLeaderDlg::m_strInputUp = _T("");
CString CLeaderDlg::m_strInputDown = _T("");
// add by cwk on 060706
extern CString g_sLeadFixAngle = _T("45");
extern BOOL g_bLeadFixAngle = FALSE;
//add by lgy 20120206 固定转角不能记忆
CString CLeaderDlg::m_sFixAngle = _T("45");
BOOL CLeaderDlg::m_bFixAngle= FALSE;
BOOL CLeaderDlg::m_bContinue = TRUE; // Add by lcf on 2005-06-29
BOOL CLeaderDlg::m_bAllPtsOnLine = FALSE; // sg add 090327
int CLeaderDlg::m_nTextAlign = 2; // sg add 090402
int CLeaderDlg::s_iLeaderStyle = 0;
IMPLEMENT_DYNAMIC(CLeaderDlg, CBaseTextDlg)
CLeaderDlg::CLeaderDlg(BOOL bEdit, CWnd* pParent /*=NULL*/)
: CBaseTextDlg(CLeaderDlg::IDD, pParent), m_bEditObj(bEdit)
{
//注释 by lgy 20120206 固定转角不能记忆
// add by cwk on 060706
//m_sFixAngle = g_sLeadFixAngle;
//m_bFixAngle = g_bLeadFixAngle;
}
CLeaderDlg::CLeaderDlg(BOOL bEdit, UINT resID,CWnd* pParent /*=NULL*/)
: CBaseTextDlg(resID, pParent), m_bEditObj(bEdit)
{
//注释 by lgy 20120206 固定转角不能记忆
// add by cwk on 060706
//m_sFixAngle = g_sLeadFixAngle;
//m_bFixAngle = g_bLeadFixAngle;
}
void CLeaderDlg::DoDataExchange(CDataExchange* pDX)
{
CBaseTextDlg::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLeaderDlg)
// sg modify 090507,仿照图名标注,试着解决“对象编辑中,有时候文字显示有问题”的BUG
if (pDX->m_bSaveAndValidate)
{
DDX_CBString(pDX, IDC_COMBO_INPUTTEXT, m_strInputUp);
DDX_CBString(pDX, IDC_COMBO_INPUTTEXT1, m_strInputDown);
}
else
{
GetDlgItem(IDC_COMBO_INPUTTEXT)->SetWindowText(m_strInputUp);
GetDlgItem(IDC_COMBO_INPUTTEXT1)->SetWindowText(m_strInputDown);
}
DDX_Control(pDX, IDC_COMBO_INPUTTEXT, m_comboInputText);
DDX_Control(pDX, IDC_COMBO_INPUTTEXT1, m_comboInputText1);
DDX_Text(pDX, IDC_EDIT1, m_sFixAngle);
DDX_CBIndex(pDX, IDC_COMBO_STYLE, g_nArrowStyle);
DDX_CBString(pDX, IDC_ARROW_SIZE, g_csArrowSize);
if (pDX->m_bSaveAndValidate && _tstof(g_csArrowSize)<1.0E-3)
pDX->Fail();
DDX_Check(pDX, IDC_CONTINUE, m_bContinue);
DDX_Check(pDX, IDC_CHECK1, m_bFixAngle);
DDX_Check(pDX, IDC_CHECK_ONLINE, m_bAllPtsOnLine); // sg add 090327
DDX_CBIndex(pDX, IDC_COMBO_TEXTALIGN, m_nTextAlign); // sg add 090402
DDX_Check(pDX,IDC_CHK_LERDER,s_iLeaderStyle); // add by lxb on 111229
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLeaderDlg, CBaseTextDlg)
//{{AFX_MSG_MAP(CLeaderDlg)
ON_BN_CLICKED(IDC_CHECK1, OnUnChangeAngle)
ON_BN_CLICKED(IDC_CHECK_ONLINE,OnCHKOnline)
ON_BN_CLICKED(IDC_CHK_LERDER,OnCHKLeader)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLeaderDlg message handlers
BOOL CLeaderDlg::OnInitDialog()
{
CBaseTextDlg::OnInitDialog();
LoadHisText();
UpdateData(FALSE);
GetDlgItem(IDC_COMBO_INPUTTEXT)->SetFocus();
// add by cwk on 060705
if (!m_bEditObj)
{
GetDlgItem(IDC_EDIT1)->EnableWindow(m_bFixAngle);
}
else
{
GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
}
UpdateData(FALSE);
return FALSE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// Modify by lcf On 2005-07-05
CWnd* CLeaderDlg::GetCurWnd()
{
UpdateData(TRUE);
CWnd *pWnd = this->GetFocus();
CWnd *pWnd2 = NULL;
if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd)
{
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT); // 把CWnd 回传给基类
m_strInputText = m_strInputUp;
}
else if(m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd)
{
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT1); // 把CWnd 回传给基类
m_strInputText = m_strInputDown;
}
else
{
int nSel = m_comboInputText.GetWindowTextLength();
m_comboInputText.SetEditSel(nSel, nSel);
pWnd2 = GetDlgItem(IDC_COMBO_INPUTTEXT);
}
return(pWnd2);
}
void CLeaderDlg::UpdateInputText()
{
CWnd *pWnd = this->GetFocus();
if (m_comboInputText.m_hWnd == pWnd->GetParent()->m_hWnd)
{
m_strInputUp = m_strInputText;
}
if (m_comboInputText1.m_hWnd == pWnd->GetParent()->m_hWnd)
{
m_strInputDown = m_strInputText;
}
UpdateData(FALSE);
}
void CLeaderDlg::Dlg2Obj(TDbSymbMultiLeader *pText)
{
CBaseTextDlg::Dlg2Obj(pText);
pText->SetText1(m_strInputUp);
pText->SetText2(m_strInputDown);
pText->SetArrow(g_ArrowStyle[g_nArrowStyle]);
double nSize = _tstof(g_csArrowSize);
if (nSize>1.0E-3)
pText->SetArrowSize(nSize);
// sg add 090402,增加文字相对于基线的对齐方式
TDbSymbMultiLeader::TSymbMLTextAlign nAlign = (TDbSymbMultiLeader::TSymbMLTextAlign)(m_nTextAlign + 1);
pText->SetTextAlign(nAlign);
//引线平行 add by lxb on 111229
pText->SetLeaderParalle(s_iLeaderStyle);
}
void CLeaderDlg::Obj2Dlg(TDbSymbMultiLeader *pText)
{
CBaseTextDlg::Obj2Dlg(pText);
m_strInputUp = pText->GetText1();
m_strInputDown = pText->GetText2();
TDbSymbMultiLeader::TArrowStyle Style = pText->GetArrow();
for(int i = 0; i < 4; i++)
{
if(Style == g_ArrowStyle[i])
g_nArrowStyle = i;
}
g_csArrowSize.Format(_T("%.1f"), pText->GetArrowSize());
// sg add 090402,增加文字相对于基线的对齐方式
m_nTextAlign = (int)(pText->GetTextAlign() - 1);
//是否为引线平行 add by lxb on 111229
s_iLeaderStyle = pText->IsLeaderParall();
if (s_iLeaderStyle)
m_bAllPtsOnLine = FALSE;
}
void CLeaderDlg::OnOK()
{
AddToRecent();
CBaseTextDlg::OnOK();
}
// Add by lcf on 20050708
void CLeaderDlg::AddToRecent()
{
{
UpdateData(TRUE);
int len = m_lstHistory.Length();
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("leader.his"));
#if (ADS>15)
std::
#endif
ofstream out(strTmpPath);
if (m_strInputUp != _T(""))
{
out << (const char *)_AS(m_strInputUp) <<"\n";
int index = m_lstHistory.Index(m_strInputUp);
if (index >= 0)
{
m_lstHistory.Remove(index);
len --;
}
if (len > maxHisList-1)
len = maxHisList - 1;
}
for (int i=0; i < len; i++)
out << _AS(m_lstHistory[i]) << "\n";
len = m_lstHistory1.Length();
TCHAR strTmpPath1[256] = _T("");
GetTempPath(255, strTmpPath1);
_tcscat(strTmpPath1, _T("leader1.his"));
#if (ADS>15)
std::
#endif
ofstream out1(strTmpPath1);
if (m_strInputDown != _T(""))
{
out1 << (const char *)_AS(m_strInputDown) << "\n";
int index = m_lstHistory1.Index(m_strInputDown);
if (index >= 0)
{
m_lstHistory1.Remove(index);
len --;
}
if (len > maxHisList-1)
len = maxHisList - 1;
}
for (i=0; i < len; i++)
out1 << _AS(m_lstHistory1[i]) << "\n";
}
m_lstHistory.Reset();
m_lstHistory1.Reset();
m_comboInputText.ResetContent();
m_comboInputText1.ResetContent();
LoadHisText();
}
void CLeaderDlg::LoadHisText()
{
TCHAR strTmpPath[256] = _T("");
GetTempPath(255, strTmpPath);
_tcscat(strTmpPath, _T("leader.his"));
#if (ADS>15)
std::
#endif
ifstream in(strTmpPath);
while(!(!in))
{
char line[256];
in.getline(line, 255);
if (!in)
break;
m_lstHistory.Append(tstrnew(TString(line)));
}
for (int m =0; m < m_lstHistory.Length(); m++)
m_comboInputText.AddString(m_lstHistory[m]);
TCHAR strTmpPath1[256] = _T("");
GetTempPath(255, strTmpPath1);
_tcscat(strTmpPath1, _T("leader1.his"));
#if (ADS>15)
std::
#endif
ifstream in1(strTmpPath1);
while(!(!in1))
{
char line[256];
in1.getline(line, 255);
if(!in1)
break;
m_lstHistory1.Append(tstrnew(TString(line)));
}
for (m =0; m < m_lstHistory1.Length(); m++)
m_comboInputText1.AddString(m_lstHistory1[m]);
UpdateData(false);
}
// add by cwk on 060705
void CLeaderDlg::OnUnChangeAngle()
{
// TODO: Add your control notification handler code here
if (!m_bEditObj)
{
if (m_bFixAngle)
{
m_bFixAngle = FALSE;
GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
}
else
{
m_bFixAngle = TRUE;
GetDlgItem(IDC_EDIT1)->EnableWindow();
}
}
}
//add by lxb 111228
void CLeaderDlg::OnCHKOnline()
{
CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER));
if (pBtn1->GetCheck() == BST_CHECKED)
{
pBtn2->SetCheck(BST_UNCHECKED);
}
UpdateData();
}
//add by lxb 111228
void CLeaderDlg::OnCHKLeader()
{
CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER));
if (pBtn2->GetCheck() == BST_CHECKED)
{
pBtn1->SetCheck(BST_UNCHECKED);
}
UpdateData();
}
//add by lxb 111228
void CLeaderDlg::SetCheckBoxStatus(BOOL bEnableFlag)
{
if (!bEnableFlag)
{
if (s_iLeaderStyle == 1)
{
((CButton*)GetDlgItem(IDC_CHECK_ONLINE))->EnableWindow(FALSE);
((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(FALSE);
}
else
{
((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(FALSE);
}
}
else
{
((CButton*)GetDlgItem(IDC_CHECK_ONLINE))->EnableWindow(TRUE);
((CButton*)GetDlgItem(IDC_CHK_LERDER))->EnableWindow(TRUE);
}
}
int CLeaderDlg::GetLeaderStyle()
{
return s_iLeaderStyle;
}
/////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CEditLeaderDlg, CLeaderDlg)
CEditLeaderDlg::CEditLeaderDlg(CWnd *pParent)
: CLeaderDlg(TRUE, CEditLeaderDlg::IDD, pParent)
{
}
BEGIN_MESSAGE_MAP(CEditLeaderDlg, CLeaderDlg)
ON_BN_CLICKED(IDC_ADDDIM, OnBnClickedAdddim)
ON_BN_CLICKED(IDC_CHECK_ONLINE, OnBnClickedCheckOnline)
ON_BN_CLICKED(IDC_CHK_LERDER, OnBnClickedChkEditleaer)
END_MESSAGE_MAP()
void CEditLeaderDlg::OnBnClickedAdddim()
{
EndDialog(1000);
}
//add by lxb 111228
void CEditLeaderDlg::OnBnClickedCheckOnline()
{
CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER));
if (pBtn1->GetCheck() == BST_CHECKED)
{
pBtn2->SetCheck(BST_UNCHECKED);
}
UpdateData();
}
//add by lxb 111228
void CEditLeaderDlg::OnBnClickedChkEditleaer()
{
CButton *pBtn1 = ((CButton*)GetDlgItem(IDC_CHECK_ONLINE));
CButton *pBtn2 = ((CButton*)GetDlgItem(IDC_CHK_LERDER));
if (pBtn2->GetCheck() == BST_CHECKED)
{
pBtn1->SetCheck(BST_UNCHECKED);
}
UpdateData();
}