/** * @file XTPCalendarOccurSeriesChooseDlg.cpp * * @copyright * (c) 1998-2025 Codejock Software, All Rights Reserved. * * This source file is the property of Codejock Software and must not be * redistributed by any means without the explicit written permission of * Codejock Software. * * The use of this source code is governed by the terms and conditions specified * in the Toolkit Pro license agreement. Codejock Software grants you, as a * single software developer, the limited right to use this software on one * computer only. * * Contact Information: * support@codejock.com * http://www.codejock.com * */ #include "stdafx.h" #include "Calendar/Resource.h" #include "Common/XTPTypeId.h" #include "Common/XTPFramework.h" #include "Common/XTPSystemHelpers.h" #include "Common/XTPSynchro.h" #include "Common/XTPApplication.h" #include "Common/XTPSingleton.h" #include "Common/XTPGdiObjects.h" #include "Common/XTPResourceManager.h" #include "Common/XTPDrawHelpers.h" #include "Common/XTPSmartPtrInternalT.h" #include "Calendar/XTPCalendarDefines.h" #include "Calendar/XTPCalendarEvent.h" #include "Calendar/XTPCalendarOccurSeriesChooseDlg.h" #include "Common/Base/Diagnostic/XTPDisableNoisyWarnings.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif HICON XTPLoadIconEx(LPCTSTR lpszResourceIcon) { if (!lpszResourceIcon) return NULL; HICON hIcon = AfxGetApp()->LoadIcon(lpszResourceIcon); if (!hIcon) hIcon = ::LoadIcon(NULL, lpszResourceIcon); return hIcon; } // CXTPCalendarOccurSeriesChooseDlg dialog CXTPCalendarOccurSeriesChooseDlg::CXTPCalendarOccurSeriesChooseDlg(CWnd* pParent, UINT nIDResourceLabels, LPCTSTR lpszResourceIcon, UINT nIDTemplate) { InitModalIndirect(XTPResourceManager()->LoadDialogTemplate(nIDTemplate), pParent); m_bOccur = TRUE; m_nIDResourceLabels = nIDResourceLabels; m_hIcon = XTPLoadIconEx(lpszResourceIcon); SetEvent(NULL); } CXTPCalendarOccurSeriesChooseDlg::~CXTPCalendarOccurSeriesChooseDlg() { } void CXTPCalendarOccurSeriesChooseDlg::SetEvent(CXTPCalendarEvent* pEvent) { CString strDialog; CXTPResourceManager::AssertValid( XTPResourceManager()->LoadString(&strDialog, m_nIDResourceLabels)); m_strTitle = strDialog.Left(strDialog.Find(_T('\n'))); VERIFY(!m_strTitle.IsEmpty()); strDialog.Delete(0, m_strTitle.GetLength() + 1); m_strOccur = strDialog.Left(strDialog.Find(_T('\n'))); VERIFY(!m_strOccur.IsEmpty()); strDialog.Delete(0, m_strOccur.GetLength() + 1); m_strSeries = strDialog.Left(strDialog.Find(_T('\n'))); VERIFY(!m_strSeries.IsEmpty()); strDialog.Delete(0, m_strSeries.GetLength() + 1); m_strMessage.Format(strDialog, pEvent ? (LPCTSTR)pEvent->GetSubject() : _T("")); } void CXTPCalendarOccurSeriesChooseDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, XTP_IDC_CALENDAR_STATIC_OCCUR_MESSAGE, m_ctrlMessage); DDX_Control(pDX, XTP_IDC_CALENDAR_RADIO_OCCUR, m_ctrlOccur); DDX_Control(pDX, XTP_IDC_CALENDAR_RADIO_SERIES, m_ctrlSeries); DDX_Control(pDX, XTP_IDC_CALENDAR_STATIC_ICON, m_ctrlIcon); } BEGIN_MESSAGE_MAP(CXTPCalendarOccurSeriesChooseDlg, CDialog) END_MESSAGE_MAP() // CXTPCalendarOccurSeriesChooseDlg message handlers BOOL CXTPCalendarOccurSeriesChooseDlg::OnInitDialog() { #define OFFSETWINDOW(ID, OffsetTop, OffsetHeight) \ GetDlgItem(ID)->GetWindowRect(rcCtrl); \ ScreenToClient(&rcCtrl); \ GetDlgItem(ID)->MoveWindow(rcCtrl.left, rcCtrl.top + OffsetTop, rcCtrl.Width(), \ rcCtrl.Height() + OffsetHeight); CDialog::OnInitDialog(); m_ctrlOccur.SetCheck(m_bOccur ? 1 : 0); m_ctrlSeries.SetCheck(m_bOccur ? 0 : 1); if (!m_strTitle.IsEmpty()) { SetWindowText(m_strTitle); } if (!m_strMessage.IsEmpty()) { m_ctrlMessage.SetWindowText(m_strMessage); } if (!m_strOccur.IsEmpty()) { m_ctrlOccur.SetWindowText(m_strOccur); } if (!m_strSeries.IsEmpty()) { m_ctrlSeries.SetWindowText(m_strSeries); } if (m_hIcon) { m_ctrlIcon.SetIcon(m_hIcon); } CClientDC dc(&m_ctrlMessage); CFont* pOldFont = dc.SelectObject(m_ctrlMessage.GetFont()); CXTPClientRect rcMessageCtrl(&m_ctrlMessage); CRect rcMessage(0, 0, rcMessageCtrl.Width(), 0); dc.DrawText(m_strMessage, rcMessage, DT_CALCRECT | DT_NOPREFIX | DT_WORDBREAK); int nOffset = rcMessage.Height() - rcMessageCtrl.Height(); if (nOffset > 0) { CRect rcCtrl; GetWindowRect(rcCtrl); MoveWindow(rcCtrl.left, rcCtrl.top, rcCtrl.Width(), rcCtrl.Height() + nOffset); OFFSETWINDOW(XTP_IDC_CALENDAR_STATIC_OCCUR_MESSAGE, 0, nOffset); OFFSETWINDOW(XTP_IDC_CALENDAR_RADIO_OCCUR, nOffset, 0); OFFSETWINDOW(XTP_IDC_CALENDAR_RADIO_SERIES, nOffset, 0); OFFSETWINDOW(IDOK, nOffset, 0); OFFSETWINDOW(IDCANCEL, nOffset, 0); } dc.SelectObject(pOldFont); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CXTPCalendarOccurSeriesChooseDlg::OnOK() { m_bOccur = m_ctrlOccur.GetCheck() != 0; CDialog::OnOK(); }