]> git.saurik.com Git - wxWidgets.git/commitdiff
added support for wxDP_ALLOWNONE in wxMSW; documented it; added test for it in the...
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 Feb 2005 12:57:38 +0000 (12:57 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 13 Feb 2005 12:57:38 +0000 (12:57 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31987 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/datectrl.tex
samples/calendar/calendar.cpp
src/msw/datectrl.cpp

index 2bb24c87d2c3cc323b6475bb9235d6eb372dabc8..add36bdfc3cda62eb979a3b02bbab5cdd94ba2cd 100644 (file)
@@ -44,6 +44,9 @@ calendar drop down part from which the user can select a date.}
 \twocolitem{\windowstyle{wxDP\_DEFAULT}}{Creates a control with default style
 which is the best supported for the current platform (currently wxDP\_SPIN
 under Windows and wxDP\_DROPDOWN elsewhere).}
+\twocolitem{\windowstyle{wxDP\_ALLOWNONE}}{With this style, the control allows
+the user to not enter any valid date at all. Without it -- which is by default
+-- the control always has some valid date.}
 \twocolitem{\windowstyle{wxDP\_SHOWCENTURY}}{Forces display of the century in
 the default date format. Without this flas the century could be displayed or
 not depending on the default date representation in the system.}
index 737db453959837d1f9ba7e56eeaed7d5c8f5e0a7..59fff7cfeb5f5d582453c3d746fee0c758f0b5aa 100644 (file)
     #endif // wxUSE_DATEPICKCTRL_GENERIC
 #endif // wxUSE_DATEPICKCTRL
 
+// the application icon (under Windows and OS/2 it is in resources and even
+// though we could still include the XPM here it would be unused)
+#if !defined(__WXMSW__) && !defined(__WXPM__)
+    #include "../sample.xpm"
+#endif
+
 // ----------------------------------------------------------------------------
 // private classes
 // ----------------------------------------------------------------------------
@@ -181,6 +187,7 @@ enum
     Calendar_DatePicker_AskDate = 300,
     Calendar_DatePicker_ShowCentury,
     Calendar_DatePicker_DropDown,
+    Calendar_DatePicker_AllowNone,
 #if wxUSE_DATEPICKCTRL_GENERIC
     Calendar_DatePicker_Generic,
 #endif // wxUSE_DATEPICKCTRL_GENERIC
@@ -274,6 +281,9 @@ bool MyApp::OnInit()
 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
        : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size)
 {
+    // set the frame icon
+    SetIcon(wxICON(sample));
+
     // create a menu bar
     wxMenu *menuFile = new wxMenu;
     menuFile->Append(Calendar_File_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
@@ -316,6 +326,8 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
                               _T("Al&ways show century"));
     menuDate->AppendCheckItem(Calendar_DatePicker_DropDown,
                               _T("Use &drop down control"));
+    menuDate->AppendCheckItem(Calendar_DatePicker_AllowNone,
+                              _T("Allow &no date"));
 #if wxUSE_DATEPICKCTRL_GENERIC
     menuDate->AppendCheckItem(Calendar_DatePicker_Generic,
                               _T("Use &generic version of the control"));
@@ -436,22 +448,31 @@ void MyFrame::OnAskDate(wxCommandEvent& WXUNUSED(event))
         style |= wxDP_SHOWCENTURY;
     if ( GetMenuBar()->IsChecked(Calendar_DatePicker_DropDown) )
         style |= wxDP_DROPDOWN;
+    if ( GetMenuBar()->IsChecked(Calendar_DatePicker_AllowNone) )
+        style |= wxDP_ALLOWNONE;
 
     MyDialog dlg(this, m_panel->GetCal()->GetDate(), style);
     if ( dlg.ShowModal() == wxID_OK )
     {
-        const wxDateTime dt = dlg.GetDate(),
-                         today = wxDateTime::Today();
-
-        if ( dt.GetDay() == today.GetDay() &&
-                dt.GetMonth() == today.GetMonth() )
+        const wxDateTime dt = dlg.GetDate();
+        if ( dt.IsValid() )
         {
-            wxMessageBox(_T("Happy birthday!"), _T("Calendar Sample"));
-        }
+            const wxDateTime today = wxDateTime::Today();
 
-        m_panel->GetCal()->SetDate(dt);
+            if ( dt.GetDay() == today.GetDay() &&
+                    dt.GetMonth() == today.GetMonth() )
+            {
+                wxMessageBox(_T("Happy birthday!"), _T("Calendar Sample"));
+            }
 
-        wxLogStatus(_T("Changed the date to your birthday"));
+            m_panel->GetCal()->SetDate(dt);
+
+            wxLogStatus(_T("Changed the date to your input"));
+        }
+        else
+        {
+            wxLogStatus(_T("No date entered"));
+        }
     }
 }
 
index a25d94071af3fb464437218df423d60c615ac116..683c35907709fabee21fb795bc4a2d7f0d7f6169 100644 (file)
 #include "wx/msw/wrapcctl.h"
 #include "wx/msw/private.h"
 
-#if defined(__GNUWIN32__) && ! wxCHECK_W32API_VERSION( 2, 4 )
+#if defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 2, 4 )
 typedef struct tagNMDATETIMECHANGE
 {
     NMHDR       nmhdr;
     DWORD       dwFlags;
     SYSTEMTIME  st;
-} NMDATETIMECHANGE, FAR * LPNMDATETIMECHANGE;
+} NMDATETIMECHANGE;
+#endif // old gcc headers
+
+// apparently some versions of mingw define these macros erroneously
+#ifndef DateTime_GetSystemtime
+    #define DateTime_GetSystemtime DateTime_GetSystemTime
+#endif
+
+#ifndef DateTime_SetSystemtime
+    #define DateTime_SetSystemtime DateTime_SetSystemTime
 #endif
 
 // ============================================================================
@@ -162,6 +171,9 @@ WXDWORD wxDatePickerCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
 #endif // DTS_SHORTDATECENTURYFORMAT
         styleMSW |= DTS_SHORTDATEFORMAT;
 
+    if ( style & wxDP_ALLOWNONE )
+        styleMSW |= DTS_SHOWNONE;
+
     return styleMSW;
 }
 
@@ -182,24 +194,17 @@ wxSize wxDatePickerCtrl::DoGetBestSize() const
 // wxDatePickerCtrl operations
 // ----------------------------------------------------------------------------
 
-#ifndef DateTime_GetSystemtime
-    #define DateTime_GetSystemtime DateTime_GetSystemTime
-#endif
-
-#ifndef DateTime_SetSystemtime
-    #define DateTime_SetSystemtime DateTime_SetSystemTime
-#endif
-
 void wxDatePickerCtrl::SetValue(const wxDateTime& dt)
 {
-    // as we don't support DTS_SHOWNONE style so far, we don't allow setting
-    // the control to an invalid date, but this restriction may be lifted in
-    // the future
-    wxCHECK_RET( dt.IsValid(), _T("invalid date") );
+    wxCHECK_RET( dt.IsValid() || HasFlag(wxDP_ALLOWNONE),
+                    _T("this control requires a valid date") );
 
     SYSTEMTIME st;
-    wxToSystemTime(&st, dt);
-    if ( !DateTime_SetSystemtime(GetHwnd(), GDT_VALID, &st) )
+    if ( dt.IsValid() )
+        wxToSystemTime(&st, dt);
+    if ( !DateTime_SetSystemtime(GetHwnd(),
+                                 dt.IsValid() ? GDT_VALID : GDT_NONE,
+                                 &st) )
     {
         wxLogDebug(_T("DateTime_SetSystemtime() failed"));
     }