/** * @file XTPCalendarThemeOffice2007.h * * @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 * */ #if !defined(_XTP_CALENDAR_THEME_OFFICE_2007_H__) # define _XTP_CALENDAR_THEME_OFFICE_2007_H__ # if _MSC_VER > 1000 # pragma once # endif // _MSC_VER > 1000 # include "Common/Base/Diagnostic/XTPDisableNoisyWarnings.h" # if (_MSC_VER > 1100) # pragma warning(push) # endif # pragma warning(disable : 4250) //#pragma warning(disable: 4097) # pragma warning(disable : 4100) // TODO: remove when themes will be finished class CXTPResourceImages; class CXTPImageManager; class CXTPCalendarResources; class CXTPNotifySink; class CXTPCalendarEventCategories; class CXTPCalendarEventCategoryIDs; ///////////////////////////////////////////////////////////////////////////// // Initial version. Will be expanded in the feature. class _XTP_EXT_CLASS CXTPCalendarThemeOffice2007 : public CXTPCalendarTheme { DECLARE_DYNCREATE(CXTPCalendarThemeOffice2007) typedef CXTPCalendarTheme TBase; public: DECLARE_THEMEPART(CTOHeader, CXTPCalendarTheme::CTOHeader) DECLARE_THEMEPART_MEMBER(0, CTOFormula_MulDivC, HeightFormula) //=========================================== virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC) { _ASSERTE(FALSE); }; protected: }; /** @cond */ friend class CTOHeader; /** @endcond */ //======================================================================= DECLARE_THEMEPART(CTOEvent, CXTPCalendarTheme::CTOEvent) struct CEventFontsColorsSet { virtual ~CEventFontsColorsSet() { } CXTPPaintManagerColor clrBorder; CXTPPaintManagerColorGradient grclrBackground; CThemeFontColorSetValue fcsetSubject; CThemeFontColorSetValue fcsetLocation; CThemeFontColorSetValue fcsetBody; CThemeFontColorSetValue fcsetStartEnd; /**< for a month view single day event times or DayView multiday event From/To*/ virtual void CopySettings(const CEventFontsColorsSet& rSrc); virtual void doPX(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CXTPCalendarTheme* pTheme); virtual void Serialize(CArchive& ar); }; CEventFontsColorsSet m_fcsetNormal; CEventFontsColorsSet m_fcsetSelected; CXTPPaintManagerColor m_clrGripperBorder; CXTPPaintManagerColor m_clrGripperBackground; virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void RefreshFromParent(CTOEvent* pParentSrc); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); virtual int CalcMinEventHeight(CDC* pDC); virtual void GetEventColors(CDC* pDC, CXTPCalendarViewEvent* pViewEvent, COLORREF& rClrBorder, COLORREF& rClrBorderNotSel, CXTPPaintManagerColorGradient& rGrclrBk, BOOL bSelected = -1, int* pnColorsSrc_1Cat2Lbl = NULL); virtual void GetShowAsStatusColors(CDC* pDC, CXTPCalendarViewEvent* pViewEvent, COLORREF& clrBorder, COLORREF& clrBorderNotSel, CXTPPaintManagerColorGradient& grclrBk); virtual BOOL DrawShowAsStatus(CDC* pDC, CXTPCalendarViewEvent* pViewEvent, CXTPCalendarThemeOffice2007* pThemeX, const CRect& rcEvent, LONG& lShowAsBlockWidth); virtual void FillEventBackgroundEx(CDC* pDC, CXTPCalendarViewEvent* pViewEvent, const CRect& rcRect); virtual void MultidayDrawTime(int nMDEFlags, CXTPCalendarViewEvent* pViewEvent, CDC* pDC, const CRect& rcEvent, BOOL fStartTimeAsClock, BOOL fEndTimeAsClock, CRect& rcText); virtual void MultidayDrawTimeBlocks(CDC* pDC, const CRect& rcEventRect, CXTPCalendarViewEvent* pViewEvent, BOOL MultiDayFirstPart, BOOL MultiDayLastPart, BOOL fStartTimeAsClock, BOOL fEndTimeAsClock); virtual void GetMultidayTimeFontAndColor(CFont*& pFont, COLORREF& clrColor, BOOL bSelected); protected: virtual BOOL Draw_ArrowL(CXTPCalendarViewEvent* pViewEvent, CDC* pDC, CRect& rrcRect, LONG lArrowOffset = 0); virtual BOOL Draw_ArrowR(CXTPCalendarViewEvent* pViewEvent, CDC* pDC, CRect& rrcRect); virtual CSize Draw_Icons(CXTPCalendarViewEvent* pViewEvent, CDC* pDC, const CRect& rcIconsMax, BOOL bCalculate = FALSE); virtual void InitBusyStatusDefaultColors(); } ; /** @cond */ friend class CTOEvent; /** @endcond */ DECLARE_THEMEPART(CTODay, CXTPCalendarTheme::CTODay) virtual int HitTestExpandDayButton( const CXTPCalendarViewDay* pViewDay, const CPoint* pPoint = NULL); /**< return 0 or xtpCalendarHitTestDayExpandButton*/ } ; ///////////////////////////////////////////////////////////////////////// // ******** Day View ********* //======================================================================= DECLARE_THEMEPART2(CTODayViewEvent, CTOEvent, CXTPCalendarTheme::CTODayViewEvent) DECLARE_THEMEPART_MEMBER(0, CTOEventIconsToDraw, EventIconsToDraw) DECLARE_THEMEPART_MEMBER(1, CTOFormula_MulDivC, HeightFormula) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); protected: BOOL NeedDrawCategoryIcons(CXTPCalendarEvent* pEvent); void DrawCategoryIcons(CDC* pDC, CXTPCalendarEvent* pEvent, const CRect& rcCategoryIcons); bool GetCategoryIconColors(CXTPCalendarEventCategories* pCategories, CXTPCalendarEventCategoryIDs* pCategoryIDs, int nCategoryIdx, COLORREF& clrCatColor, COLORREF& clrIconBorder); int CalcCategoryAreaWidth(int nCategoriesCount); } ; DECLARE_THEMEPART2(CTODayViewEvent_MultiDay, CTODayViewEvent, CXTPCalendarTheme::CTODayViewEvent_MultiDay) CXTPCalendarThemeStringValue m_strDateFormatFrom; CXTPCalendarThemeStringValue m_strDateFormatTo; CXTPCalendarThemeBOOLValue m_bShowFromToArrowTextAlways; virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber); virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void CalcEventYs(CRect& rcRect, int nEventPlaceNumber); protected: virtual BOOL Draw_ArrowLtext(CXTPCalendarViewEvent* pViewEvent, CDC* pDC, CThemeFontColorSetValue* pfcsetText, CRect& rrcRect, int nLeft_x); virtual BOOL Draw_ArrowRtext(CXTPCalendarViewEvent* pViewEvent, CDC* pDC, CThemeFontColorSetValue* pfcsetText, CRect& rrcRect, int nRight_x); virtual CString Format_FromToDate(CXTPCalendarViewEvent* pViewEvent, int nStart1End2); void DrawCategoryIcons(CDC* pDC, CXTPCalendarViewEvent* pViewEvent, CRect rcCategoryIcons, const CRect& rcEventMax); CRect AdjustCategoryIconsRectWidth(const CRect& rcCategoryIconsBase, const CRect& rcEvent, int nCategoriesCount); } ; /** @cond */ friend class CTODayViewEvent_MultiDay; /** @endcond */ DECLARE_THEMEPART2(CTODayViewEvent_SingleDay, CTODayViewEvent, CXTPCalendarTheme::CTODayViewEvent_SingleDay) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void DrawShadow(CDC* pDC, CXTPCalendarDayViewEvent* pViewEvent); private: void DrawCategoryIcons(CDC* pDC, CXTPCalendarViewEvent* pViewEvent, const CRect& rcText, const CRect& rcTopRow); CRect CalcCategoryIconsRect(int nCategoriesCount, const CRect& rcText, const CRect& rcTopRow); } ; /** @cond */ friend class CTODayViewEvent_SingleDay; /** @endcond */ //======================================================================= DECLARE_THEMEPART(CTODayViewTimeScale, CXTPCalendarTheme::CTODayViewTimeScale) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual int CalcMinRowHeight(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale); DECLARE_THEMEPART_MEMBER(0, CTOFormula_MulDivC, HeightFormula) } ; //======================================================================= DECLARE_THEMEPART2(CTODayViewDayGroupHeader, CTOHeader, CXTPCalendarTheme::CTODayViewDayGroupHeader) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); } ; DECLARE_THEMEPART(CTODayViewDayGroupAllDayEvents, CXTPCalendarTheme::CTODayViewDayGroupAllDayEvents) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void SetDynColors(CXTPCalendarDayViewGroup* pViewGroup); protected: COLORREF m_clrDynHatch; int m_nDynBusyStatus; } ; DECLARE_THEMEPART(CTODayViewDayGroupCell, CXTPCalendarTheme::CTODayViewDayGroupCell) COLORREF m_clrDynHatchBrush; virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual int CalcHeight(CDC* pDC, int nCellWidth) { return 23; } virtual void Draw(CDC* pDC, const CRect& rcRect, const XTP_CALENDAR_THEME_DAYVIEWCELL_PARAMS& cellParams, CXTPPropsStateContext* pStateCnt = NULL); using TBase::Draw; } ; //======================================================================= DECLARE_THEMEPART(CTODayViewDayGroup, CXTPCalendarTheme::CTODayViewDayGroup) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual BOOL IsSelected(CXTPCalendarViewGroup* pViewGroup); /** @cond */ DECLARE_THEMEPART_MEMBER(0, CTODayViewDayGroupHeader, Header) DECLARE_THEMEPART_MEMBER(1, CTODayViewDayGroupAllDayEvents, AllDayEvents) DECLARE_THEMEPART_MEMBER(2, CTODayViewDayGroupCell, Cell) DECLARE_THEMEPART_MEMBER(3, CTODayViewEvent_MultiDay, MultiDayEvent) DECLARE_THEMEPART_MEMBER(4, CTODayViewEvent_SingleDay, SingleDayEvent) /** @endcond */ public: virtual void OnMouseMove(CCmdTarget* pObject, UINT nFlags, CPoint point); virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point); virtual CRect GetScrollButtonRect(const XTP_DAY_VIEW_GROUP_LAYOUT& groupLayout, int nButton); protected: virtual void AdjustDayEvents(CXTPCalendarDayViewGroup* pDayViewGroup, CDC* pDC); int HitTestAllDayEventsScrollIcons(const CXTPCalendarDayViewGroup* pDVGroup, const CPoint& point); } ; DECLARE_THEMEPART2(CTODayViewDayHeader, CTOHeader, CXTPCalendarTheme::CTODayViewDayHeader) CXTPCalendarThemeBOOLValue m_UseOffice2003HeaderFormat; CTODayViewDayHeader() { m_nWeekDayFormat = 0; } virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); private: int m_nWeekDayFormat; /**< 0 - no Week Day, 1 - short, 2 - long*/ } ; //======================================================================= DECLARE_THEMEPART(CTODayViewDay, CXTPCalendarTheme::CTODayViewDay) CXTPPaintManagerColor m_clrBorder; CXTPPaintManagerColor m_clrTodayBorder; DECLARE_THEMEPART_MEMBER(0, CTODayViewDayHeader, Header) DECLARE_THEMEPART_MEMBER(1, CTODayViewDayGroup, Group) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void Draw_DayBorder(CXTPCalendarDayViewDay* pDayViewDay, CDC* pDC); virtual CRect ExcludeDayBorder(CXTPCalendarDayViewDay* pDayViewDay, const CRect& rcDay); public: virtual void OnMouseMove(CCmdTarget* pObject, UINT nFlags, CPoint point); } ; DECLARE_THEMEPART(CTODayViewHeader, CTOHeader) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); } ; //======================================================================= DECLARE_THEMEPART(CTODayView, CXTPCalendarTheme::CTODayView) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CDC* pDC, const CRect& rcRect); virtual void Draw(CDC* pDC); using TBase::Draw; DECLARE_THEMEPART_MEMBER_(0, CTODayViewHeader, Header, CXTPCalendarTheme::CTOHeader) DECLARE_THEMEPART_MEMBER(1, CTODayViewEvent, Event) DECLARE_THEMEPART_MEMBER(2, CTODayViewTimeScale, TimeScale) DECLARE_THEMEPART_MEMBER(3, CTODayViewDay, Day) // theme specific control options virtual BOOL IsUseCellAlignedDraggingInTimeArea() const { return TRUE; }; protected: } ; ///////////////////////////////////////////////////////////////////////// // ******** Month View ********* // ======= MonthViewEvent ====== DECLARE_THEMEPART2(CTOMonthViewEvent, CTOEvent, CXTPCalendarTheme::CTOMonthViewEvent) DECLARE_THEMEPART_MEMBER(0, CTOEventIconsToDraw, EventIconsToDraw) DECLARE_THEMEPART_MEMBER(1, CTOFormula_MulDivC, HeightFormula) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber); } ; /** @cond */ friend class CTOMonthViewEvent; /** @endcond */ // ---- MonthViewEvent_SingleDay ---- DECLARE_THEMEPART2(CTOMonthViewEvent_SingleDay, CTOMonthViewEvent, CXTPCalendarTheme::CTOMonthViewEvent_SingleDay) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void GetShowAsStatusColors(CDC* pDC, CXTPCalendarViewEvent* pViewEvent, COLORREF& clrBorder, COLORREF& clrBorderNotSel, CXTPPaintManagerColorGradient& grclrBk); protected: virtual void Draw_Background(CDC* pDC, const CRect& rcEventRect, CXTPCalendarMonthViewEvent* pViewEvent); virtual CSize Draw_Time(CDC* pDC, const CRect& rcEventRect, CXTPCalendarMonthViewEvent* pViewEvent); virtual void Draw_Caption(CDC* pDC, const CRect& rcTextRect, CXTPCalendarMonthViewEvent* pViewEvent); protected: } ; /** @cond */ friend class CTOMonthViewEvent_SingleDay; /** @endcond */ // ---- MonthViewEvent_MultiDay ---- DECLARE_THEMEPART2(CTOMonthViewEvent_MultiDay, CTOMonthViewEvent, CXTPCalendarTheme::CTOMonthViewEvent_MultiDay) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); } ; /** @cond */ friend class CTOMonthViewEvent_MultiDay; /** @endcond */ // ===== MonthViewDayHeader ==== DECLARE_THEMEPART2(CTOMonthViewDayHeader, CTOHeader, CXTPCalendarTheme::CTOMonthViewDayHeader) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); } ; /** @cond */ friend class CTOMonthViewDayHeader; /** @endcond */ // ======= MonthViewDay ======= DECLARE_THEMEPART2(CTOMonthViewDay, CTODay, CXTPCalendarTheme::CTOMonthViewDay) CXTPPaintManagerColor m_clrBorder; CXTPPaintManagerColor m_clrTodayBorder; CXTPPaintManagerColor m_clrBackgroundLight; CXTPPaintManagerColor m_clrBackgroundDark; CXTPPaintManagerColor m_clrBackgroundSelected; virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); DECLARE_THEMEPART_MEMBER(0, CTOMonthViewDayHeader, Header); DECLARE_THEMEPART_MEMBER(1, CTOMonthViewEvent_MultiDay, MultiDayEvent); DECLARE_THEMEPART_MEMBER(2, CTOMonthViewEvent_SingleDay, SingleDayEvent); public: virtual void OnMouseMove(CCmdTarget* pObject, UINT nFlags, CPoint point); virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point); void SetDynColors(CXTPCalendarMonthViewDay* pMViewDay); protected: COLORREF m_clrDynHatch; int m_nDynBusyStatus; BOOL m_fHatchBackground; } ; /** @cond */ friend class CTOMonthViewDay; /** @endcond */ // ======= MonthViewWeekDayHeader ======= DECLARE_THEMEPART2(CTOMonthViewWeekDayHeader, CTOHeader, CXTPCalendarTheme::CTOMonthViewWeekDayHeader) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect); virtual void Draw(CCmdTarget* pObject, CDC* pDC); protected: virtual void Draw_Borders2(CDC* pDC, const CRect& rcRect, BOOL bDrawRightBorder); protected: BOOL m_bWeekDayNamesLong; BOOL m_bWeekDayNameSaSuLong; CStringArray m_arWeekDayNamesLong; /**< 0 - Sunday, 1 - Monday, ...; 7 - Sat/Sun*/ CStringArray m_arWeekDayNamesShort; /**< 0 - Sunday, 1 - Monday, ...; 7 - Sat/Sun*/ public: CTOMonthViewWeekDayHeader() { m_bWeekDayNamesLong = FALSE; m_bWeekDayNameSaSuLong = FALSE; } } ; /** @cond */ friend class CTOMonthViewWeekDayHeader; /** @endcond */ // ======= MonthViewWeekHeader ======= DECLARE_THEMEPART(CTOMonthViewWeekHeader, CTOHeader) CXTPPaintManagerColor m_clrFreeSpaceBk; // CTOHeader::m_TextCenter.fcsetNormal is used to draw header caption; virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point); virtual int CalcWidth(CDC* pDC); CTOMonthViewWeekHeader() { m_rcHeader.SetRect(0, 0, 0, 0); m_bDateFormatShort = TRUE; } protected: CRect m_rcHeader; BOOL m_bDateFormatShort; void GetWeekHeaderRect(CXTPCalendarThemeOffice2007* pThemeX, CXTPCalendarMonthViewDay* pViewDay, CRect& rcWHeader); void SwitchCalendarActiveViewToWeekView(CXTPCalendarControl* pCalendar); virtual void FormatWeekCaption(COleDateTime dtWDay1, CString& rstrShort, CString& rstrLong, int nShort1Long2 = 0); virtual CString _FormatWCaption(LPCTSTR pcszDay1, LPCTSTR pcszMonth1, LPCTSTR pcszDay7, LPCTSTR pcszMonth7, LPCTSTR pcszDayMonthSeparator, int nDateOrdering); virtual void Draw_TextCenter(CDC* pDC, const CRect& rcRect, int nState, LPCTSTR pcszCenterText, int* pnWidth = NULL); } ; /** @cond */ friend class CTOMonthViewWeekHeader; /** @endcond */ // ******* MonthView theme part object ******* DECLARE_THEMEPART(CTOMonthView, CXTPCalendarTheme::CTOMonthView) // TODO: // BOOL m_bShowWeekNumbers; // // virtual void DoPropExchange(CXTPPropExchange* pPX); // virtual void Serialize(CArchive& ar); virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CDC* pDC, const CRect& rcRect, BOOL bCallPostAdjustLayout); virtual void Draw(CDC* pDC); virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point); using TBase::Draw; DECLARE_THEMEPART_MEMBER(0, CTOHeader, Header); DECLARE_THEMEPART_MEMBER(1, CTOMonthViewEvent, Event); DECLARE_THEMEPART_MEMBER(2, CTOMonthViewWeekDayHeader, WeekDayHeader); DECLARE_THEMEPART_MEMBER_(3, CTOMonthViewWeekHeader, WeekHeader, CTOHeader); DECLARE_THEMEPART_MEMBER(4, CTOMonthViewDay, Day); } ; /** @cond */ friend class CTOMonthView; /** @endcond */ ///////////////////////////////////////////////////////////////////////// // ******** WeekView ********* // ======= WeekViewEvent ======= DECLARE_THEMEPART2(CTOWeekViewEvent, CTOEvent, CXTPCalendarTheme::CTOWeekViewEvent) DECLARE_THEMEPART_MEMBER(0, CTOEventIconsToDraw, EventIconsToDraw) DECLARE_THEMEPART_MEMBER(1, CTOFormula_MulDivC, HeightFormula) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber); } ; /** @cond */ friend class CTOWeekViewEvent; /** @endcond */ // ==== WeekViewEvent_SingleDay ==== DECLARE_THEMEPART2(CTOWeekViewEvent_SingleDay, CTOWeekViewEvent, CXTPCalendarTheme::CTOWeekViewEvent_SingleDay) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); protected: virtual void Draw_Background(CDC* pDC, const CRect& rcEventRect, CXTPCalendarWeekViewEvent* pViewEvent); virtual CSize Draw_Time(CDC* pDC, const CRect& rcEventRect, CXTPCalendarWeekViewEvent* pViewEvent); virtual void Draw_Caption(CDC* pDC, const CRect& rcTextRect, CXTPCalendarWeekViewEvent* pViewEvent); } ; /** @cond */ friend class CTOWeekViewEvent_SingleDay; /** @endcond */ // ==== WeekViewEvent_MultiDay ==== DECLARE_THEMEPART2(CTOWeekViewEvent_MultiDay, CTOWeekViewEvent, CXTPCalendarTheme::CTOWeekViewEvent_MultiDay) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void GetMultidayTimeFontAndColor(CFont*& pFont, COLORREF& clrColor, BOOL bSelected); } ; /** @cond */ friend class CTOWeekViewEvent_MultiDay; /** @endcond */ // ==== WeekViewDayHeader ==== DECLARE_THEMEPART2(CTOWeekViewDayHeader, CTOHeader, CXTPCalendarTheme::CTOWeekViewDayHeader) CXTPCalendarThemeStringValue m_strHeaderFormat; CXTPCalendarThemeBOOLValue m_UseOffice2003HeaderFormat; virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect); virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); } ; /** @cond */ friend class CTOWeekViewDayHeader; /** @endcond */ // ======= WeekViewDay ======= DECLARE_THEMEPART2(CTOWeekViewDay, CTODay, CXTPCalendarTheme::CTOWeekViewDay) CXTPPaintManagerColor m_clrBorder; CXTPPaintManagerColor m_clrTodayBorder; CXTPPaintManagerColor m_clrBackgroundLight; CXTPPaintManagerColor m_clrBackgroundDark; CXTPPaintManagerColor m_clrBackgroundSelected; virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void Draw(CCmdTarget* pObject, CDC* pDC); virtual void DoPropExchange(CXTPPropExchange* pPX); virtual void Serialize(CArchive& ar); virtual void OnMouseMove(CCmdTarget* pObject, UINT nFlags, CPoint point); virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point); DECLARE_THEMEPART_MEMBER(0, CTOWeekViewDayHeader, Header); DECLARE_THEMEPART_MEMBER(1, CTOWeekViewEvent_MultiDay, MultiDayEvent); DECLARE_THEMEPART_MEMBER(2, CTOWeekViewEvent_SingleDay, SingleDayEvent); virtual void SetDynColors(CXTPCalendarWeekViewDay* pWViewDay); protected: COLORREF m_clrDynHatch; int m_nDynBusyStatus; } ; /** @cond */ friend class CTOWeekViewDay; /** @endcond */ // ==== WeekView theme part object ==== DECLARE_THEMEPART(CTOWeekView, CXTPCalendarTheme::CTOWeekView) virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE); virtual void AdjustLayout(CDC* pDC, const CRect& rcRect, BOOL bCallPostAdjustLayout); virtual void Draw(CCmdTarget* pObject, CDC* pDC); using TBase::Draw; DECLARE_THEMEPART_MEMBER(0, CTOWeekViewEvent, Event); DECLARE_THEMEPART_MEMBER(1, CTOWeekViewDay, Day); } ; DECLARE_THEMEPART(CTOCellDynBackground, CXTPCalendarThemePart) virtual int GetCellDynBackground(CXTPCalendarViewGroup* pVioewGroup, COleDateTime dtCellTime, int nCellIndex, XTP_BUSY_STATUS_CONTEXT& rContext); virtual CXTPCalendarViewEvent* GetCellBackgroundEvent(CXTPCalendarViewGroup* pVioewGroup, COleDateTime dtCellTime, int nCellIndex); BOOL DrawMonthViewHatchBackground(); CXTPCalendarEvent* GetBkTentativeEvent(); protected: virtual int CmpEventBusyStatus(CXTPCalendarEvent* pEvent1, CXTPCalendarEvent* pEvent2); virtual int _GetEventBusyStatusRank(CXTPCalendarEvent* pEvent); protected: void CheckIsBackgroundHatchNeeded(); protected: BOOL m_fDrawMonthViewBackgroundHatch; CXTPCalendarViewEvent* m_pBkViewEvent; CXTPCalendarEvent* m_pBkTentativeEvent; } ; //======================================================================= DECLARE_THEMEPART_MEMBER(0, CTOColorsSet, ColorsSet) virtual BOOL IsBaseColorOrig(); virtual COLORREF GetColor(int eCLR, COLORREF clrBase = (COLORREF)-1); virtual COLORREF GetColor2(LPCTSTR pcszColorName, COLORREF clrDefault); virtual CXTPResourceImage* GetBitmap(LPCTSTR pcszStdBmpName); DECLARE_THEMEPART_MEMBER(1, CTOHeader, Header) DECLARE_THEMEPART_MEMBER(2, CTOEvent, Event) DECLARE_THEMEPART_MEMBER(3, CTODayView, DayView) DECLARE_THEMEPART_MEMBER(4, CTOMonthView, MonthView) DECLARE_THEMEPART_MEMBER(5, CTOWeekView, WeekView) // office 2007 theme specific parts DECLARE_THEMEPART_MEMBER_(6, CTOCellDynBackground, CellDynBackground, CTOCellDynBackground) DECLARE_THEMEPART_MEMBER_(7, CTOPrevNextEventButtons, PrevNextEventButtons, CXTPCalendarThemePart) //======================================================================= CXTPCalendarThemeOffice2007(); virtual ~CXTPCalendarThemeOffice2007(); // If enough space on the rect - draw 3 strings one under other // as multi-line text. // If rect height allow draw only 1 line - string 1 an 2 are drawn // as single line with a separator. // Separate font settings are used to draw each text. virtual CSize DrawText_Auto2SL3ML(CDC* pDC, LPCTSTR pcszText1, LPCTSTR pcszText2, LPCTSTR pcszText3, CThemeFontColorSet* pFontColor1, CThemeFontColorSet* pFontColor2, CThemeFontColorSet* pFontColor3, CRect& rcRect, LPCTSTR pcszText1Separator, UINT uWordBreakMode = DT_WORDBREAK); // Common colors id's: {0 - 99} // DayViev colors id's: {100 - 499} // MonthViev colors id's: {500 - 999} // WeekViev colors id's: {1000 - 1499} // // For darken colors: id + 5000 enum XTPEnumThemeColorsSet { xtpCLR_DarkenOffset = 5000, xtpCLR_SelectedBk = 1 + xtpCLR_DarkenOffset, xtpCLR_HeaderBorder = 2, xtpCLR_DayBorder = 3, xtpCLR_MultiDayEventBorder = 10, xtpCLR_MultiDayEventSelectedBorder = 11 + xtpCLR_DarkenOffset, xtpCLR_MultiDayEventBkGRfrom = 12, xtpCLR_MultiDayEventBkGRto = 13, xtpCLR_MultiDayEventFromToDates = 20, // xtpCLR_DayView_ = 100, xtpCLR_DayViewCellWorkBk = 101, xtpCLR_DayViewCellNonWorkBk = 102, xtpCLR_DayViewCellWorkBorderBottomInHour = 103, xtpCLR_DayViewCellWorkBorderBottomHour = 104, xtpCLR_DayViewCellNonWorkBorderBottomInHour = 105, xtpCLR_DayViewCellNonWorkBorderBottomHour = 106, xtpCLR_DayViewAllDayEventsBk = 110, xtpCLR_DayViewAllDayEventsBorderBottom = 111, xtpCLR_DayViewSingleDayEventBorder = 120, xtpCLR_DayViewSingleDayEventSelectedBorder = 121 + xtpCLR_DarkenOffset, xtpCLR_DayViewSingleDayEventBkGRfrom = 122, xtpCLR_DayViewSingleDayEventBkGRto = 123, // xtpCLR_MonthView_ = 500, xtpCLR_MonthViewDayBkLight = 501, xtpCLR_MonthViewDayBkDark = 502, xtpCLR_MonthViewDayBkSelected = 503, xtpCLR_MonthViewEventTime = 510 + xtpCLR_DarkenOffset, xtpCLR_MonthViewSingleDayEventBorder = 520, xtpCLR_MonthViewSingleDayEventSelectedBorder = 521 + xtpCLR_DarkenOffset, xtpCLR_MonthViewSingleDayEventBkGRfrom = 522, xtpCLR_MonthViewSingleDayEventBkGRto = 523, // xtpCLR_WeekView_ = 1000, xtpCLR_WeekViewDayBkLight = 1001, xtpCLR_WeekViewDayBkDark = 1002, xtpCLR_WeekViewDayBkSelected = 1003, xtpCLR_WeekViewEventTime = 1010 + xtpCLR_DarkenOffset, xtpCLR_WeekViewSingleDayEventBorder = 1020, xtpCLR_WeekViewSingleDayEventSelectedBorder = 1021 + xtpCLR_DarkenOffset, xtpCLR_WeekViewSingleDayEventBkGRfrom = 1022, xtpCLR_WeekViewSingleDayEventBkGRto = 1023, }; public: virtual CXTPCalendarViewEventSubjectEditor* StartEditSubject(CXTPCalendarViewEvent* pViewEvent); static int AFX_CDECL DrawClock(CDC* pDC, COleDateTime dtClockTime, CRect rcView, COLORREF clrBackground, XTPCalendarClockAlignFlags cafAlign); /** * @brief * Thin method determine event view type (day, week, month) and * return corresponding drawing part. * @param pViewEvent A pointer to the CXTPCalendarViewEvent event view. * @return Theme drawing part for editing event. */ virtual CTOEvent* GetThemePartForEvent(CXTPCalendarViewEvent* pViewEvent); virtual void GetItemTextIfNeed(int nItem, CString* pstrText, CXTPCalendarViewDay* pViewDay); static const int cnGripperSize; static const int cnShadowWidth; BOOL m_bFlatStyle; static COLORREF AFX_CDECL PowerColor(COLORREF clrB, double dFactor, double dPower); void DrawEventRect(CDC* pDC, const CRect& rcRect, COLORREF clrBorder, BOOL bBoldBorder, CXTPPaintManagerColorGradient& grclrBk); protected: virtual void SetCalendarControl(CXTPCalendarControl* pCalendar); virtual void RefreshMetrics(BOOL bRefreshChildren); virtual void RefreshMetrics(); virtual void _DrawEventLTHighlight(CDC* pDC, CPoint ptLT, int nRTx, const CXTPPaintManagerColorGradient& grclrBk, int nLTCorner = 0, int nLBy = INT_MAX, BOOL bRCorner = TRUE); protected: CXTPNotifySink* m_pSink; virtual void OnEvent_ResourceImagesChanged(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam); protected: # ifdef _XTP_ACTIVEX DECLARE_DISPATCH_MAP() DECLARE_INTERFACE_MAP() DECLARE_OLETYPELIB_EX(CXTPCalendarThemeOffice2007) DECLARE_OLECREATE_EX(CXTPCalendarThemeOffice2007) LPDISPATCH OleGet_Header(); LPDISPATCH OleGet_Event(); LPDISPATCH OleGet_DayView(); LPDISPATCH OleGet_MonthView(); LPDISPATCH OleGet_WeekView(); LPDISPATCH OleGet_PrevNextEventButtons(); CXTPSmartPtrInternalT m_ptrAxHeader; CXTPSmartPtrInternalT m_ptrAxEvent; CXTPSmartPtrInternalT m_ptrAxDayView; CXTPSmartPtrInternalT m_ptrAxMonthView; CXTPSmartPtrInternalT m_ptrAxWeekView; CXTPSmartPtrInternalT m_ptrAxPrevNextEventButtons; # endif } ; ///////////////////////////////////////////////////////////////////////////// # if (_MSC_VER > 1100) # pragma warning(pop) # endif # include "Common/Base/Diagnostic/XTPEnableNoisyWarnings.h" #endif // !defined(_XTP_CALENDAR_THEME_OFFICE_2007_H__)