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

416 lines
12 KiB
C++

// SheetTitileDlg.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "SheetTitileDlg.h"
//extern TARCH_IMPEXP XString GetSymbolName(AcDbObjectId idSymbolRec);
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSheetTitleDlg dialog
const TCHAR *g_szLineWidths[]={_T("0.0(细)"), _T("0.2(中)"), _T("0.5(粗)"),};
int g_nLineWidthNum=ELEMENTS(g_szLineWidths);
CSheetTitleDlg::CSheetTitleDlg(CWnd* pParent /*=NULL*/)
: CGridStyleDialog(CSheetTitleDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSheetTitleDlg)
m_bNoBorder = FALSE;
m_bTitleInVisible = FALSE;
m_bInheritDivider = FALSE;
m_divLineWidth = _T("");
m_csText = _T("");
m_bInheritRowHeight = FALSE;
m_csTitleHeight = _T("");
//}}AFX_DATA_INIT
m_nLineColor=0;
m_nParentLineColor=0;
m_nParentLineWidth=0; //线宽
m_nParentRowHeight=0; //行高
m_bParentNoBorder=FALSE;
for(int i=0; i<ELEMENTS(g_szLineWidths); i++)
m_lstLineWidths.Append(new XString(g_szLineWidths[i]));
}
void CSheetTitleDlg::Obj2Dlg(const TDbSheet *pSheet)
{
ASSERT(pSheet);
m_csText = pSheet->GetTitleText();
const TGridStyle &gridStyle=pSheet->GetGridStyle();
BOOL bLocal=TRUE;
//水平对齐
AcDb::TextHorzMode nHorMode=pSheet->GetTitleHorMode(&bLocal);
m_nHorMode=HorMode2Index(nHorMode);
if(!bLocal)
m_nHorMode=0;
XString sHorMode;
int nParentHorMode=HorMode2Index(gridStyle.GetHorMode());
sHorMode << g_szHorModes[nParentHorMode] << _T("(") << g_szHorModes[0] << _T(")");
*m_lstHorModes[0]=sHorMode;
//垂直对齐
AcDb::TextVertMode nVerMode=pSheet->GetTitleVerMode(&bLocal);
m_nVerMode=VerMode2Index(nVerMode);
if(!bLocal)
m_nVerMode=0;
int nParentVerMode=VerMode2Index(gridStyle.GetVerMode());
XString sVerMode;
sVerMode << g_szVerModes[nParentVerMode] << _T("(") << g_szVerModes[0] << _T(")");
*m_lstVerModes[0]=sVerMode;
// 行距系数
double nFactor=pSheet->GetTitleLineSpaceFactor(&bLocal);
XString sFactor, sFactorParent;
ftoa(nFactor, 1, sFactor);
if(!bLocal) {
sFactor << _T("(") << g_szFactors[0] << _T(")");
}
ftoa(gridStyle.GetLineSpaceFactor(), 1, sFactorParent);
*m_lstFactors[0]=XString(_T("%s(继承)"), (const TCHAR *)sFactorParent);
m_csLineSpaceFactor=sFactor;
//文字高度
double nTextSize=pSheet->GetTitleTextHeight(TRUE, &bLocal);
XString sTextSize, sTextSizeParent;
ftoa(nTextSize, 1, sTextSize);
if(!bLocal) {
sTextSize << _T("(") << g_szTextSizes[0] << _T(")");
}
ftoa(gridStyle.GetTextHeight(), 1, sTextSizeParent);
*m_lstTextSizes[0]=XString(_T("%s(继承)"), (const TCHAR *)sTextSizeParent);
m_csTextSize=sTextSize;
//文字样式
AcDbObjectId idStyle=pSheet->GetTitleTextStyle(&bLocal);
ASSERT(!!idStyle);
XString szStyle=GetSymbolName(idStyle);
XString sStyle;
sStyle << GetSymbolName(gridStyle.GetTextStyleId()) << _T("(继承)");
*m_lstTextStyles[0]=sStyle;
if(!bLocal) {
m_nTextStyle=0;
} else {
for(int i=1; i<m_lstTextStyles.Length(); i++) {
if(_tcsicmp(*m_lstTextStyles[i], szStyle)==0) {
m_nTextStyle=i;
break;
}
}
}
//换行属性
m_bTextWrap=pSheet->IsTitleWrapEnabled(&bLocal);
m_bParentTextWrap=gridStyle.IsTextWrap();
m_bInheritWrapText=!bLocal;
if(m_bInheritWrapText)
m_bTextWrap=m_bParentTextWrap;
//颜色
m_nTextColor = pSheet->GetTitleTextColor( &bLocal);
int nParentColor=gridStyle.GetTextColor();
if(nParentColor==0)
nParentColor=pSheet->colorIndex();
if(!bLocal) { //继承为Byblock
m_nTextColor=0;
}
if(nParentColor)
m_colorComboBox.SetBlockColorIndex(nParentColor);
// 标题可见性
const TSheetTitle &title=pSheet->GetTitle();
m_bTitleInVisible=!title.IsVisible();
// 分割线
const TDividerStyle &dividerLocal=title.GetDividerStyle();
// 是否继承分割线样式
m_bInheritDivider=(dividerLocal.GetDividerFlag()==TDividerStyle::kParent);
const TDividerStyle &divParent=pSheet->GetRowDivider();
const TDividerStyle *divFinal=NULL;
if(m_bInheritDivider) divFinal=&divParent;
else divFinal=&dividerLocal;
m_bParentNoBorder=(divParent.GetDividerFlag()==TDividerStyle::kNone);
m_nParentLineWidth=divParent.GetLineWidth();
m_nParentLineColor=divParent.GetColor();
if(m_nParentLineColor==0)
m_nParentLineColor=pSheet->colorIndex();
m_nParentRowHeight=pSheet->GetRowHeight(TRUE);
// 是否包含边框
m_bNoBorder=(divFinal->GetDividerFlag()==TDividerStyle::kNone);
// 线宽
XString sTemp;
ftoa(divFinal->GetLineWidth(), 2, sTemp);
m_divLineWidth = sTemp;
for(int i=0; i<m_lstLineWidths.Length(); i++) {
if(fabs(_tstof(*m_lstLineWidths[i])-_tstof(sTemp))<1.0E-5) {
m_divLineWidth=*m_lstLineWidths[i];
}
}
// 线颜色
m_nLineColor=divFinal->GetColor();
if(m_nParentLineColor)
m_divColorBox.SetBlockColorIndex(m_nParentLineColor);
// LINETYPE
//...
m_csTitleHeight.Format(_T("%.2f"), title.GetHeight());
}
void CSheetTitleDlg::Dlg2Obj(TDbSheet *pSheet) const
{
ASSERT(pSheet);
TSheetTitle &title=pSheet->GetTitle();
pSheet->assertWriteEnabled();
title.SetText(m_csText);
TGridStyle &gridStyle=(TGridStyle &)title.GetGridStyle();
BOOL bLocal=TRUE;
//水平对齐
if(m_nHorMode==0) {
gridStyle.SetFlagBit(OF_HORMODE, FALSE);
} else if(m_nHorMode>0) {
gridStyle.SetFlagBit(OF_HORMODE, TRUE);
gridStyle.SetHorMode(Index2HorMode(m_nHorMode));
}
//垂直对齐
if(m_nVerMode==0) {
gridStyle.SetFlagBit(OF_VERMODE, FALSE);
} else if(m_nVerMode) {
gridStyle.SetFlagBit(OF_VERMODE, TRUE);
gridStyle.SetVerMode(Index2VerMode(m_nVerMode));
}
// 行距系数
if(_tcscmp(m_csLineSpaceFactor, m_lstFactors[0])==0) {
gridStyle.SetFlagBit(OF_LINESPACE, FALSE);
} else if(!m_csLineSpaceFactor.IsEmpty()) {
if(_tstof(m_csLineSpaceFactor)>-1.0E-3) {
gridStyle.SetFlagBit(OF_LINESPACE, TRUE);
gridStyle.SetLineSpaceFactor(_tstof(m_csLineSpaceFactor));
}
}
//文字高度
if(_tcscmp(m_csTextSize, m_lstTextSizes[0])==0) {
gridStyle.SetFlagBit(OF_TEXTHEIGHT, FALSE);
} else if(!m_csTextSize.IsEmpty()) {
if(_tstof(m_csTextSize)>1.0E-3) {
gridStyle.SetFlagBit(OF_TEXTHEIGHT, TRUE);
gridStyle.SetTextHeight(_tstof(m_csTextSize));
}
}
//文字样式
if(m_nTextStyle==0) {
gridStyle.SetFlagBit(OF_TEXTSTYLE, FALSE);
} else if(m_nTextStyle>0) {
gridStyle.SetFlagBit(OF_TEXTSTYLE, TRUE);
gridStyle.SetTextStyleId(GetTextStyleId(m_lstTextStyles[m_nTextStyle]));
}
//换行属性
if(m_bInheritWrapText) {
gridStyle.SetFlagBit(OF_TEXTWRAP, FALSE);
} else {
gridStyle.SetFlagBit(OF_TEXTWRAP, TRUE);
gridStyle.SetTextWrap(m_bTextWrap);
}
//颜色
if(m_nTextColor==0) {
gridStyle.SetFlagBit(OF_TEXTCOLOR, FALSE);
} else if(m_nTextColor>0) {
gridStyle.SetFlagBit(OF_TEXTCOLOR, TRUE);
gridStyle.SetTextColor(m_nTextColor);
}
////////////////////////////////////////////////////////////////
// 标题可见性
title.SetVisible(!m_bTitleInVisible);
TDividerStyle &divider=title.GetDividerStyle();
// 分割线
if(m_bNoBorder)
divider.SetDividerFlag(TDividerStyle::kNone);
else if(m_bInheritDivider)
divider.SetDividerFlag(TDividerStyle::kParent);
else
divider.SetDividerFlag(TDividerStyle::kLocal);
if(_tstof(m_divLineWidth)>-1.0E-3)
divider.SetLineWidth(_tstof(m_divLineWidth));
divider.SetColor(m_nLineColor);
// LINETYPE
//...
if(!m_bInheritRowHeight) {
double nRowHeight=_tstof(m_csTitleHeight);
if(nRowHeight>1.0E-3)
title.SetHeight(nRowHeight);
} else {
title.SetHeight(pSheet->GetRowHeight(TRUE));
}
}
void CSheetTitleDlg::DoDataExchange(CDataExchange* pDX)
{
CGridStyleDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSheetTitleDlg)
DDX_Control(pDX, IDC_DIVIDER_LINEWIDTH, m_lineWidthBox);
DDX_Control(pDX, IDC_DIVIDER_LINETYPE, m_divLinetypeBox);
DDX_Control(pDX, IDC_DIVIDER_COLOR, m_divColorBox);
DDX_Check(pDX, IDC_NOBORDER, m_bNoBorder);
DDX_Check(pDX, IDC_TITLE_INVISIBLE, m_bTitleInVisible);
DDX_Check(pDX, IDC_INHERIT_DIVIDER, m_bInheritDivider);
DDX_CBString(pDX, IDC_DIVIDER_LINEWIDTH, m_divLineWidth);
DDX_Text(pDX, IDC_TEXT, m_csText);
DDX_Check(pDX, IDC_INHERIT_ROWHEIGHT, m_bInheritRowHeight);
DDX_Text(pDX, IDC_TITLE_HEIGHT, m_csTitleHeight);
//}}AFX_DATA_MAP
if(pDX->m_bSaveAndValidate) {
if(_tstof(m_divLineWidth)<-1.0E-3 || _tstof(m_csTitleHeight)<1.0E-3 ||
_tstof(m_csLineSpaceFactor)<-1.0E-3)
pDX->Fail();
}
}
BEGIN_MESSAGE_MAP(CSheetTitleDlg, CGridStyleDialog)
//{{AFX_MSG_MAP(CSheetTitleDlg)
ON_BN_CLICKED(IDC_INHERIT_DIVIDER, OnInheritDivider)
ON_BN_CLICKED(IDC_TITLE_INVISIBLE, OnTitleInvisible)
ON_BN_CLICKED(IDC_INHERIT_ROWHEIGHT, OnInheritRowheight)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSheetTitleDlg message handlers
BOOL CSheetTitleDlg::OnInitDialog()
{
CGridStyleDialog::OnInitDialog();
// TODO: Add extra initialization here
int nItem=m_divColorBox.FindItemByColorIndex(m_nLineColor);
if(nItem<0) {
m_divColorBox.AddColorToMRU(m_nLineColor);
nItem=m_divColorBox.FindItemByColorIndex(m_nLineColor);
}
if(nItem>=0) m_divColorBox.SetCurSel(nItem);
InitComBox(m_lineWidthBox, m_lstLineWidths);
UpdateData(FALSE);
if(m_bTitleInVisible)
EnableDlgItems(FALSE);
else {
OnInheritDivider();
OnInheritRowheight();
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSheetTitleDlg::EnableDlgItems(BOOL bTrue)
{
UINT itemIDs[]={IDC_DIVIDER_LINETYPE, IDC_DIVIDER_COLOR, IDC_DIVIDER_LINEWIDTH,
IDC_INHERIT_DIVIDER, IDC_NOBORDER,
IDC_LINESPACEFACTOR,
IDC_TEXTSIZE,
IDC_VERMODE,
IDC_TEXTSTYLE,
IDC_HORMODE,
IDC_TEXTCOLOR,
IDC_TEXTSTYLE,
IDC_INHERIT_TEXTWRAP,
IDC_TITLE_HEIGHT,
IDC_INHERIT_ROWHEIGHT,
};
for(int i=0; i<ELEMENTS(itemIDs); i++) {
CWnd *pWnd=GetDlgItem(itemIDs[i]);
if(pWnd)
pWnd->EnableWindow(bTrue);
}
}
void CSheetTitleDlg::OnInheritDivider()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
UINT itemIDs[]={IDC_DIVIDER_LINETYPE, IDC_DIVIDER_COLOR, IDC_DIVIDER_LINEWIDTH, };
BOOL bEnabled=!m_bInheritDivider;
for(int i=0; i<ELEMENTS(itemIDs); i++) {
GetDlgItem(itemIDs[i])->EnableWindow(bEnabled);
}
if(m_bInheritDivider) {
m_bNoBorder=m_bParentNoBorder;
m_divLineWidth=XString(_T("%.2f"), m_nParentLineWidth);
m_nLineColor=m_nParentLineColor;
UpdateData(FALSE);
}
}
// 标题可见性开关
void CSheetTitleDlg::OnTitleInvisible()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
BOOL bEnabled=!m_bTitleInVisible;
EnableDlgItems(bEnabled);
if(bEnabled==TRUE) {
OnInheritDivider();
OnInheritRowheight();
}
}
void CSheetTitleDlg::OnInheritRowheight()
{
UpdateData(TRUE);
if(m_bInheritRowHeight) {
XString sTemp;
ftoa(m_nParentRowHeight, 2, sTemp);
m_csTitleHeight = sTemp;
UpdateData(FALSE);
}
}
void CSheetTitleDlg::OnOK()
{
// Check value
// ...
int nIndex=m_divColorBox.GetCurrentItemColorIndex();
if(nIndex>=0)
m_nLineColor=nIndex;
CGridStyleDialog::OnOK();
}