416 lines
12 KiB
C++
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 ÷rLocal=title.GetDividerStyle();
|
|
// 是否继承分割线样式
|
|
m_bInheritDivider=(dividerLocal.GetDividerFlag()==TDividerStyle::kParent);
|
|
|
|
const TDividerStyle &divParent=pSheet->GetRowDivider();
|
|
const TDividerStyle *divFinal=NULL;
|
|
if(m_bInheritDivider) divFinal=&divParent;
|
|
else divFinal=÷rLocal;
|
|
|
|
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 ÷r=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();
|
|
}
|