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.

890 lines
32 KiB
C

2 years ago
// XTPCalendarThemeOffice2007.h: interface for the CXTPCalendarControlPaintManager 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
//
/////////////////////////////////////////////////////////////////////////////
//{{AFX_CODEJOCK_PRIVATE
#if !defined(_XTP_CALENDAR_THEME_OFFICE_2007_H__)
#define _XTP_CALENDAR_THEME_OFFICE_2007_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#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.
//{{AFX_CODEJOCK_PRIVATE
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) {ASSERT(FALSE);};
protected:
};
friend class CTOHeader;
//=======================================================================
DECLARE_THEMEPART(CTOEvent, CXTPCalendarTheme::CTOEvent)
struct 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();
};
friend class CTOEvent;
DECLARE_THEMEPART(CTODay, CXTPCalendarTheme::CTODay)
virtual int HitTestExpandDayButton(const CXTPCalendarViewDay* pViewDay, const CPoint* pPoint = NULL); // return 0 or xtpCalendarHitTestDayExpandButton
};
DECLARE_THEMEPART(CTOPrevNextEventButton, CXTPCalendarThemePart)
CXTPCalendarThemeIntValue m_nBitmapID;
CXTPCalendarThemeRectValue m_rcBitmapBorder;
CThemeFontColorSetValue m_fcsetText;
CXTPPaintManagerColor m_clrDisabledText;
CXTPCalendarThemeStringValue m_strText;
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void DoPropExchange(CXTPPropExchange* pPX){};
virtual void Serialize(CArchive& ar){};
virtual void AdjustLayout(CXTPCalendarView* pObject, CDC* pDC, const CRect& rcRect);
virtual void Draw(CXTPCalendarView* pObject, CDC* pDC);
virtual int HitTest(const CPoint* pPoint = NULL) const; // return 0, xtpCalendarHitTestPrevEventButton or xtpCalendarHitTestNextEventButton
virtual void OnMouseMove(CCmdTarget* pObject, UINT nFlags, CPoint point);
virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point);
virtual CRect GetRect();
//------------------------------
CTOPrevNextEventButton()
{
m_bPrev = TRUE;
m_rcRect.SetRect(0,0,0,0);
m_bHot = FALSE;
m_bDisabled = FALSE;
m_bVisible = TRUE;
}
protected:
CSize GetSize(const CRect* prcRect = NULL);
BOOL m_bPrev;
CRect m_rcRect;
public:
BOOL m_bHot;
BOOL m_bDisabled;
BOOL m_bVisible;
};
friend class CTOPrevNextEventButton;
DECLARE_THEMEPART(CTOPrevNextEventButtons, CXTPCalendarThemePart)
CTOPrevNextEventButtons();
virtual ~CTOPrevNextEventButtons();
DECLARE_THEMEPART_MEMBER_(0, CTOPrevNextEventButton, PrevEventButton, CXTPCalendarThemePart)
DECLARE_THEMEPART_MEMBER_(1, CTOPrevNextEventButton, NextEventButton, CXTPCalendarThemePart)
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void AdjustLayout(CXTPCalendarView* pObject, CDC* pDC, const CRect& rcRect);
virtual void Draw(CXTPCalendarView* pObject, CDC* pDC);
virtual int HitTest(const CPoint* pPoint = NULL) const; // return 0, xtpCalendarHitTestPrevEventButton or xtpCalendarHitTestNextEventButton
virtual BOOL IsPrevNextButtonsVisible();
virtual BOOL _IsSomeEventVisible();
COleDateTime GetVisibleDay(BOOL bFirst);
virtual BOOL GetPrevEventDay(COleDateTime* pdtDay = NULL);
virtual BOOL GetNextEventDay(COleDateTime* pdtDay = NULL);
virtual void OnStatusChanged();
virtual void OnMouseMove(CCmdTarget* pObject, UINT nFlags, CPoint point);
virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point);
// Settings
CXTPCalendarThemeBOOLValue m_bHide;
CXTPCalendarThemeIntValue m_nIdleStepTime_ms;
CXTPCalendarThemeIntValue m_nRefreshDaysPerIdleStep;
CXTPCalendarThemeBOOLValue m_bUseActiveViewResources;
virtual void SetCacheSize(int nDays);
protected:
CXTPCalendarResources* _GetActiveResources();
void _RequestToFindEvents();
void _StopRequests();
BOOL _RefreshDay(long ndtDay, BOOL& rbRefreshed, BOOL bRefreshPermanently);
//void _ResetData();
virtual BOOL OnTimer(UINT_PTR uTimerID);
virtual void OnDetachCalendar();
UINT_PTR m_nRefreshTimerID;
long m_ndtRefreshDatePrev;
long m_ndtRefreshDateNext;
BOOL m_bScanPrev;
BOOL m_bScanNext;
long m_ndtMinScanDay;
long m_ndtMaxScanDay;
CRect m_rcRect;
class CDaysMap : protected CArray<char, char>
{
protected:
long m_nDaysOffset;
int m_nCacheSizeMax_days;
public:
CDaysMap();
long GetMinDay();
long GetMaxDay();
int GetDayState(long nDay);
void SetDayState(long nDay, int nState); // states: (0)-unknown, (-1)-has no-events, (1)-has events.
void SetDaysStateSafe(long nDayStart, long nDayEnd, int nState); // states: (0)-unknown, (-1)-has no-events, (1)-has events.
void AdjustMiddleDay(long nDay);
void SetDataSize(int nDays);
int GetDataSize();
protected:
void _GrowArrayIfNeed(long nDay);
};
CDaysMap m_mapDaysState;
protected:
CXTPNotifySink* m_pSink;
virtual void OnEvent_Calendar(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam);
};
friend class CTOPrevNextEventButtons;
/////////////////////////////////////////////////////////////////////////
// ******** 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:
static const int nCategoryIconWidth;
static const int nCategoryIconOffset;
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);
};
friend class CTODayViewEvent_MultiDay;
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);
};
friend class CTODayViewEvent_SingleDay;
//=======================================================================
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);
};
//=======================================================================
DECLARE_THEMEPART(CTODayViewDayGroup, CXTPCalendarTheme::CTODayViewDayGroup)
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void Draw(CCmdTarget* pObject, CDC* pDC);
virtual BOOL IsSelected(CXTPCalendarViewGroup* pViewGroup);
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)
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);
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);
};
friend class CTOMonthViewEvent;
// ---- 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:
};
friend class CTOMonthViewEvent_SingleDay;
// ---- MonthViewEvent_MultiDay ----
DECLARE_THEMEPART2(CTOMonthViewEvent_MultiDay, CTOMonthViewEvent, CXTPCalendarTheme::CTOMonthViewEvent_MultiDay)
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOMonthViewEvent_MultiDay;
// ===== MonthViewDayHeader ====
DECLARE_THEMEPART2(CTOMonthViewDayHeader, CTOHeader, CXTPCalendarTheme::CTOMonthViewDayHeader)
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOMonthViewDayHeader;
// ======= 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;
};
friend class CTOMonthViewDay;
// ======= 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;
}
};
friend class CTOMonthViewWeekDayHeader;
// ======= 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);
};
friend class CTOMonthViewWeekHeader;
// ******* 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);
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);
};
friend class CTOMonthView;
/////////////////////////////////////////////////////////////////////////
// ******** 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);
};
friend class CTOWeekViewEvent;
// ==== 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);
};
friend class CTOWeekViewEvent_SingleDay;
// ==== 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);
};
friend class CTOWeekViewEvent_MultiDay;
// ==== 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);
};
friend class CTOWeekViewDayHeader;
// ======= 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;
};
friend class CTOWeekViewDay;
// ==== 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);
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 DrawClock(CDC* pDC, COleDateTime dtClockTime, CRect rcView, COLORREF clrBackground, XTPCalendarClockAlignFlags cafAlign);
//-----------------------------------------------------------------------
// Summary:
// Thin method determine event view type (day, week, month) and
// return corresponding drawing part.
// Returns:
// 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 = TRUE);
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:
};
//}}AFX_CODEJOCK_PRIVATE
/////////////////////////////////////////////////////////////////////////////
#if (_MSC_VER > 1100)
#pragma warning(pop)
#endif
#endif // !defined(_XTP_CALENDAR_THEME_OFFICE_2007_H__)