]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/calendar.i
fixed introspection of objects with attrs without string names.
[wxWidgets.git] / wxPython / src / calendar.i
index 38dee465fe89ec2b7ef00b91b5d2c3f9099f5eeb..8f2f16602b99d3b74241a60001690b1d893d186d 100644 (file)
 
 
 %{
-#include "export.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 }
+%pythoncode { __docfilter__ = wx.__docfilter__ }
 
-%pragma(python) code = "import wx"
+%include _calendar_rename.i
 
 //---------------------------------------------------------------------------
 
@@ -41,6 +36,8 @@ enum {
     wxCAL_SHOW_HOLIDAYS,
     wxCAL_NO_YEAR_CHANGE,
     wxCAL_NO_MONTH_CHANGE,
+    wxCAL_SEQUENTIAL_MONTH_SELECTION,
+    wxCAL_SHOW_SURROUNDING_WEEKS,
 };
 
 
@@ -48,7 +45,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 +61,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 +94,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,141 +110,275 @@ 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)
 
-def EVT_CALENDAR_MONTH(win, id, fn):
-    win.Connect(id, -1, wxEVT_CALENDAR_MONTH_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_YEAR(win, id, fn):
-    win.Connect(id, -1, wxEVT_CALENDAR_YEAR_CHANGED, fn)
 
-def EVT_CALENDAR_WEEKDAY_CLICKED(win, id, fn):
-    win.Connect(id, -1, wxEVT_CALENDAR_WEEKDAY_CLICKED, 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)
+}
 
-"
 
 //---------------------------------------------------------------------------
 
+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,
+                   wxWindowID id=-1,
                    const wxDateTime& date = wxDefaultDateTime,
                    const wxPoint& pos = wxDefaultPosition,
                    const wxSize& size = wxDefaultSize,
                    long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS,
-                   const char* name = "calendar");
-    %name(wxPreCalendarCtrl)wxCalendarCtrl();
+                   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 char* name = "calendar");
-
-    %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
-    %pragma(python) addtomethod = "wxPreCalendarCtrl:val._setOORInfo(self)"
-
-    // 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);
-
+                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");
 };
 
 
 //---------------------------------------------------------------------------
 
 %init %{
-    wxClassInfo::CleanUpClasses();
-    wxClassInfo::InitializeClasses();
 %}
 
 //---------------------------------------------------------------------------
 
-%pragma(python) include="_calextras.py";
-
-//---------------------------------------------------------------------------
-