From: Włodzimierz Skiba Date: Wed, 16 Feb 2005 09:35:31 +0000 (+0000) Subject: Native PalmOS wxLongLong. Introduction of wxULongLong_t due to 'unsigned' not working... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/6058220154150a2f60b09198a444411873050e52 Native PalmOS wxLongLong. Introduction of wxULongLong_t due to 'unsigned' not working on internally typedefed wxLongLong_t (both unsigned wxLongLong_t and wxULongLong_t should work for other platforms). Improvements in wxDatePicker control on PalmOS. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32092 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/defs.h b/include/wx/defs.h index 71ec108a53..5200bf4e44 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -849,10 +849,11 @@ inline void *wxUIntToPtr(wxUIntPtr p) /* 64 bit */ -/* NB: we #define and not typedef wxLongLong_t because we want to be able to */ -/* use 'unsigned wxLongLong_t' as well and because we use "#ifdef */ +/* NB: we #define and not typedef wxLongLong_t because we use "#ifdef */ /* wxLongLong_t" in wx/longlong.h */ +/* wxULongLong_t is set later (usually to unsigned wxLongLong_t) */ + /* to avoid compilation problems on 64bit machines with ambiguous method calls */ /* we will need to define this */ #undef wxLongLongIsLong @@ -864,6 +865,10 @@ inline void *wxUIntToPtr(wxUIntPtr p) #define wxLongLongSuffix l #define wxLongLongFmtSpec _T("l") #define wxLongLongIsLong +#elif defined(__WXPALMOS__) + #define wxLongLong_t int64_t + #define wxLongLongSuffix ll + #define wxLongLongFmtSpec _T("ll") #elif (defined(__VISUALC__) && defined(__WIN32__)) #define wxLongLong_t __int64 #define wxLongLongSuffix i64 @@ -904,12 +909,19 @@ inline void *wxUIntToPtr(wxUIntPtr p) #ifdef wxLongLong_t + + #ifdef __WXPALMOS__ + #define wxULongLong_t uint64_t + #else + #define wxULongLong_t unsigned wxLongLong_t + #endif + /* these macros allow to definea 64 bit constants in a portable way */ #define wxLL(x) wxCONCAT(x, wxLongLongSuffix) #define wxULL(x) wxCONCAT(x, wxCONCAT(u, wxLongLongSuffix)) typedef wxLongLong_t wxInt64; - typedef unsigned wxLongLong_t wxUint64; + typedef wxULongLong_t wxUint64; #endif diff --git a/include/wx/longlong.h b/include/wx/longlong.h index 62d28c53c3..5670a66fab 100644 --- a/include/wx/longlong.h +++ b/include/wx/longlong.h @@ -320,13 +320,13 @@ public: // default ctor initializes to 0 wxULongLongNative() : m_ll(0) { } // from long long - wxULongLongNative(unsigned wxLongLong_t ll) : m_ll(ll) { } + wxULongLongNative(wxULongLong_t ll) : m_ll(ll) { } // from 2 longs wxULongLongNative(unsigned long hi, unsigned long lo) : m_ll(0) { // assign first to avoid precision loss! - m_ll = ((unsigned wxLongLong_t) hi) << 32; - m_ll |= (unsigned wxLongLong_t) lo; + m_ll = ((wxULongLong_t) hi) << 32; + m_ll |= (wxULongLong_t) lo; } // default copy ctor is ok @@ -335,7 +335,7 @@ public: // assignment operators // from native 64 bit integer - wxULongLongNative& operator=(unsigned wxLongLong_t ll) + wxULongLongNative& operator=(wxULongLong_t ll) { m_ll = ll; return *this; } // assignment operators from wxULongLongNative is ok @@ -349,7 +349,7 @@ public: { return (unsigned long)m_ll; } // convert to native ulong long - unsigned wxLongLong_t GetValue() const { return m_ll; } + wxULongLong_t GetValue() const { return m_ll; } // convert to ulong with range checking in the debug mode (only!) unsigned long ToULong() const @@ -367,9 +367,9 @@ public: wxULongLongNative& operator+=(const wxULongLongNative& ll) { m_ll += ll.m_ll; return *this; } - wxULongLongNative operator+(const unsigned wxLongLong_t ll) const + wxULongLongNative operator+(const wxULongLong_t ll) const { return wxULongLongNative(m_ll + ll); } - wxULongLongNative& operator+=(const unsigned wxLongLong_t ll) + wxULongLongNative& operator+=(const wxULongLong_t ll) { m_ll += ll; return *this; } // pre increment @@ -386,9 +386,9 @@ public: wxULongLongNative& operator-=(const wxULongLongNative& ll) { m_ll -= ll.m_ll; return *this; } - wxULongLongNative operator-(const unsigned wxLongLong_t ll) const + wxULongLongNative operator-(const wxULongLong_t ll) const { return wxULongLongNative(m_ll - ll); } - wxULongLongNative& operator-=(const unsigned wxLongLong_t ll) + wxULongLongNative& operator-=(const wxULongLong_t ll) { m_ll -= ll; return *this; } // pre decrement @@ -496,7 +496,7 @@ public: wxString& operator<<(wxString&, const wxULongLongNative&); private: - unsigned wxLongLong_t m_ll; + wxULongLong_t m_ll; }; #endif // wxUSE_LONGLONG_NATIVE @@ -889,7 +889,7 @@ private: wxASSERT( (m_ll >> 32) == m_hi && (unsigned long)m_ll == m_lo ); } - unsigned wxLongLong_t m_ll; + wxULongLong_t m_ll; #endif // wxLONGLONG_TEST_MODE }; diff --git a/include/wx/palmos/datectrl.h b/include/wx/palmos/datectrl.h index cac08bbaab..d6e935fe35 100644 --- a/include/wx/palmos/datectrl.h +++ b/include/wx/palmos/datectrl.h @@ -20,7 +20,7 @@ class WXDLLIMPEXP_ADV wxDatePickerCtrl : public wxDatePickerCtrlBase { public: // ctors - wxDatePickerCtrl() { } + wxDatePickerCtrl() { Init(); } wxDatePickerCtrl(wxWindow *parent, wxWindowID id, @@ -31,6 +31,7 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxDatePickerCtrlNameStr) { + Init(); Create(parent, id, dt, pos, size, style, validator, name); } @@ -59,6 +60,11 @@ public: protected: virtual wxSize DoGetBestSize() const; +private: + wxDateTime m_dt; + + void Init() { m_dt = wxDateTime::Today(); } + DECLARE_NO_COPY_CLASS(wxDatePickerCtrl) }; diff --git a/src/common/longlong.cpp b/src/common/longlong.cpp index 80fc379374..62afbf79a4 100644 --- a/src/common/longlong.cpp +++ b/src/common/longlong.cpp @@ -751,7 +751,7 @@ wxULongLongWx& wxULongLongWx::operator*=(const wxULongLongWx& ll) m_hi = m_lo = 0; #ifdef wxLONGLONG_TEST_MODE - unsigned wxLongLong_t llOld = m_ll; + wxULongLong_t llOld = m_ll; m_ll = 0; #endif // wxLONGLONG_TEST_MODE diff --git a/src/common/stopwatch.cpp b/src/common/stopwatch.cpp index ddf2f994a1..236dc5aa67 100644 --- a/src/common/stopwatch.cpp +++ b/src/common/stopwatch.cpp @@ -240,7 +240,19 @@ wxLongLong wxGetLocalTimeMillis() // If possible, use a function which avoids conversions from // broken-up time structures to milliseconds -#if defined(__WXMSW__) && (defined(__WINE__) || defined(__MWERKS__)) +#if defined(__WXPALMOS__) + DateTimeType thenst; + thenst.second = 0; + thenst.minute = 0; + thenst.hour = 0; + thenst.day = 1; + thenst.month = 1; + thenst.year = 1970; + thenst.weekDay = 5; + uint32_t now = TimGetSeconds(); + uint32_t then = TimDateTimeToSeconds (&thenst); + return SysTimeToMilliSecs(SysTimeInSecs(now - then)); +#elif defined(__WXMSW__) && (defined(__WINE__) || defined(__MWERKS__)) // This should probably be the way all WXMSW compilers should do it // Go direct to the OS for time diff --git a/src/palmos/datectrl.cpp b/src/palmos/datectrl.cpp index c453c8ac61..d64848beca 100644 --- a/src/palmos/datectrl.cpp +++ b/src/palmos/datectrl.cpp @@ -59,7 +59,10 @@ bool wxDatePickerCtrl::Create(wxWindow *parent, wxString label; if ( dt.IsValid() ) + { label = dt.FormatDate(); + m_dt = dt; + } if(!wxControl::PalmCreateControl(selectorTriggerCtl, label, pos, size)) return false; @@ -83,16 +86,14 @@ wxSize wxDatePickerCtrl::DoGetBestSize() const void wxDatePickerCtrl::SetValue(const wxDateTime& dt) { if ( dt.IsValid() ) - SetLabel(dt.FormatDate()); - else - SetLabel(wxEmptyString); + m_dt = dt; + + SetLabel(m_dt.FormatDate()); } wxDateTime wxDatePickerCtrl::GetValue() const { - wxDateTime dt; - // TODO - return dt; + return m_dt; } void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2) @@ -112,12 +113,16 @@ bool wxDatePickerCtrl::GetRange(wxDateTime *dt1, wxDateTime *dt2) const bool wxDatePickerCtrl::SendClickEvent() { - wxDateTime dt(wxDateTime::Today()); - int16_t month = dt.GetMonth(); - int16_t day = dt.GetDay(); - int16_t year = dt.GetYear(); + int16_t month = m_dt.GetMonth(); + int16_t day = m_dt.GetDay(); + int16_t year = m_dt.GetYear(); - if(SelectDay(selectDayByMonth,&month,&day,&year,_T("Pick date"))); + if(!SelectDay(selectDayByDay,&month,&day,&year,_T("Pick date"))) + return false; + wxDateTime dt(m_dt); + dt.Set((wxDateTime::wxDateTime_t)day, (wxDateTime::Month)month, (int)year); + SetValue(dt); + return true; } #endif // wxUSE_DATEPICKCTRL