| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: calctrl.h
- // Purpose: interface of wxCalendarCtrl
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- enum
- {
- // show Sunday as the first day of the week (default)
- wxCAL_SUNDAY_FIRST = 0x0000,
- // show Monday as the first day of the week
- wxCAL_MONDAY_FIRST = 0x0001,
- // highlight holidays
- wxCAL_SHOW_HOLIDAYS = 0x0002,
- // disable the year change control, show only the month change one
- // deprecated
- wxCAL_NO_YEAR_CHANGE = 0x0004,
- // don't allow changing neither month nor year (implies
- // wxCAL_NO_YEAR_CHANGE)
- wxCAL_NO_MONTH_CHANGE = 0x000c,
- // use MS-style month-selection instead of combo-spin combination
- wxCAL_SEQUENTIAL_MONTH_SELECTION = 0x0010,
- // show the neighbouring weeks in the previous and next month
- wxCAL_SHOW_SURROUNDING_WEEKS = 0x0020,
- // show week numbers on the left side of the calendar.
- wxCAL_SHOW_WEEK_NUMBERS = 0x0040
- };
- /**
- @class wxCalendarEvent
- The wxCalendarEvent class is used together with wxCalendarCtrl.
- @library{wxadv}
- @category{events}
- @see wxCalendarCtrl
- */
- class wxCalendarEvent : public wxDateEvent
- {
- public:
- wxCalendarEvent();
- wxCalendarEvent(wxWindow *win, const wxDateTime& dt, wxEventType type);
- /**
- Returns the week day on which the user clicked in
- @c EVT_CALENDAR_WEEKDAY_CLICKED handler. It doesn't make sense to call
- this function in other handlers.
- */
- wxDateTime::WeekDay GetWeekDay() const;
- /**
- Sets the week day carried by the event, normally only used by the
- library internally.
- */
- void SetWeekDay(const wxDateTime::WeekDay day);
- };
- wxEventType wxEVT_CALENDAR_SEL_CHANGED;
- wxEventType wxEVT_CALENDAR_PAGE_CHANGED;
- wxEventType wxEVT_CALENDAR_DOUBLECLICKED;
- wxEventType wxEVT_CALENDAR_WEEKDAY_CLICKED;
- wxEventType wxEVT_CALENDAR_WEEK_CLICKED;
- /**
- Possible kinds of borders which may be used to decorate a date using
- wxCalendarDateAttr.
- */
- enum wxCalendarDateBorder
- {
- wxCAL_BORDER_NONE, ///< No Border (Default)
- wxCAL_BORDER_SQUARE, ///< Rectangular Border
- wxCAL_BORDER_ROUND ///< Round Border
- };
- /**
- @class wxCalendarDateAttr
- wxCalendarDateAttr is a custom attributes for a calendar date. The objects
- of this class are used with wxCalendarCtrl.
- @library{wxadv}
- @category{data}
- @see wxCalendarCtrl
- */
- class wxCalendarDateAttr
- {
- public:
- /**
- Constructor for specifying all wxCalendarDateAttr properties.
- */
- wxCalendarDateAttr(const wxColour& colText = wxNullColour,
- const wxColour& colBack = wxNullColour,
- const wxColour& colBorder = wxNullColour,
- const wxFont& font = wxNullFont,
- wxCalendarDateBorder border = wxCAL_BORDER_NONE);
- /**
- Constructor using default properties except the given border.
- */
- wxCalendarDateAttr(wxCalendarDateBorder border,
- const wxColour& colBorder = wxNullColour);
- /**
- Returns the background colour set for the calendar date.
- */
- const wxColour& GetBackgroundColour() const;
- /**
- Returns the border set for the calendar date.
- */
- wxCalendarDateBorder GetBorder() const;
- /**
- Returns the border colour set for the calendar date.
- */
- const wxColour& GetBorderColour() const;
- /**
- Returns the font set for the calendar date.
- */
- const wxFont& GetFont() const;
- /**
- Returns the text colour set for the calendar date.
- */
- const wxColour& GetTextColour() const;
- /**
- Returns @true if a non-default text background colour is set.
- */
- bool HasBackgroundColour() const;
- /**
- Returns @true if a non-default (i.e.\ any) border is set.
- */
- bool HasBorder() const;
- /**
- Returns @true if a non-default border colour is set.
- */
- bool HasBorderColour() const;
- /**
- Returns @true if a non-default font is set.
- */
- bool HasFont() const;
- /**
- Returns @true if a non-default text foreground colour is set.
- */
- bool HasTextColour() const;
- /**
- Returns @true if this calendar day is displayed as a holiday.
- */
- bool IsHoliday() const;
- /**
- Sets the text background colour to use.
- */
- void SetBackgroundColour(const wxColour& colBack);
- /**
- Sets the border to use.
- */
- void SetBorder(wxCalendarDateBorder border);
- /**
- Sets the border colour to use.
- */
- void SetBorderColour(const wxColour& col);
- /**
- Sets the font to use.
- */
- void SetFont(const wxFont& font);
- /**
- If @a holiday is @true, this calendar day will be displayed as a
- holiday.
- */
- void SetHoliday(bool holiday);
- /**
- Sets the text (foreground) colour to use.
- */
- void SetTextColour(const wxColour& colText);
- /**
- Used (internally) by the generic wxCalendarCtrl::Mark().
- */
- static const wxCalendarDateAttr& GetMark();
- /**
- Set the attributes that will be used to Mark() days on the generic
- wxCalendarCtrl.
- */
- static void SetMark(const wxCalendarDateAttr& m);
- };
- /**
- Possible return values from wxCalendarCtrl::HitTest().
- */
- enum wxCalendarHitTestResult
- {
- wxCAL_HITTEST_NOWHERE, ///< Hit outside of anything.
- wxCAL_HITTEST_HEADER, ///< Hit on the header (weekdays).
- wxCAL_HITTEST_DAY, ///< Hit on a day in the calendar.
- wxCAL_HITTEST_INCMONTH, ///< Hit on next month arrow (in alternate month selector mode).
- wxCAL_HITTEST_DECMONTH, ///< Hit on previous month arrow (in alternate month selector mode).
- wxCAL_HITTEST_SURROUNDING_WEEK, ///< Hit on surrounding week of previous/next month (if shown).
- wxCAL_HITTEST_WEEK ///< Hit on week of the year number (if shown).
- };
- /**
- @class wxCalendarCtrl
- The calendar control allows the user to pick a date. The user can move the
- current selection using the keyboard and select the date (generating
- @c EVT_CALENDAR event) by pressing @c @<Return@> or double clicking it.
- Generic calendar has advanced possibilities for the customization of its
- display, described below. If you want to use these possibilities on every
- platform, use wxGenericCalendarCtrl instead of wxCalendarCtrl.
- All global settings (such as colours and fonts used) can, of course, be
- changed. But also, the display style for each day in the month can be set
- independently using wxCalendarDateAttr class.
- An item without custom attributes is drawn with the default colours and
- font and without border, but setting custom attributes with SetAttr()
- allows to modify its appearance. Just create a custom attribute object and
- set it for the day you want to be displayed specially (note that the
- control will take ownership of the pointer, i.e. it will delete it itself).
- A day may be marked as being a holiday, even if it is not recognized as
- one by wxDateTime using the wxCalendarDateAttr::SetHoliday() method.
- As the attributes are specified for each day, they may change when the
- month is changed, so you will often want to update them in
- @c EVT_CALENDAR_PAGE_CHANGED event handler.
- @beginStyleTable
- @style{wxCAL_SUNDAY_FIRST}
- Show Sunday as the first day in the week (not in wxGTK)
- @style{wxCAL_MONDAY_FIRST}
- Show Monday as the first day in the week (not in wxGTK)
- @style{wxCAL_SHOW_HOLIDAYS}
- Highlight holidays in the calendar (only generic)
- @style{wxCAL_NO_YEAR_CHANGE}
- Disable the year changing (deprecated, only generic)
- @style{wxCAL_NO_MONTH_CHANGE}
- Disable the month (and, implicitly, the year) changing
- @style{wxCAL_SHOW_SURROUNDING_WEEKS}
- Show the neighbouring weeks in the previous and next months
- (only generic, always on for the native controls)
- @style{wxCAL_SEQUENTIAL_MONTH_SELECTION}
- Use alternative, more compact, style for the month and year
- selection controls. (only generic)
- @style{wxCAL_SHOW_WEEK_NUMBERS}
- Show week numbers on the left side of the calendar. (not in generic)
- @endStyleTable
- @beginEventEmissionTable{wxCalendarEvent}
- @event{EVT_CALENDAR(id, func)}
- A day was double clicked in the calendar.
- @event{EVT_CALENDAR_SEL_CHANGED(id, func)}
- The selected date changed.
- @event{EVT_CALENDAR_PAGE_CHANGED(id, func)}
- The selected month (and/or year) changed.
- @event{EVT_CALENDAR_WEEKDAY_CLICKED(id, func)}
- User clicked on the week day header (only generic).
- @event{EVT_CALENDAR_WEEK_CLICKED(id, func)}
- User clicked on the week of the year number (only generic).
- @endEventTable
- @note Changing the selected date will trigger an EVT_CALENDAR_DAY, MONTH or
- YEAR event as well as an EVT_CALENDAR_SEL_CHANGED event.
- @library{wxadv}
- @category{ctrl}
- @appearance{calendarctrl}
- @nativeimpl{wxgtk,wxmsw}
- @see @ref page_samples_calendar, wxCalendarDateAttr, wxCalendarEvent,
- wxDatePickerCtrl
- */
- class wxCalendarCtrl : public wxControl
- {
- public:
- /**
- Default constructor.
- */
- wxCalendarCtrl();
- /**
- Does the same as Create() method.
- */
- wxCalendarCtrl(wxWindow* parent, wxWindowID id,
- const wxDateTime& date = wxDefaultDateTime,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxCAL_SHOW_HOLIDAYS,
- const wxString& name = wxCalendarNameStr);
- /**
- Destroys the control.
- */
- ~wxCalendarCtrl();
- /**
- Creates the control. See wxWindow::wxWindow() for the meaning of the
- parameters and the control overview for the possible styles.
- */
- bool Create(wxWindow* parent, wxWindowID id,
- const wxDateTime& date = wxDefaultDateTime,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxCAL_SHOW_HOLIDAYS,
- const wxString& name = wxCalendarNameStr);
- /**
- This function should be used instead of changing @c wxCAL_SHOW_HOLIDAYS
- style bit directly. It enables or disables the special highlighting of
- the holidays.
- */
- virtual void EnableHolidayDisplay(bool display = true);
- /**
- This function should be used instead of changing
- @c wxCAL_NO_MONTH_CHANGE style bit. It allows or disallows the user to
- change the month interactively. Note that if the month cannot be
- changed, the year cannot be changed neither.
- @return @true if the value of this option really changed or @false if
- it was already set to the requested value.
- */
- virtual bool EnableMonthChange(bool enable = true);
- /**
- @deprecated
- This function should be used instead of changing
- @c wxCAL_NO_YEAR_CHANGE style bit directly. It allows or disallows the
- user to change the year interactively. Only in generic wxCalendarCtrl.
- */
- virtual void EnableYearChange(bool enable = true);
- /**
- Returns the attribute for the given date (should be in the range
- 1...31). The returned pointer may be @NULL. Only in generic
- wxCalendarCtrl.
- */
- virtual wxCalendarDateAttr* GetAttr(size_t day) const;
- /**
- Gets the currently selected date.
- */
- virtual wxDateTime GetDate() const;
- /**
- Gets the background colour of the header part of the calendar window.
- This method is currently only implemented in generic wxCalendarCtrl and
- always returns @c wxNullColour in the native versions.
- @see SetHeaderColours()
- */
- virtual const wxColour& GetHeaderColourBg() const;
- /**
- Gets the foreground colour of the header part of the calendar window.
- This method is currently only implemented in generic wxCalendarCtrl and
- always returns @c wxNullColour in the native versions.
- @see SetHeaderColours()
- */
- virtual const wxColour& GetHeaderColourFg() const;
- /**
- Gets the background highlight colour. Only in generic wxCalendarCtrl.
- This method is currently only implemented in generic wxCalendarCtrl and
- always returns @c wxNullColour in the native versions.
- @see SetHighlightColours()
- */
- virtual const wxColour& GetHighlightColourBg() const;
- /**
- Gets the foreground highlight colour. Only in generic wxCalendarCtrl.
- This method is currently only implemented in generic wxCalendarCtrl and
- always returns @c wxNullColour in the native versions.
- @see SetHighlightColours()
- */
- virtual const wxColour& GetHighlightColourFg() const;
- /**
- Return the background colour currently used for holiday highlighting.
- Only useful with generic wxCalendarCtrl as native versions currently
- don't support holidays display at all and always return
- @c wxNullColour.
- @see SetHolidayColours()
- */
- virtual const wxColour& GetHolidayColourBg() const;
- /**
- Return the foreground colour currently used for holiday highlighting.
- Only useful with generic wxCalendarCtrl as native versions currently
- don't support holidays display at all and always return
- @c wxNullColour.
- @see SetHolidayColours()
- */
- virtual const wxColour& GetHolidayColourFg() const;
- /**
- Returns one of wxCalendarHitTestResult constants and fills either
- @a date or @a wd pointer with the corresponding value depending on the
- hit test code.
- Not implemented in wxGTK currently.
- */
- virtual wxCalendarHitTestResult HitTest(const wxPoint& pos,
- wxDateTime* date = NULL,
- wxDateTime::WeekDay* wd = NULL);
- /**
- Clears any attributes associated with the given day (in the range
- 1...31). Only in generic wxCalendarCtrl.
- */
- virtual void ResetAttr(size_t day);
- /**
- Associates the attribute with the specified date (in the range 1...31).
- If the pointer is @NULL, the items attribute is cleared. Only in
- generic wxCalendarCtrl.
- */
- virtual void SetAttr(size_t day, wxCalendarDateAttr* attr);
- /**
- Sets the current date.
- The @a date parameter must be valid and in the currently valid range as
- set by SetDateRange(), otherwise the current date is not changed and
- the function returns @false.
- */
- virtual bool SetDate(const wxDateTime& date);
- /**
- Set the colours used for painting the weekdays at the top of the
- control.
- This method is currently only implemented in generic wxCalendarCtrl and
- does nothing in the native versions.
- */
- virtual void SetHeaderColours(const wxColour& colFg,
- const wxColour& colBg);
- /**
- Set the colours to be used for highlighting the currently selected
- date.
- This method is currently only implemented in generic wxCalendarCtrl and
- does nothing in the native versions.
- */
- virtual void SetHighlightColours(const wxColour& colFg,
- const wxColour& colBg);
- /**
- Marks the specified day as being a holiday in the current month.
- This method is only implemented in the generic version of the control
- and does nothing in the native ones.
- */
- virtual void SetHoliday(size_t day);
- /**
- Sets the colours to be used for the holidays highlighting.
- This method is only implemented in the generic version of the control
- and does nothing in the native ones. It should also only be called if
- the window style includes @c wxCAL_SHOW_HOLIDAYS flag or
- EnableHolidayDisplay() had been called.
- */
- virtual void SetHolidayColours(const wxColour& colFg,
- const wxColour& colBg);
- /**
- Mark or unmark the day. This day of month will be marked in every
- month. In generic wxCalendarCtrl,
- */
- virtual void Mark(size_t day, bool mark);
- /**
- @name Date Range Functions
- */
- //@{
- /**
- Restrict the dates that can be selected in the control to the specified
- range.
- If either date is set, the corresponding limit will be enforced and
- @true returned. If none are set, the existing restrictions are removed
- and @false is returned.
- @see GetDateRange()
- @param lowerdate
- The low limit for the dates shown by the control or
- ::wxDefaultDateTime.
- @param upperdate
- The high limit for the dates shown by the control or
- ::wxDefaultDateTime.
- @return
- @true if either limit is valid, @false otherwise
- */
- virtual bool SetDateRange(const wxDateTime& lowerdate = wxDefaultDateTime,
- const wxDateTime& upperdate = wxDefaultDateTime);
- /**
- Returns the limits currently being used.
- @see SetDateRange()
- @param lowerdate
- If non-@NULL, the value of the low limit for the dates shown by the
- control is returned (which may be ::wxDefaultDateTime if no limit
- is set).
- @param upperdate
- If non-@NULL, the value of the upper limit for the dates shown by
- the control is returned (which may be ::wxDefaultDateTime if no
- limit is set).
- @return
- @true if either limit is set, @false otherwise
- */
- virtual bool GetDateRange(wxDateTime *lowerdate,
- wxDateTime *upperdate) const;
- //@}
- };
|