DragonNest/Third/XTToolkitPro/Samples/Calendar/CalendarDemo/AdvancedCalendarOptionsDlg.cpp
2024-12-19 09:48:26 +08:00

298 lines
9.9 KiB
C++

// AdvancedCalendarOptionsDlg.cpp : implementation file
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 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 "calendardemo.h"
#include "AdvancedCalendarOptionsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAdvancedCalendarOptionsDlg dialog
CAdvancedCalendarOptionsDlg::CAdvancedCalendarOptionsDlg(CXTPCalendarControl* pCalendar, CWnd* pParent /*=NULL*/)
: CDialog(CAdvancedCalendarOptionsDlg::IDD, pParent)
{
ASSERT(pCalendar);
m_pCalendar = pCalendar;
//{{AFX_DATA_INIT(CAdvancedCalendarOptionsDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CAdvancedCalendarOptionsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAdvancedCalendarOptionsDlg)
DDX_Control(pDX, IDC_RADIO_THEME_OFFICE_2007, m_ctrlThemeOffice2007);
DDX_Control(pDX, IDC_RADIO_THEME_OFFICE_2003, m_ctrlThemeOffice2003);
DDX_Control(pDX, IDC_COMBO_THEME_DEFAULT_COLOR, m_ctrlThemeColor);
DDX_Control(pDX, IDC_STATIC_THEME_DEFAULT_COLOR, m_ctrlThemeColorLable);
DDX_Control(pDX, IDC_CHECK_ENABLE_THEMES, m_ctrlEnableThemes);
DDX_Control(pDX, IDC_CHECK_MARKUP, m_ctrlEnableMarkup);
DDX_Control(pDX, IDC_CHECK_GETTEXT, m_ctrlEnableGetText);
DDX_Control(pDX, IDC_CHECK_EDIT_SUBJECT_BY_TAB, m_ctrlEditSubject_ByTAB);
DDX_Control(pDX, IDC_CHECK_EDIT_SUBJECT_BY_MOUSE_CLICK, m_ctrlEditSubject_ByMouseClick);
DDX_Control(pDX, IDC_CHECK_EDIT_SUBJECT_BY_F2, m_ctrlEditSubject_ByF2);
DDX_Control(pDX, IDC_CHECK_EDIT_SUBJECT_AFTER_RESIZE, m_ctrlEditSubject_AfterResize);
DDX_Control(pDX, IDC_CHECK_CREATE_EVENT, m_ctrlInPlaceCreateEvent);
DDX_Control(pDX, IDC_CHECK_OUTLOOKFONTGLYPHS, m_ctrlUseOutlookFontGlyphs);
DDX_Control(pDX, IDC_CHECK_SHOW_TSMINUTES, m_ctrlShowTSMinutes);
DDX_Control(pDX, IDC_CHECK_REMINDERS, m_ctrlReminders);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAdvancedCalendarOptionsDlg, CDialog)
//{{AFX_MSG_MAP(CAdvancedCalendarOptionsDlg)
ON_BN_CLICKED(IDC_CHECK_ENABLE_THEMES, OnCheckEnableThemes)
ON_BN_CLICKED(IDC_RADIO_THEME_OFFICE_2007, OnRadioThemeOffice2007)
ON_BN_CLICKED(IDC_RADIO_THEME_OFFICE_2003, OnRadioThemeOffice2003)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAdvancedCalendarOptionsDlg message handlers
void CAdvancedCalendarOptionsDlg::OnOK()
{
CXTPCalendarOptions* pOptions = m_pCalendar ? m_pCalendar->GetCalendarOptions() : NULL;
if (!m_pCalendar || !pOptions) {
ASSERT(FALSE);
return;
}
pOptions->bUseOutlookFontGlyphs = m_ctrlUseOutlookFontGlyphs.GetCheck() ? TRUE : FALSE;
pOptions->bDayView_TimeScaleShowMinutes = m_ctrlShowTSMinutes.GetCheck() ? TRUE : FALSE;
pOptions->bEnableInPlaceCreateEvent = m_ctrlInPlaceCreateEvent.GetCheck() ? TRUE : FALSE;
pOptions->bEnableInPlaceEditEventSubject_ByF2 = m_ctrlEditSubject_ByF2.GetCheck() ? TRUE : FALSE;
pOptions->bEnableInPlaceEditEventSubject_ByMouseClick = m_ctrlEditSubject_ByMouseClick.GetCheck() ? TRUE : FALSE;
pOptions->bEnableInPlaceEditEventSubject_ByTab = m_ctrlEditSubject_ByTAB.GetCheck() ? TRUE : FALSE;
pOptions->bEnableInPlaceEditEventSubject_AfterEventResize = m_ctrlEditSubject_AfterResize.GetCheck() ? TRUE : FALSE;
pOptions->OnOptionsChanged();
m_pCalendar->EnableReminders(m_ctrlReminders.GetCheck() ? TRUE : FALSE);
//===========================
int nEnableThemes = m_ctrlEnableThemes.GetCheck();
if (nEnableThemes)
{
if (m_ctrlThemeOffice2007.GetCheck())
{
CXTPCalendarThemeOffice2007* pTheme2007 = new CXTPCalendarThemeOffice2007();
if (pTheme2007) {
pTheme2007->m_clrBaseColor = m_ctrlThemeColor.GetSelectedColor();
}
m_pCalendar->SetTheme(pTheme2007);
UINT arIDs[5];
arIDs[0] = (UINT)xtpCalendarEventIconIDReminder;
arIDs[1] = (UINT)xtpCalendarEventIconIDOccurrence;
arIDs[2] = (UINT)xtpCalendarEventIconIDException;
arIDs[3] = (UINT)xtpCalendarEventIconIDMeeting;
arIDs[4] = (UINT)xtpCalendarEventIconIDPrivate;
pTheme2007->GetCustomIconsList()->SetIcons(XTP_IDB_CALENDAR_EVENT_GLYPHS,
arIDs, 5, CSize(16, 11), xtpImageNormal);
m_pCalendar->EnableMarkup(m_ctrlEnableMarkup.GetCheck() ? TRUE : FALSE);
pTheme2007->SetAskItemTextFlags(m_ctrlEnableGetText.GetCheck() ? -1 : 0);
}
//else if (m_ctrlThemeOffice2003.GetCheck())
//{
// CXTPCalendarThemeOffice2003* pTheme2003 = new CXTPCalendarThemeOffice2003();
// if (pTheme2003) {
// pTheme2003->m_clrBaseColor = m_ctrlThemeColor.GetSelectedColor();
// }
// m_pCalendar->SetTheme(pTheme2003);
//}
else {
ASSERT(FALSE);
}
}
else {
m_pCalendar->SetTheme(NULL);
}
//---------------------------
m_pCalendar->Populate();
CDialog::OnOK();
}
BOOL CAdvancedCalendarOptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CXTPCalendarOptions* pOptions = m_pCalendar ? m_pCalendar->GetCalendarOptions() : NULL;
if (!m_pCalendar || !pOptions) {
ASSERT(FALSE);
return FALSE;
}
m_ctrlReminders .SetCheck(m_pCalendar->IsRemindersEnabled() ? 1:0);
m_ctrlEnableMarkup .SetCheck(m_pCalendar->IsMarkupEnabled() ? 1:0);
m_ctrlUseOutlookFontGlyphs .SetCheck(pOptions->bUseOutlookFontGlyphs ? 1:0);
m_ctrlShowTSMinutes .SetCheck(pOptions->bDayView_TimeScaleShowMinutes ? 1:0);
m_ctrlInPlaceCreateEvent .SetCheck(pOptions->bEnableInPlaceCreateEvent?1:0);
m_ctrlEditSubject_ByF2 .SetCheck(pOptions->bEnableInPlaceEditEventSubject_ByF2?1:0);
m_ctrlEditSubject_ByMouseClick .SetCheck(pOptions->bEnableInPlaceEditEventSubject_ByMouseClick?1:0);
m_ctrlEditSubject_ByTAB .SetCheck(pOptions->bEnableInPlaceEditEventSubject_ByTab?1:0);
m_ctrlEditSubject_AfterResize .SetCheck(pOptions->bEnableInPlaceEditEventSubject_AfterEventResize?1:0);
// Themes
CXTPCalendarTheme* pTheme = m_pCalendar->GetTheme();
//CXTPCalendarThemeOffice2007* pTheme2007 = DYNAMIC_DOWNCAST(CXTPCalendarThemeOffice2007, pTheme);
m_ctrlEnableThemes.SetCheck(pTheme != NULL);
InitThemeColors();
OnCheckEnableThemes();
if (pTheme)
{
m_ctrlThemeColor.SelectColor(pTheme->m_clrBaseColor);
m_ctrlEnableGetText.SetCheck(pTheme->GetAskItemTextFlags() ? 1:0);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAdvancedCalendarOptionsDlg::OnCheckEnableThemes()
{
CXTPCalendarTheme* pTheme = m_pCalendar->GetTheme();
//CXTPCalendarThemeOffice2003* pTheme2003 = DYNAMIC_DOWNCAST(CXTPCalendarThemeOffice2003, pTheme);
CXTPCalendarTheme* pTheme2003 = NULL;
CXTPCalendarThemeOffice2007* pTheme2007 = DYNAMIC_DOWNCAST(CXTPCalendarThemeOffice2007, pTheme);
int nEnable = m_ctrlEnableThemes.GetCheck();
m_ctrlThemeOffice2003.EnableWindow(FALSE); //nEnable != 0);
m_ctrlThemeOffice2007.EnableWindow(nEnable != 0);
m_ctrlThemeColor .EnableWindow(nEnable != 0);
m_ctrlThemeColorLable.EnableWindow(nEnable != 0);
m_ctrlEnableMarkup .EnableWindow(nEnable != 0);
m_ctrlEnableGetText .EnableWindow(nEnable != 0);
m_ctrlThemeOffice2003.SetCheck(pTheme2003 != NULL);
m_ctrlThemeOffice2007.SetCheck(pTheme2007 != NULL || !pTheme2003 && !pTheme2007);
}
void CAdvancedCalendarOptionsDlg::OnRadioThemeOffice2007()
{
// TODO: Add your control notification handler code here
}
void CAdvancedCalendarOptionsDlg::OnRadioThemeOffice2003()
{
// TODO: Add your control notification handler code here
}
void CAdvancedCalendarOptionsDlg::InitThemeColors()
{
for (int i = 0; i < 15; i++)
{
m_ctrlThemeColor.AddString(_T(""));
}
m_ctrlThemeColor.SetItemData(0, RGB(93, 140, 201));
m_ctrlThemeColor.SetItemData(1, RGB(114, 164, 90));
m_ctrlThemeColor.SetItemData(2, RGB(190, 104, 134));
m_ctrlThemeColor.SetItemData(3, RGB(90, 164, 164));
m_ctrlThemeColor.SetItemData(4, RGB(113, 113, 205));
m_ctrlThemeColor.SetItemData(5, RGB(92, 166, 116));
m_ctrlThemeColor.SetItemData(6, RGB(93, 105, 105));
m_ctrlThemeColor.SetItemData(7, RGB(157, 157, 87));
m_ctrlThemeColor.SetItemData(8, RGB(140, 110, 200));
m_ctrlThemeColor.SetItemData(9, RGB(169, 143, 93));
m_ctrlThemeColor.SetItemData(10, RGB(90, 164, 140));
m_ctrlThemeColor.SetItemData(11, RGB(97, 151, 177));
m_ctrlThemeColor.SetItemData(12, RGB(139, 139, 139));
m_ctrlThemeColor.SetItemData(13, RGB(255, 209, 81));
//m_ctrlThemeColor.SetItemData(14, RGB(105, 133, 189));
m_ctrlThemeColor.SetItemData(14, RGB(145, 153, 164));
m_ctrlThemeColor.SetCurSel(0);
}
void CComboBoxColors::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
COLORREF clrBk = (COLORREF)lpDrawItemStruct->itemData;
dc.FillSolidRect(&lpDrawItemStruct->rcItem, clrBk);
if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
CBrush brFrame(RGB(0,0,0));
dc.FrameRect(&lpDrawItemStruct->rcItem, &brFrame);
}
dc.Detach();
}
void CComboBoxColors::SelectColor(COLORREF clrColor)
{
for (int i = 0; i < GetCount(); i++)
{
if (clrColor == (COLORREF)GetItemData(i)) {
SetCurSel(i);
return;
}
}
}
COLORREF CComboBoxColors::GetSelectedColor(int nDefaultColorIndex)
{
COLORREF clrColor = (COLORREF)-1;
int nSel = GetCurSel();
if (nSel == CB_ERR) {
nSel = nDefaultColorIndex;
}
if (nSel >= 0 && nSel < GetCount()) {
clrColor = (COLORREF)GetItemData(nSel);
}
return clrColor;
}