1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxCalendarCtrl 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  10     @class wxCalendarEvent 
  12     The wxCalendarEvent class is used together with wxCalendarCtrl. 
  19 class wxCalendarEvent 
: public wxDateEvent
 
  23         Returns the week day on which the user clicked in 
  24         @c EVT_CALENDAR_WEEKDAY_CLICKED handler. It doesn't make sense to call 
  25         this function in other handlers. 
  27     wxDateTime::WeekDay 
GetWeekDay() const; 
  30         Sets the week day carried by the event, normally only used by the 
  33     void SetWeekDay(const wxDateTime::WeekDay day
); 
  39     Possible kinds of borders which may be used to decorate a date using 
  42 enum wxCalendarDateBorder
 
  44     wxCAL_BORDER_NONE
,      ///< No Border (Default) 
  45     wxCAL_BORDER_SQUARE
,    ///< Rectangular Border 
  46     wxCAL_BORDER_ROUND      
///< Round Border 
  50     @class wxCalendarDateAttr 
  52     wxCalendarDateAttr is a custom attributes for a calendar date. The objects 
  53     of this class are used with wxCalendarCtrl. 
  60 class wxCalendarDateAttr
 
  64         Constructor for specifying all wxCalendarDateAttr properties. 
  66     wxCalendarDateAttr(const wxColour
& colText 
= wxNullColour
, 
  67                        const wxColour
& colBack 
= wxNullColour
, 
  68                        const wxColour
& colBorder 
= wxNullColour
, 
  69                        const wxFont
& font 
= wxNullFont
, 
  70                        wxCalendarDateBorder border 
= wxCAL_BORDER_NONE
); 
  73         Constructor using default properties except the given border. 
  75     wxCalendarDateAttr(wxCalendarDateBorder border
, 
  76                        const wxColour
& colBorder 
= wxNullColour
); 
  79         Returns the background colour set for the calendar date. 
  81     const wxColour
& GetBackgroundColour() const; 
  84         Returns the border set for the calendar date. 
  86     wxCalendarDateBorder 
GetBorder() const; 
  89         Returns the border colour set for the calendar date. 
  91     const wxColour
& GetBorderColour() const; 
  94         Returns the font set for the calendar date. 
  96     const wxFont
& GetFont() const; 
  99         Returns the text colour set for the calendar date. 
 101     const wxColour
& GetTextColour() const; 
 104         Returns @true if a non-default text background colour is set. 
 106     bool HasBackgroundColour() const; 
 109         Returns @true if a non-default (i.e. any) border is set. 
 111     bool HasBorder() const; 
 114         Returns @true if a non-default border colour is set. 
 116     bool HasBorderColour() const; 
 119         Returns @true if a non-default font is set. 
 121     bool HasFont() const; 
 124         Returns @true if a non-default text foreground colour is set. 
 126     bool HasTextColour() const; 
 129         Returns @true if this calendar day is displayed as a holiday. 
 131     bool IsHoliday() const; 
 134         Sets the text background colour to use. 
 136     void SetBackgroundColour(const wxColour
& colBack
); 
 139         Sets the border to use. 
 141     void SetBorder(wxCalendarDateBorder border
); 
 144         Sets the border colour to use. 
 146     void SetBorderColour(const wxColour
& col
); 
 149         Sets the font to use. 
 151     void SetFont(const wxFont
& font
); 
 154         If @a holiday is @true, this calendar day will be displayed as a 
 157     void SetHoliday(bool holiday
); 
 160         Sets the text (foreground) colour to use. 
 162     void SetTextColour(const wxColour
& colText
); 
 165         Used (internally) by the generic wxCalendarCtrl::Mark(). 
 167     static const wxCalendarDateAttr
& GetMark(); 
 170         Set the attributes that will be used to Mark() days on the generic 
 173     static void SetMark(wxCalendarDateAttr 
const& m
); 
 179     Possible return values from wxCalendarCtrl::HitTest(). 
 181 enum wxCalendarHitTestResult
 
 183     wxCAL_HITTEST_NOWHERE
,  ///< Hit outside of anything. 
 184     wxCAL_HITTEST_HEADER
,   ///< Hit on the header (weekdays). 
 185     wxCAL_HITTEST_DAY       
///< Hit on a day in the calendar. 
 189     @class wxCalendarCtrl 
 191     The calendar control allows the user to pick a date.  The user can move the 
 192     current selection using the keyboard and select the date (generating 
 193     @c EVT_CALENDAR event) by pressing @c @<Return@> or double clicking it. 
 195     Generic calendar has advanced possibilities for the customization of its 
 196     display, described below. If you want to use these possibilities on every 
 197     platform, use wxGenericCalendarCtrl instead of wxCalendarCtrl. 
 199     All global settings (such as colours and fonts used) can, of course, be 
 200     changed. But also, the display style for each day in the month can be set 
 201     independently using wxCalendarDateAttr class. 
 203     An item without custom attributes is drawn with the default colours and 
 204     font and without border, but setting custom attributes with SetAttr() 
 205     allows to modify its appearance. Just create a custom attribute object and 
 206     set it for the day you want to be displayed specially (note that the 
 207     control will take ownership of the pointer, i.e. it will delete it itself). 
 208     A day may be marked as being a holiday, even if it is not recognized as 
 209     one by wxDateTime using the wxCalendarDateAttr::SetHoliday() method. 
 211     As the attributes are specified for each day, they may change when the 
 212     month is changed, so you will often want to update them in 
 213     @c EVT_CALENDAR_PAGE_CHANGED event handler. 
 216     @style{wxCAL_SUNDAY_FIRST} 
 217            Show Sunday as the first day in the week (not in wxGTK) 
 218     @style{wxCAL_MONDAY_FIRST} 
 219            Show Monday as the first day in the week (not in wxGTK) 
 220     @style{wxCAL_SHOW_HOLIDAYS} 
 221            Highlight holidays in the calendar (only generic) 
 222     @style{wxCAL_NO_YEAR_CHANGE} 
 223            Disable the year changing (deprecated, only generic) 
 224     @style{wxCAL_NO_MONTH_CHANGE} 
 225            Disable the month (and, implicitly, the year) changing 
 226     @style{wxCAL_SHOW_SURROUNDING_WEEKS} 
 227            Show the neighbouring weeks in the previous and next months 
 228            (only generic, always on for the native controls) 
 229     @style{wxCAL_SEQUENTIAL_MONTH_SELECTION} 
 230            Use alternative, more compact, style for the month and year 
 231            selection controls. (only generic) 
 232     @style{wxCAL_SHOW_WEEK_NUMBERS} 
 233            Show week numbers on the left side of the calendar. (not in generic) 
 236     @beginEventTable{wxCalendarEvent} 
 237     @event{EVT_CALENDAR(id, func)} 
 238            A day was double clicked in the calendar. 
 239     @event{EVT_CALENDAR_SEL_CHANGED(id, func)} 
 240            The selected date changed. 
 241     @event{EVT_CALENDAR_PAGE_CHANGED(id, func)} 
 242            The selected month (and/or year) changed. 
 243     @event{EVT_CALENDAR_WEEKDAY_CLICKED(id, func)} 
 244            User clicked on the week day header (only generic). 
 247     @note Changing the selected date will trigger an EVT_CALENDAR_DAY, MONTH or 
 248           YEAR event as well as an EVT_CALENDAR_SEL_CHANGED event. 
 252     @appearance{calendarctrl.png} 
 254     @nativeimpl{wxgtk,wxmsw} 
 256     @see @ref page_samples_calendar, wxCalendarDateAttr, wxCalendarEvent, 
 259 class wxCalendarCtrl 
: public wxControl
 
 268         Does the same as Create() method. 
 270     wxCalendarCtrl(wxWindow
* parent
, wxWindowID id
, 
 271                    const wxDateTime
& date 
= wxDefaultDateTime
, 
 272                    const wxPoint
& pos 
= wxDefaultPosition
, 
 273                    const wxSize
& size 
= wxDefaultSize
, 
 274                    long style 
= wxCAL_SHOW_HOLIDAYS
, 
 275                    const wxString
& name 
= wxCalendarNameStr
); 
 278         Destroys the control. 
 283         Creates the control. See wxWindow::wxWindow() for the meaning of the 
 284         parameters and the control overview for the possible styles. 
 286     bool Create(wxWindow
* parent
, wxWindowID id
, 
 287                 const wxDateTime
& date 
= wxDefaultDateTime
, 
 288                 const wxPoint
& pos 
= wxDefaultPosition
, 
 289                 const wxSize
& size 
= wxDefaultSize
, 
 290                 long style 
= wxCAL_SHOW_HOLIDAYS
, 
 291                 const wxString
& name 
= wxCalendarNameStr
); 
 294         This function should be used instead of changing @c wxCAL_SHOW_HOLIDAYS 
 295         style bit directly. It enables or disables the special highlighting of 
 298     virtual void EnableHolidayDisplay(bool display 
= true); 
 301         This function should be used instead of changing 
 302         @c wxCAL_NO_MONTH_CHANGE style bit. It allows or disallows the user to 
 303         change the month interactively. Note that if the month can not be 
 304         changed, the year can not be changed neither. 
 306         @return @true if the value of this option really changed or @false if 
 307                 it was already set to the requested value. 
 309     virtual bool EnableMonthChange(bool enable 
= true); 
 314         This function should be used instead of changing 
 315         @c wxCAL_NO_YEAR_CHANGE style bit directly. It allows or disallows the 
 316         user to change the year interactively. Only in generic wxCalendarCtrl. 
 318     virtual void EnableYearChange(bool enable 
= true); 
 321         Returns the attribute for the given date (should be in the range 
 322         1...31). The returned pointer may be @NULL. Only in generic 
 325     virtual wxCalendarDateAttr
* GetAttr(size_t day
) const; 
 328         Gets the currently selected date. 
 330     virtual wxDateTime 
GetDate() const; 
 333         Gets the background colour of the header part of the calendar window. 
 335         This method is currently only implemented in generic wxCalendarCtrl and 
 336         always returns @c wxNullColour in the native versions. 
 338         @see SetHeaderColours() 
 340     virtual const wxColour
& GetHeaderColourBg() const; 
 343         Gets the foreground colour of the header part of the calendar window. 
 345         This method is currently only implemented in generic wxCalendarCtrl and 
 346         always returns @c wxNullColour in the native versions. 
 348         @see SetHeaderColours() 
 350     virtual const wxColour
& GetHeaderColourFg() const; 
 353         Gets the background highlight colour. Only in generic wxCalendarCtrl. 
 355         This method is currently only implemented in generic wxCalendarCtrl and 
 356         always returns @c wxNullColour in the native versions. 
 358         @see SetHighlightColours() 
 360     virtual const wxColour
& GetHighlightColourBg() const; 
 363         Gets the foreground highlight colour. Only in generic wxCalendarCtrl. 
 365         This method is currently only implemented in generic wxCalendarCtrl and 
 366         always returns @c wxNullColour in the native versions. 
 368         @see SetHighlightColours() 
 370     virtual const wxColour
& GetHighlightColourFg() const; 
 373         Return the background colour currently used for holiday highlighting. 
 375         Only useful with generic wxCalendarCtrl as native versions currently 
 376         don't support holidays display at all and always return 
 379         @see SetHolidayColours() 
 381     virtual const wxColour
& GetHolidayColourBg() const; 
 384         Return the foreground colour currently used for holiday highlighting. 
 386         Only useful with generic wxCalendarCtrl as native versions currently 
 387         don't support holidays display at all and always return 
 390         @see SetHolidayColours() 
 392     virtual const wxColour
& GetHolidayColourFg() const; 
 395         Returns one of wxCalendarHitTestResult constants and fills either 
 396         @a date or @a wd pointer with the corresponding value depending on the 
 399         Not implemented in wxGTK currently. 
 401     virtual wxCalendarHitTestResult 
HitTest(const wxPoint
& pos
, 
 402                                             wxDateTime
* date 
= NULL
, 
 403                                             wxDateTime::WeekDay
* wd 
= NULL
); 
 406         Clears any attributes associated with the given day (in the range 
 407         1...31). Only in generic wxCalendarCtrl. 
 409     virtual void ResetAttr(size_t day
); 
 412         Associates the attribute with the specified date (in the range 1...31). 
 413         If the pointer is @NULL, the items attribute is cleared. Only in 
 414         generic wxCalendarCtrl. 
 416     virtual void SetAttr(size_t day
, wxCalendarDateAttr
* attr
); 
 419         Sets the current date. 
 421         The @a date parameter must be valid. 
 423     virtual bool SetDate(const wxDateTime
& date
); 
 426         Set the colours used for painting the weekdays at the top of the 
 429         This method is currently only implemented in generic wxCalendarCtrl and 
 430         does nothing in the native versions. 
 432     virtual void SetHeaderColours(const wxColour
& colFg
, 
 433                                   const wxColour
& colBg
); 
 436         Set the colours to be used for highlighting the currently selected 
 439         This method is currently only implemented in generic wxCalendarCtrl and 
 440         does nothing in the native versions. 
 442     virtual void SetHighlightColours(const wxColour
& colFg
, 
 443                                      const wxColour
& colBg
); 
 446         Marks the specified day as being a holiday in the current month. 
 448         This method is only implemented in the generic version of the control 
 449         and does nothing in the native ones. 
 451     virtual void SetHoliday(size_t day
); 
 454         Sets the colours to be used for the holidays highlighting. 
 456         This method is only implemented in the generic version of the control 
 457         and does nothing in the native ones. It should also only be called if 
 458         the window style includes @c wxCAL_SHOW_HOLIDAYS flag or 
 459         EnableHolidayDisplay() had been called. 
 462     virtual void SetHolidayColours(const wxColour
& colFg
, 
 463                                    const wxColour
& colBg
); 
 466         Mark or unmark the day. This day of month will be marked in every 
 467         month. In generic wxCalendarCtrl, 
 469     virtual void Mark(size_t day
, bool mark
); 
 472         @name Date Range Functions 
 474         The functions in this section are currently implemented in the generic 
 475         and MSW versions and do nothing in the native GTK implementation. 
 480         Restrict the dates shown by the control to the specified range. 
 482         If either date is set, the corresponding limit will be enforced and 
 483         @true returned. If none are set, the existing restrictions are removed 
 484         and @false is returned. 
 489             The low limit for the dates shown by the control or 
 490             @c wxDefaultDateTime. 
 492             The high limit for the dates shown by the control or 
 493             @c wxDefaultDateTime. 
 495             @true if either limit is valid, @false otherwise 
 497     virtual bool SetDateRange(const wxDateTime
& lowerdate 
= wxDefaultDateTime
, 
 498                                 const wxDateTime
& upperdate 
= wxDefaultDateTime
); 
 501         Returns the limits currently being used. 
 506             If non-@NULL, the value of the low limit for the dates shown by the 
 507             control is returned (which may be @c wxDefaultDateTime if no limit 
 510             If non-@NULL, the value of the upper limit for the dates shown by 
 511             the control is returned (which may be @c wxDefaultDateTime if no 
 514             @true if either limit is set, @false otherwise 
 516     virtual bool GetDateRange(wxDateTime 
*lowerdate
, 
 517                                 wxDateTime 
*upperdate
) const;