// XTPCalendarOptions.cpp: implementation of the CXTPCalendarOptions class. // // 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/XTPPropExchange.h" #include "Common/XTPNotifyConnection.h" #include "Common/XTPResourceManager.h" #include "Common/XTPSmartPtrInternalT.h" #include "XTPCalendarDefines.h" #include "XTPCalendarNotifications.h" #include "XTPCalendarOptions.h" #include "XTPCalendarPtrCollectionT.h" #include "XTPCalendarTimeZoneHelper.h" #include "XTPCalendarData.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////// // void CXTPCalendarOptions IMPLEMENT_DYNAMIC(CXTPCalendarOptions, CCmdTarget) CXTPCalendarOptions::CXTPCalendarOptions() { // default settings nWorkWeekMask = xtpCalendarDayMo_Fr; nFirstDayOfTheWeek = xtpCalendarDayMonday; dtWorkDayStartTime.SetTime(8, 0, 0); dtWorkDayEndTime.SetTime(17, 0, 0); dtScaleMinTime.SetTime(7, 0, 0); dtScaleMaxTime.SetTime(18, 0, 0); bEnableInPlaceEditEventSubject_ByF2 = TRUE; bEnableInPlaceEditEventSubject_ByMouseClick = TRUE; bEnableInPlaceEditEventSubject_ByTab = TRUE; bEnableInPlaceEditEventSubject_AfterEventResize = TRUE; bEnableInPlaceCreateEvent = TRUE; bUseOutlookFontGlyphs = FALSE; nDayView_ScaleInterval = 30; bDayView_AutoResetBusyFlag = TRUE; bDayView_Scale2Visible = FALSE; //strDayView_ScaleLabel; //strDayView_Scale2Label; ::ZeroMemory(&tziDayView_Scale2TimeZone, sizeof(tziDayView_Scale2TimeZone)); VERIFY( ::GetTimeZoneInformation(&tziDayView_Scale2TimeZone) != TIME_ZONE_ID_INVALID); nDayView_CurrentTimeMarkVisible = xtpCalendarCurrentTimeMarkVisibleForToday; bDayView_TimeScaleShowMinutes = FALSE; bMonthView_CompressWeekendDays = TRUE; bMonthView_ShowEndDate = FALSE; bMonthView_ShowTimeAsClocks = FALSE; bMonthView_HideTimes = FALSE; bWeekView_ShowEndDate = FALSE; bWeekView_ShowTimeAsClocks = FALSE; bTimeLineCompact = TRUE; bShowAllDayExpandButton = TRUE; //dwAdditionalOptions = 0; //set of default settings - app can overwrite during initialization dwAdditionalOptions = xtpCalendarOptMonthViewShowStartTimeAlways | xtpCalendarOptMonthViewShowEndTimeAlways | xtpCalendarOptWeekViewShowStartTimeAlways | xtpCalendarOptWeekViewShowEndTimeAlways | // xtpCalendarOptDayViewNoWordBreak | xtpCalendarOptWorkWeekViewShowStartTimeAlways | xtpCalendarOptWorkWeekViewShowEndTimeAlways | xtpCalendarOptDayViewShowStartTimeAlways | xtpCalendarOptDayViewShowEndTimeAlways; bEnableAddNewTooltip = TRUE; strTooltipAddNewText = XTPResourceManager()->LoadString(XTP_IDS_CALENDAR_CLICKTOADD); bEnablePrevNextEventButtons = TRUE; m_pDataProvider = NULL; bHatchAllDayViewEventsBkgnd = TRUE; bShowCategoryIcons = FALSE; } CXTPCalendarOptions::~CXTPCalendarOptions() { //CMDTARGET_RELEASE(m_pDataProvider); } void CXTPCalendarOptions::DoPropExchange(CXTPPropExchange* pPX) { long nSchema = 7; PX_Long(pPX, _T("Version"), nSchema, 7); PX_Int(pPX, _T("WorkWeekMask"), nWorkWeekMask, xtpCalendarDayMo_Fr); PX_Int(pPX, _T("FirstDayOfTheWeek"), nFirstDayOfTheWeek, xtpCalendarDayMonday); PX_DateTime(pPX, _T("WorkDayStartTime"), dtWorkDayStartTime); PX_DateTime(pPX, _T("WorkDayEndTime"), dtWorkDayEndTime); if (nSchema >= 7) { PX_DateTime(pPX, _T("ScaleMinTime"), dtScaleMinTime); if (!pPX->IsLoading() && dtScaleMaxTime.GetHour() == 0) dtScaleMaxTime.SetTime(23, 59, 0); PX_DateTime(pPX, _T("dtScaleMaxTime"), dtScaleMaxTime); if (pPX->IsLoading() && dtScaleMaxTime.GetHour() == 0) dtScaleMaxTime.SetTime(23, 59, 0); } //---------------------------------------- PX_Bool(pPX, _T("EnableInPlaceEditEventSubject_ByF2"), bEnableInPlaceEditEventSubject_ByF2, TRUE); PX_Bool(pPX, _T("EnableInPlaceEditEventSubject_ByMouseClick"), bEnableInPlaceEditEventSubject_ByMouseClick, TRUE); PX_Bool(pPX, _T("EnableInPlaceEditEventSubject_ByTab"), bEnableInPlaceEditEventSubject_ByTab, TRUE); PX_Bool(pPX, _T("EnableInPlaceEditEventSubject_AfterEventResize"), bEnableInPlaceEditEventSubject_AfterEventResize, TRUE); PX_Bool(pPX, _T("EnableInPlaceCreateEvent"), bEnableInPlaceCreateEvent, TRUE); if (nSchema >= 2) { PX_Bool(pPX, _T("UseOutlookFontGlyphs"), bUseOutlookFontGlyphs, FALSE); } else if (pPX->IsLoading()) { bUseOutlookFontGlyphs = FALSE; } PX_Bool(pPX, _T("DayView_AutoResetBusyFlag"), bDayView_AutoResetBusyFlag, TRUE); PX_Int(pPX, _T("DayView_ScaleInterval"), nDayView_ScaleInterval, 30); PX_String(pPX, _T("DayView_ScaleLabel"), strDayView_ScaleLabel, _T("")); PX_String(pPX, _T("DayView_Scale2Label"), strDayView_Scale2Label, _T("")); PX_Bool(pPX, _T("DayView_Scale2Visible"), bDayView_Scale2Visible, FALSE); if (nSchema >= 3) { PX_Int(pPX, _T("DayView_CurrentTimeMarkVisible"), nDayView_CurrentTimeMarkVisible, xtpCalendarCurrentTimeMarkVisibleForToday); } else if (pPX->IsLoading()) { nDayView_CurrentTimeMarkVisible = xtpCalendarCurrentTimeMarkVisibleForToday; } PX_Bool(pPX, _T("DayView_TimeScaleShowMinutes"), bDayView_TimeScaleShowMinutes, FALSE); BYTE* pTZIdata = (BYTE*)&tziDayView_Scale2TimeZone; DWORD dwBytes = sizeof(tziDayView_Scale2TimeZone); PX_Blob(pPX, _T("DayView_Scale2TimeZone"), pTZIdata, dwBytes); PX_Bool(pPX, _T("MonthView_CompressWeekendDays"), bMonthView_CompressWeekendDays, TRUE); PX_Bool(pPX, _T("MonthView_ShowEndDate"), bMonthView_ShowEndDate, FALSE); PX_Bool(pPX, _T("MonthView_ShowTimeAsClocks"), bMonthView_ShowTimeAsClocks, FALSE); PX_Bool(pPX, _T("WeekView_ShowEndDate"), bWeekView_ShowEndDate, FALSE); PX_Bool(pPX, _T("WeekView_ShowTimeAsClocks"), bWeekView_ShowTimeAsClocks, FALSE); if (nSchema >= 4) { PX_ULong(pPX, _T("AdditionalOptions"), (ULONG&)dwAdditionalOptions, 0); } else if (pPX->IsLoading()) { dwAdditionalOptions = 0; } if (nSchema >= 5) { PX_Bool(pPX, _T("EnableAddNewTooltip"), bEnableAddNewTooltip, TRUE); CString strTooltipAddNewTextDef = XTPResourceManager()->LoadString(XTP_IDS_CALENDAR_CLICKTOADD); PX_String(pPX, _T("TooltipAddNewText"), strTooltipAddNewText, strTooltipAddNewTextDef); } if (nSchema >= 6) { PX_Bool(pPX, _T("EnablePrevNextEventButtons"), bEnablePrevNextEventButtons, TRUE); } if (nSchema >= 7) { PX_Bool(pPX, _T("CompactTimelineEvents"), bTimeLineCompact, TRUE); } if (pPX->GetSchema() >= 37) { PX_Bool(pPX, _T("ShowAllDayExpandButton"), bShowAllDayExpandButton, TRUE); } } CXTPCalendarTimeZonePtr CXTPCalendarOptions::GetCurrentTimeZoneInfo() { TIME_ZONE_INFORMATION tziCurrent; ::ZeroMemory(&tziCurrent, sizeof(tziCurrent)); if (::GetTimeZoneInformation(&tziCurrent) == TIME_ZONE_ID_INVALID) { ASSERT(FALSE); return NULL; } return CXTPCalendarTimeZone::GetTimeZoneInfo(&tziCurrent); } void CXTPCalendarOptions::OnOptionsChanged() { XTP_SAFE_CALL2(m_pDataProvider, GetConnection(), SendEvent(XTP_NC_CALENDAROPTIONSWASCHANGED, (WPARAM)-1, 0)); } /////////////////////////////////////////////////////////////////////////// // Data part // void CXTPCalendarOptions::SetDataProvider(CXTPCalendarData* pDataProvider) { // free old data provider if (m_pDataProvider) { m_pDataProvider->SetOptionsToUpdate(NULL); } // set a new one if (pDataProvider) { m_pDataProvider = pDataProvider; if (m_pDataProvider) { m_pDataProvider->SetOptionsToUpdate(this); } } } ///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////