// ExcelTabProperties.cpp // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ExcelTabView.h" #include "ExcelTabProperties.h" #include "SheetListCtrl.h" #include "SheetEditCtrl.h" #include "SheetTreeCtrl.h" #include "SheetFormView.h" #include "SheetScrollView.h" #include "ExcelTabViewView.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif template class CAutoDestructCtrl : public T { protected: virtual void PostNcDestroy() { delete this; } }; ///////////////////////////////////////////////////////////////////////////// // CExcelTabProperties dialog CExcelTabProperties::CExcelTabProperties(BOOL& bBottom, BOOL& bHasArrows, BOOL& bHasHomeEnd, BOOL& bHScroll, BOOL& bSqareTabs, CExcelTabViewView* pParent /*=NULL*/) : CDialog(CExcelTabProperties::IDD, pParent) , m_bBottom(bBottom) , m_bHasArrows(bHasArrows) , m_bHasHomeEnd(bHasHomeEnd) , m_bHScroll(bHScroll) , m_bSqareTabs(bSqareTabs) , m_pParentWnd(pParent) , m_pExcelTabCtrl(m_pParentWnd->m_pExcelTabCtrl) { m_cyScroll = ::GetSystemMetrics(SM_CYHSCROLL); //{{AFX_DATA_INIT(CExcelTabProperties) m_iTabNum = 0; m_csText = _T(""); //}}AFX_DATA_INIT // default values m_crBack = m_pExcelTabCtrl->GetTabBackColor(); m_crText = m_pExcelTabCtrl->GetTabTextColor(); m_crSelBack = m_pExcelTabCtrl->GetSelTabBackColor(); m_crSelText = m_pExcelTabCtrl->GetSelTabTextColor(); } void CExcelTabProperties::DoDataExchange(CDataExchange* pDX) { const int nTabs = m_pParentWnd ? m_pParentWnd->m_pExcelTabCtrl->GetItemCount() - 1 : 0; CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CExcelTabProperties) DDX_Control(pDX, IDC_CLR_SELTEXT, m_cpSelText); DDX_Control(pDX, IDC_CLR_TEXT, m_cpText); DDX_Control(pDX, IDC_CLR_SELBACK, m_cpSelBack); DDX_Control(pDX, IDC_CLR_BACK, m_cpBack); DDX_Control(pDX, IDC_MODIFY_TAB, m_btnModifyTab); DDX_Control(pDX, IDC_DELETE_TAB, m_btnDeleteTab); DDX_Control(pDX, IDC_DELETE_ALL, m_btnDeleteAll); DDX_Control(pDX, IDC_ADD_TAB, m_btnAddTab); DDX_Text(pDX, IDC_TAB_NUM, m_iTabNum); DDV_MinMaxUInt(pDX, m_iTabNum, 0, nTabs); DDX_Text(pDX, IDC_TEXT, m_csText); DDX_Check(pDX, IDC_FTS_XTP_BOTTOM, m_bBottom); DDX_Check(pDX, IDC_FTS_XTP_HASARROWS, m_bHasArrows); DDX_Check(pDX, IDC_FTS_XTP_HASHOMEEND, m_bHasHomeEnd); DDX_Check(pDX, IDC_FTS_XTP_HSCROLL, m_bHScroll); DDX_Check(pDX, IDC_FTS_XTP_SQUARETABS, m_bSqareTabs); //}}AFX_DATA_MAP DDX_XTPColorPicker(pDX, IDC_CLR_TEXT, m_crText); DDX_XTPColorPicker(pDX, IDC_CLR_BACK, m_crBack); DDX_XTPColorPicker(pDX, IDC_CLR_SELTEXT, m_crSelText); DDX_XTPColorPicker(pDX, IDC_CLR_SELBACK, m_crSelBack); } BEGIN_MESSAGE_MAP(CExcelTabProperties, CDialog) //{{AFX_MSG_MAP(CExcelTabProperties) ON_BN_CLICKED(IDC_FTS_XTP_BOTTOM, OnFtsXtBottom) ON_BN_CLICKED(IDC_FTS_XTP_HASARROWS, OnFtsXtHasarrows) ON_BN_CLICKED(IDC_FTS_XTP_HASHOMEEND, OnFtsXtHashomeend) ON_BN_CLICKED(IDC_FTS_XTP_HSCROLL, OnFtsXtHscroll) ON_BN_CLICKED(IDC_FTS_XTP_SQUARETABS, OnFtsXtSqareTabs) ON_BN_CLICKED(IDC_ADD_TAB, OnAddTab) ON_BN_CLICKED(IDC_DELETE_ALL, OnDeleteAll) ON_BN_CLICKED(IDC_DELETE_TAB, OnDeleteTab) ON_BN_CLICKED(IDC_MODIFY_TAB, OnModifyTab) ON_EN_CHANGE(IDC_TEXT, OnChangeText) ON_EN_CHANGE(IDC_TAB_NUM, OnChangeTabNum) //}}AFX_MSG_MAP ON_CPN_XTP_SELENDOK(IDC_CLR_TEXT, OnSelEndOkTextClr) ON_CPN_XTP_SELENDOK(IDC_CLR_BACK, OnSelEndOkBackClr) ON_CPN_XTP_SELENDOK(IDC_CLR_SELTEXT, OnSelEndOkSelTextClr) ON_CPN_XTP_SELENDOK(IDC_CLR_SELBACK, OnSelEndOkSelBackClr) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CExcelTabProperties message handlers BOOL CExcelTabProperties::OnInitDialog() { CDialog::OnInitDialog(); // set default values for color pickers. m_cpBack.SetDefaultColor(m_crBack); m_cpText.SetDefaultColor(m_crText); m_cpSelBack.SetDefaultColor(m_crSelBack); m_cpSelText.SetDefaultColor(m_crSelText); OnChangeTabNum(); UpdateDlgStatus(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CExcelTabProperties::OnFtsXtBottom() { if (!m_pParentWnd) return; UpdateData(); m_pParentWnd->UpdateExcelTabCtrl(); } void CExcelTabProperties::OnFtsXtHasarrows() { if (!m_pParentWnd) return; UpdateData(); m_pParentWnd->UpdateExcelTabCtrl(); GetDlgItem(IDC_FTS_XTP_HASHOMEEND)->EnableWindow(m_bHasArrows); } void CExcelTabProperties::OnFtsXtHashomeend() { if (!m_pParentWnd) return; UpdateData(); m_pParentWnd->UpdateExcelTabCtrl(); } void CExcelTabProperties::OnFtsXtHscroll() { if (!m_pParentWnd) return; UpdateData(); m_pParentWnd->UpdateExcelTabCtrl(); } void CExcelTabProperties::OnFtsXtSqareTabs() { if (!m_pParentWnd) return; UpdateData(); m_pParentWnd->UpdateExcelTabCtrl(); } void CExcelTabProperties::OnAddTab() { if (!m_pParentWnd) return; if (UpdateData()) { CAutoDestructCtrl* pSheet = new CAutoDestructCtrl(); pSheet->Create(WS_CHILD | WS_TABSTOP | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE, CXTPEmptyRect(), m_pParentWnd->m_pExcelTabCtrl, 1000); pSheet->SetWindowText(m_csText); m_pParentWnd->m_pExcelTabCtrl->InsertItem(m_iTabNum, m_csText, pSheet); } UpdateDlgStatus(); } void CExcelTabProperties::OnDeleteAll() { if (!m_pParentWnd) return; int count = m_pParentWnd->m_pExcelTabCtrl->GetItemCount(); for (int i = count - 1; i >= 0; i--) { CWnd* pTabWnd = m_pParentWnd->m_pExcelTabCtrl->GetItemWindow(i); m_pParentWnd->m_pExcelTabCtrl->DeleteItem(i); pTabWnd->DestroyWindow(); } UpdateDlgStatus(); } void CExcelTabProperties::OnDeleteTab() { if (!m_pParentWnd) return; if (m_pParentWnd->m_pExcelTabCtrl->GetItemCount() > 0 && UpdateData()) { CWnd* pTabWnd = m_pParentWnd->m_pExcelTabCtrl->GetItemWindow(m_iTabNum); m_pParentWnd->m_pExcelTabCtrl->DeleteItem(m_iTabNum); pTabWnd->DestroyWindow(); } UpdateDlgStatus(); } void CExcelTabProperties::OnModifyTab() { if (!m_pParentWnd) return; if (m_pParentWnd->m_pExcelTabCtrl->GetItemCount() > 0 && UpdateData()) { m_pParentWnd->m_pExcelTabCtrl->SetItemText(m_iTabNum, m_csText); } UpdateDlgStatus(); } void CExcelTabProperties::UpdateDlgStatus() { if (!m_pParentWnd) return; const bool bHasTabs = (m_pParentWnd->m_pExcelTabCtrl->GetItemCount() > 0); m_btnModifyTab.EnableWindow(bHasTabs); m_btnDeleteTab.EnableWindow(bHasTabs); m_btnModifyTab.EnableWindow(bHasTabs); m_cpSelText.EnableWindow(bHasTabs); m_cpText.EnableWindow(bHasTabs); m_cpSelBack.EnableWindow(bHasTabs); m_cpBack.EnableWindow(bHasTabs); } void CExcelTabProperties::OnChangeText() { UpdateData(); m_btnAddTab.EnableWindow(!m_csText.IsEmpty()); } void CExcelTabProperties::OnSelEndOkTextClr() { UpdateData(); m_pExcelTabCtrl->SetTabTextColor(m_iTabNum, m_crText); } void CExcelTabProperties::OnSelEndOkBackClr() { UpdateData(); m_pExcelTabCtrl->SetTabBackColor(m_iTabNum, m_crBack); } void CExcelTabProperties::OnSelEndOkSelTextClr() { UpdateData(); m_pExcelTabCtrl->SetSelTabTextColor(m_iTabNum, m_crSelText); } void CExcelTabProperties::OnSelEndOkSelBackClr() { UpdateData(); m_pExcelTabCtrl->SetSelTabBackColor(m_iTabNum, m_crSelBack); } void CExcelTabProperties::OnChangeTabNum() { UpdateData(); if (m_iTabNum < m_pExcelTabCtrl->GetItemCount()) { m_crBack = m_pExcelTabCtrl->GetTabBackColor(m_iTabNum); m_crText = m_pExcelTabCtrl->GetTabTextColor(m_iTabNum); m_crSelBack = m_pExcelTabCtrl->GetSelTabBackColor(m_iTabNum); m_crSelText = m_pExcelTabCtrl->GetSelTabTextColor(m_iTabNum); m_csText = m_pExcelTabCtrl->GetItemText(m_iTabNum); } UpdateData(FALSE); }