X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/54f9ee450905e98296e6afd1376b3d1e06a1e00f..eccab1a711f3fed5d27e026f2f4c496bc6b9a38b:/wxPython/src/calendar.i diff --git a/wxPython/src/calendar.i b/wxPython/src/calendar.i index 8f2f16602b..1ebf884e2b 100644 --- a/wxPython/src/calendar.i +++ b/wxPython/src/calendar.i @@ -10,7 +10,11 @@ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -%module calendar +%define DOCSTRING +"Classes for an interactive Calendar control." +%enddef + +%module(package="wx", docstring=DOCSTRING) calendar %{ @@ -24,9 +28,7 @@ %import misc.i %pythoncode { wx = _core } -%pythoncode { __docfilter__ = wx.__docfilter__ } - -%include _calendar_rename.i +%pythoncode { __docfilter__ = wx.__DocFilter(globals()) } //--------------------------------------------------------------------------- @@ -62,20 +64,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."); +"A set of customization attributes for a calendar date, which can be +used to control the look of the Calendar object.", ""); class wxCalendarDateAttr { public: DocStr(wxCalendarDateAttr, - "Create a CalendarDateAttr."); + "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); + ~wxCalendarDateAttr(); + // setters void SetTextColour(const wxColour& colText); @@ -99,22 +103,37 @@ public: wxColour GetBorderColour() const; wxFont GetFont() const; wxCalendarDateBorder GetBorder() const; + + %property(BackgroundColour, GetBackgroundColour, SetBackgroundColour, doc="See `GetBackgroundColour` and `SetBackgroundColour`"); + %property(Border, GetBorder, SetBorder, doc="See `GetBorder` and `SetBorder`"); + %property(BorderColour, GetBorderColour, SetBorderColour, doc="See `GetBorderColour` and `SetBorderColour`"); + %property(Font, GetFont, SetFont, doc="See `GetFont` and `SetFont`"); + %property(TextColour, GetTextColour, SetTextColour, doc="See `GetTextColour` and `SetTextColour`"); }; //--------------------------------------------------------------------------- class wxCalendarCtrl; -class wxCalendarEvent : public wxCommandEvent +class wxCalendarEvent : public wxDateEvent { public: wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type); - const wxDateTime GetDate() const; - void SetDate(const wxDateTime &date); void SetWeekDay(const wxDateTime::WeekDay wd); wxDateTime::WeekDay GetWeekDay() const; + %pythoncode { + def PySetDate(self, date): + """takes datetime.datetime or datetime.date object""" + self.SetDate(_pydate2wxdate(date)) + + def PyGetDate(self): + """returns datetime.date object""" + return _wxdate2pydate(self.GetDate()) + } + + %property(WeekDay, GetWeekDay, SetWeekDay, doc="See `GetWeekDay` and `SetWeekDay`"); }; @@ -142,220 +161,252 @@ 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. +"The calendar control allows the user to pick a date interactively. + +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.", " + +Window 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 CAL_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 one of +EVT_CALENDAR_DAY, MONTH or YEAR events and an EVT_CALENDAR_SEL_CHANGED +event. "); +MustHaveApp(wxCalendarCtrl); + class wxCalendarCtrl : public wxControl { public: %pythonAppend wxCalendarCtrl "self._setOORInfo(self)" %pythonAppend wxCalendarCtrl() "" - DocStr(wxCalendarCtrl, "Create and show a calendar control."); - RefDoc(wxCalendarCtrl, ""); // turn it off for the ctors - - wxCalendarCtrl(wxWindow *parent, - wxWindowID id=-1, - const wxDateTime& date = wxDefaultDateTime, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS, - const wxString& name = wxPyCalendarNameStr); - + DocCtorStr( + wxCalendarCtrl(wxWindow *parent, + wxWindowID id=-1, + const wxDateTime& date = wxDefaultDateTime, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS, + const wxString& name = wxPyCalendarNameStr), + "Create and show a calendar control.", ""); + + DocCtorStrName( + wxCalendarCtrl(), + "Precreate a CalendarCtrl for 2-phase creation.", "", + PreCalendarCtrl); - 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( + 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), + "Acutally create the GUI portion of the CalendarCtrl for 2-phase +creation.", ""); + DocDeclStr( void, SetDate(const wxDateTime& date), - "Sets the current date."); + "Sets the current date.", ""); DocDeclStr( - const wxDateTime&, GetDate() const, - "Gets the currently selected date."); + const wxDateTime, GetDate() const, + "Gets the currently selected date.", ""); DocDeclStr( bool, SetLowerDateLimit(const wxDateTime& date = wxDefaultDateTime), - "set the range in which selection can occur"); + "set the range in which selection can occur", ""); DocDeclStr( bool, SetUpperDateLimit(const wxDateTime& date = wxDefaultDateTime), - "set the range in which selection can occur"); + "set the range in which selection can occur", ""); DocDeclStr( - const wxDateTime&, GetLowerDateLimit() const, - "get the range in which selection can occur"); + 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"); + 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"); + "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."); + void, EnableYearChange(bool enable = true), + "This function should be used instead of changing CAL_NO_YEAR_CHANGE +style bit directly. It allows or disallows the user to change the year +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."); + void, EnableMonthChange(bool enable = true), + "This function should be used instead of changing CAL_NO_MONTH_CHANGE +style bit. It allows or disallows the user to change the month +interactively. Note 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."); + void, EnableHolidayDisplay(bool display = true), + "This function should be used instead of changing CAL_SHOW_HOLIDAYS +style 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"); + "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"); + "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"); + "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"); + "Highlight colour is used for the currently selected date.", ""); DocDeclStr( wxColour, GetHighlightColourFg() const, - "highlight colour is used for the currently selected date"); + "Highlight colour is used for the currently selected date.", ""); DocDeclStr( wxColour, GetHighlightColourBg() const, - "highlight colour is used for the currently selected date"); + "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)"); + "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)"); + "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)"); + "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"); - + "Returns the attribute for the given date (should be in the range +1...31). The returned value may be None", ""); + + %disownarg(wxCalendarDateAttr *attr); 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."); + "Associates the attribute with the specified date (in the range +1...31). If the attribute passed is None, the items attribute is +cleared.", ""); + %cleardisown(wxCalendarDateAttr *attr); DocDeclStr( void, SetHoliday(size_t day), - "Marks the specified day as being a holiday in the current month."); + "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)."); + "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. +"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); - bool blocked = wxPyBeginBlockThreads(); + wxPyBlock_t blocked = wxPyBeginBlockThreads(); PyObject* tup = PyTuple_New(3); PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(result)); PyTuple_SET_ITEM(tup, 1, wxPyConstructObject(date, wxT("wxDateTime"), 1)); @@ -367,14 +418,77 @@ validity of the remaining two values. The result codes are: DocDeclStr( wxControl*, GetMonthControl() const, - "get the currently shown control for month"); + "Get the currently shown control for month.", ""); DocDeclStr( wxControl*, GetYearControl() const, - "get the currently shown control for year"); -}; + "Get the currently shown control for year.", ""); + + static wxVisualAttributes + GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); + + %pythoncode { + def PySetDate(self, date): + """takes datetime.datetime or datetime.date object""" + self.SetDate(_pydate2wxdate(date)) + + def PyGetDate(self): + """returns datetime.date object""" + return _wxdate2pydate(self.GetDate()) + + def PySetLowerDateLimit(self, date): + """takes datetime.datetime or datetime.date object""" + self.SetLowerDateLimit(_pydate2wxdate(date)) + + def PySetUpperDateLimit(self, date): + """takes datetime.datetime or datetime.date object""" + self.SetUpperDateLimit(_pydate2wxdate(date)) + + def PySetDateRange(self, lowerdate, upperdate): + """takes datetime.datetime or datetime.date objects""" + self.PySetLowerDateLimit(lowerdate) + self.PySetUpperDateLimit(upperdate) + def PyGetLowerDateLimit(self): + """returns datetime.date object""" + return _wxdate2pydate(self.GetLowerDateLimit()) + def PyGetUpperDateLimit(self): + """returns datetime.date object""" + return _wxdate2pydate(self.GetUpperDateLimit()) + } + + %property(Date, GetDate, SetDate, doc="See `GetDate` and `SetDate`"); + %property(HeaderColourBg, GetHeaderColourBg, doc="See `GetHeaderColourBg`"); + %property(HeaderColourFg, GetHeaderColourFg, doc="See `GetHeaderColourFg`"); + %property(HighlightColourBg, GetHighlightColourBg, doc="See `GetHighlightColourBg`"); + %property(HighlightColourFg, GetHighlightColourFg, doc="See `GetHighlightColourFg`"); + %property(HolidayColourBg, GetHolidayColourBg, doc="See `GetHolidayColourBg`"); + %property(HolidayColourFg, GetHolidayColourFg, doc="See `GetHolidayColourFg`"); + %property(LowerDateLimit, GetLowerDateLimit, SetLowerDateLimit, doc="See `GetLowerDateLimit` and `SetLowerDateLimit`"); + %property(MonthControl, GetMonthControl, doc="See `GetMonthControl`"); + %property(UpperDateLimit, GetUpperDateLimit, SetUpperDateLimit, doc="See `GetUpperDateLimit` and `SetUpperDateLimit`"); + %property(YearControl, GetYearControl, doc="See `GetYearControl`"); +}; + +%pythoncode { +def _pydate2wxdate(date): + import datetime + assert isinstance(date, (datetime.datetime, datetime.date)) + tt = date.timetuple() + dmy = (tt[2], tt[1]-1, tt[0]) + return wx.DateTimeFromDMY(*dmy) + +def _wxdate2pydate(date): + import datetime + assert isinstance(date, wx.DateTime) + if date.IsValid(): + ymd = map(int, date.FormatISODate().split('-')) + return datetime.date(*ymd) + else: + return None +} + //--------------------------------------------------------------------------- %init %{