%{
-#include "helpers.h"
+#include "wx/wxPython/wxPython.h"
+#include "wx/wxPython/pyclasses.h"
+
#include <wx/calctrl.h>
%}
//----------------------------------------------------------------------
-%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
//---------------------------------------------------------------------------
wxCAL_SHOW_HOLIDAYS,
wxCAL_NO_YEAR_CHANGE,
wxCAL_NO_MONTH_CHANGE,
+ wxCAL_SEQUENTIAL_MONTH_SELECTION,
+ wxCAL_SHOW_SURROUNDING_WEEKS,
};
{
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
//---------------------------------------------------------------------------
+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);
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;
};
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 <Return> 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.");
+ RefDoc(wxCalendarCtrl, ""); // turn it off for the ctors
+
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);
+ bool 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));
+ PyTuple_SET_ITEM(tup, 2, PyInt_FromLong(wd));
+ wxPyEndBlockThreads(blocked);
+ 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 %{
+%}
//---------------------------------------------------------------------------