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.

1339 lines
46 KiB
C

2 years ago
// XTPCalendarTheme.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_H__)
#define _XTP_CALENDAR_THEME_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 : 4100)// TODO: remove when themes will be finished
/////////////////////////////////////////////////////////////////////////////
class CXTPCalendarControl;
class CXTPCalendarViewDay;
class CXTPCalendarDayView;
class CXTPCalendarDayViewDay;
class CXTPCalendarDayViewGroup;
class CXTPCalendarMonthView;
class CXTPCalendarWeekView;
class CXTPCalendarDayViewEvent;
class CXTPCalendarMonthViewEvent;
class CXTPCalendarWeekViewEvent;
class CXTPCalendarViewEvent;
class XTPCalendarTimeLineView;
class CXTPCalendarDayViewTimeScale;
class CXTPCalendarTimeLineViewTimeScale;
class CXTPImageManager;
class CXTPResourceImage;
class CXTPResourceImages;
class CXTPResourceImageList;
class CXTPCalendarWeekViewDay;
class CXTPCalendarEvent;
class CXTPCalendarViewGroup;
class CXTPCalendarTheme;
class CXTPCalendarViewEventSubjectEditor;
class CXTPPropExchange;
class CXTPCalendarFlagsSet_imp;
struct XTP_CALENDAR_THEME_DAYVIEWTIMESCALECELL_PARAMS;
struct XTP_CALENDAR_THEME_DAYVIEWCELL_PARAMS;
struct XTP_LC_TIMEFORMAT;
/////////////////////////////////////////////////////////////////////////////
//{{AFX_CODEJOCK_PRIVATE
//===========================================================================
// In VS 7.1 the call TBase::memberFunc sometimes crash.
// The Service Pack 1 for VS 7.1 fix this compiler bug.
// XTP_SAFE_CALL_BASE macro helps to avoid this problem in any VS version.
//===========================================================================
#if (_MSC_VER == 1310)
#define XTP_SAFE_CALL_BASE(_TBase, memberFunc) ((_TBase*)this)->_TBase::memberFunc
#else
#define XTP_SAFE_CALL_BASE(_TBase, memberFunc) _TBase::memberFunc
#endif
#define DECLARE_THEMEPART_MEMBER_BASE
#undef DECLARE_THEMEPART_MEMBER_BASE
#define DECLARE_THEMEPART_MEMBER_BASE(cClassBase, memberName) \
public: \
virtual cClassBase* Get##memberName##Part() const { \
ASSERT(FALSE); \
return NULL; \
}
#define DECLARE_THEMEPART_MEMBER_BASE2
#undef DECLARE_THEMEPART_MEMBER_BASE2
#define DECLARE_THEMEPART_MEMBER_BASE2(cClassBase, memberName) \
public: \
virtual cClassBase* Get##memberName##Part() const { \
return NULL; \
}
//=============================================================
#define DECLARE_THEMEPART
#undef DECLARE_THEMEPART
#define DECLARE_THEMEPART_CUSTOM
#undef DECLARE_THEMEPART_CUSTOM
#define DECLARE_THEMEPART2
#undef DECLARE_THEMEPART2
#if (_MSC_VER <= 1200) // Using Visual C++ 5.0, 6.0
#define DECLARE_THEMEPART(cClass, cClassBase) \
class _XTP_EXT_CLASS cClass##_Base : virtual public cClassBase {}; /* To access base class members (in VC 6 compiler) */ \
class _XTP_EXT_CLASS cClass : virtual public cClass##_Base \
{public: \
typedef cClass##_Base TBase; \
public: \
#define DECLARE_THEMEPART_CUSTOM(cClass, cClassBase) \
class cClass##_Base : virtual public cClassBase {}; /* To access base class members (in VC 6 compiler) */ \
class cClass : virtual public cClass##_Base \
{public: \
typedef cClass##_Base TBase; \
public:
#define DECLARE_THEMEPART2(cClass, cClassBase, cClassBase2) \
class _XTP_EXT_CLASS cClass##_Base : virtual public cClassBase {}; /* To access base class members (in VC 6 compiler) */ \
class _XTP_EXT_CLASS cClass##_Base2 : virtual public cClassBase2 {}; /* To access base class members (in VC 6 compiler) */ \
class _XTP_EXT_CLASS cClass : virtual public cClass##_Base, virtual public cClass##_Base2 \
{public: \
typedef cClass##_Base TBase; \
typedef cClass##_Base2 TBase2; \
public:
#else
#define DECLARE_THEMEPART(cClass, cClassBase) \
class _XTP_EXT_CLASS cClass : virtual public cClassBase \
{ public: \
typedef cClassBase TBase; \
public: \
#define DECLARE_THEMEPART_CUSTOM(cClass, cClassBase) \
class cClass : virtual public cClassBase \
{public: \
typedef cClassBase TBase; \
public:
#define DECLARE_THEMEPART2(cClass, cClassBase, cClassBase2) \
class _XTP_EXT_CLASS cClass : virtual public cClassBase, virtual public cClassBase2 \
{public: \
typedef cClassBase TBase; \
typedef cClassBase2 TBase2; \
public:
#endif
//=============================================================
// TODO: custom via defines...
#define DECLARE_THEMEPART2_CUSTOM
#undef DECLARE_THEMEPART2_CUSTOM
#define DECLARE_THEMEPART2_CUSTOM(cClass, cClassBase, cClassBase2) \
class cClass##_Base : virtual public cClassBase {}; /* To access base class members (in VC 6 compiler) */ \
class cClass##_Base2 : virtual public cClassBase2 {}; /* To access base class members (in VC 6 compiler) */ \
class cClass : virtual public cClass##_Base, virtual public cClass##_Base2 \
{public: \
typedef cClass##_Base TBase; \
typedef cClass##_Base2 TBase2; \
public:
//=============================================================
#define DECLARE_THEMEPART_MEMBER_
#undef DECLARE_THEMEPART_MEMBER_
#define DECLARE_THEMEPART_MEMBER_(nIndex, cClass, memberName, cClassBase) \
protected: \
virtual CXTPCalendarThemePart* CreateMember##nIndex(){ \
ASSERT(TBase::CreateMember##nIndex() == NULL); \
m_p##memberName = new cClass(); \
if (m_p##memberName) \
m_p##memberName->SetInstanceName(_T(#memberName)); \
return m_p##memberName; \
} \
public: \
cClass* m_p##memberName; \
public: \
virtual cClassBase* Get##memberName##Part() const { \
return m_p##memberName; \
} \
virtual cClass* Get##memberName##PartX() const { \
return m_p##memberName; \
} \
virtual void Set##memberName##Part(cClass* pPart) { \
if (pPart) \
{ \
if (!pPart->IsCreated()) \
pPart->Create(GetTheme(), this); \
pPart->SetInstanceName(_T(#memberName)); \
} \
m_p##memberName = pPart; \
m_arMembers.SetAt(nIndex, pPart); \
}
//=============================================================
#define DECLARE_THEMEPART_MEMBER
#undef DECLARE_THEMEPART_MEMBER
#define DECLARE_THEMEPART_MEMBER(nIndex, cClass, memberName) \
DECLARE_THEMEPART_MEMBER_(nIndex, cClass, memberName, CXTPCalendarTheme::##cClass)
// }}AFX_CODEJOCK_PRIVATE
// {{AFX_CODEJOCK_PRIVATE
/////////////////////////////////////////////////////////////////////////////
//=============================================================================
class _XTP_EXT_CLASS CXTPCalendarThemePart : public CXTPCmdTarget
{
DECLARE_DYNAMIC(CXTPCalendarThemePart)
public:
CXTPCalendarThemePart();
virtual ~CXTPCalendarThemePart();
virtual CXTPCalendarThemePart* GetOwner();
virtual CXTPCalendarTheme* GetTheme() const;
CXTPCalendarControl* GetCalendarControl() const;
virtual LPCTSTR GetInstanceName();
virtual void SetInstanceName(LPCTSTR pcszInstanceName);
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
//****************
virtual void Draw(CCmdTarget* pObject, CDC* pDC){};
public:
virtual UINT_PTR SetTimer(UINT uTimeOut_ms);
virtual void KillTimer(UINT_PTR uTimerID);
// messages handlers
virtual void OnMouseMove(CCmdTarget* pObject, UINT nFlags, CPoint point){};
virtual BOOL OnLButtonDown(CCmdTarget* pObject, UINT nFlags, CPoint point){return FALSE;};
virtual BOOL OnTimer(UINT_PTR uTimerID);
virtual void OnDetachCalendar();
protected:
CXTPCalendarTheme* m_pTheme;
CXTPCalendarThemePart* m_pOwner;
CString m_strInstanceName;
protected:
typedef CXTPCalendarPtrCollectionT<CXTPCalendarThemePart> CThemePartsArray;
CThemePartsArray m_arMembers;
public:
virtual BOOL IsCreated();
virtual void Create(CXTPCalendarTheme* pTheme, CXTPCalendarThemePart* pOwner);
protected:
virtual void _CreateMembers();
virtual CXTPCalendarThemePart* CreateMember0(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember1(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember2(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember3(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember4(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember5(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember6(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember7(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember8(){return NULL;};
virtual CXTPCalendarThemePart* CreateMember9(){return NULL;};
protected:
class _XTP_EXT_CLASS CXTPPropsState
{
public:
CXTPPropsState();
virtual ~CXTPPropsState();
void SaveState();
void RestoreState(BOOL bClearData);
void ClearLastState();
void ClearAll();
#ifdef _DEBUG
static int s_dbg_nActiveStates;
#endif
protected:
CXTPCalendarTypedPtrAutoDeleteArray<CPtrArray, CMemFile*> m_arStates;
static BOOL s_bUseSerialize;
};
friend class CXTPPropsState;
//---------------------------------------------
class _XTP_EXT_CLASS CXTPPropsStateContext
{
CXTPCalendarThemePart* m_pPart;
int m_eBeroreDrawFlag;
//BOOL m_bAttached;
public:
CXTPPropsStateContext(CXTPCalendarThemePart* pPart = NULL, int eBDFlag = 0, BOOL bClearAll = FALSE);
virtual ~CXTPPropsStateContext();
BOOL IsActive()
{
return !!m_pPart;
}
void SetData(CXTPCalendarThemePart* pPart, int eBDFlag = 0, BOOL bClearAll = FALSE);
void Clear();
//void Attach(CXTPCalendarThemePart* pPart, int eBDFlag = 0);
void RestoreState();
void SendBeforeDrawThemeObject(LPARAM lParam, int eBDFlag = 0);
};
friend class CXTPPropsStateContext;
virtual void SendNotificationAlways(XTP_NOTIFY_CODE EventCode, WPARAM wParam , LPARAM lParam);
CXTPPropsState m_xPropsState;
BOOL m_bSendBeforeDrawThemeObjectEnabled;
};
/////////////////////////////////////////////////////////////////////////////
// Initial version. Will be expanded in the future.
class _XTP_EXT_CLASS CXTPCalendarTheme: public CXTPCalendarThemePart
{
friend class CXTPCalendarControl;
DECLARE_DYNAMIC(CXTPCalendarTheme)
typedef CXTPCalendarThemePart TBase;
protected:
CXTPCalendarControl* m_pCalendar;
CMap<UINT, UINT, UINT, UINT&> m_mapEventIdEventSlotId; //The event id solt id map for allday/multiday events
virtual void SetCalendarControl(CXTPCalendarControl* pCalendar);
virtual void Init();
public:
//-----------------------------------------------------------------------
// Summary:
// This member function returns the event id slot id map.
// Returns:
// A reference to the event id slot id map.
// Remarks:
// This map is used to calculate the empty slots in the all day/multiday events view port
//-----------------------------------------------------------------------
CMap<UINT, UINT, UINT, UINT&> & GetEventSlotMap();
CXTPCalendarTheme();
virtual ~CXTPCalendarTheme();
virtual CXTPCalendarControl* GetCalendarControl() const;
//=======================================================================
class _XTP_EXT_CLASS CThemeFontColorSet
{
public:
virtual CFont* Font() const = 0;
virtual COLORREF Color() const = 0;
};
//=======================================================================
class _XTP_EXT_CLASS CThemeFontColorSetValue : public CThemeFontColorSet
{
public:
CXTPPaintManagerColor clrColor;
CXTPCalendarThemeFontValue fntFont;
void SetStandardValue(const CThemeFontColorSet& fcsetValue)
{
clrColor.SetStandardValue(fcsetValue.Color());
fntFont.SetStandardValue(fcsetValue.Font());
}
void CopySettings(const CThemeFontColorSetValue& refSrc)
{
CXTPCalendarTheme::CopySettings(clrColor, refSrc.clrColor);
fntFont.CopySettings(refSrc.fntFont);
}
//--------------------------------------------
virtual CFont* Font() const
{
return fntFont;
}
virtual COLORREF Color() const
{
return clrColor;
}
virtual void doPX(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CXTPCalendarTheme* pTheme);
virtual void Serialize(CArchive& ar);
};
//=======================================================================
class _XTP_EXT_CLASS CTOFormula_MulDivC : virtual public CXTPCalendarThemePart
{
public:
CTOFormula_MulDivC();
virtual void RefreshFromParent(CTOFormula_MulDivC* pParentSrc);
virtual void SetStandardValue(int nMul, int nDiv, int nC);
virtual int Calculate(int nY) const;
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
//------------------------------------------------------------
CXTPCalendarThemeIntValue m_Multiplier;
CXTPCalendarThemeIntValue m_Divisor;
CXTPCalendarThemeIntValue m_Constant;
};
friend class CTOFormula_MulDivC;
//=======================================================================
class _XTP_EXT_CLASS CTOEventIconsToDraw : virtual public CXTPCalendarThemePart
{
public:
CXTPCalendarThemeBOOLValue m_ShowReminder;
CXTPCalendarThemeBOOLValue m_ShowOccurrence;
CXTPCalendarThemeBOOLValue m_ShowException;
CXTPCalendarThemeBOOLValue m_ShowMeeting;
CXTPCalendarThemeBOOLValue m_ShowPrivate;
virtual void RefreshFromParent(CTOEventIconsToDraw* pParentSrc);
virtual void SetStandardValue(BOOL bRmd, BOOL bOcc, BOOL bExc, BOOL bMee, BOOL bPrv);
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
CTOEventIconsToDraw();
virtual void FillIconIDs(CUIntArray& rarGlyphIDs, CUIntArray& rarGlyphIndex, CXTPCalendarEvent* pEvent);
};
friend class CTOEventIconsToDraw;
//=======================================================================
struct _XTP_EXT_CLASS XTP_BUSY_STATUS_CONTEXT
{
COLORREF clrBkAllDayEvents;
COLORREF clrBkWorkCell;
COLORREF clrBkNonWorkCell;
COLORREF clrCellBorder;
// BOOL IsNull()
// {
// return clrBkAllDayEvents == 0 && clrBkWorkCell == 0 &&
// clrBkNonWorkCell == 0 && clrCellBorder == 0;
// }
};
//=======================================================================
class _XTP_EXT_CLASS CTOHeader : virtual public CXTPCalendarThemePart
{
public:
enum XTPEnumCalendarItemState
{
xtpCalendarItemState_Normal = 0,
xtpCalendarItemState_Selected = 0x001,
xtpCalendarItemState_Today = 0x002,
xtpCalendarItemState_Hot = 0x004,
xtpCalendarItemState_mask = 0x00F,
xtpCalendarItemFirst = 0x010,
xtpCalendarItemLast = 0x020,
};
struct _XTP_EXT_CLASS CHeaderText
{
CThemeFontColorSetValue fcsetNormal;
CThemeFontColorSetValue fcsetSelected;
CThemeFontColorSetValue fcsetToday;
CThemeFontColorSetValue fcsetTodaySelected;
virtual CThemeFontColorSet* GetFontColor(int nItemState);
virtual void CopySettings(const CHeaderText& rSrc);
virtual void doPX(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CXTPCalendarTheme* pTheme);
virtual void Serialize(CArchive& ar);
};
struct _XTP_EXT_CLASS CHeaderBackground
{
CXTPCalendarThemeIntValue nBitmapID;
CXTPCalendarThemeRectValue rcBitmapBorder;
// effects ...
// CXTPCalendarThemeIntValue eDrawOptions;
//
// CXTPCalendarThemeBOOLValue bFillBySelectedColorBeforeDraw;
// CXTPCalendarThemeBOOLValue bFillTextBySelectedColorAfterDraw;
virtual void CopySettings(const CHeaderBackground& rSrc)
{
nBitmapID.CopySettings(rSrc.nBitmapID);
rcBitmapBorder.CopySettings(rSrc.rcBitmapBorder);
}
virtual void doPX(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CXTPCalendarTheme* pTheme);
virtual void Serialize(CArchive& ar);
};
//===========================================
CXTPPaintManagerColor m_clrBaseColor;
CXTPPaintManagerColor m_clrTodayBaseColor;
CHeaderBackground m_bkNormal;
CHeaderBackground m_bkSelected;
CHeaderBackground m_bkToday;
CHeaderBackground m_bkTodaySelected;
CHeaderText m_TextLeftRight;
CHeaderText m_TextCenter;
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void RefreshFromParent(CTOHeader* pParentSrc);
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect){};
virtual int CalcHeight(CDC* pDC, int nCellWidth);
//-------------------------------------------------------------------
virtual BOOL IsToday(CXTPCalendarViewDay* pViewDay);
virtual BOOL IsSelected(CXTPCalendarViewDay* pViewDay);
virtual BOOL IsSelected(CXTPCalendarViewGroup* pViewGroup);
//-------------------------------------------------------------------
virtual void Draw_Header(CDC* pDC, const CRect& rcRect, int nFlags,
LPCTSTR pcszLeftText,
LPCTSTR pcszCenterText = NULL,
LPCTSTR pcszRightText = NULL,
BOOL bMultiCase = FALSE);
virtual void Draw_Background(CDC* pDC, const CRect& rcRect, int nState);
virtual void Draw_TextLR(CDC* pDC, const CRect& rcRect, int nFlags,
LPCTSTR pcszText, UINT uFormat, int* pnWidth = NULL);
virtual void Draw_TextCenter(CDC* pDC, const CRect& rcRect, int nState,
LPCTSTR pcszCenterText, int* pnWidth = NULL);
DECLARE_THEMEPART_MEMBER_BASE(CTOFormula_MulDivC, HeightFormula)
protected:
};
class _XTP_EXT_CLASS CTOEvent : virtual public CXTPCalendarThemePart
{
public:
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber){};
virtual int CalcMinEventHeight(CDC* pDC) {return 19;};
virtual CBrush* GetBusyStatusBrush(int nBusyStatus);
virtual void SetBusyStatusBrush(int nBusyStatus, CBrush* pBrush, BOOL bAutodeleteBrush);
DECLARE_THEMEPART_MEMBER_BASE2(CTOFormula_MulDivC, HeightFormula)
DECLARE_THEMEPART_MEMBER_BASE2(CTOEventIconsToDraw, EventIconsToDraw)
protected:
virtual void InitBusyStatusDefaultColors();
virtual CXTPCalendarViewPartBrushValue* _GetBusyStatusBrushValue(int nBusyStatus, BOOL bCreateIfNotExist);
CXTPCalendarTypedPtrAutoDeleteMap<int, CXTPCalendarViewPartBrushValue*> m_mapBusyStatusBrushes;
CBitmap m_bmpTentativePattern; // Stores standard bitmap pattern to draw Tentative event busy status.
CBrush m_brushTentative; // Stores standard brush to draw Tentative event busy status.
};
class _XTP_EXT_CLASS CTODay : virtual public CXTPCalendarThemePart
{
public:
virtual int GetExpandButtonHeight();
virtual int HitTestExpandDayButton(const CXTPCalendarViewDay* pViewDay, const CPoint* pPoint = NULL); // return 0 or xtpCalendarHitTestDayExpandButton
protected:
virtual int _HitTestExpandDayButton(const CXTPCalendarViewDay* pViewDay, const CRect& rc, const CPoint* pPoint = NULL); // return 0 or xtpCalendarHitTestDayExpandButton
};
/////////////////////////////////////////////////////////////////////////
//
// *** DayView theme parts ***
//
// Parts Hierarchy:
// *Theme CXTPCalendarTheme
// *--Header* CTOHeader
// *--Event* CTOEvent
//
// *--DayView CTODayView
// *----Event* CTODayViewEvent
// *----Header CTOHeader
// *----TimeScale CTODayViewTimeScale
// *----Day CTODayViewDay
// *------Header CTODayViewDayHeader
// *------Group CTODayViewDayGroup
// *--------Header CTODayViewDayGroupHeader
// *--------AllDayEvents CTODayViewDayGroupAllDayEvents
// *--------Cell CTODayViewDayGroupCell
// *--------MultiDayEvent CTODayViewEvent_MultiDay
// *--------SingleDayEvent CTODayViewEvent_SingleDay
//
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// DayView Time Scale
class _XTP_EXT_CLASS CTODayViewTimeScale : virtual public CXTPCalendarThemePart
{
public:
CXTPPaintManagerColor m_clrBackground;
CXTPPaintManagerColor m_clrLine;
CThemeFontColorSetValue m_fcsetCaption;
CThemeFontColorSetValue m_fcsetAMPM;
CThemeFontColorSetValue m_fcsetSmall;
CThemeFontColorSetValue m_fcsetBigBase;
CXTPPaintManagerColorGradient m_grclrNowLineBk;
CXTPPaintManagerColor m_clrNowLine;
CXTPCalendarThemeBOOLValue m_ShowMinutes;
DECLARE_THEMEPART_MEMBER_BASE(CTOFormula_MulDivC, HeightFormula)
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
virtual void Draw(CCmdTarget* pObject, CDC* pDC);
virtual int CalcMinRowHeight(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale);
virtual int CalcWidth(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale, int nRowHeight);
virtual int CalcWidth_AmPmMinutesPart(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale, int* pnCharWidth = NULL);
virtual int GetRightOffsetX(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale);
public:
virtual void Draw_SmallHourCell(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale,
const CRect& rcCell,
const CString& strPart1, const CString& strPart2,
CThemeFontColorSetValue* pfcsetPart1,
CThemeFontColorSetValue* pfcsetPart2,
CXTPPropsStateContext& autoStateCnt,
XTP_CALENDAR_THEME_DAYVIEWTIMESCALECELL_PARAMS* tsCell);
virtual void Draw_BigHourCell(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale,
const CRect& rcCell, int nRowPerHour,
const CString& strHour, const CString& strMinAmPm,
CThemeFontColorSetValue* pfcsetHour,
CThemeFontColorSetValue* pfcsetMinAmPm,
CXTPPropsStateContext& autoStateCnt,
XTP_CALENDAR_THEME_DAYVIEWTIMESCALECELL_PARAMS* tsCell);
virtual void Draw_Caption(CDC* pDC, const CRect& rcRect, const CString& strCaption,
CThemeFontColorSetValue* pfcsetCaption);
virtual CRect Calc_NowLineRect(CDC* pDC, CXTPCalendarDayViewTimeScale* pTimeScale);
virtual void Draw_NowLineBk(CDC* pDC, const CRect& rcRect);
virtual void Draw_NowLine(CDC* pDC, const CRect& rcRect);
virtual BOOL IsDrawNowLine(CDC* pDC, CXTPCalendarDayViewTimeScale* pTS);
CTODayViewTimeScale()
{
m_nWidthAmPmMinutesPart_ = 0;
m_nCharWidthAmPmMinutesPart_ = 0;
}
protected:
CThemeFontColorSetValue m_fcsetBigHour_;
int m_nWidthAmPmMinutesPart_;
int m_nCharWidthAmPmMinutesPart_;
CTOFormula_MulDivC m_hflaBigHourFont;
virtual void AdjustBigHourFont(CDC* pDC, const CRect& rcRowCell);
virtual void RefreshBigHourFontIfNeed(BOOL bRefreshToStandard);
CString FormatTime(const XTP_LC_TIMEFORMAT& lcTimeFormat, COleDateTime dtTime,
BOOL bAmPmEnshure, CString& rstrHour, CString& rstrMin, CString& rstrAmPm);
void DrawTimescaleRTL(CCmdTarget* pObject, CDC* pDC);
void DrawTimescaleLTR(CCmdTarget* pObject, CDC* pDC);
};
friend class CTODayViewTimeScale;
/////////////////////////////////////////////////////////////////////////
// Day View Events (different types)
class _XTP_EXT_CLASS CTODayViewEvent : virtual public CTOEvent
{
public:
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber);
};
friend class CTODayViewEvent;
//==========================================================================
class _XTP_EXT_CLASS CTODayViewEvent_MultiDay : virtual public CTODayViewEvent
{
public:
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber);
virtual void CalcEventYs(CRect& rcRect, int nEventPlaceNumber){};
};
friend class CTODayViewEvent_MultiDay;
//==========================================================================
class _XTP_EXT_CLASS CTODayViewEvent_SingleDay : virtual public CTODayViewEvent
{
public:
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber);
virtual void DrawShadow(CDC* pDC, CXTPCalendarDayViewEvent* pViewEvent){};
protected:
};
friend class CTODayViewEvent_SingleDay;
/////////////////////////////////////////////////////////////////////////
// DayView Resource Group
class _XTP_EXT_CLASS CTODayViewDayGroupHeader : virtual public CTOHeader
{
public:
};
friend class CTODayViewDayGroupHeader;
//=======================================================================
class _XTP_EXT_CLASS CTODayViewDayGroupAllDayEvents : virtual public CXTPCalendarThemePart
{
public:
CXTPPaintManagerColor m_clrBackground;
CXTPPaintManagerColor m_clrBackgroundSelected;
CXTPPaintManagerColor m_clrBottomBorder;
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
virtual void Draw(CCmdTarget* pObject, CDC* pDC);
virtual void SetDynColors(CXTPCalendarDayViewGroup* pViewGroup){};
};
friend class CTODayViewDayGroupAllDayEvents;
//=======================================================================
class _XTP_EXT_CLASS CTODayViewDayGroupCell : virtual public CXTPCalendarThemePart
{
public:
struct XTP_GROUP_CELL_COLOR_SET
{
CXTPPaintManagerColor clrBackground;
CXTPPaintManagerColor clrBorderBottomInHour;
CXTPPaintManagerColor clrBorderBottomHour;
CXTPPaintManagerColor clrSelected;
void doPX(CXTPPropExchange* pPX, LPCTSTR pcszPropName, CXTPCalendarTheme* pTheme);
virtual void Serialize(CArchive& ar);
};
XTP_GROUP_CELL_COLOR_SET m_clrsetWorkCell;
XTP_GROUP_CELL_COLOR_SET m_clrsetNonWorkCell;
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
virtual void Draw(CDC* pDC, const CRect& rcRect,
const XTP_CALENDAR_THEME_DAYVIEWCELL_PARAMS& cellParams, CXTPPropsStateContext* pStateCnt = NULL);
virtual int CalcHeight(CDC* pDC, int nCellWidth) {return 19;} // pDayView->CalculateHeaderFormatAndHeight(pDC, nCellWidth);
};
friend class CTODayViewDayGroupCell;
//=======================================================================
class _XTP_EXT_CLASS CTODayViewDayGroup : virtual public CXTPCalendarThemePart
{
public:
CXTPPaintManagerColor m_clrBorderLeft;
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual void Serialize(CArchive& ar);
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
virtual void Draw(CCmdTarget* pObject, CDC* pDC);
virtual void DrawAllDayAreaScrollIcons(CCmdTarget* pObject, CDC* pDC);
virtual BOOL IsSelected(CXTPCalendarViewGroup* pViewGroup){return FALSE;};
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewDayGroupHeader, Header)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewDayGroupAllDayEvents, AllDayEvents)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewDayGroupCell, Cell)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewEvent_MultiDay, MultiDayEvent)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewEvent_SingleDay, SingleDayEvent)
virtual int HitTestScrollButton(const CXTPCalendarDayViewGroup* pViewGroup, const CPoint* pPoint = NULL); // return 0 or ... flag
virtual CRect GetScrollButtonRect(const XTP_DAY_VIEW_GROUP_LAYOUT& groupLayout, int nButton) = 0;
protected:
virtual void AdjustDayEvents(CXTPCalendarDayViewGroup* pDayViewGroup, CDC* pDC);
};
friend class CTODayViewDayGroup;
/////////////////////////////////////////////////////////////////////////
// DayView day theme part
class _XTP_EXT_CLASS CTODayViewDayHeader : virtual public CTOHeader
{
public:
virtual void Draw(CCmdTarget* pObject, CDC* pDC){};
};
friend class CTODayViewDayHeader;
//==========================================================================
class _XTP_EXT_CLASS CTODayViewDay : virtual public CXTPCalendarThemePart
{
public:
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
virtual void Draw(CCmdTarget* pObject, CDC* pDC);
virtual void DrawTopmostLayer(CCmdTarget* pObject, CDC* pDC);
virtual CRect ExcludeDayBorder(CXTPCalendarDayViewDay* pDayViewDay, const CRect& rcDay) {return rcDay;};
virtual void Draw_DayBorder(CXTPCalendarDayViewDay* pDayViewDay, CDC* pDC) {};
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewDayHeader, Header)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewDayGroup, Group)
};
friend class CTODayViewDay;
/////////////////////////////////////////////////////////////////////////
// DayView theme part object
class _XTP_EXT_CLASS CTODayView : virtual public CXTPCalendarThemePart
{
public:
virtual void AdjustLayout(CDC* pDC, const CRect& rcRect);
virtual void OnPostAdjustLayout();
virtual void Draw(CDC* pDC);
DECLARE_THEMEPART_MEMBER_BASE(CTOHeader, Header)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewEvent, Event)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewTimeScale, TimeScale)
DECLARE_THEMEPART_MEMBER_BASE(CTODayViewDay, Day)
// theme specific control options
virtual BOOL IsUseCellAlignedDraggingInTimeArea() const {return FALSE;};
protected:
virtual int CalcMinCellHeight(CDC* pDC, CXTPCalendarDayView* pDayView);
};
friend class CTODayView;
/////////////////////////////////////////////////////////////////////////
//
// *** MonthView theme parts ***
//
// Parts Hierarchy:
// *Theme CXTPCalendarTheme
// *--Header* CTOHeader
// *--Event* CTOEvent
//
// *--MonthView CTOMonthView
// *----Event* CTOMonthViewEvent
// *----Header* CTOHeader
// *----WeekDayHeader CTOMonthViewWeekDayHeader
// *----Day CTOMonthViewDay
// *------Header CTOMonthViewDayHeader
// *------MultiDayEvent CTOMonthViewEvent_MultiDay
// *------SingleDayEvent CTOMonthViewEvent_SingleDay
//
/////////////////////////////////////////////////////////////////////////
class _XTP_EXT_CLASS CTOMonthViewEvent : virtual public CTOEvent
{
public:
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOMonthViewEvent;
//------------------------------------------
class _XTP_EXT_CLASS CTOMonthViewEvent_SingleDay : virtual public CTOMonthViewEvent
{
public:
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOMonthViewEvent_SingleDay;
//------------------------------------------
class _XTP_EXT_CLASS CTOMonthViewEvent_MultiDay : virtual public CTOMonthViewEvent
{
public:
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOMonthViewEvent_MultiDay;
//==========================================================================
class _XTP_EXT_CLASS CTOMonthViewDayHeader : virtual public CTOHeader
{
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOMonthViewDayHeader;
//==========================================================================
class _XTP_EXT_CLASS CTOMonthViewDay : virtual public CTODay //virtual public CXTPCalendarThemePart
{
public:
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC){};
DECLARE_THEMEPART_MEMBER_BASE(CTOMonthViewDayHeader, Header);
DECLARE_THEMEPART_MEMBER_BASE(CTOMonthViewEvent_MultiDay, MultiDayEvent);
DECLARE_THEMEPART_MEMBER_BASE(CTOMonthViewEvent_SingleDay, SingleDayEvent);
};
friend class CTOMonthViewDay;
//==========================================================================
class _XTP_EXT_CLASS CTOMonthViewWeekDayHeader : virtual public CTOHeader
{
public:
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC){};
};
friend class CTOMonthViewWeekDayHeader;
/////////////////////////////////////////////////////////////////////////
// MonthView theme part object
class _XTP_EXT_CLASS CTOMonthView : virtual public CXTPCalendarThemePart
{
public:
virtual void AdjustLayout(CDC* pDC, const CRect& rcRect, BOOL bCallPostAdjustLayout);
virtual void Draw(CDC* pDC);
DECLARE_THEMEPART_MEMBER_BASE(CTOHeader, Header);
DECLARE_THEMEPART_MEMBER_BASE(CTOMonthViewEvent, Event);
DECLARE_THEMEPART_MEMBER_BASE(CTOMonthViewWeekDayHeader, WeekDayHeader);
DECLARE_THEMEPART_MEMBER_BASE(CTOMonthViewDay, Day);
};
friend class CTOMonthView;
/////////////////////////////////////////////////////////////////////////
//
// *** WeekView theme parts ***
//
// Parts Hierarchy:
// *Theme CXTPCalendarTheme
// *--Event* CTOEvent
//
// *--WeekView CTOWeekView
// *----Event* CTOWeekViewEvent
// *----Day CTOWeekViewDay
// *------DayHeader CTOWeekViewDayHeader
// *------MultiDayEvent CTOWeekViewEvent_MultiDay
// *------SingleDayEvent CTOWeekViewEvent_SingleDay
//
/////////////////////////////////////////////////////////////////////////
// === WeekViewEvent ===
class _XTP_EXT_CLASS CTOWeekViewEvent : virtual public CTOEvent
{
public:
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect, int nEventPlaceNumber);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOWeekViewEvent;
// --- WeekViewEvent_SingleDay ---
class _XTP_EXT_CLASS CTOWeekViewEvent_SingleDay : virtual public CTOWeekViewEvent
{
public:
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOWeekViewEvent_SingleDay;
// --- WeekViewEvent_MultiDay ---
class _XTP_EXT_CLASS CTOWeekViewEvent_MultiDay : virtual public CTOWeekViewEvent
{
public:
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOWeekViewEvent_MultiDay;
// === WeekViewDayHeader ===
class _XTP_EXT_CLASS CTOWeekViewDayHeader : virtual public CTOHeader
{
//virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC);
};
friend class CTOWeekViewDayHeader;
// === WeekViewDay ===
class _XTP_EXT_CLASS CTOWeekViewDay : virtual public CTODay
{
public:
virtual void AdjustLayout(CCmdTarget* pObject, CDC* pDC, const CRect& rcRect);
//virtual void Draw(CCmdTarget* pObject, CDC* pDC){};
DECLARE_THEMEPART_MEMBER_BASE(CTOWeekViewDayHeader, Header);
DECLARE_THEMEPART_MEMBER_BASE(CTOWeekViewEvent_MultiDay, MultiDayEvent);
DECLARE_THEMEPART_MEMBER_BASE(CTOWeekViewEvent_SingleDay, SingleDayEvent);
virtual int GetDayCol(CXTPCalendarWeekViewDay* pWVDay); // returns {0, 1}
virtual void SetDynColors(CXTPCalendarWeekViewDay* pWViewDay) {};
};
friend class CTOWeekViewDay;
// ===== WeekView theme part object =====
class _XTP_EXT_CLASS CTOWeekView : virtual public CXTPCalendarThemePart
{
public:
virtual void AdjustLayout(CDC* pDC, const CRect& rcRect, BOOL bCallPostAdjustLayout);
virtual void Draw(CDC* pDC);
//DECLARE_THEMEPART_MEMBER_BASE(CTOHeader, Header);
DECLARE_THEMEPART_MEMBER_BASE(CTOWeekViewEvent, Event);
DECLARE_THEMEPART_MEMBER_BASE(CTOWeekViewDay, Day);
};
friend class CTOWeekView;
//=======================================================================
/////////////////////////////////////////////////////////////////////////
class _XTP_EXT_CLASS CTOColorsSet : virtual public CXTPCalendarThemePart
{
public:
CTOColorsSet();
virtual void RefreshMetrics(BOOL bRefreshChildren = TRUE);
virtual COLORREF GetColor(int nColorID, COLORREF clrBase = (COLORREF)-1);
virtual int GetScale(int nColorID);//, BOOL& rbHSL);
virtual CString GetName(int nColorID);
virtual void SetColor(int nColorID, LPCTSTR pcszName, int nScale);
virtual void SetCLR_DarkenOffset(int nCLR_DarkenOffset);
// virtual void SetColorEx(int eCLR, COLORREF clrColor);
// virtual void CrearColorsEx();
//virtual void SetColorHSL(int eCLR, int nLshift);
protected:
COLORREF m_clrBase;
int m_nCLR_DarkenOffset;
struct _XTP_EXT_CLASS SColorInfo
{
int nID;
TCHAR szName[128];
int nScale;
//COLORREF rgbColor;
};
//typedef CMap<int, int, int, int> CScalesMap;
typedef CMap<int, int, SColorInfo, SColorInfo&> CColorInfoMap;
CColorInfoMap m_mapColors;
//CScalesMap m_mapScale;
//CScalesMap m_mapHSLShift;
};
/////////////////////////////////////////////////////////////////////////
//
// *** Common Theme members ***
//
/////////////////////////////////////////////////////////////////////////
// This base settings which used to initialize other settings by default.
CXTPPaintManagerColor m_clrBaseColor;
CXTPCalendarThemeFontValue m_fntBaseFont;
CXTPCalendarThemeFontValue m_fntBaseFontBold;
DECLARE_THEMEPART_MEMBER_BASE(CTOColorsSet, ColorsSet)
virtual COLORREF GetColor(int eCLR, COLORREF clrBase = (COLORREF)-1) { ASSERT(FALSE); return 0; };
virtual COLORREF GetColor2(LPCTSTR pcszColorName, COLORREF clrDefault) { ASSERT(FALSE); return 0; };
virtual CXTPResourceImage* GetBitmap(LPCTSTR pcszStdBmpName);
DECLARE_THEMEPART_MEMBER_BASE(CTOHeader, Header)
DECLARE_THEMEPART_MEMBER_BASE(CTOEvent, Event)
//==========================================================================
DECLARE_THEMEPART_MEMBER_BASE(CTODayView, DayView)
DECLARE_THEMEPART_MEMBER_BASE(CTOWeekView, WeekView)
DECLARE_THEMEPART_MEMBER_BASE(CTOMonthView, MonthView)
virtual void RefreshMetrics();
virtual void DoPropExchange(CXTPPropExchange* pPX);
virtual CXTPImageManager* GetCustomIconsList() const;
virtual CXTPResourceImageList* GetImageList() const;
virtual DWORD GetBeforeDrawFlags() const;
virtual void SetBeforeDrawFlags(DWORD dwBeforeDrawFlags);
virtual BOOL IsBeforeDraw(int eFlag) const;
virtual DWORD GetAskItemTextFlags() const;
virtual void SetAskItemTextFlags(DWORD dwFlags);
virtual XTPCalendarTheme GetPaintTheme() const;
virtual void SetPaintTheme(XTPCalendarTheme ePaintTheme);
virtual void SetTipWindowRgn(CWnd* pTip);
public:
static BOOL IsXPTheme();
// draw a single line text in the center of the rect.
// if rect width is not enough to draw all chars -
// text is aligned to left (or right, see nFormat) or the rect.
// nFormat = 0 or combination of flags: DT_VCENTER, DT_LEFT, DT_RIGHT.
static CSize DrawLine_CenterLR(CDC* pDC, LPCTSTR pcszText, CRect& rcRect, UINT nFormat);
// draw text1 and text2 as single line using different fonts.
// See Also: DrawLine_CenterLR
static CSize DrawLine2_CenterLR(CDC* pDC, LPCTSTR pcszText1, LPCTSTR pcszText2,
CThemeFontColorSet* pFontColor1, CThemeFontColorSet* pFontColor2,
CRect& rcRect, UINT nShortAlign = DT_VCENTER | DT_LEFT,
UINT nFullAlign = DT_VCENTER | DT_CENTER);
// draw rect with round corners and fill it using grclrBk.
static void DrawRoundRect(CDC* pDC, const CRect& rcRect, COLORREF clrBorder,
BOOL bBoldBorder, CXTPPaintManagerColorGradient& grclrBk);
static void DrawRoundRect(CDC* pDC, const CRect& rcRect, COLORREF clrBorder,
BOOL bBoldBorder, CBrush* pBrushBk);
// fill rect using grclrBk and draw rect sides specified by isBorders.
// isBorders.top = 0 - do not draw top side, 1 - draw;
// isBorders.left = 0 - do not draw left side, 1 - draw;
// ...
static void DrawRectPartly(CDC* pDC, const CRect& rcRect, COLORREF clrBorder,
int nBorderWidth, CRect isBorders);
static void DrawRectPartly(CDC* pDC, const CRect& rcRect, COLORREF clrBorder,
BOOL bBoldBorder, CXTPPaintManagerColorGradient& grclrBk,
CRect isBorders);
//const CRect& isBorders);
static const int cnCornerSize;
public:
static XTP_VIEW_LAYOUT& AFX_CDECL GetViewLayout(CXTPCalendarView* pView);
static XTP_VIEW_DAY_LAYOUT& AFX_CDECL GetViewDayLayout(CXTPCalendarViewDay* pViewDay);
static XTP_DAY_VIEW_LAYOUT& AFX_CDECL GetDayViewLayout(CXTPCalendarDayView* pDayView);
static XTP_TIMESCALE_LAYOUT& AFX_CDECL GetTimeScaleLayout(CXTPCalendarDayViewTimeScale* pTimeScale);
static XTP_VIEW_GROUP_LAYOUT& AFX_CDECL GetViewGroupLayout(CXTPCalendarViewGroup* pViewGroup);
static XTP_DAY_VIEW_GROUP_LAYOUT& AFX_CDECL GetDayViewGroupLayout(CXTPCalendarDayViewGroup* pDayViewGroup);
static XTP_WEEK_VIEW_LAYOUT& AFX_CDECL GetWeekViewLayout(CXTPCalendarWeekView* pWeekView);
//-----------------------------------------------------------------------
// Summary:
// This member operator is use to copy standard and custom values.
// Remarks:
// The standard value is always copied from the specified source.
// The custom value copied from the source only if this object has
// no custom value and the source object has custom value set.
//-----------------------------------------------------------------------
static void AFX_CDECL CopySettings(CXTPPaintManagerColor& refDest, const CXTPPaintManagerColor& refSrc);
static void AFX_CDECL CopySettings(CXTPPaintManagerColorGradient& refDest, const CXTPPaintManagerColorGradient& refSrc); // <combine CopySettings@CXTPPaintManagerColor&@const CXTPPaintManagerColor&>
static CFont* AFX_CDECL GetMaxHeightFont(CArray<CFont*, CFont*>& arFonts, CDC* pDC = NULL, int* pnMaxHeight = NULL);
public:
virtual CXTPCalendarViewEventSubjectEditor* StartEditSubject(CXTPCalendarViewEvent* pViewEvent) {return NULL;};
virtual void RemoveBoldAttrFromStd(CXTPCalendarThemeFontValue& rFont);
// for internal usage
enum XTPEnumThemeStdImages
{
xtpIMG_DayViewHeader = -100,
xtpIMG_DayViewHeaderTooday = -101,
xtpIMG_DayViewGroupHeader = -102,
xtpIMG_MonthViewDayHeader = -120,
xtpIMG_MonthViewDayHeaderToday = -121,
//xtpIMG_MonthViewWeekDayHeader = 0, //-122, // the base color is enough for default WeekDay header
xtpIMG_MonthViewWeekHeader = -123,
xtpIMG_WeekViewDayHeader = -130,
xtpIMG_ExpandDayButtons = -140,
xtpIMG_PrevNextEventButtons = -150,
};
protected:
virtual void RefreshMetrics(BOOL bRefreshChildren);
virtual void _DoPropExchange(CXTPPropExchange* pPX, BOOL bExchangeChildren);
static void _DrawRoundRect(CDC* pDC, const CRect& rcRect, COLORREF clrBorder,BOOL bBoldBorder,
CXTPPaintManagerColorGradient* pgrclrBk, CBrush* pBrushBk);
virtual BOOL _LoadStdBitmap(int nBmpID, LPCTSTR pcszStdBmpName);
public:
static void DrawRect(CDC* pDC, const CRect& rcRect, COLORREF clrBorder,
BOOL bBoldBorder, CXTPPaintManagerColorGradient& grclrBk);
static void DrawRect(CDC* pDC, const CRect& rcRect, COLORREF clrBorder,
BOOL bBoldBorder, CBrush* pBrushBk);
virtual CRect DrawExpandDayButton(CDC* pDC, const CRect& rc, BOOL bUp, BOOL bHot);
virtual BOOL ExpandDayButton_HitTest(const CPoint& pt, const CRect& rc, BOOL bUp);
virtual CSize GetExpandDayButtonSize();
protected:
CXTPImageManager* m_pCustomIcons;
CXTPResourceImageList* m_pImageList;
CXTPResourceImages* m_pImagesStd;
DWORD m_dwBeforeDrawFlags;
DWORD m_dwAskItemTextFlags;
XTPCalendarTheme m_nPaintTheme;
protected:
};
//}}AFX_CODEJOCK_PRIVATE
/////////////////////////////////////////////////////////////////////////////
AFX_INLINE CMap<UINT, UINT, UINT, UINT&> & CXTPCalendarTheme::GetEventSlotMap()
{
return m_mapEventIdEventSlotId;
}
AFX_INLINE BOOL CXTPCalendarThemePart::IsCreated()
{
return !!m_pTheme;
}
AFX_INLINE CXTPCalendarControl* CXTPCalendarThemePart::GetCalendarControl() const
{
return XTP_SAFE_GET1(GetTheme(), GetCalendarControl(), NULL);
}
AFX_INLINE CXTPCalendarControl* CXTPCalendarTheme::GetCalendarControl() const
{
return m_pCalendar;
}
AFX_INLINE void CXTPCalendarTheme::SetCalendarControl(CXTPCalendarControl* pCalendar)
{
if (!pCalendar && m_pCalendar)
OnDetachCalendar();
m_pCalendar = pCalendar;
}
AFX_INLINE void CXTPCalendarTheme::RefreshMetrics()
{
RefreshMetrics(TRUE);
}
AFX_INLINE void CXTPCalendarTheme::CTOColorsSet::SetCLR_DarkenOffset(int nCLR_DarkenOffset)
{
m_nCLR_DarkenOffset = nCLR_DarkenOffset;
}
AFX_INLINE DWORD CXTPCalendarTheme::GetBeforeDrawFlags() const
{
return m_dwBeforeDrawFlags;
}
AFX_INLINE BOOL CXTPCalendarTheme::IsBeforeDraw(int eFlag) const
{
return 0 != (m_dwBeforeDrawFlags & eFlag);
}
AFX_INLINE void CXTPCalendarTheme::SetBeforeDrawFlags(DWORD dwBeforeDrawFlags)
{
m_dwBeforeDrawFlags = dwBeforeDrawFlags;
}
AFX_INLINE DWORD CXTPCalendarTheme::GetAskItemTextFlags() const
{
return m_dwAskItemTextFlags;
}
AFX_INLINE void CXTPCalendarTheme::SetAskItemTextFlags(DWORD dwFlags)
{
m_dwAskItemTextFlags = dwFlags;
}
AFX_INLINE BOOL CXTPCalendarTheme::IsXPTheme()
{
return XTPColorManager()->GetCurrentSystemTheme() != xtpSystemThemeUnknown;
}
AFX_INLINE CXTPImageManager* CXTPCalendarTheme::GetCustomIconsList() const
{
return m_pCustomIcons;
}
AFX_INLINE CXTPResourceImageList* CXTPCalendarTheme::GetImageList() const
{
return m_pImageList;
}
AFX_INLINE XTPCalendarTheme CXTPCalendarTheme::GetPaintTheme() const
{
return m_nPaintTheme;
}
AFX_INLINE void CXTPCalendarTheme::SetPaintTheme(XTPCalendarTheme ePaintTheme)
{
m_nPaintTheme = ePaintTheme;
RefreshMetrics();
}
//*********************************
#if (_MSC_VER > 1100)
#pragma warning(pop)
#endif
#endif // !defined(_XTP_CALENDAR_THEME_H__)