]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/datetime.h
Override CreateItem so wxListBox can turn its notifications into events.
[wxWidgets.git] / include / wx / datetime.h
index d1172a10e594959ae24d5cd759d4fd36440855d6..15f344cbf8266bd866dc8d1e0118394c338e0d1e 100644 (file)
@@ -52,6 +52,27 @@ class WXDLLIMPEXP_BASE wxDateSpan;
  *   5. wxDateTimeHolidayAuthority for Easter and other christian feasts
  */
 
+/* Two wrapper functions for thread safety */
+#ifdef HAVE_LOCALTIME_R
+#define wxLocaltime_r localtime_r
+#else
+struct tm *wxLocaltime_r(const time_t*, struct tm*);
+#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__)
+     // On Windows, localtime _is_ threadsafe!
+#warning using pseudo thread-safe wrapper for localtime to emulate localtime_r
+#endif
+#endif
+
+#ifdef HAVE_GMTIME_R
+#define wxGmtime_r gmtime_r
+#else
+struct tm *wxGmtime_r(const time_t*, struct tm*);
+#if wxUSE_THREADS && !defined(__WINDOWS__) && !defined(__WATCOMC__)
+     // On Windows, gmtime _is_ threadsafe!
+#warning using pseudo thread-safe wrapper for gmtime to emulate gmtime_r
+#endif
+#endif
+
 /*
   The three (main) classes declared in this header represent:
 
@@ -482,7 +503,7 @@ public:
     static bool IsLeapYear(int year = Inv_Year, Calendar cal = Gregorian);
 
         // get the century (19 for 1999, 20 for 2000 and -5 for 492 BC)
-    static int GetCentury(int year = Inv_Year);
+    static int GetCentury(int year);
 
         // returns the number of days in this year (356 or 355 for Gregorian
         // calendar usually :-)
@@ -683,6 +704,7 @@ public:
                                      Month month = Inv_Month,
                                      int year = Inv_Year);
 
+#if WXWIN_COMPATIBILITY_2_6
         // 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.
         // numWeek is > 53)
@@ -695,6 +717,7 @@ public:
     wxDEPRECATED( wxDateTime GetWeek(wxDateTime_t numWeek,
                                      WeekDay weekday = Mon,
                                      WeekFlags flags = Monday_First) const );
+#endif // WXWIN_COMPATIBILITY_2_6
 
         // returns the date corresponding to the given week day of the given
         // week (in ISO notation) of the specified year
@@ -769,12 +792,10 @@ public:
     inline wxDateTime ToTimezone(const TimeZone& tz, bool noDST = false) const;
     wxDateTime& MakeTimezone(const TimeZone& tz, bool noDST = false);
 
-#if wxABI_VERSION >= 20602
         // interpret current value as being in another timezone and transform
         // it to local one
     inline wxDateTime FromTimezone(const TimeZone& tz, bool noDST = false) const;
     wxDateTime& MakeFromTimezone(const TimeZone& tz, bool noDST = false);
-#endif // ABI >= 2.6.2
 
         // transform to/from GMT/UTC
     wxDateTime ToUTC(bool noDST = false) const { return ToTimezone(UTC, noDST); }
@@ -783,12 +804,10 @@ public:
     wxDateTime ToGMT(bool noDST = false) const { return ToUTC(noDST); }
     wxDateTime& MakeGMT(bool noDST = false) { return MakeUTC(noDST); }
 
-#if wxABI_VERSION >= 20602
     wxDateTime FromUTC(bool noDST = false) const
         { return FromTimezone(UTC, noDST); }
     wxDateTime& MakeFromUTC(bool noDST = false)
         { return MakeFromTimezone(UTC, noDST); }
-#endif // ABI >= 2.6.2
 
         // is daylight savings time in effect at this moment according to the
         // rules of the specified country?
@@ -819,6 +838,9 @@ public:
         // if the value is out of range
     inline time_t GetTicks() const;
 
+        // get the century, same as GetCentury(GetYear())
+    int GetCentury(const TimeZone& tz = Local) const
+            { return GetCentury(GetYear(tz)); }
         // get the year (returns Inv_Year if date is invalid)
     int GetYear(const TimeZone& tz = Local) const
             { return GetTm(tz).year; }
@@ -1059,6 +1081,9 @@ public:
         return localtime(&t);
     }
 
+    // get current time using thread-safe function
+    static struct tm *GetTmNow(struct tm *tmstruct);
+
 private:
     // the current country - as it's the same for all program objects (unless
     // it runs on a _really_ big cluster system :-), this is a static member:
@@ -1092,8 +1117,12 @@ public:
     // constructors
     // ------------------------------------------------------------------------
 
+        // return the timespan for the given number of milliseconds
+    static wxTimeSpan Milliseconds(wxLongLong ms) { return wxTimeSpan(0, 0, 0, ms); }
+    static wxTimeSpan Millisecond() { return Milliseconds(1); }
+
         // return the timespan for the given number of seconds
-    static wxTimeSpan Seconds(long sec) { return wxTimeSpan(0, 0, sec); }
+    static wxTimeSpan Seconds(wxLongLong sec) { return wxTimeSpan(0, 0, sec); }
     static wxTimeSpan Second() { return Seconds(1); }
 
         // return the timespan for the given number of minutes
@@ -1120,8 +1149,8 @@ public:
         // milliseconds)
     inline wxTimeSpan(long hours,
                       long minutes = 0,
-                      long seconds = 0,
-                      long milliseconds = 0);
+                      wxLongLong seconds = 0,
+                      wxLongLong milliseconds = 0);
 
         // default copy ctor is ok
 
@@ -1541,7 +1570,8 @@ inline bool wxDateTime::IsInStdRange() const
 /* static */
 inline wxDateTime wxDateTime::Now()
 {
-    return wxDateTime(*GetTmNow());
+    struct tm tmstruct;
+    return wxDateTime(*GetTmNow(&tmstruct));
 }
 
 /* static */
@@ -1858,24 +1888,20 @@ wxDateTime::ToTimezone(const wxDateTime::TimeZone& tz, bool noDST) const
     MODIFY_AND_RETURN( MakeTimezone(tz, noDST) );
 }
 
-#if wxABI_VERSION >= 20602
-
 inline wxDateTime
 wxDateTime::FromTimezone(const wxDateTime::TimeZone& tz, bool noDST) const
 {
     MODIFY_AND_RETURN( MakeFromTimezone(tz, noDST) );
 }
 
-#endif // ABI >= 2.6.2
-
 // ----------------------------------------------------------------------------
 // wxTimeSpan construction
 // ----------------------------------------------------------------------------
 
 inline wxTimeSpan::wxTimeSpan(long hours,
                               long minutes,
-                              long seconds,
-                              long milliseconds)
+                              wxLongLong seconds,
+                              wxLongLong milliseconds)
 {
     // assign first to avoid precision loss
     m_diff = hours;