X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e7ecb7be084f5815051682b2a5809090ebb2706..15afbcd0007feb619021a60e4e53515b63399392:/wxPython/src/calendar.i?ds=sidebyside diff --git a/wxPython/src/calendar.i b/wxPython/src/calendar.i index 120e372b07..b98a1e330a 100644 --- a/wxPython/src/calendar.i +++ b/wxPython/src/calendar.i @@ -14,24 +14,18 @@ %{ -#include "export.h" +#include "wx/wxPython/wxPython.h" +#include "wx/wxPython/pyclasses.h" + #include %} //---------------------------------------------------------------------- -%include typemaps.i -%include my_typemaps.i - -// Import some definitions of other classes, etc. -%import _defs.i %import misc.i -%import windows.i -%import controls.i -%import events.i -%import utils.i +%pythoncode { wx = core } -%pragma(python) code = "import wx" +%include _calendar_rename.i //--------------------------------------------------------------------------- @@ -41,6 +35,8 @@ enum { wxCAL_SHOW_HOLIDAYS, wxCAL_NO_YEAR_CHANGE, wxCAL_NO_MONTH_CHANGE, + wxCAL_SEQUENTIAL_MONTH_SELECTION, + wxCAL_SHOW_SURROUNDING_WEEKS, }; @@ -48,7 +44,10 @@ enum wxCalendarHitTestResult { wxCAL_HITTEST_NOWHERE, // outside of anything wxCAL_HITTEST_HEADER, // on the header (weekdays) - wxCAL_HITTEST_DAY // on a day in the calendar + wxCAL_HITTEST_DAY, // on a day in the calendar + wxCAL_HITTEST_INCMONTH, + wxCAL_HITTEST_DECMONTH, + wxCAL_HITTEST_SURROUNDING_WEEK }; // border types for a date @@ -61,21 +60,22 @@ enum wxCalendarDateBorder //--------------------------------------------------------------------------- +DocStr(wxCalendarDateAttr, +"A set of customization attributes for a calendar date, which can be used to +control the look of the Calendar object."); class wxCalendarDateAttr { public: - // ctors - wxCalendarDateAttr(const wxColour& colText, + DocStr(wxCalendarDateAttr, + "Create a CalendarDateAttr."); + wxCalendarDateAttr(const wxColour& colText = wxNullColour, const wxColour& colBack = wxNullColour, const wxColour& colBorder = wxNullColour, const wxFont& font = wxNullFont, wxCalendarDateBorder border = wxCAL_BORDER_NONE); - %name(wxCalendarDateAttrBorder) - wxCalendarDateAttr(wxCalendarDateBorder border, - const wxColour& colBorder = wxNullColour); - + // setters void SetTextColour(const wxColour& colText); void SetBackgroundColour(const wxColour& colBack); @@ -93,10 +93,10 @@ public: bool IsHoliday() const; - const wxColour& GetTextColour() const; - const wxColour& GetBackgroundColour() const; - const wxColour& GetBorderColour() const; - const wxFont& GetFont() const; + wxColour GetTextColour() const; + wxColour GetBackgroundColour() const; + wxColour GetBorderColour() const; + wxFont GetFont() const; wxCalendarDateBorder GetBorder() const; }; @@ -109,123 +109,273 @@ class wxCalendarEvent : public wxCommandEvent public: wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type); - const wxDateTime& GetDate() const; + const wxDateTime GetDate() const; + void SetDate(const wxDateTime &date); + void SetWeekDay(const wxDateTime::WeekDay wd); wxDateTime::WeekDay GetWeekDay() const; }; -enum { - wxEVT_CALENDAR_DOUBLECLICKED, - wxEVT_CALENDAR_SEL_CHANGED, - wxEVT_CALENDAR_DAY_CHANGED, - wxEVT_CALENDAR_MONTH_CHANGED, - wxEVT_CALENDAR_YEAR_CHANGED, - wxEVT_CALENDAR_WEEKDAY_CLICKED, -}; - -%pragma(python) code = " -def EVT_CALENDAR(win, id, fn): - win.Connect(id, -1, wxEVT_CALENDAR_DOUBLECLICKED, fn) - -def EVT_CALENDAR_SEL_CHANGED(win, id, fn): - win.Connect(id, -1, wxEVT_CALENDAR_SEL_CHANGED, fn) -def EVT_CALENDAR_DAY(win, id, fn): - win.Connect(id, -1, wxEVT_CALENDAR_DAY_CHANGED, fn) +%constant wxEventType wxEVT_CALENDAR_DOUBLECLICKED; +%constant wxEventType wxEVT_CALENDAR_SEL_CHANGED; +%constant wxEventType wxEVT_CALENDAR_DAY_CHANGED; +%constant wxEventType wxEVT_CALENDAR_MONTH_CHANGED; +%constant wxEventType wxEVT_CALENDAR_YEAR_CHANGED; +%constant wxEventType wxEVT_CALENDAR_WEEKDAY_CLICKED; -def EVT_CALENDAR_MONTH(win, id, fn): - win.Connect(id, -1, wxEVT_CALENDAR_MONTH_CHANGED, fn) -def EVT_CALENDAR_YEAR(win, id, fn): - win.Connect(id, -1, wxEVT_CALENDAR_YEAR_CHANGED, fn) +%pythoncode { +EVT_CALENDAR = wx.PyEventBinder( wxEVT_CALENDAR_DOUBLECLICKED, 1) +EVT_CALENDAR_SEL_CHANGED = wx.PyEventBinder( wxEVT_CALENDAR_SEL_CHANGED, 1) +EVT_CALENDAR_DAY = wx.PyEventBinder( wxEVT_CALENDAR_DAY_CHANGED, 1) +EVT_CALENDAR_MONTH = wx.PyEventBinder( wxEVT_CALENDAR_MONTH_CHANGED, 1) +EVT_CALENDAR_YEAR = wx.PyEventBinder( wxEVT_CALENDAR_YEAR_CHANGED, 1) +EVT_CALENDAR_WEEKDAY_CLICKED = wx.PyEventBinder( wxEVT_CALENDAR_WEEKDAY_CLICKED, 1) +} -def EVT_CALENDAR_WEEKDAY_CLICKED(win, id, fn): - win.Connect(id, -1, wxEVT_CALENDAR_WEEKDAY_CLICKED, fn) - -" //--------------------------------------------------------------------------- +MAKE_CONST_WXSTRING(CalendarNameStr); + + +DocStr(wxCalendarCtrl, + "The calendar control allows the user to pick a date interactively."); + +RefDoc(wxCalendarCtrl, + +"The CalendarCtrl displays a window containing several parts: the control to +pick the month and the year at the top (either or both of them may be +disabled) and a month area below them which shows all the days in the +month. The user can move the current selection using the keyboard and select +the date (generating EVT_CALENDAR event) by pressing or double +clicking it. + +It has advanced possibilities for the customization of its display. 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 CalendarDateAttr 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 A day may be marked as being a +holiday, (even if it is not recognized as one by wx.DateTime) by using the +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 an EVT_CALENDAR_MONTH +event handler. + + Styles + CAL_SUNDAY_FIRST: Show Sunday as the first day in the week + CAL_MONDAY_FIRST: Show Monday as the first day in the week + CAL_SHOW_HOLIDAYS: Highlight holidays in the calendar + CAL_NO_YEAR_CHANGE: Disable the year changing + CAL_NO_MONTH_CHANGE: Disable the month (and, implicitly, the year) changing + CAL_SHOW_SURROUNDING_WEEKS: Show the neighbouring weeks in the previous and next months + CAL_SEQUENTIAL_MONTH_SELECTION: Use alternative, more compact, style for the month and year selection controls. + +The default calendar style is wxCAL_SHOW_HOLIDAYS. + + Events + EVT_CALENDAR: A day was double clicked in the calendar. + EVT_CALENDAR_SEL_CHANGED: The selected date changed. + EVT_CALENDAR_DAY: The selected day changed. + EVT_CALENDAR_MONTH: The selected month changed. + EVT_CALENDAR_YEAR: The selected year changed. + EVT_CALENDAR_WEEKDAY_CLICKED: User clicked on the week day header + +Note that changing the selected date will result in either of +EVT_CALENDAR_DAY, MONTH or YEAR events and an EVT_CALENDAR_SEL_CHANGED event. + +"); + + class wxCalendarCtrl : public wxControl { public: - // construction + %pythonAppend wxCalendarCtrl "self._setOORInfo(self)" + %pythonAppend wxCalendarCtrl() "" + + DocStr(wxCalendarCtrl, "Create and show a calendar control."); wxCalendarCtrl(wxWindow *parent, wxWindowID id, const wxDateTime& date = wxDefaultDateTime, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxCAL_SHOW_HOLIDAYS, - const char* name = "calendar"); - - // set/get the current date - // ------------------------ - - void SetDate(const wxDateTime& date); - const wxDateTime& GetDate() const; - - // calendar mode - // ------------- - - // some calendar styles can't be changed after the control creation by - // just using SetWindowStyle() and Refresh() and the functions below - // should be used instead for them - - // corresponds to wxCAL_NO_YEAR_CHANGE bit - void EnableYearChange(bool enable = TRUE); - - // corresponds to wxCAL_NO_MONTH_CHANGE bit - void EnableMonthChange(bool enable = TRUE); - - // corresponds to wxCAL_SHOW_HOLIDAYS bit - void EnableHolidayDisplay(bool display = TRUE); - - // customization - // ------------- - - // header colours are used for painting the weekdays at the top - void SetHeaderColours(const wxColour& colFg, const wxColour& colBg); - const wxColour& GetHeaderColourFg() const; - const wxColour& GetHeaderColourBg() const; - - // highlight colour is used for the currently selected date - void SetHighlightColours(const wxColour& colFg, const wxColour& colBg); - const wxColour& GetHighlightColourFg() const; - const wxColour& GetHighlightColourBg() const; - - // holiday colour is used for the holidays (if style & wxCAL_SHOW_HOLIDAYS) - void SetHolidayColours(const wxColour& colFg, const wxColour& colBg); - const wxColour& GetHolidayColourFg() const; - const wxColour& GetHolidayColourBg() const; - - // an item without custom attributes is drawn with the default colours and - // font and without border, setting custom attributes allows to modify this - // - // the day parameter should be in 1..31 range, for days 29, 30, 31 the - // corresponding attribute is just unused if there is no such day in the - // current month - - wxCalendarDateAttr *GetAttr(size_t day) const; - void SetAttr(size_t day, wxCalendarDateAttr *attr); - - void SetHoliday(size_t day); - - void ResetAttr(size_t day); - - // returns one of wxCAL_HITTEST_XXX constants and fills either date or wd - // with the corresponding value (none for NOWHERE, the date for DAY and wd - // for HEADER) - wxCalendarHitTestResult HitTest(const wxPoint& pos, - wxDateTime *date = NULL, - wxDateTime::WeekDay *wd = NULL); - + long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS, + const wxString& name = wxPyCalendarNameStr); + + + DocStr(wxCalendarCtrl(), "Precreate a CalendarCtrl for 2-phase creation."); + %name(PreCalendarCtrl)wxCalendarCtrl(); + + DocStr(Create, "Acutally create the GUI portion of the CalendarCtrl for 2-phase creation."); + bool Create(wxWindow *parent, + wxWindowID id, + const wxDateTime& date = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS, + const wxString& name = wxPyCalendarNameStr); + + + DocDeclStr( + void, SetDate(const wxDateTime& date), + "Sets the current date."); + + DocDeclStr( + const wxDateTime&, GetDate() const, + "Gets the currently selected date."); + + + + DocDeclStr( + bool, SetLowerDateLimit(const wxDateTime& date = wxDefaultDateTime), + "set the range in which selection can occur"); + + DocDeclStr( + bool, SetUpperDateLimit(const wxDateTime& date = wxDefaultDateTime), + "set the range in which selection can occur"); + + DocDeclStr( + const wxDateTime&, GetLowerDateLimit() const, + "get the range in which selection can occur"); + + DocDeclStr( + const wxDateTime&, GetUpperDateLimit() const, + "get the range in which selection can occur"); + + DocDeclStr( + bool, SetDateRange(const wxDateTime& lowerdate = wxDefaultDateTime, + const wxDateTime& upperdate = wxDefaultDateTime), + "set the range in which selection can occur"); + + + + + DocDeclStr( + void, EnableYearChange(bool enable = True), + "This function should be used instead of changing CAL_NO_YEAR_CHANGE\n" + "style bit directly. It allows or disallows the user to change the year\n" + "interactively."); + + DocDeclStr( + void, EnableMonthChange(bool enable = True), + "This function should be used instead of changing CAL_NO_MONTH_CHANGE style\n" + "bit. It allows or disallows the user to change the month interactively. Note\n" + "that if the month can not be changed, the year can not be changed either."); + + DocDeclStr( + void, EnableHolidayDisplay(bool display = True), + "This function should be used instead of changing CAL_SHOW_HOLIDAYS style\n" + "bit directly. It enables or disables the special highlighting of the holidays."); + + + + DocDeclStr( + void, SetHeaderColours(const wxColour& colFg, const wxColour& colBg), + "header colours are used for painting the weekdays at the top"); + + DocDeclStr( + wxColour, GetHeaderColourFg() const, + "header colours are used for painting the weekdays at the top"); + + DocDeclStr( + wxColour, GetHeaderColourBg() const, + "header colours are used for painting the weekdays at the top"); + + + + DocDeclStr( + void, SetHighlightColours(const wxColour& colFg, const wxColour& colBg), + "highlight colour is used for the currently selected date"); + + DocDeclStr( + wxColour, GetHighlightColourFg() const, + "highlight colour is used for the currently selected date"); + + DocDeclStr( + wxColour, GetHighlightColourBg() const, + "highlight colour is used for the currently selected date"); + + + + DocDeclStr( + void, SetHolidayColours(const wxColour& colFg, const wxColour& colBg), + "holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is used)"); + + DocDeclStr( + wxColour, GetHolidayColourFg() const, + "holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is used)"); + + DocDeclStr( + wxColour, GetHolidayColourBg() const, + "holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is used)"); + + + + DocDeclStr( + wxCalendarDateAttr*, GetAttr(size_t day) const, + "Returns the attribute for the given date (should be in the range 1...31).\n" + "The returned value may be None"); + + DocDeclStr( + void, SetAttr(size_t day, wxCalendarDateAttr *attr), + "Associates the attribute with the specified date (in the range 1...31).\n" + "If the attribute passed is None, the items attribute is cleared."); + + DocDeclStr( + void, SetHoliday(size_t day), + "Marks the specified day as being a holiday in the current month."); + + DocDeclStr( + void, ResetAttr(size_t day), + "Clears any attributes associated with the given day (in the range 1...31)."); + + + + DocAStr(HitTest, + "HitTest(Point pos) -> (result, date, weekday)", +"Returns 3-tuple with information about the given position on the calendar +control. The first value of the tuple is a result code and determines the +validity of the remaining two values. The result codes are: + + CAL_HITTEST_NOWHERE: hit outside of anything + CAL_HITTEST_HEADER: hit on the header, weekday is valid + CAL_HITTEST_DAY: hit on a day in the calendar, date is set. +"); + %extend { + PyObject* HitTest(const wxPoint& pos) { + wxDateTime* date = new wxDateTime; + wxDateTime::WeekDay wd; + wxCalendarHitTestResult result = self->HitTest(pos, date, &wd); + wxPyBeginBlockThreads(); + PyObject* tup = PyTuple_New(3); + PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(result)); + PyTuple_SET_ITEM(tup, 1, wxPyConstructObject(date, wxT("wxDateTime"), 1)); + PyTuple_SET_ITEM(tup, 2, PyInt_FromLong(wd)); + wxPyEndBlockThreads(); + return tup; + } + } + + DocDeclStr( + wxControl*, GetMonthControl() const, + "get the currently shown control for month"); + + DocDeclStr( + wxControl*, GetYearControl() const, + "get the currently shown control for year"); }; -//--------------------------------------------------------------------------- //--------------------------------------------------------------------------- -%pragma(python) include="_calextras.py"; +%init %{ +%} //---------------------------------------------------------------------------