You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1035 lines
32 KiB
C++
1035 lines
32 KiB
C++
// XTPCalendarEventRecurrenceDlg.cpp: implementation of the CXTPCalendarEventPropertiesDlg.
|
|
//
|
|
// This file is a part of the XTREME CALENDAR MFC class library.
|
|
// (c)1998-2012 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 "Resource.h"
|
|
|
|
#include "Common/XTPResourceManager.h"
|
|
#include "Common/XTPSmartPtrInternalT.h"
|
|
|
|
#include "XTPCalendarDefines.h"
|
|
#include "XTPCalendarUtils.h"
|
|
|
|
#include "XTPCalendarEvent.h"
|
|
#include "XTPCalendarRecurrencePattern.h"
|
|
#include "XTPCalendarEvents.h"
|
|
|
|
#include "XTPCalendarEventRecurrenceDlg.h"
|
|
|
|
#define XTP_TIMER_ID_UPDATE_TIMEOUT 100
|
|
|
|
#define XTP_TIMER_ID_START_CB_CHANGED 0x01
|
|
#define XTP_TIMER_ID_END_CB_CHANGED 0x02
|
|
#define XTP_TIMER_ID_DURATION_CB_CHANGED 0x04
|
|
|
|
#define XTP_TIMER_ID_ALL_CB_CHANGED 0x07
|
|
|
|
IMPLEMENT_DYNAMIC(CXTPCalendarEventRecurrenceDlg, CDialog)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
CXTPCalendarEventRecurrenceDlg::CXTPCalendarEventRecurrenceDlg(CXTPCalendarEvent* pMasterEvent,
|
|
CWnd* pParent, UINT nIDTemplate)
|
|
:
|
|
m_nOccurNum(10),
|
|
m_dtEndDate(COleDateTime::GetCurrentTime()),
|
|
m_nDayInterval(1),
|
|
m_nWeeklyInterval(1),
|
|
m_bMonday(TRUE),
|
|
m_bTuesday(FALSE),
|
|
m_bWednesday(FALSE),
|
|
m_bThursday(FALSE),
|
|
m_bFriday(FALSE),
|
|
m_bSaturday(FALSE),
|
|
m_bSunday(FALSE),
|
|
m_MonthDate(1),
|
|
m_nMonthInterval(1),
|
|
m_nMonthInterval2(1),
|
|
m_nDayOfMonth(m_dtEndDate.GetDay()),
|
|
m_ptrMasterEvent(pMasterEvent, TRUE),
|
|
m_bDisableRemove(FALSE)
|
|
{
|
|
InitModalIndirect(XTPResourceManager()->LoadDialogTemplate(nIDTemplate), pParent);
|
|
|
|
ASSERT(m_ptrMasterEvent);
|
|
|
|
m_ptrPattern = m_ptrMasterEvent->GetRecurrencePattern();
|
|
m_dtStart = m_ptrPattern->GetStartTime();
|
|
m_dtEnd = m_dtStart + m_ptrPattern->GetDuration();
|
|
|
|
m_dtStartDate = m_ptrPattern->GetPatternStartDate();
|
|
}
|
|
|
|
CXTPCalendarEventRecurrenceDlg::~CXTPCalendarEventRecurrenceDlg()
|
|
{
|
|
}
|
|
|
|
#if _MSC_VER < 1200
|
|
AFX_INLINE void DDX_DateTimeCtrl(CDataExchange* pDX, int nIDC, COleDateTime& value)
|
|
{
|
|
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
|
|
if (pDX->m_bSaveAndValidate)
|
|
CXTPDateTimeHelper::GetDateTimeCtrlTime(hWndCtrl, value);
|
|
else
|
|
CXTPDateTimeHelper::SetDateTimeCtrlTime(hWndCtrl, value);
|
|
}
|
|
#endif
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
DDX_Control(pDX, XTP_IDC_COMBO_SCHEDULEID, m_wndCbStart);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_REC_END, m_wndCbEnd);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_REC_DURATION, m_wndCbDuration);
|
|
DDX_DateTimeCtrl(pDX, XTP_IDC_DATETIMEPICKER_START, m_dtStartDate);
|
|
DDX_DateTimeCtrl(pDX, XTP_IDC_DATETIMEPICKER_ENDDATE, m_dtEndDate);
|
|
DDX_Text(pDX, XTP_IDC_EDIT_OCCUR, m_nOccurNum);
|
|
DDX_Text(pDX, XTP_IDC_EDIT_DAYINTERVAL, m_nDayInterval);
|
|
DDX_Text(pDX, XTP_IDC_EDIT_WEEKLY_INTERVAL, m_nWeeklyInterval);
|
|
DDX_Check(pDX, XTP_IDC_CHECK_MONDAY, m_bMonday);
|
|
DDX_Check(pDX, XTP_IDC_CHECK_TUESDAY, m_bTuesday);
|
|
DDX_Check(pDX, XTP_IDC_CHECK_WEDNESDAY, m_bWednesday);
|
|
DDX_Check(pDX, XTP_IDC_CHECK_THURSDAY, m_bThursday);
|
|
DDX_Check(pDX, XTP_IDC_CHECK_FRIDAY, m_bFriday);
|
|
DDX_Check(pDX, XTP_IDC_CHECK_SATURDAY, m_bSaturday);
|
|
DDX_Check(pDX, XTP_IDC_CHECK_SUNDAY, m_bSunday);
|
|
DDX_Text(pDX, XTP_IDC_EDIT_MONTH_DATE, m_MonthDate);
|
|
DDX_Text(pDX, XTP_IDC_EDIT_MONTH_MONTH, m_nMonthInterval);
|
|
DDX_Text(pDX, XTP_IDC_EDIT_MONTH_MONTH2, m_nMonthInterval2);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_MONTH_DAY, m_wndCbMonthDay);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_MONTH_CRIT, m_wndCbMonthWhich);
|
|
DDX_Text(pDX, XTP_IDC_EDIT_YEAR_DATE, m_nDayOfMonth);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_YEAR_MONTH, m_wndYearMonth);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_YEAR_MONTH2, m_wndComboYearMonth2);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_YEAR_CRIT, m_wndCbYearWhich);
|
|
DDX_Control(pDX, XTP_IDC_COMBO_YEAR_DAY, m_wndCbYearDay);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CXTPCalendarEventRecurrenceDlg, CDialog)
|
|
ON_CBN_SELCHANGE(XTP_IDC_COMBO_SCHEDULEID, OnStartComboChanged)
|
|
ON_CBN_SELCHANGE(XTP_IDC_COMBO_REC_END, OnEndComboChanged)
|
|
ON_CBN_SELCHANGE(XTP_IDC_COMBO_REC_DURATION, OnDurationComboChanged)
|
|
|
|
ON_CBN_KILLFOCUS(XTP_IDC_COMBO_SCHEDULEID, OnStartComboChanged)
|
|
ON_CBN_KILLFOCUS(XTP_IDC_COMBO_REC_END, OnEndComboChanged)
|
|
ON_CBN_KILLFOCUS(XTP_IDC_COMBO_REC_DURATION, OnDurationComboChanged)
|
|
|
|
ON_CBN_EDITCHANGE(XTP_IDC_COMBO_SCHEDULEID, OnStartComboEdited)
|
|
ON_CBN_EDITCHANGE(XTP_IDC_COMBO_REC_END, OnEndComboEdited)
|
|
ON_CBN_EDITCHANGE(XTP_IDC_COMBO_REC_DURATION, OnDurationComboEdited)
|
|
|
|
ON_BN_CLICKED(XTP_IDC_BUTTON_REMOVE_RECURRENCE, OnBnClickedButtonRemoveRecurrence)
|
|
ON_CONTROL_RANGE(BN_CLICKED, XTP_IDC_RADIO_DAILY, XTP_IDC_RADIO_YEARLY, OnBnClickedRadioDailyYearly)
|
|
ON_WM_TIMER()
|
|
END_MESSAGE_MAP()
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::InitStartEndCB()
|
|
{
|
|
BOOL bInListStart = FALSE;
|
|
BOOL bInListEnd = FALSE;
|
|
|
|
CString strTimeFormat_HrMin = CXTPCalendarUtils::GetTimeFormatString_HrMin();
|
|
CString strTime;
|
|
|
|
// initializing m_wndCbStart and m_wndCbEnd combo boxes
|
|
for (int i = 0; i < 24*60; i += 30)
|
|
{
|
|
int nHours = i / 60;
|
|
int nMinutes = i % 60;
|
|
|
|
strTime = CXTPCalendarUtils::GetTimeFormat(nHours, nMinutes, strTimeFormat_HrMin);
|
|
|
|
int nIndex = m_wndCbStart.AddString(strTime);
|
|
|
|
if (m_dtStart.GetHour() == nHours && m_dtStart.GetMinute() == nMinutes)
|
|
{
|
|
m_wndCbStart.SetCurSel(nIndex);
|
|
bInListStart = TRUE;
|
|
}
|
|
|
|
nIndex = m_wndCbEnd.AddString(strTime);
|
|
|
|
if (m_dtEnd.GetHour() == nHours && m_dtEnd.GetMinute() == nMinutes)
|
|
{
|
|
m_wndCbEnd.SetCurSel(nIndex);
|
|
bInListEnd = TRUE;
|
|
}
|
|
}
|
|
|
|
if (!bInListStart)
|
|
{
|
|
strTime = CXTPCalendarUtils::GetTimeFormat(m_dtStart.GetHour(), m_dtStart.GetMinute(), strTimeFormat_HrMin);
|
|
m_wndCbStart.SetWindowText(strTime);
|
|
}
|
|
|
|
if (!bInListEnd)
|
|
{
|
|
strTime = CXTPCalendarUtils::GetTimeFormat(m_dtEnd.GetHour(), m_dtEnd.GetMinute(), strTimeFormat_HrMin);
|
|
m_wndCbEnd.SetWindowText(strTime);
|
|
}
|
|
}
|
|
|
|
int CXTPCalendarEventRecurrenceDlg::_AddString(CComboBox& wndCB, UINT nStrResID, DWORD_PTR dwItemData)
|
|
{
|
|
int nIndex = wndCB.AddString(CXTPCalendarUtils::LoadString(nStrResID));
|
|
wndCB.SetItemData(nIndex, dwItemData);
|
|
return nIndex;
|
|
}
|
|
|
|
int CXTPCalendarEventRecurrenceDlg::_AddLocaleString(CComboBox& wndCB, LCTYPE lcidStr, DWORD_PTR dwItemData)
|
|
{
|
|
int nIndex = wndCB.AddString(CXTPCalendarUtils::GetLocaleString(lcidStr, 255));
|
|
wndCB.SetItemData(nIndex, dwItemData);
|
|
return nIndex;
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::InitDurationCB()
|
|
{
|
|
//initializing combo m_wndCbDuration combobox
|
|
int nDuration_min = m_ptrPattern->GetDurationMinutes();
|
|
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_MINUTES_0, 0);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_MINUTES_1, 1);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_MINUTES_5, 5);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_MINUTES_10, 10);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_MINUTES_15, 15);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_MINUTES_30, 30);
|
|
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_1, 1 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_2, 2 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_3, 3 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_4, 4 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_5, 5 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_6, 6 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_7, 7 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_8, 8 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_9, 9 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_10, 10 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_11, 11 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_DAYS_0_5, 12 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_HOURS_18, 18 * 60);
|
|
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_DAYS_1, 1 * 24 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_DAYS_2, 2 * 24 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_DAYS_3, 3 * 24 * 60);
|
|
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_WEEKS_1, 1 * 7 * 24 * 60);
|
|
_AddString(m_wndCbDuration, XTP_IDS_CALENDAR_WEEKS_2, 2 * 7 * 24 * 60);
|
|
|
|
int nCount = m_wndCbDuration.GetCount();
|
|
for (int i = 0; i < nCount; i++)
|
|
{
|
|
if (nDuration_min == (int)m_wndCbDuration.GetItemData(i))
|
|
{
|
|
m_wndCbDuration.SetCurSel(i);
|
|
return;
|
|
}
|
|
}
|
|
|
|
CString strDuration = CXTPCalendarUtils::FormatTimeDuration(nDuration_min, FALSE);
|
|
m_wndCbDuration.SetWindowText(strDuration);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::InitDayOfWeekCBs(CComboBox& wndCB)
|
|
{
|
|
_AddLocaleString(wndCB, LOCALE_SDAYNAME1, xtpCalendarDayMonday);
|
|
_AddLocaleString(wndCB, LOCALE_SDAYNAME2, xtpCalendarDayTuesday);
|
|
_AddLocaleString(wndCB, LOCALE_SDAYNAME3, xtpCalendarDayWednesday);
|
|
_AddLocaleString(wndCB, LOCALE_SDAYNAME4, xtpCalendarDayThursday);
|
|
_AddLocaleString(wndCB, LOCALE_SDAYNAME5, xtpCalendarDayFriday);
|
|
_AddLocaleString(wndCB, LOCALE_SDAYNAME6, xtpCalendarDaySaturday);
|
|
_AddLocaleString(wndCB, LOCALE_SDAYNAME7, xtpCalendarDaySunday);
|
|
|
|
wndCB.SetCurSel(0);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::InitWhichDayCBs(CComboBox& wndCB)
|
|
{
|
|
_AddString(wndCB, XTP_IDS_CALENDAR_FIRST, xtpCalendarWeekFirst);
|
|
_AddString(wndCB, XTP_IDS_CALENDAR_SECOND, xtpCalendarWeekSecond);
|
|
_AddString(wndCB, XTP_IDS_CALENDAR_THIRD, xtpCalendarWeekThird);
|
|
_AddString(wndCB, XTP_IDS_CALENDAR_FOURTH, xtpCalendarWeekFourth);
|
|
_AddString(wndCB, XTP_IDS_CALENDAR_LAST, xtpCalendarWeekLast);
|
|
|
|
wndCB.SetCurSel(0);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::InitMonthCBs(CComboBox& wndCB)
|
|
{
|
|
for (int nMonth = 0; nMonth < 12; nMonth++)
|
|
{
|
|
_AddLocaleString(wndCB, LOCALE_SMONTHNAME1 + nMonth, nMonth + 1);
|
|
}
|
|
|
|
COleDateTime dtNow(COleDateTime::GetCurrentTime());
|
|
wndCB.SetCurSel(dtNow.GetMonth() - 1);
|
|
}
|
|
|
|
// CXTPCalendarEventRecurrenceDlg message handlers
|
|
BOOL CXTPCalendarEventRecurrenceDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
InitStartEndCB();
|
|
InitDurationCB();
|
|
|
|
//initializing recurrence end properties
|
|
int nRadio = XTP_IDC_RADIO_NOEND;
|
|
XTPCalendarPatternEnd UseEnd = (XTPCalendarPatternEnd)m_ptrPattern->GetUseEndMethod();
|
|
//Fixed case - now it works for any working days set
|
|
//if (GetDlgItem(XTP_IDC_RADIO_EVERYWORKDAY))
|
|
// GetDlgItem(XTP_IDC_RADIO_EVERYWORKDAY)->SetWindowText(_T("Monday...Friday"));
|
|
|
|
switch (UseEnd)
|
|
{
|
|
case xtpCalendarPatternEndDate:
|
|
nRadio = XTP_IDC_RADIO_ENDBY;
|
|
m_dtEndDate = m_ptrPattern->GetPatternEndDate();
|
|
break;
|
|
case xtpCalendarPatternEndAfterOccurrences:
|
|
nRadio = XTP_IDC_RADIO_ENDAFTER;
|
|
m_nOccurNum = m_ptrPattern->GetEndAfterOccurrences();
|
|
break;
|
|
case xtpCalendarPatternEndNoDate:
|
|
nRadio = XTP_IDC_RADIO_NOEND;
|
|
break;
|
|
}
|
|
CheckRadioButton(XTP_IDC_RADIO_NOEND, XTP_IDC_RADIO_ENDBY, nRadio);
|
|
|
|
if (!m_bDisableRemove)
|
|
{
|
|
::EnableWindow(GetDlgItem(XTP_IDC_BUTTON_REMOVE_RECURRENCE)->GetSafeHwnd(), TRUE);
|
|
}
|
|
|
|
// initializing day/week/month/year recurrence settings
|
|
CheckRadioButton(XTP_IDC_RADIO_EVERYDAY, XTP_IDC_RADIO_EVERYWORKDAY, XTP_IDC_RADIO_EVERYDAY);
|
|
CheckRadioButton(XTP_IDC_RADIO_MONTH_RECUR, XTP_IDC_RADIO_MONTH_IN, XTP_IDC_RADIO_MONTH_RECUR);
|
|
CheckRadioButton(XTP_IDC_RADIO_YEAR_RECUR, XTP_IDC_RADIO_YEAR_IN, XTP_IDC_RADIO_YEAR_RECUR);
|
|
|
|
InitDayOfWeekCBs(m_wndCbMonthDay);
|
|
InitDayOfWeekCBs(m_wndCbYearDay);
|
|
|
|
InitWhichDayCBs(m_wndCbMonthWhich);
|
|
InitWhichDayCBs(m_wndCbYearWhich);
|
|
|
|
InitMonthCBs(m_wndYearMonth);
|
|
InitMonthCBs(m_wndComboYearMonth2);
|
|
|
|
nRadio = XTP_IDC_RADIO_WEEKLY;
|
|
XTP_CALENDAR_RECURRENCE_OPTIONS opt = m_ptrPattern->GetRecurrenceOptions();
|
|
int nRecType = m_ptrPattern->GetRecurrenceType();
|
|
int i;
|
|
switch (nRecType)
|
|
{
|
|
case xtpCalendarRecurrenceDaily:
|
|
{
|
|
nRadio = XTP_IDC_RADIO_DAILY;
|
|
int nRd = XTP_IDC_RADIO_EVERYDAY;
|
|
if (opt.m_Daily.bEveryWeekDayOnly)
|
|
{
|
|
m_nDayInterval = 1;
|
|
nRd = XTP_IDC_RADIO_EVERYWORKDAY;
|
|
}
|
|
else
|
|
{
|
|
m_nDayInterval = opt.m_Daily.nIntervalDays;
|
|
}
|
|
CheckRadioButton(XTP_IDC_RADIO_EVERYDAY, XTP_IDC_RADIO_EVERYWORKDAY, nRd);
|
|
}
|
|
break;
|
|
case xtpCalendarRecurrenceWeekly:
|
|
nRadio = XTP_IDC_RADIO_WEEKLY;
|
|
m_nWeeklyInterval = opt.m_Weekly.nIntervalWeeks;
|
|
m_bMonday = (opt.m_Weekly.nDayOfWeekMask & xtpCalendarDayMonday) != 0;
|
|
m_bTuesday = (opt.m_Weekly.nDayOfWeekMask & xtpCalendarDayTuesday) != 0;
|
|
m_bWednesday = (opt.m_Weekly.nDayOfWeekMask & xtpCalendarDayWednesday) != 0;
|
|
m_bThursday = (opt.m_Weekly.nDayOfWeekMask & xtpCalendarDayThursday) != 0;
|
|
m_bFriday = (opt.m_Weekly.nDayOfWeekMask & xtpCalendarDayFriday) != 0;
|
|
m_bSaturday = (opt.m_Weekly.nDayOfWeekMask & xtpCalendarDaySaturday) != 0;
|
|
m_bSunday = (opt.m_Weekly.nDayOfWeekMask & xtpCalendarDaySunday) != 0;
|
|
break;
|
|
case xtpCalendarRecurrenceMonthly:
|
|
nRadio = XTP_IDC_RADIO_MONTHLY;
|
|
CheckRadioButton(XTP_IDC_RADIO_MONTH_RECUR, XTP_IDC_RADIO_MONTH_IN, XTP_IDC_RADIO_MONTH_RECUR);
|
|
|
|
m_nMonthInterval = opt.m_Monthly.nIntervalMonths;
|
|
m_MonthDate = opt.m_Monthly.nDayOfMonth;
|
|
break;
|
|
case xtpCalendarRecurrenceMonthNth:
|
|
{
|
|
nRadio = XTP_IDC_RADIO_MONTHLY;
|
|
CheckRadioButton(XTP_IDC_RADIO_MONTH_RECUR, XTP_IDC_RADIO_MONTH_IN, XTP_IDC_RADIO_MONTH_IN);
|
|
m_nMonthInterval2 = opt.m_MonthNth.nIntervalMonths;
|
|
|
|
for (i = 0; i < m_wndCbMonthDay.GetCount(); i++)
|
|
if (opt.m_MonthNth.nWhichDayMask & m_wndCbMonthDay.GetItemData(i))
|
|
{
|
|
m_wndCbMonthDay.SetCurSel(i);
|
|
break;
|
|
}
|
|
for (i = 0; i < m_wndCbMonthWhich.GetCount(); i++)
|
|
if (opt.m_MonthNth.nWhichDay == (int) m_wndCbMonthWhich.GetItemData(i))
|
|
{
|
|
m_wndCbMonthWhich.SetCurSel(i);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case xtpCalendarRecurrenceYearly:
|
|
{
|
|
nRadio = XTP_IDC_RADIO_YEARLY;
|
|
CheckRadioButton(XTP_IDC_RADIO_YEAR_RECUR, XTP_IDC_RADIO_YEAR_IN, XTP_IDC_RADIO_YEAR_RECUR);
|
|
m_nDayOfMonth = opt.m_Yearly.nDayOfMonth;
|
|
for (i = 0; i < m_wndYearMonth.GetCount(); i++)
|
|
{
|
|
if (opt.m_Yearly.nMonthOfYear == (int) m_wndYearMonth.GetItemData(i))
|
|
{
|
|
m_wndYearMonth.SetCurSel(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case xtpCalendarRecurrenceYearNth:
|
|
nRadio = XTP_IDC_RADIO_YEARLY;
|
|
CheckRadioButton(XTP_IDC_RADIO_YEAR_RECUR, XTP_IDC_RADIO_YEAR_IN, XTP_IDC_RADIO_YEAR_IN);
|
|
|
|
for (i = 0; i < m_wndComboYearMonth2.GetCount(); i++)
|
|
if (opt.m_YearNth.nMonthOfYear == (int) m_wndComboYearMonth2.GetItemData(i))
|
|
{
|
|
m_wndComboYearMonth2.SetCurSel(i);
|
|
break;
|
|
}
|
|
|
|
for (i = 0; i < m_wndCbYearWhich.GetCount(); i++)
|
|
if (opt.m_YearNth.nWhichDay == (int) m_wndCbYearWhich.GetItemData(i))
|
|
{
|
|
m_wndCbYearWhich.SetCurSel(i);
|
|
break;
|
|
}
|
|
|
|
for (i = 0; i < m_wndCbYearDay.GetCount(); i++)
|
|
if (opt.m_YearNth.nWhichDayMask & m_wndCbYearDay.GetItemData(i))
|
|
{
|
|
m_wndCbYearDay.SetCurSel(i);
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
ASSERT(nRecType == xtpCalendarRecurrenceUnknown);
|
|
}
|
|
CheckRadioButton(XTP_IDC_RADIO_DAILY, XTP_IDC_RADIO_YEARLY, nRadio);
|
|
OnBnClickedRadioDailyYearly(nRadio);
|
|
|
|
UpdateData(FALSE);
|
|
|
|
_MoveControlsBy_Y();
|
|
|
|
return TRUE;
|
|
}
|
|
void CXTPCalendarEventRecurrenceDlg::OnTimer(UINT_PTR nIDEvent)
|
|
{
|
|
if (nIDEvent & XTP_TIMER_ID_ALL_CB_CHANGED)
|
|
{
|
|
KillTimer(nIDEvent);
|
|
}
|
|
else
|
|
{
|
|
ASSERT(FALSE);
|
|
CDialog::OnTimer(nIDEvent);
|
|
}
|
|
|
|
if (nIDEvent & XTP_TIMER_ID_START_CB_CHANGED)
|
|
{
|
|
//TRACE(_T("_OnStartChanged() \n"));
|
|
_OnStartChanged();
|
|
}
|
|
if (nIDEvent & XTP_TIMER_ID_END_CB_CHANGED)
|
|
{
|
|
//TRACE(_T("_OnEndChanged() \n"));
|
|
_OnEndChanged();
|
|
}
|
|
if (nIDEvent & XTP_TIMER_ID_DURATION_CB_CHANGED)
|
|
{
|
|
//TRACE(_T("_OnDurationChanged() \n"));
|
|
_OnDurationChanged();
|
|
}
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnStartChanged()
|
|
{
|
|
SetTimer(XTP_TIMER_ID_START_CB_CHANGED, XTP_TIMER_ID_UPDATE_TIMEOUT, NULL);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnEndChanged()
|
|
{
|
|
SetTimer(XTP_TIMER_ID_END_CB_CHANGED, XTP_TIMER_ID_UPDATE_TIMEOUT, NULL);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnDurationChanged()
|
|
{
|
|
SetTimer(XTP_TIMER_ID_DURATION_CB_CHANGED, XTP_TIMER_ID_UPDATE_TIMEOUT, NULL);
|
|
}
|
|
|
|
int CXTPCalendarEventRecurrenceDlg::GetChangedComboTimeInMin(CComboBox& wndCb)
|
|
{
|
|
CString strCBtext;
|
|
wndCb.GetWindowText(strCBtext);
|
|
|
|
return CXTPCalendarUtils::ParceTimeString_min(strCBtext);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnStartComboEdited()
|
|
{
|
|
int nMin = GetChangedComboTimeInMin(m_wndCbStart);
|
|
if (nMin >= 0)
|
|
OnStartChanged();
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnEndComboEdited()
|
|
{
|
|
int nMin = GetChangedComboTimeInMin(m_wndCbEnd);
|
|
if (nMin >= 0)
|
|
OnEndChanged();
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnDurationComboEdited()
|
|
{
|
|
int nMin = GetDurationComboInMin();
|
|
if (nMin >= 0)
|
|
OnDurationChanged();
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnStartComboChanged()
|
|
{
|
|
OnStartChanged();
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::_OnStartChanged()
|
|
{
|
|
int nMin = GetChangedComboTimeInMin(m_wndCbStart);
|
|
if (nMin == -1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_dtStart.SetTime(nMin/60%24, nMin%60, 0);
|
|
|
|
int nDurationMin = GetDurationComboInMin();
|
|
if (nDurationMin < 0)
|
|
{
|
|
nDurationMin = 0;
|
|
}
|
|
|
|
COleDateTimeSpan spDiff((double)nDurationMin/((double)24*60));
|
|
m_dtEnd = m_dtStart + spDiff;
|
|
m_dtEnd = CXTPCalendarUtils::ResetDate(m_dtEnd);
|
|
|
|
CString strTimeFormat_HrMin = CXTPCalendarUtils::GetTimeFormatString_HrMin();
|
|
CString strTmp = CXTPCalendarUtils::GetTimeFormat(m_dtEnd.GetHour(), m_dtEnd.GetMinute(), strTimeFormat_HrMin);
|
|
m_wndCbEnd.SetWindowText(strTmp);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnEndComboChanged()
|
|
{
|
|
OnEndChanged();
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::_OnEndChanged()
|
|
{
|
|
int nMin = GetChangedComboTimeInMin(m_wndCbEnd);
|
|
if (nMin == -1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
COleDateTime dtPrevEnd = m_dtEnd;
|
|
m_dtEnd.SetTime(nMin/60%24, nMin%60, 0);
|
|
|
|
COleDateTimeSpan spDiff = m_dtEnd - dtPrevEnd;
|
|
|
|
int nDuration = GetDurationComboInMin();
|
|
if (nDuration < 0)
|
|
{
|
|
nDuration = 0;
|
|
}
|
|
nDuration += CXTPCalendarUtils::GetTotalMinutes(spDiff);
|
|
|
|
if (m_dtEnd < m_dtStart && nDuration < 0)
|
|
{
|
|
spDiff = m_dtStart - m_dtEnd;
|
|
nDuration = 24*60 - CXTPCalendarUtils::GetTotalMinutes(spDiff);
|
|
}
|
|
|
|
CString strDuration = CXTPCalendarUtils::FormatTimeDuration(nDuration, FALSE);
|
|
m_wndCbDuration.SetWindowText(strDuration);
|
|
}
|
|
|
|
int CXTPCalendarEventRecurrenceDlg::GetDurationComboInMin()
|
|
{
|
|
CString strCBtext;
|
|
m_wndCbDuration.GetWindowText(strCBtext);
|
|
|
|
return CXTPCalendarUtils::ParceTimeDuration_min(strCBtext);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnDurationComboChanged()
|
|
{
|
|
OnDurationChanged();
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::_OnDurationChanged()
|
|
{
|
|
int nDuration_min = GetDurationComboInMin();
|
|
if (nDuration_min < 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_dtEnd = m_dtStart + CXTPCalendarUtils::Minutes2Span(nDuration_min);
|
|
|
|
CString strTimeFormat_HrMin = CXTPCalendarUtils::GetTimeFormatString_HrMin();
|
|
CString strTmp = CXTPCalendarUtils::GetTimeFormat(m_dtEnd.GetHour(), m_dtEnd.GetMinute(), strTimeFormat_HrMin);
|
|
|
|
m_wndCbEnd.SetWindowText(strTmp);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::MsgBox_WrongValue(CWnd* pWnd)
|
|
{
|
|
pWnd->SetFocus();
|
|
XTPResourceManager()->ShowMessageBox(XTP_IDS_CALENDAR_WRONG_VALUE);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::MsgBox_WrongValueRange(UINT nCtrlID, int nMin, int nMax)
|
|
{
|
|
if (GetDlgItem(nCtrlID))
|
|
GetDlgItem(nCtrlID)->SetFocus();
|
|
|
|
CString strFormat = CXTPCalendarUtils::LoadString(XTP_IDS_CALENDAR_WRONG_VALUE_RANGE);
|
|
CString strMsg, strVal1, strVal2;
|
|
strVal1.Format(_T("%d"), nMin);
|
|
strVal2.Format(_T("%d"), nMax);
|
|
|
|
strMsg.Format(strFormat, (LPCTSTR)strVal1, (LPCTSTR)strVal2);
|
|
|
|
XTPResourceManager()->ShowMessageBox(strMsg);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnOK()
|
|
{
|
|
int nMin = GetChangedComboTimeInMin(m_wndCbStart);
|
|
if (nMin == -1)
|
|
{
|
|
MsgBox_WrongValue(&m_wndCbStart);
|
|
return;
|
|
}
|
|
|
|
nMin = GetChangedComboTimeInMin(m_wndCbEnd);
|
|
if (nMin == -1)
|
|
{
|
|
MsgBox_WrongValue(&m_wndCbEnd);
|
|
return;
|
|
}
|
|
|
|
int nDuration_min = GetDurationComboInMin();
|
|
if (nDuration_min < 0)
|
|
{
|
|
MsgBox_WrongValue(&m_wndCbDuration);
|
|
return;
|
|
}
|
|
|
|
UpdateData();
|
|
|
|
CXTPCalendarEventsPtr ptrExceptions = m_ptrPattern->GetExceptions();
|
|
if (ptrExceptions && ptrExceptions->GetCount())
|
|
{
|
|
// Any exceptions associated with this recurring appointment will be lost. If any of the exceptions are meetings, the attendees will not be notified. Is this OK?
|
|
int nRes = XTPResourceManager()->ShowMessageBox(XTP_IDS_CALENDAR_REMOVE_EXCEPTIONS, MB_OKCANCEL);
|
|
if (nRes != IDOK)
|
|
{
|
|
return;
|
|
}
|
|
m_ptrPattern->RemoveAllExceptions();
|
|
}
|
|
|
|
m_dtStart = CXTPCalendarUtils::ResetDate(m_dtStart);
|
|
m_ptrPattern->SetStartTime(m_dtStart);
|
|
|
|
m_ptrPattern->SetDurationMinutes(nDuration_min);
|
|
|
|
//----------------------------------------------------------
|
|
XTP_CALENDAR_RECURRENCE_OPTIONS opt;
|
|
|
|
int nRadio = GetCheckedRadioButton(XTP_IDC_RADIO_DAILY, XTP_IDC_RADIO_YEARLY);
|
|
switch (nRadio)
|
|
{
|
|
case XTP_IDC_RADIO_DAILY:
|
|
{
|
|
if (m_nDayInterval < 1 || m_nDayInterval > 999)
|
|
{
|
|
MsgBox_WrongValueRange(XTP_IDC_EDIT_DAYINTERVAL, 1, 999);
|
|
return;
|
|
}
|
|
|
|
opt.m_nRecurrenceType = xtpCalendarRecurrenceDaily;
|
|
opt.m_Daily.bEveryWeekDayOnly = GetCheckedRadioButton(XTP_IDC_RADIO_EVERYDAY, XTP_IDC_RADIO_EVERYWORKDAY) == XTP_IDC_RADIO_EVERYWORKDAY;
|
|
|
|
if (opt.m_Daily.bEveryWeekDayOnly)
|
|
{
|
|
opt.m_Daily.nIntervalDays = 1;
|
|
if (nWorkWeekMask != xtpCalendarDayMo_Fr)
|
|
{
|
|
opt.m_nRecurrenceType = xtpCalendarRecurrenceWeekly;
|
|
opt.m_Weekly.nIntervalWeeks = 1;
|
|
opt.m_Weekly.nDayOfWeekMask = 0;
|
|
if (nWorkWeekMask & xtpCalendarDayMonday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayMonday;
|
|
if (nWorkWeekMask & xtpCalendarDayTuesday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayTuesday;
|
|
if (nWorkWeekMask & xtpCalendarDayWednesday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayWednesday;
|
|
if (nWorkWeekMask & xtpCalendarDayThursday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayThursday;
|
|
if (nWorkWeekMask & xtpCalendarDayFriday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayFriday;
|
|
if (nWorkWeekMask & xtpCalendarDaySaturday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDaySaturday;
|
|
if (nWorkWeekMask & xtpCalendarDaySunday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDaySunday;
|
|
}
|
|
}
|
|
else
|
|
opt.m_Daily.nIntervalDays = m_nDayInterval;
|
|
break;
|
|
|
|
}
|
|
case XTP_IDC_RADIO_WEEKLY:
|
|
|
|
if (m_nWeeklyInterval < 1 || m_nWeeklyInterval > 999)
|
|
{
|
|
MsgBox_WrongValueRange(XTP_IDC_EDIT_WEEKLY_INTERVAL, 1, 999);
|
|
return;
|
|
}
|
|
|
|
opt.m_nRecurrenceType = xtpCalendarRecurrenceWeekly;
|
|
opt.m_Weekly.nIntervalWeeks = m_nWeeklyInterval;
|
|
opt.m_Weekly.nDayOfWeekMask = 0;
|
|
if (m_bMonday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayMonday;
|
|
if (m_bTuesday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayTuesday;
|
|
if (m_bWednesday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayWednesday;
|
|
if (m_bThursday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayThursday;
|
|
if (m_bFriday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDayFriday;
|
|
if (m_bSaturday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDaySaturday;
|
|
if (m_bSunday)
|
|
opt.m_Weekly.nDayOfWeekMask |= xtpCalendarDaySunday;
|
|
|
|
break;
|
|
case XTP_IDC_RADIO_MONTHLY:
|
|
if (GetCheckedRadioButton(XTP_IDC_RADIO_MONTH_RECUR, XTP_IDC_RADIO_MONTH_IN) ==
|
|
XTP_IDC_RADIO_MONTH_RECUR)
|
|
{
|
|
if (m_nMonthInterval < 1 || m_nMonthInterval > 999)
|
|
{
|
|
MsgBox_WrongValueRange(XTP_IDC_EDIT_MONTH_MONTH, 1, 999);
|
|
return;
|
|
}
|
|
if (m_MonthDate < 1 || m_MonthDate > 31)
|
|
{
|
|
MsgBox_WrongValueRange(XTP_IDC_EDIT_MONTH_DATE, 1, 31);
|
|
return;
|
|
}
|
|
|
|
opt.m_nRecurrenceType = xtpCalendarRecurrenceMonthly;
|
|
opt.m_Monthly.nIntervalMonths = m_nMonthInterval;
|
|
opt.m_Monthly.nDayOfMonth = m_MonthDate;
|
|
}
|
|
else
|
|
{
|
|
if (m_nMonthInterval2 < 1 || m_nMonthInterval2 > 999)
|
|
{
|
|
MsgBox_WrongValueRange(XTP_IDC_EDIT_MONTH_MONTH2, 1, 999);
|
|
return;
|
|
}
|
|
|
|
opt.m_MonthNth.nIntervalMonths = m_nMonthInterval2;
|
|
opt.m_nRecurrenceType = xtpCalendarRecurrenceMonthNth;
|
|
opt.m_MonthNth.nWhichDayMask = (int)m_wndCbMonthDay.GetItemData(m_wndCbMonthDay.GetCurSel());
|
|
|
|
opt.m_MonthNth.nWhichDay = (int)m_wndCbMonthWhich.GetItemData(m_wndCbMonthWhich.GetCurSel());
|
|
}
|
|
|
|
break;
|
|
case XTP_IDC_RADIO_YEARLY:
|
|
opt.m_nRecurrenceType = xtpCalendarRecurrenceYearly;
|
|
if (GetCheckedRadioButton(XTP_IDC_RADIO_YEAR_RECUR, XTP_IDC_RADIO_YEAR_IN) ==
|
|
XTP_IDC_RADIO_YEAR_RECUR)
|
|
{
|
|
if (m_nDayOfMonth < 1 || m_nDayOfMonth > 31)
|
|
{
|
|
MsgBox_WrongValueRange(XTP_IDC_EDIT_YEAR_DATE, 1, 31);
|
|
return;
|
|
}
|
|
|
|
opt.m_Yearly.nDayOfMonth = m_nDayOfMonth;
|
|
opt.m_Yearly.nMonthOfYear = (int)m_wndYearMonth.GetItemData(m_wndYearMonth.GetCurSel());
|
|
}
|
|
else
|
|
{
|
|
opt.m_nRecurrenceType = xtpCalendarRecurrenceYearNth;
|
|
|
|
opt.m_YearNth.nMonthOfYear = (int)m_wndComboYearMonth2.GetItemData(m_wndComboYearMonth2.GetCurSel());
|
|
|
|
opt.m_YearNth.nWhichDay = (int)m_wndCbYearWhich.GetItemData(m_wndCbYearWhich.GetCurSel());
|
|
|
|
opt.m_YearNth.nWhichDayMask = (int)m_wndCbYearDay.GetItemData(m_wndCbYearDay.GetCurSel());
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
m_ptrPattern->SetRecurrenceOptions(opt);
|
|
|
|
//-----------------------------------------------------------------------
|
|
m_dtStartDate = CXTPCalendarUtils::ResetTime(m_dtStartDate);
|
|
m_ptrPattern->SetPatternStartDate(m_dtStartDate);
|
|
|
|
nRadio = GetCheckedRadioButton(XTP_IDC_RADIO_NOEND, XTP_IDC_RADIO_ENDBY);
|
|
switch (nRadio)
|
|
{
|
|
case XTP_IDC_RADIO_ENDBY:
|
|
if (m_dtEndDate < m_dtStartDate)
|
|
{
|
|
MsgBox_WrongValue(GetDlgItem(XTP_IDC_DATETIMEPICKER_ENDDATE));
|
|
return;
|
|
}
|
|
m_ptrPattern->SetPatternEndDate(m_dtEndDate);
|
|
break;
|
|
|
|
case XTP_IDC_RADIO_ENDAFTER:
|
|
if (m_nOccurNum < 1 || m_nOccurNum > 999)
|
|
{
|
|
MsgBox_WrongValueRange(XTP_IDC_EDIT_OCCUR, 1, 999);
|
|
return;
|
|
}
|
|
m_ptrPattern->SetEndAfterOccurrences(m_nOccurNum);
|
|
break;
|
|
case XTP_IDC_RADIO_NOEND:
|
|
m_ptrPattern->SetNoEndDate();
|
|
break;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------
|
|
VERIFY(m_ptrMasterEvent->UpdateRecurrence(m_ptrPattern));
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnBnClickedButtonRemoveRecurrence()
|
|
{
|
|
VERIFY(m_ptrMasterEvent->RemoveRecurrence());
|
|
|
|
EndDialog(XTP_CALENDAR_DLGRESULT_REMOVE_RECURRENCE);
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::OnBnClickedRadioDailyYearly(UINT nID)
|
|
{
|
|
ShowWindow(XTP_IDC_RADIO_EVERYDAY, FALSE);
|
|
ShowWindow(XTP_IDC_RADIO_EVERYWORKDAY, FALSE);
|
|
ShowWindow(XTP_IDC_EDIT_DAYINTERVAL, FALSE);
|
|
ShowWindow(XTP_IDC_STATIC_DAY, FALSE);
|
|
|
|
ShowWindow(XTP_IDC_STATIC_WEEKLY_RECEVERY, FALSE);
|
|
ShowWindow(XTP_IDC_EDIT_WEEKLY_INTERVAL, FALSE);
|
|
ShowWindow(XTP_IDC_STATIC_WEEKLY_FOLLDAYS, FALSE);
|
|
ShowWindow(XTP_IDC_CHECK_MONDAY, FALSE);
|
|
ShowWindow(XTP_IDC_CHECK_TUESDAY, FALSE);
|
|
ShowWindow(XTP_IDC_CHECK_WEDNESDAY, FALSE);
|
|
ShowWindow(XTP_IDC_CHECK_THURSDAY, FALSE);
|
|
ShowWindow(XTP_IDC_CHECK_FRIDAY, FALSE);
|
|
ShowWindow(XTP_IDC_CHECK_SATURDAY, FALSE);
|
|
ShowWindow(XTP_IDC_CHECK_SUNDAY, FALSE);
|
|
|
|
ShowWindow(XTP_IDC_RADIO_MONTH_RECUR, FALSE);
|
|
ShowWindow(XTP_IDC_RADIO_MONTH_IN, FALSE);
|
|
ShowWindow(XTP_IDC_EDIT_MONTH_DATE, FALSE);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_NUMEVERY, FALSE);
|
|
ShowWindow(XTP_IDC_EDIT_MONTH_MONTH, FALSE);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_MONTH, FALSE);
|
|
ShowWindow(XTP_IDC_COMBO_MONTH_CRIT, FALSE);
|
|
ShowWindow(XTP_IDC_COMBO_MONTH_DAY, FALSE);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_EVERY, FALSE);
|
|
ShowWindow(XTP_IDC_EDIT_MONTH_MONTH2, FALSE);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_MONTH2, FALSE);
|
|
|
|
ShowWindow(XTP_IDC_RADIO_YEAR_RECUR, FALSE);
|
|
ShowWindow(XTP_IDC_RADIO_YEAR_IN, FALSE);
|
|
ShowWindow(XTP_IDC_EDIT_YEAR_DATE, FALSE);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_MONTH, FALSE);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_CRIT, FALSE);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_DAY, FALSE);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_MONTH2, FALSE);
|
|
ShowWindow(XTP_IDC_STATIC_YEAR_OF, FALSE);
|
|
|
|
switch (nID)
|
|
{
|
|
case XTP_IDC_RADIO_DAILY:
|
|
ShowWindow(XTP_IDC_RADIO_EVERYDAY);
|
|
ShowWindow(XTP_IDC_RADIO_EVERYWORKDAY);
|
|
ShowWindow(XTP_IDC_EDIT_DAYINTERVAL);
|
|
ShowWindow(XTP_IDC_STATIC_DAY);
|
|
break;
|
|
case XTP_IDC_RADIO_WEEKLY:
|
|
ShowWindow(XTP_IDC_STATIC_WEEKLY_RECEVERY);
|
|
ShowWindow(XTP_IDC_EDIT_WEEKLY_INTERVAL);
|
|
ShowWindow(XTP_IDC_STATIC_WEEKLY_FOLLDAYS);
|
|
ShowWindow(XTP_IDC_CHECK_MONDAY);
|
|
ShowWindow(XTP_IDC_CHECK_TUESDAY);
|
|
ShowWindow(XTP_IDC_CHECK_WEDNESDAY);
|
|
ShowWindow(XTP_IDC_CHECK_THURSDAY);
|
|
ShowWindow(XTP_IDC_CHECK_FRIDAY);
|
|
ShowWindow(XTP_IDC_CHECK_SATURDAY);
|
|
ShowWindow(XTP_IDC_CHECK_SUNDAY);
|
|
break;
|
|
case XTP_IDC_RADIO_MONTHLY:
|
|
ShowWindow(XTP_IDC_RADIO_MONTH_RECUR);
|
|
ShowWindow(XTP_IDC_RADIO_MONTH_IN);
|
|
ShowWindow(XTP_IDC_EDIT_MONTH_DATE);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_NUMEVERY);
|
|
ShowWindow(XTP_IDC_EDIT_MONTH_MONTH);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_MONTH);
|
|
ShowWindow(XTP_IDC_COMBO_MONTH_CRIT);
|
|
ShowWindow(XTP_IDC_COMBO_MONTH_DAY);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_EVERY);
|
|
ShowWindow(XTP_IDC_EDIT_MONTH_MONTH2);
|
|
ShowWindow(XTP_IDC_STATIC_MONTH_MONTH2);
|
|
break;
|
|
case XTP_IDC_RADIO_YEARLY:
|
|
ShowWindow(XTP_IDC_RADIO_YEAR_RECUR);
|
|
ShowWindow(XTP_IDC_RADIO_YEAR_IN);
|
|
ShowWindow(XTP_IDC_EDIT_YEAR_DATE);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_MONTH);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_CRIT);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_DAY);
|
|
ShowWindow(XTP_IDC_COMBO_YEAR_MONTH2);
|
|
ShowWindow(XTP_IDC_STATIC_YEAR_OF);
|
|
break;
|
|
}
|
|
}
|
|
|
|
CRect CXTPCalendarEventRecurrenceDlg::GetCtrlRect(int nID)
|
|
{
|
|
ASSERT(GetDlgItem(nID));
|
|
|
|
CRect rcRect(0, 0, 0, 0);
|
|
|
|
if (GetDlgItem(nID))
|
|
GetDlgItem(nID)->GetWindowRect(&rcRect);
|
|
|
|
return rcRect;
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::MoveWindow_Y(int nID, int nYOffset)
|
|
{
|
|
if (GetDlgItem(nID))
|
|
{
|
|
CRect rcRect = GetCtrlRect(nID);
|
|
ScreenToClient(&rcRect);
|
|
|
|
rcRect.top += nYOffset;
|
|
rcRect.bottom += nYOffset;
|
|
|
|
GetDlgItem(nID)->MoveWindow(rcRect);
|
|
}
|
|
else
|
|
{
|
|
ASSERT(FALSE);
|
|
}
|
|
}
|
|
|
|
void CXTPCalendarEventRecurrenceDlg::_MoveControlsBy_Y()
|
|
{
|
|
CRect rcBase = GetCtrlRect(XTP_IDC_RADIO_DAILY);
|
|
rcBase.top += 10;
|
|
|
|
CRect rcBase2 = GetCtrlRect(XTP_IDC_RADIO_EVERYDAY);
|
|
int nYOffset = rcBase.top - rcBase2.top;
|
|
|
|
MoveWindow_Y(XTP_IDC_RADIO_EVERYDAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_RADIO_EVERYWORKDAY,nYOffset);
|
|
MoveWindow_Y(XTP_IDC_EDIT_DAYINTERVAL, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_STATIC_DAY, nYOffset);
|
|
|
|
rcBase2 = GetCtrlRect(XTP_IDC_STATIC_WEEKLY_RECEVERY);
|
|
nYOffset = rcBase.top - rcBase2.top;
|
|
|
|
MoveWindow_Y(XTP_IDC_STATIC_WEEKLY_RECEVERY,nYOffset);
|
|
MoveWindow_Y(XTP_IDC_EDIT_WEEKLY_INTERVAL, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_STATIC_WEEKLY_FOLLDAYS,nYOffset);
|
|
MoveWindow_Y(XTP_IDC_CHECK_MONDAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_CHECK_TUESDAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_CHECK_WEDNESDAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_CHECK_THURSDAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_CHECK_FRIDAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_CHECK_SATURDAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_CHECK_SUNDAY, nYOffset);
|
|
|
|
rcBase2 = GetCtrlRect(XTP_IDC_RADIO_MONTH_RECUR);
|
|
nYOffset = rcBase.top - rcBase2.top;
|
|
|
|
MoveWindow_Y(XTP_IDC_RADIO_MONTH_RECUR, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_RADIO_MONTH_IN, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_EDIT_MONTH_DATE, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_STATIC_MONTH_NUMEVERY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_EDIT_MONTH_MONTH, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_STATIC_MONTH_MONTH, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_COMBO_MONTH_CRIT, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_COMBO_MONTH_DAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_STATIC_MONTH_EVERY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_EDIT_MONTH_MONTH2, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_STATIC_MONTH_MONTH2, nYOffset);
|
|
|
|
rcBase2 = GetCtrlRect(XTP_IDC_RADIO_YEAR_RECUR);
|
|
nYOffset = rcBase.top - rcBase2.top;
|
|
|
|
MoveWindow_Y(XTP_IDC_RADIO_YEAR_RECUR, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_RADIO_YEAR_IN, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_EDIT_YEAR_DATE, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_COMBO_YEAR_MONTH, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_COMBO_YEAR_CRIT, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_COMBO_YEAR_DAY, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_COMBO_YEAR_MONTH2, nYOffset);
|
|
MoveWindow_Y(XTP_IDC_STATIC_YEAR_OF, nYOffset);
|
|
|
|
//------------------------------------------------------------------------
|
|
CRect rcDialog;
|
|
GetWindowRect(&rcDialog);
|
|
|
|
CRect rcOK = GetCtrlRect(IDOK);
|
|
rcDialog.bottom = rcOK.bottom + 10;
|
|
|
|
SetWindowPos(NULL, 0, 0, rcDialog.Width(), rcDialog.Height(), SWP_NOMOVE | SWP_NOZORDER);
|
|
}
|