]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/calendar.i
Move setting of mac.listctrl.always_use_generic to wx.PyApp.__init__
[wxWidgets.git] / wxPython / src / calendar.i
index 262170001e0d1b6dce7b35dfb3659b01f7c3bc6d..1ebf884e2b211948d8d8414abc9c6d22dd94e85c 100644 (file)
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
-%module calendar
+%define DOCSTRING
+"Classes for an interactive Calendar control."
+%enddef
+
+%module(package="wx", docstring=DOCSTRING) calendar
 
 
 %{
@@ -26,8 +30,6 @@
 %pythoncode { wx = _core }
 %pythoncode { __docfilter__ = wx.__DocFilter(globals()) }
 
-%include _calendar_rename.i
-
 //---------------------------------------------------------------------------
 
 enum {
@@ -63,19 +65,21 @@ 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.");
+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`");
 };
 
 
@@ -158,14 +177,14 @@ 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
+`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.
+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.
+EVT_CALENDAR_MONTH event handler.", "
 
 Window Styles
 -------------
@@ -184,12 +203,13 @@ Window Styles
     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.
@@ -198,6 +218,7 @@ Events
     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
@@ -206,14 +227,14 @@ event.
 ");       
 
        
+MustHaveApp(wxCalendarCtrl);
+
 class wxCalendarCtrl : public wxControl
 {
 public:
     %pythonAppend wxCalendarCtrl      "self._setOORInfo(self)"
     %pythonAppend wxCalendarCtrl()    ""
 
-    RefDoc(wxCalendarCtrl, ""); // turn it off for the ctors
-
     DocCtorStr(
         wxCalendarCtrl(wxWindow *parent,
                        wxWindowID id=-1,
@@ -222,11 +243,11 @@ public:
                        const wxSize& size = wxDefaultSize,
                        long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS,
                        const wxString& name = wxPyCalendarNameStr),
-        "Create and show a calendar control.");
+        "Create and show a calendar control.", "");
 
     DocCtorStrName(
         wxCalendarCtrl(),
-        "Precreate a CalendarCtrl for 2-phase creation.",
+        "Precreate a CalendarCtrl for 2-phase creation.", "",
         PreCalendarCtrl);
 
     DocDeclStr(
@@ -238,129 +259,131 @@ public:
                       long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS,
                       const wxString& name = wxPyCalendarNameStr),
         "Acutally create the GUI portion of the CalendarCtrl for 2-phase
-creation.");
+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),
+        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.");
+interactively.", "");
     
     DocDeclStr(
-        void, EnableMonthChange(bool enable = True),
+        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.");
+not be changed either.", "");
 
     DocDeclStr(
-        void, EnableHolidayDisplay(bool display = True),
+        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.");
+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).");
+used).", "");
     
     DocDeclStr(
         wxColour, GetHolidayColourFg() const,
         "Holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is
-used).");
+used).", "");
     
     DocDeclStr(
         wxColour, GetHolidayColourBg() const,
         "Holiday colour is used for the holidays (if CAL_SHOW_HOLIDAYS style is
-used).");
+used).", "");
 
 
     
     DocDeclStr(
         wxCalendarDateAttr*, GetAttr(size_t day) const,
         "Returns the attribute for the given date (should be in the range
-1...31).  The returned value may be None");
-    
+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).  If the attribute passed is None, the items attribute is
-cleared.");
+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).");
+1...31).", "");
     
 
 
@@ -368,8 +391,9 @@ cleared.");
             "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:
+determines the validity of the remaining two values.",
+"
+The result codes are:
 
     ===================    ============================================
     CAL_HITTEST_NOWHERE    hit outside of anything
@@ -382,7 +406,7 @@ are:
             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));
@@ -394,14 +418,77 @@ 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 %{