projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix for HP and IBM compilers, calls to static template functions must be qualified
[wxWidgets.git]
/
src
/
msw
/
datectrl.cpp
diff --git
a/src/msw/datectrl.cpp
b/src/msw/datectrl.cpp
index 8602e3d966f77b1233b1e5a1cdfb7ff08e102527..58a3b435c2951dcea56be5cd59f199c4cf1c2237 100644
(file)
--- a/
src/msw/datectrl.cpp
+++ b/
src/msw/datectrl.cpp
@@
-26,11
+26,11
@@
#if wxUSE_DATEPICKCTRL
#ifndef WX_PRECOMP
#if wxUSE_DATEPICKCTRL
#ifndef WX_PRECOMP
+ #include "wx/msw/wrapwin.h"
+ #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
#include "wx/app.h"
#include "wx/intl.h"
#include "wx/dcclient.h"
#include "wx/app.h"
#include "wx/intl.h"
#include "wx/dcclient.h"
- #include "wx/msw/wrapwin.h"
- #include "wx/msw/wrapcctl.h"
#include "wx/msw/private.h"
#endif
#include "wx/msw/private.h"
#endif
@@
-104,29
+104,40
@@
wxDatePickerCtrl::Create(wxWindow *parent,
static bool s_initDone = false; // MT-ok: used from GUI thread only
if ( !s_initDone )
{
static bool s_initDone = false; // MT-ok: used from GUI thread only
if ( !s_initDone )
{
+#ifndef __WXWINCE__
if ( wxApp::GetComCtl32Version() < 470 )
{
wxLogError(_("This system doesn't support date picker control, please upgrade your version of comctl32.dll"));
return false;
}
if ( wxApp::GetComCtl32Version() < 470 )
{
wxLogError(_("This system doesn't support date picker control, please upgrade your version of comctl32.dll"));
return false;
}
+#endif
#if wxUSE_DYNLIB_CLASS
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);
icex.dwICC = ICC_DATE_CLASSES;
#if wxUSE_DYNLIB_CLASS
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(icex);
icex.dwICC = ICC_DATE_CLASSES;
- wxDynamicLibrary dllComCtl32(_T("comctl32.dll"), wxDL_VERBATIM);
-
- typedef BOOL (WINAPI *ICCEx_t)(INITCOMMONCONTROLSEX *);
- wxDYNLIB_FUNCTION( ICCEx_t, InitCommonControlsEx, dllComCtl32 );
+ wxDynamicLibrary dllComCtl32(
+#ifdef __WXWINCE__
+ _T("commctrl.dll")
+#else
+ _T("comctl32.dll")
+#endif
+ , wxDL_VERBATIM);
- if (
pfnInitCommonControlsEx
)
+ if (
dllComCtl32.IsLoaded()
)
{
{
- (*pfnInitCommonControlsEx)(&icex);
- }
+ typedef BOOL (WINAPI *ICCEx_t)(INITCOMMONCONTROLSEX *);
+ wxDYNLIB_FUNCTION( ICCEx_t, InitCommonControlsEx, dllComCtl32 );
+
+ if ( pfnInitCommonControlsEx )
+ {
+ (*pfnInitCommonControlsEx)(&icex);
+ }
- s_initDone = true;
+ s_initDone = true;
+ }
#endif
}
#endif
}
@@
-145,6
+156,8
@@
wxDatePickerCtrl::Create(wxWindow *parent,
if ( dt.IsValid() || (style & wxDP_ALLOWNONE) )
SetValue(dt);
if ( dt.IsValid() || (style & wxDP_ALLOWNONE) )
SetValue(dt);
+ else
+ SetValue(wxDateTime::Today());
return true;
}
return true;
}
@@
-242,10
+255,19
@@
void wxDatePickerCtrl::SetValue(const wxDateTime& dt)
{
wxLogDebug(_T("DateTime_SetSystemtime() failed"));
}
{
wxLogDebug(_T("DateTime_SetSystemtime() failed"));
}
+
+ // we need to keep only the date part, times don't make sense for this
+ // control (in particular, comparisons with other dates would fail)
+ m_date = dt;
+ if ( m_date.IsValid() )
+ m_date.ResetTime();
}
}
+#include <iostream>
+
wxDateTime wxDatePickerCtrl::GetValue() const
{
wxDateTime wxDatePickerCtrl::GetValue() const
{
+#ifdef __WXDEBUG__
wxDateTime dt;
SYSTEMTIME st;
if ( DateTime_GetSystemtime(GetHwnd(), &st) == GDT_VALID )
wxDateTime dt;
SYSTEMTIME st;
if ( DateTime_GetSystemtime(GetHwnd(), &st) == GDT_VALID )
@@
-253,7
+275,12
@@
wxDateTime wxDatePickerCtrl::GetValue() const
wxFromSystemTime(&dt, st);
}
wxFromSystemTime(&dt, st);
}
- return dt;
+ wxASSERT_MSG( m_date.IsValid() == dt.IsValid() &&
+ (!dt.IsValid() || dt == m_date),
+ _T("bug in wxDatePickerCtrl: m_date not in sync") );
+#endif // __WXDEBUG__
+
+ return m_date;
}
void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2)
}
void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2)
@@
-314,17
+341,27
@@
wxDatePickerCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
switch ( hdr->code )
{
case DTN_DATETIMECHANGE:
switch ( hdr->code )
{
case DTN_DATETIMECHANGE:
+ {
NMDATETIMECHANGE *dtch = (NMDATETIMECHANGE *)hdr;
wxDateTime dt;
if ( dtch->dwFlags == GDT_VALID )
wxFromSystemTime(&dt, dtch->st);
NMDATETIMECHANGE *dtch = (NMDATETIMECHANGE *)hdr;
wxDateTime dt;
if ( dtch->dwFlags == GDT_VALID )
wxFromSystemTime(&dt, dtch->st);
- wxDateEvent event(this, dt, wxEVT_DATE_CHANGED);
- if ( GetEventHandler()->ProcessEvent(event) )
+ // filter out duplicate DTN_DATETIMECHANGE events which the native
+ // control sends us when using wxDP_DROPDOWN style
+ if ( (m_date.IsValid() != dt.IsValid()) ||
+ (m_date.IsValid() && dt != m_date) )
{
{
- *result = 0;
- return true;
+ m_date = dt;
+ wxDateEvent event(this, dt, wxEVT_DATE_CHANGED);
+ if ( GetEventHandler()->ProcessEvent(event) )
+ {
+ *result = 0;
+ return true;
+ }
}
}
+ //else: both the old and new values are invalid, nothing changed
+ }
}
return wxDatePickerCtrlBase::MSWOnNotify(idCtrl, lParam, result);
}
return wxDatePickerCtrlBase::MSWOnNotify(idCtrl, lParam, result);