]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_datetime.i
Add wx.Rect.InsideRect
[wxWidgets.git] / wxPython / src / _datetime.i
index 8db212c167a322d877d0e8457a57dacef03b00fe..322c03a7eb5e4ba16c950c8b9b8b0949418824b3 100644 (file)
 
 %{
 #include <wx/datetime.h>
 
 %{
 #include <wx/datetime.h>
-
 %}
 %}
-MAKE_CONST_WXSTRING2(DateFormatStr, wxT("%c"));
-MAKE_CONST_WXSTRING2(TimeSpanFormatStr, wxT("%H:%M:%S"));
+
+MAKE_CONST_WXSTRING(DefaultDateTimeFormat);
+MAKE_CONST_WXSTRING(DefaultTimeSpanFormat);
 
 //---------------------------------------------------------------------------
 
 
 //---------------------------------------------------------------------------
 
@@ -30,7 +30,7 @@ MAKE_CONST_WXSTRING2(TimeSpanFormatStr, wxT("%H:%M:%S"));
     $1 = new wxDateTime::TimeZone((wxDateTime::TZ)PyInt_AsLong($input));
     temp = true;
 }
     $1 = new wxDateTime::TimeZone((wxDateTime::TZ)PyInt_AsLong($input));
     temp = true;
 }
-%typemap(python,freearg) wxDateTime::TimeZone& {
+%typemap(freearg) wxDateTime::TimeZone& {
     if (temp$argnum) delete $1;
 }
 
     if (temp$argnum) delete $1;
 }
 
@@ -42,7 +42,7 @@ MAKE_CONST_WXSTRING2(TimeSpanFormatStr, wxT("%H:%M:%S"));
 
 // Convert a wxLongLong to a Python Long by getting the hi/lo dwords, then
 // shifting and oring them together
 
 // Convert a wxLongLong to a Python Long by getting the hi/lo dwords, then
 // shifting and oring them together
-%typemap(python, out) wxLongLong {
+%typemap(out) wxLongLong {
     PyObject *hi, *lo, *shifter, *shifted;
     hi = PyLong_FromLong( $1.GetHi() );
     lo = PyLong_FromLong( $1.GetLo() );
     PyObject *hi, *lo, *shifter, *shifted;
     hi = PyLong_FromLong( $1.GetHi() );
     lo = PyLong_FromLong( $1.GetLo() );
@@ -343,15 +343,15 @@ public:
 
         // returns the number of days in this year (356 or 355 for Gregorian
         // calendar usually :-)
 
         // returns the number of days in this year (356 or 355 for Gregorian
         // calendar usually :-)
-    %name(GetNumberOfDaysinYear)
-        static wxDateTime_t GetNumberOfDays(int year, Calendar cal = Gregorian);
+    %Rename(GetNumberOfDaysinYear, 
+        static wxDateTime_t, GetNumberOfDays(int year, Calendar cal = Gregorian));
 
         // get the number of the days in the given month (default value for
         // the year means the current one)
 
         // get the number of the days in the given month (default value for
         // the year means the current one)
-    %name(GetNumberOfDaysInMonth)
-        static wxDateTime_t GetNumberOfDays(Month month,
+    %Rename(GetNumberOfDaysInMonth, 
+        static wxDateTime_t, GetNumberOfDays(Month month,
                                             int year = Inv_Year,
                                             int year = Inv_Year,
-                                            Calendar cal = Gregorian);
+                                            Calendar cal = Gregorian));
 
         // get the full (default) or abbreviated month name in the current
         // locale, returns empty string on error
 
         // get the full (default) or abbreviated month name in the current
         // locale, returns empty string on error
@@ -363,11 +363,24 @@ public:
     static wxString GetWeekDayName(WeekDay weekday,
                                    NameFlags flags = Name_Full);
 
     static wxString GetWeekDayName(WeekDay weekday,
                                    NameFlags flags = Name_Full);
 
-    DocDeclAStr(
-        static void, GetAmPmStrings(wxString *OUTPUT, wxString *OUTPUT),
-        "GetAmPmStrings() -> (am, pm)",
-        "Get the AM and PM strings in the current locale (may be empty)", "");
-
+    %extend {
+        DocAStr(
+            GetAmPmStrings,
+            "GetAmPmStrings() -> (am, pm)",
+            "Get the AM and PM strings in the current locale (may be empty)", "");
+        static PyObject* GetAmPmStrings() {
+            wxString am;
+            wxString pm;
+            wxDateTime::GetAmPmStrings(&am, &pm);
+            wxPyBlock_t blocked = wxPyBeginBlockThreads();
+            PyObject* tup = PyTuple_New(2);
+            PyTuple_SET_ITEM(tup, 0, wx2PyString(am));
+            PyTuple_SET_ITEM(tup, 1, wx2PyString(pm));
+            wxPyEndBlockThreads(blocked);
+            return tup;
+        }
+    }
+                
         // return True if the given country uses DST for this year
     static bool IsDSTApplicable(int year = Inv_Year,
                                 Country country = Country_Default);
         // return True if the given country uses DST for this year
     static bool IsDSTApplicable(int year = Inv_Year,
                                 Country country = Country_Default);
@@ -400,19 +413,20 @@ public:
     // constructors
 
     wxDateTime();
     // constructors
 
     wxDateTime();
-    %name(DateTimeFromTimeT)wxDateTime(time_t timet);
-    %name(DateTimeFromJDN)wxDateTime(double jdn);
-    %name(DateTimeFromHMS)wxDateTime(wxDateTime_t hour,
+    %RenameCtor(DateTimeFromTimeT, wxDateTime(time_t timet));
+    %RenameCtor(DateTimeFromJDN, wxDateTime(double jdn));
+    %RenameCtor(DateTimeFromHMS, wxDateTime(wxDateTime_t hour,
                                      wxDateTime_t minute = 0,
                                      wxDateTime_t second = 0,
                                      wxDateTime_t minute = 0,
                                      wxDateTime_t second = 0,
-                                     wxDateTime_t millisec = 0);
-    %name(DateTimeFromDMY)wxDateTime(wxDateTime_t day,
+                                     wxDateTime_t millisec = 0));
+    %RenameCtor(DateTimeFromDMY, wxDateTime(wxDateTime_t day,
                                      Month        month = Inv_Month,
                                      int          year = Inv_Year,
                                      wxDateTime_t hour = 0,
                                      wxDateTime_t minute = 0,
                                      wxDateTime_t second = 0,
                                      Month        month = Inv_Month,
                                      int          year = Inv_Year,
                                      wxDateTime_t hour = 0,
                                      wxDateTime_t minute = 0,
                                      wxDateTime_t second = 0,
-                                     wxDateTime_t millisec = 0);
+                                     wxDateTime_t millisec = 0));
+    %RenameCtor(DateTimeFromDateTime, wxDateTime(const wxDateTime& date));
             
     ~wxDateTime();
 
             
     ~wxDateTime();
 
@@ -422,16 +436,16 @@ public:
     wxDateTime& SetToCurrent();
 
         // set to given time_t value
     wxDateTime& SetToCurrent();
 
         // set to given time_t value
-    %name(SetTimeT)wxDateTime& Set(time_t timet);
+    %Rename(SetTimeT, wxDateTime&, Set(time_t timet));
 
         // set to given JDN (beware of rounding errors)
 
         // set to given JDN (beware of rounding errors)
-    %name(SetJDN)wxDateTime& Set(double jdn);
+    %Rename(SetJDN, wxDateTime&, Set(double jdn));
 
         // set to given time, date = today
 
         // set to given time, date = today
-    %name(SetHMS)wxDateTime& Set(wxDateTime_t hour,
+    %Rename(SetHMS, wxDateTime&, Set(wxDateTime_t hour,
                     wxDateTime_t minute = 0,
                     wxDateTime_t second = 0,
                     wxDateTime_t minute = 0,
                     wxDateTime_t second = 0,
-                    wxDateTime_t millisec = 0);
+                    wxDateTime_t millisec = 0));
 
         // from separate values for each component with explicit date
         // (defaults for month and year are the current values)
 
         // from separate values for each component with explicit date
         // (defaults for month and year are the current values)
@@ -573,10 +587,22 @@ public:
     wxDateTime ToTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
     wxDateTime& MakeTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
 
     wxDateTime ToTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
     wxDateTime& MakeTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
 
-        // transform to GMT/UTC
-    wxDateTime ToGMT(bool noDST = false);
+        // interpret current value as being in another timezone and transform
+        // it to local one
+    wxDateTime FromTimezone(const wxDateTime::TimeZone& tz, bool noDST = false) const;
+    wxDateTime& MakeFromTimezone(const wxDateTime::TimeZone& tz, bool noDST = false);
+
+        // transform to/from GMT/UTC
+    wxDateTime ToUTC(bool noDST = false) const;
+    wxDateTime& MakeUTC(bool noDST = false);
+
+    wxDateTime ToGMT(bool noDST = false) const;
     wxDateTime& MakeGMT(bool noDST = false);
 
     wxDateTime& MakeGMT(bool noDST = false);
 
+    wxDateTime FromUTC(bool noDST = false) const;
+    wxDateTime& MakeFromUTC(bool noDST = false);
+
+    
         // is daylight savings time in effect at this moment according to the
         // rules of the specified country?
         //
         // is daylight savings time in effect at this moment according to the
         // rules of the specified country?
         //
@@ -681,15 +707,15 @@ public:
     // arithmetics with dates (see also below for more operators)
 
         // add a time span (positive or negative)
     // arithmetics with dates (see also below for more operators)
 
         // add a time span (positive or negative)
-    %name(AddTS) wxDateTime& Add(const wxTimeSpan& diff);
+    %Rename(AddTS,  wxDateTime&, Add(const wxTimeSpan& diff));
         // add a date span (positive or negative)
         // add a date span (positive or negative)
-    %name(AddDS) wxDateTime& Add(const wxDateSpan& diff);
+    %Rename(AddDS,  wxDateTime&, Add(const wxDateSpan& diff));
 
         // subtract a time span (positive or negative)
 
         // subtract a time span (positive or negative)
-    %name(SubtractTS) wxDateTime& Subtract(const wxTimeSpan& diff);
+    %Rename(SubtractTS,  wxDateTime&, Subtract(const wxTimeSpan& diff));
 
         // subtract a date span (positive or negative)
 
         // subtract a date span (positive or negative)
-    %name(SubtractDS) wxDateTime& Subtract(const wxDateSpan& diff);
+    %Rename(SubtractDS,  wxDateTime&, Subtract(const wxDateSpan& diff));
 
         // return the difference between two dates
     wxTimeSpan Subtract(const wxDateTime& dt) const;
 
         // return the difference between two dates
     wxTimeSpan Subtract(const wxDateTime& dt) const;
@@ -708,14 +734,15 @@ public:
     inline wxDateTime& operator-=(const wxDateSpan& diff);
 
 
     inline wxDateTime& operator-=(const wxDateSpan& diff);
 
 
+//     inline bool operator<(const wxDateTime& dt) const;
+//     inline bool operator<=(const wxDateTime& dt) const;
+//     inline bool operator>(const wxDateTime& dt) const;
+//     inline bool operator>=(const wxDateTime& dt) const;
+//     inline bool operator==(const wxDateTime& dt) const;
+//     inline bool operator!=(const wxDateTime& dt) const;
+
     %nokwargs __add__;
     %nokwargs __sub__;
     %nokwargs __add__;
     %nokwargs __sub__;
-    %nokwargs __lt__;
-    %nokwargs __le__;
-    %nokwargs __gt__;
-    %nokwargs __ge__;
-    %nokwargs __eq__;
-    %nokwargs __ne__;
     %extend {
         wxDateTime __add__(const wxTimeSpan& other) { return *self + other; }
         wxDateTime __add__(const wxDateSpan& other) { return *self + other; }
     %extend {
         wxDateTime __add__(const wxTimeSpan& other) { return *self + other; }
         wxDateTime __add__(const wxDateSpan& other) { return *self + other; }
@@ -724,14 +751,9 @@ public:
         wxDateTime __sub__(const wxTimeSpan& other) { return *self - other; }
         wxDateTime __sub__(const wxDateSpan& other) { return *self - other; }
 
         wxDateTime __sub__(const wxTimeSpan& other) { return *self - other; }
         wxDateTime __sub__(const wxDateSpan& other) { return *self - other; }
 
-//         bool __lt__(const wxDateTime* other) { return other ? (*self <  *other) : false; }
-//         bool __le__(const wxDateTime* other) { return other ? (*self <= *other) : false; }
-//         bool __gt__(const wxDateTime* other) { return other ? (*self >  *other) : true;  }
-//         bool __ge__(const wxDateTime* other) { return other ? (*self >= *other) : true;  }
-
-
         // These fall back to just comparing pointers if other is NULL, or if
         // These fall back to just comparing pointers if other is NULL, or if
-        // either operand is invalid.
+        // either operand is invalid.  This allows Python comparrisons to None
+        // to not assert and to return a sane value for the compare.
         bool __lt__(const wxDateTime* other) { 
             if (!other || !self->IsValid() || !other->IsValid()) return self <  other; 
             return (*self <  *other);
         bool __lt__(const wxDateTime* other) { 
             if (!other || !self->IsValid() || !other->IsValid()) return self <  other; 
             return (*self <  *other);
@@ -759,6 +781,9 @@ public:
         }            
     }
 
         }            
     }
 
+
+
+   
         
     // ------------------------------------------------------------------------
     // conversion from text: all conversions from text return -1 on failure,
         
     // ------------------------------------------------------------------------
     // conversion from text: all conversions from text return -1 on failure,
@@ -783,7 +808,7 @@ public:
         // default, they will not change if they had valid values or will
         // default to Today() otherwise)
         int ParseFormat(const wxString& date,
         // default, they will not change if they had valid values or will
         // default to Today() otherwise)
         int ParseFormat(const wxString& date,
-                        const wxString& format = wxPyDateFormatStr,
+                        const wxString& format = wxPyDefaultDateTimeFormat,
                         const wxDateTime& dateDef = wxDefaultDateTime) {
             const wxChar* rv;
             const wxChar* _date = date;
                         const wxDateTime& dateDef = wxDefaultDateTime) {
             const wxChar* rv;
             const wxChar* _date = date;
@@ -828,7 +853,7 @@ public:
         // argument corresponds to the preferred date and time representation
         // for the current locale) and returns the string containing the
         // resulting text representation
         // argument corresponds to the preferred date and time representation
         // for the current locale) and returns the string containing the
         // resulting text representation
-    wxString Format(const wxString& format = wxPyDateFormatStr,
+    wxString Format(const wxString& format = wxPyDefaultDateTimeFormat,
                     const wxDateTime::TimeZone& tz = LOCAL_TZ) const;
 
         // preferred date representation for the current locale
                     const wxDateTime::TimeZone& tz = LOCAL_TZ) const;
 
         // preferred date representation for the current locale
@@ -848,12 +873,13 @@ public:
     %pythoncode {
     def __repr__(self):
         if self.IsValid():
     %pythoncode {
     def __repr__(self):
         if self.IsValid():
-            return '<wx.DateTime: \"%s\" at %s>' % ( self.Format(), self.this)
+            f = self.Format().encode(wx.GetDefaultPyEncoding())
+            return '<wx.DateTime: \"%s\" at %s>' % ( f, self.this)
         else:
             return '<wx.DateTime: \"INVALID\" at %s>' % self.this
     def __str__(self):
         if self.IsValid():
         else:
             return '<wx.DateTime: \"INVALID\" at %s>' % self.this
     def __str__(self):
         if self.IsValid():
-            return self.Format()
+            return self.Format().encode(wx.GetDefaultPyEncoding())
         else:
             return "INVALID DateTime"
     }
         else:
             return "INVALID DateTime"
     }
@@ -869,9 +895,16 @@ public:
 class wxTimeSpan
 {
 public:
 class wxTimeSpan
 {
 public:
+
+    // TODO:  Need an input typemap for wxLongLong...
+    
+    
+        // return the timespan for the given number of milliseconds
+    static wxTimeSpan Milliseconds(/*wxLongLong*/ long ms);
+    static wxTimeSpan Millisecond(); 
     
         // return the timespan for the given number of seconds
     
         // return the timespan for the given number of seconds
-    static wxTimeSpan Seconds(long sec);
+    static wxTimeSpan Seconds(/*wxLongLong*/ long sec);
     static wxTimeSpan Second();
 
         // return the timespan for the given number of minutes
     static wxTimeSpan Second();
 
         // return the timespan for the given number of minutes
@@ -898,8 +931,8 @@ public:
         // milliseconds)
     wxTimeSpan(long hours = 0,
                long minutes = 0,
         // milliseconds)
     wxTimeSpan(long hours = 0,
                long minutes = 0,
-               long seconds = 0,
-               long milliseconds = 0);
+               /*wxLongLong*/ long seconds = 0,
+               /*wxLongLong*/ long milliseconds = 0);
 
     ~wxTimeSpan();
 
 
     ~wxTimeSpan();
 
@@ -995,13 +1028,14 @@ public:
         // resulting text representation. Notice that only some of format
         // specifiers valid for wxDateTime are valid for wxTimeSpan: hours,
         // minutes and seconds make sense, but not "PM/AM" string for example.
         // resulting text representation. Notice that only some of format
         // specifiers valid for wxDateTime are valid for wxTimeSpan: hours,
         // minutes and seconds make sense, but not "PM/AM" string for example.
-    wxString Format(const wxString& format = wxPyTimeSpanFormatStr) const;
+    wxString Format(const wxString& format = wxPyDefaultTimeSpanFormat) const;
 
     %pythoncode {
      def __repr__(self):
 
     %pythoncode {
      def __repr__(self):
-         return '<wx.TimeSpan: \"%s\" at %s>' % ( self.Format(), self.this)
+         f = self.Format().encode(wx.GetDefaultPyEncoding())
+         return '<wx.TimeSpan: \"%s\" at %s>' % ( f, self.this)
      def __str__(self):
      def __str__(self):
-         return self.Format()
+         return self.Format().encode(wx.GetDefaultPyEncoding())
      }
 };
 
      }
 };