]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_datetime.i
test wxString's char<->wchar_t ctors
[wxWidgets.git] / wxPython / src / _datetime.i
index 1656d0f2f9575fa545b4643bc419437a9ea2947d..e1d03a945bc7136e4375ab245e93a7cb9fdbbb01 100644 (file)
 %{
 #include <wx/datetime.h>
 
-    DECLARE_DEF_STRING2(DateFormatStr, wxT("%c"));
-    DECLARE_DEF_STRING2(TimeSpanFormatStr, wxT("%H:%M:%S"));
-
-%}    
+%}
+MAKE_CONST_WXSTRING2(DateFormatStr, wxT("%c"));
+MAKE_CONST_WXSTRING2(TimeSpanFormatStr, wxT("%H:%M:%S"));
 
 //---------------------------------------------------------------------------
 
 
-%typemap(in) wxDateTime::TimeZone& {
+%typemap(in) wxDateTime::TimeZone& (bool temp=False) {
     $1 = new wxDateTime::TimeZone((wxDateTime::TZ)PyInt_AsLong($input));
+    temp = True;
 }
 %typemap(python,freearg) wxDateTime::TimeZone& {
-    if ($1) delete $1;
+    if (temp$argnum) delete $1;
 }
 
 
 
 //---------------------------------------------------------------------------
 
-%noautorepr wxDateTime;
+//typedef unsigned short wxDateTime_t;
+#define wxDateTime_t int
 
 // wxDateTime represents an absolute moment in the time
 class wxDateTime {
 public:
-    typedef unsigned short wxDateTime_t;
 
     enum TZ
     {
@@ -258,7 +258,7 @@ public:
                          // or use the default country with any other
 
         // Western European countries: we assume that they all follow the same
-        // DST rules (true or false?)
+        // DST rules (True or False?)
         Country_WesternEurope_Start,
         Country_EEC = Country_WesternEurope_Start,
         France,
@@ -319,7 +319,7 @@ public:
         // get the current country
     static Country GetCountry();
 
-        // return TRUE if the country is a West European one (in practice,
+        // return True if the country is a West European one (in practice,
         // this means that the same DST rules as for EEC apply)
     static bool IsWestEuropeanCountry(Country country = Country_Default);
 
@@ -335,7 +335,7 @@ public:
         // return the current month
     static Month GetCurrentMonth(Calendar cal = Gregorian);
 
-        // returns TRUE if the given year is a leap year in the given calendar
+        // returns True if the given year is a leap year in the given calendar
     static bool IsLeapYear(int year = Inv_Year, Calendar cal = Gregorian);
 
         // get the century (19 for 1999, 20 for 2000 and -5 for 492 BC)
@@ -363,10 +363,12 @@ public:
     static wxString GetWeekDayName(WeekDay weekday,
                                    NameFlags flags = Name_Full);
 
-        // get the AM and PM strings in the current locale (may be empty)
-    static void GetAmPmStrings(wxString *OUTPUT, wxString *OUTPUT);
+    DocDeclAStr(
+        static void, GetAmPmStrings(wxString *OUTPUT, wxString *OUTPUT),
+        "GetAmPmStrings() -> (am, pm)",
+        "Get the AM and PM strings in the current locale (may be empty)", "");
 
-        // return TRUE if the given country uses DST for this year
+        // return True if the given country uses DST for this year
     static bool IsDSTApplicable(int year = Inv_Year,
                                 Country country = Country_Default);
 
@@ -479,7 +481,7 @@ public:
     wxDateTime GetPrevWeekDay(WeekDay weekday);
 
         // set to Nth occurence of given weekday in the given month of the
-        // given year (time is set to 0), return TRUE on success and FALSE on
+        // given year (time is set to 0), return True on success and False on
         // failure. n may be positive (1..5) or negative to count from the end
         // of the month (see helper function SetToLastWeekDay())
     bool SetToWeekDay(WeekDay weekday,
@@ -500,7 +502,7 @@ public:
                               int year = Inv_Year);
 
         // sets the date to the given day of the given week in the year,
-        // returns TRUE on success and FALSE if given date doesn't exist (e.g.
+        // returns True on success and False if given date doesn't exist (e.g.
         // numWeek is > 53)
     bool SetToTheWeek(wxDateTime_t numWeek, WeekDay weekday = Mon, WeekFlags flags = Monday_First);
     wxDateTime GetWeek(wxDateTime_t numWeek, WeekDay weekday = Mon, WeekFlags flags = Monday_First);
@@ -557,12 +559,12 @@ public:
     // timezone stuff
 
         // transform to any given timezone
-    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);
-    wxDateTime& MakeGMT(bool noDST = FALSE);
+    wxDateTime ToGMT(bool noDST = False);
+    wxDateTime& MakeGMT(bool noDST = False);
 
         // is daylight savings time in effect at this moment according to the
         // rules of the specified country?
@@ -576,9 +578,12 @@ public:
     // ------------------------------------------------------------------------
     // accessors
 
-        // is the date valid (TRUE even for non initialized objects)?
+        // is the date valid (True even for non initialized objects)?
     inline bool IsValid() const;
+    %pythoncode { Ok = IsValid }
+    %pythoncode { def __nonzero__(self): return self.Ok() };
 
+    
         // get the number of seconds since the Unix epoch - returns (time_t)-1
         // if the value is out of range
     inline time_t GetTicks() const;
@@ -635,20 +640,20 @@ public:
     // ------------------------------------------------------------------------
     // comparison (see also functions below for operator versions)
 
-        // returns TRUE if the two moments are strictly identical
+        // returns True if the two moments are strictly identical
     inline bool IsEqualTo(const wxDateTime& datetime) const;
 
-        // returns TRUE if the date is strictly earlier than the given one
+        // returns True if the date is strictly earlier than the given one
     inline bool IsEarlierThan(const wxDateTime& datetime) const;
 
-        // returns TRUE if the date is strictly later than the given one
+        // returns True if the date is strictly later than the given one
     inline bool IsLaterThan(const wxDateTime& datetime) const;
 
-        // returns TRUE if the date is strictly in the given range
+        // returns True if the date is strictly in the given range
     inline bool IsStrictlyBetween(const wxDateTime& t1,
                                   const wxDateTime& t2) const;
 
-        // returns TRUE if the date is in the given range
+        // returns True if the date is in the given range
     inline bool IsBetween(const wxDateTime& t1, const wxDateTime& t2) const;
 
         // do these two objects refer to the same date?
@@ -708,12 +713,39 @@ public:
         wxDateTime __sub__(const wxTimeSpan& other) { return *self - other; }
         wxDateTime __sub__(const wxDateSpan& other) { return *self - other; }
 
-        bool __lt__(const wxDateTime& other) { return *self <  other; }
-        bool __le__(const wxDateTime& other) { return *self <= other; }
-        bool __gt__(const wxDateTime& other) { return *self >  other; }
-        bool __ge__(const wxDateTime& other) { return *self >= other; }
-        bool __eq__(const wxDateTime& other) { return *self == other; }
-        bool __ne__(const wxDateTime& 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
+        // either operand is invalid.
+        bool __lt__(const wxDateTime* other) { 
+            if (!other || !self->IsValid() || !other->IsValid()) return self <  other; 
+            return (*self <  *other);
+        }
+        bool __le__(const wxDateTime* other) { 
+            if (!other || !self->IsValid() || !other->IsValid()) return self <= other; 
+            return (*self <= *other);
+        }
+        bool __gt__(const wxDateTime* other) { 
+            if (!other || !self->IsValid() || !other->IsValid()) return self >  other; 
+            return (*self >  *other);
+        }
+        bool __ge__(const wxDateTime* other) { 
+            if (!other || !self->IsValid() || !other->IsValid()) return self >= other; 
+            return (*self >= *other);
+        }
+
+        bool __eq__(const wxDateTime* other) {
+            if (!other || !self->IsValid() || !other->IsValid()) return self == other; 
+            return (*self == *other);
+        }
+        bool __ne__(const wxDateTime* other) {
+            if (!other || !self->IsValid() || !other->IsValid()) return self != other; 
+            return (*self != *other);
+        }            
     }
 
         
@@ -804,16 +836,21 @@ public:
 
     %pythoncode {
     def __repr__(self):
-        return '<wxDateTime: \"%s\" at %s>' % ( self.Format(), self.this)
+        if self.IsValid():
+            return '<wx.DateTime: \"%s\" at %s>' % ( self.Format(), self.this)
+        else:
+            return '<wx.DateTime: \"INVALID\" at %s>' % self.this
     def __str__(self):
-        return self.Format()
+        if self.IsValid():
+            return self.Format()
+        else:
+            return "INVALID DateTime"
     }
 };
 
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 
-%noautorepr wxTimeSpan;
 
 // This class contains a difference between 2 wxDateTime values, so it makes
 // sense to add it to wxDateTime and it is the result of subtraction of 2
@@ -885,12 +922,13 @@ public:
         wxTimeSpan __sub__(const wxTimeSpan& other) { return *self - other; }
         wxTimeSpan __mul__(int n)                   { return *self * n; }
         wxTimeSpan __rmul__(int n)                  { return n * *self; }
-        bool __lt__(const wxTimeSpan& other) { return *self <  other; }
-        bool __le__(const wxTimeSpan& other) { return *self <= other; }
-        bool __gt__(const wxTimeSpan& other) { return *self >  other; }
-        bool __ge__(const wxTimeSpan& other) { return *self >= other; }
-        bool __eq__(const wxTimeSpan& other) { return *self == other; }
-        bool __ne__(const wxTimeSpan& other) { return *self != other; }
+        
+        bool __lt__(const wxTimeSpan* other) { return other ? (*self <  *other) : False; }
+        bool __le__(const wxTimeSpan* other) { return other ? (*self <= *other) : False; }
+        bool __gt__(const wxTimeSpan* other) { return other ? (*self >  *other) : True;  }
+        bool __ge__(const wxTimeSpan* other) { return other ? (*self >= *other) : True;  }
+        bool __eq__(const wxTimeSpan* other) { return other ? (*self == *other) : False; }
+        bool __ne__(const wxTimeSpan* other) { return other ? (*self != *other) : True;  }
     }
 
 
@@ -910,12 +948,12 @@ public:
     inline bool IsEqualTo(const wxTimeSpan& ts) const;
 
         // compare two timestamps: works with the absolute values, i.e. -2
-        // hours is longer than 1 hour. Also, it will return FALSE if the
+        // hours is longer than 1 hour. Also, it will return False if the
         // timespans are equal in absolute value.
     inline bool IsLongerThan(const wxTimeSpan& ts) const;
 
         // compare two timestamps: works with the absolute values, i.e. 1
-        // hour is shorter than -2 hours. Also, it will return FALSE if the
+        // hour is shorter than -2 hours. Also, it will return False if the
         // timespans are equal in absolute value.
     bool IsShorterThan(const wxTimeSpan& t) const;
 
@@ -950,7 +988,7 @@ public:
 
     %pythoncode {
      def __repr__(self):
-         return '<wxTimeSpan: \"%s\" at %s>' % ( self.Format(), self.this)
+         return '<wx.TimeSpan: \"%s\" at %s>' % ( self.Format(), self.this)
      def __str__(self):
          return self.Format()
      }
@@ -1070,12 +1108,14 @@ public:
         wxDateSpan __sub__(const wxDateSpan& other) { return *self - other; }
         wxDateSpan __mul__(int n)                   { return *self * n; }
         wxDateSpan __rmul__(int n)                  { return n * *self; }
-//         bool __lt__(const wxDateSpan& other) { return *self <  other; }
-//         bool __le__(const wxDateSpan& other) { return *self <= other; }
-//         bool __gt__(const wxDateSpan& other) { return *self >  other; }
-//         bool __ge__(const wxDateSpan& other) { return *self >= other; }
-        bool __eq__(const wxDateSpan& other) { return *self == other; }
-        bool __ne__(const wxDateSpan& other) { return *self != other; }
+        
+//         bool __lt__(const wxDateSpan* other) { return other ? (*self <  *other) : False; }
+//         bool __le__(const wxDateSpan* other) { return other ? (*self <= *other) : False; }
+//         bool __gt__(const wxDateSpan* other) { return other ? (*self >  *other) : True;  }
+//         bool __ge__(const wxDateSpan* other) { return other ? (*self >= *other) : True;  }
+        
+        bool __eq__(const wxDateSpan* other) { return other ? (*self == *other) : False; }
+        bool __ne__(const wxDateSpan* other) { return other ? (*self != *other) : True;  }
     }
 };
 
@@ -1091,5 +1131,9 @@ long wxGetUTCTime();
 long wxGetCurrentTime();
 wxLongLong wxGetLocalTimeMillis();
 
+%immutable;
+const wxDateTime        wxDefaultDateTime;
+%mutable;
+
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------