X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0185cd097844887c308a81fbd137676086ae8580..214b7e74f0d6e46fc278d0060b2e864a23f1714e:/include/wx/calctrl.h diff --git a/include/wx/calctrl.h b/include/wx/calctrl.h index 3fe059bea3..9e747ae652 100644 --- a/include/wx/calctrl.h +++ b/include/wx/calctrl.h @@ -9,9 +9,18 @@ // Licence: wxWindows license /////////////////////////////////////////////////////////////////////////////// +/* + TODO + + 1. implement multiple selections for date ranges + 2. background bitmap for the calendar? + */ + #ifndef _WX_CALCTRL_H #define _WX_CALCTRL_H +#include "wx/datetime.h" + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -24,17 +33,96 @@ enum wxCalendarHitTestResult wxCAL_HITTEST_DAY // on a day in the calendar }; +// border types for a date +enum wxCalendarDateBorder +{ + wxCAL_BORDER_NONE, // no border (default) + wxCAL_BORDER_SQUARE, // a rectangular border + wxCAL_BORDER_ROUND // a round border +}; + // ---------------------------------------------------------------------------- -// wxCalendarCtrl +// wxCalendarDateAttr: custom attributes for a calendar date // ---------------------------------------------------------------------------- -// so far we only have a generic version, so keep it simple -#include "wx/generic/calctrl.h" +class WXDLLEXPORT wxCalendarDateAttr +{ +#if !defined(__VISAGECPP__) +protected: + // This has to be before the use of Init(), for MSVC++ 1.5 + // But dorks up Visualage! + void Init(wxCalendarDateBorder border = wxCAL_BORDER_NONE) + { + m_border = border; + m_holiday = FALSE; + } +#endif +public: + // ctors + wxCalendarDateAttr() { Init(); } + wxCalendarDateAttr(const wxColour& colText, + const wxColour& colBack = wxNullColour, + const wxColour& colBorder = wxNullColour, + const wxFont& font = wxNullFont, + wxCalendarDateBorder border = wxCAL_BORDER_NONE) + : m_colText(colText), m_colBack(colBack), + m_colBorder(colBorder), m_font(font) + { + Init(border); + } + wxCalendarDateAttr(wxCalendarDateBorder border, + const wxColour& colBorder = wxNullColour) + : m_colBorder(colBorder) + { + Init(border); + } + + // setters + void SetTextColour(const wxColour& colText) { m_colText = colText; } + void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; } + void SetBorderColour(const wxColour& col) { m_colBorder = col; } + void SetFont(const wxFont& font) { m_font = font; } + void SetBorder(wxCalendarDateBorder border) { m_border = border; } + void SetHoliday(bool holiday) { m_holiday = holiday; } + + // accessors + bool HasTextColour() const { return m_colText.Ok(); } + bool HasBackgroundColour() const { return m_colBack.Ok(); } + bool HasBorderColour() const { return m_colBorder.Ok(); } + bool HasFont() const { return m_font.Ok(); } + bool HasBorder() const { return m_border != wxCAL_BORDER_NONE; } + + bool IsHoliday() const { return m_holiday; } + + const wxColour& GetTextColour() const { return m_colText; } + const wxColour& GetBackgroundColour() const { return m_colBack; } + const wxColour& GetBorderColour() const { return m_colBorder; } + const wxFont& GetFont() const { return m_font; } + wxCalendarDateBorder GetBorder() const { return m_border; } +#if defined(__VISAGECPP__) +protected: + // This has to be here for VisualAge + void Init(wxCalendarDateBorder border = wxCAL_BORDER_NONE) + { + m_border = border; + m_holiday = FALSE; + } +#endif +private: + wxColour m_colText, + m_colBack, + m_colBorder; + wxFont m_font; + wxCalendarDateBorder m_border; + bool m_holiday; +}; // ---------------------------------------------------------------------------- // wxCalendarCtrl events // ---------------------------------------------------------------------------- +class WXDLLEXPORT wxCalendarCtrl; + class WXDLLEXPORT wxCalendarEvent : public wxCommandEvent { friend class wxCalendarCtrl; @@ -51,13 +139,37 @@ protected: private: wxDateTime m_date; wxDateTime::WeekDay m_wday; + + DECLARE_DYNAMIC_CLASS(wxCalendarEvent) }; -#define EVT_CALENDAR(id, fn) { wxEVT_CALENDAR_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_CALENDAR_SEL_CHANGED(id, fn) { wxEVT_CALENDAR_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_CALENDAR_DAY(id, fn) { wxEVT_CALENDAR_DAY_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_CALENDAR_MONTH(id, fn) { wxEVT_CALENDAR_MONTH_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_CALENDAR_YEAR(id, fn) { wxEVT_CALENDAR_YEAR_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, -#define EVT_CALENDAR_WEEKDAY_CLICKED(id, fn) { wxEVT_CALENDAR_WEEKDAY_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) & fn, (wxObject *) NULL }, +// ---------------------------------------------------------------------------- +// wxCalendarCtrl +// ---------------------------------------------------------------------------- + +// so far we only have a generic version, so keep it simple +#include "wx/generic/calctrl.h" + +// ---------------------------------------------------------------------------- +// calendar event types and macros for handling them +// ---------------------------------------------------------------------------- + +BEGIN_DECLARE_EVENT_TYPES() + DECLARE_EVENT_TYPE(wxEVT_CALENDAR_SEL_CHANGED, 950) + DECLARE_EVENT_TYPE(wxEVT_CALENDAR_DAY_CHANGED, 951) + DECLARE_EVENT_TYPE(wxEVT_CALENDAR_MONTH_CHANGED, 952) + DECLARE_EVENT_TYPE(wxEVT_CALENDAR_YEAR_CHANGED, 953) + DECLARE_EVENT_TYPE(wxEVT_CALENDAR_DOUBLECLICKED, 954) + DECLARE_EVENT_TYPE(wxEVT_CALENDAR_WEEKDAY_CLICKED, 955) +END_DECLARE_EVENT_TYPES() + +typedef void (wxEvtHandler::*wxCalendarEventFunction)(wxCalendarEvent&); + +#define EVT_CALENDAR(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_CALENDAR_DOUBLECLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxCalendarEventFunction) & fn, (wxObject *) NULL), +#define EVT_CALENDAR_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_CALENDAR_SEL_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxCalendarEventFunction) & fn, (wxObject *) NULL), +#define EVT_CALENDAR_DAY(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_CALENDAR_DAY_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxCalendarEventFunction) & fn, (wxObject *) NULL), +#define EVT_CALENDAR_MONTH(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_CALENDAR_MONTH_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxCalendarEventFunction) & fn, (wxObject *) NULL), +#define EVT_CALENDAR_YEAR(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_CALENDAR_YEAR_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxCalendarEventFunction) & fn, (wxObject *) NULL), +#define EVT_CALENDAR_WEEKDAY_CLICKED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_CALENDAR_WEEKDAY_CLICKED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) (wxCalendarEventFunction) & fn, (wxObject *) NULL), #endif // _WX_CALCTRL_H