]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dialog.cpp
set error to GSOCK_TIMEOUT if the socket timed out (modified and extended patch 1303554)
[wxWidgets.git] / src / msw / dialog.cpp
index d4967646023e40e4f017e6378602733ea8dba2d2..b111bac7e28ef4fb9282902d20a929f3d6e00cc3 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "dialog.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -33,6 +29,7 @@
     #include "wx/utils.h"
     #include "wx/frame.h"
     #include "wx/app.h"
+    #include "wx/button.h"
     #include "wx/settings.h"
     #include "wx/intl.h"
     #include "wx/log.h"
 #include "wx/evtloop.h"
 #include "wx/ptr_scpd.h"
 
-#if wxUSE_COMMON_DIALOGS && !defined(__WXMICROWIN__)
-    #include <commdlg.h>
-#endif
+#include "wx/msw/wrapcdlg.h"
 
 #if defined(__SMARTPHONE__) && defined(__WXWINCE__)
     #include "wx/msw/wince/resources.h"
 #endif // __SMARTPHONE__ && __WXWINCE__
 
+#if wxUSE_TOOLBAR && defined(__POCKETPC__)
+#include "wx/toolbar.h"
+#endif
+
 // ----------------------------------------------------------------------------
 // wxWin macros
 // ----------------------------------------------------------------------------
@@ -160,6 +159,9 @@ void wxDialog::Init()
     m_isShown = false;
     m_modalData = NULL;
     m_endModalCalled = false;
+#if wxUSE_TOOLBAR && defined(__POCKETPC__)
+    m_dialogToolBar = NULL;
+#endif
 }
 
 bool wxDialog::Create(wxWindow *parent,
@@ -187,6 +189,9 @@ bool wxDialog::Create(wxWindow *parent,
 #if defined(__SMARTPHONE__) && defined(__WXWINCE__)
     SetLeftMenu(wxID_OK, _("OK"));
 #endif
+#if wxUSE_TOOLBAR && defined(__POCKETPC__)
+    CreateToolBar();
+#endif
 
     return true;
 }
@@ -375,6 +380,17 @@ void wxDialog::EndDialog(int rc)
 // wxWin event handlers
 // ----------------------------------------------------------------------------
 
+bool wxDialog::EmulateButtonClickIfPresent(int id)
+{
+    wxButton *btn = wxDynamicCast(FindWindow(id), wxButton);
+
+    if ( !btn || !btn->IsEnabled() || !btn->IsShown() )
+        return false;
+
+    btn->MSWCommand(BN_CLICKED, 0 /* unused */);
+    return true;
+}
+
 // Standard buttons
 void wxDialog::OnOK(wxCommandEvent& WXUNUSED(event))
 {
@@ -429,18 +445,81 @@ void wxDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 
 void wxDialog::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event))
 {
-#if wxUSE_CTL3D
-    Ctl3dColorChange();
-#else
     SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
     Refresh();
-#endif
 }
 
+#ifdef __POCKETPC__
+// Responds to the OK button in a PocketPC titlebar. This
+// can be overridden, or you can change the id used for
+// sending the event, by calling SetAffirmativeId.
+bool wxDialog::DoOK()
+{
+    const int idOk = GetAffirmativeId();
+    if ( EmulateButtonClickIfPresent(idOk) )
+        return true;
+
+    wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetAffirmativeId());
+    event.SetEventObject(this);
+
+    return GetEventHandler()->ProcessEvent(event);
+}
+#endif // __POCKETPC__
+
+#if wxUSE_TOOLBAR && defined(__POCKETPC__)
+// create main toolbar by calling OnCreateToolBar()
+wxToolBar* wxDialog::CreateToolBar(long style, wxWindowID winid, const wxString& name)
+{
+    m_dialogToolBar = OnCreateToolBar(style, winid, name);
+
+    return m_dialogToolBar;
+}
+
+// return a new toolbar
+wxToolBar *wxDialog::OnCreateToolBar(long style,
+                                       wxWindowID winid,
+                                       const wxString& name)
+{
+    return new wxToolMenuBar(this, winid,
+                         wxDefaultPosition, wxDefaultSize,
+                         style, name);
+}
+#endif
+
 // ---------------------------------------------------------------------------
-// dialog window proc
+// dialog Windows messages processing
 // ---------------------------------------------------------------------------
 
+bool wxDialog::MSWProcessMessage(WXMSG* pMsg)
+{
+    const MSG * const msg = wx_reinterpret_cast(MSG *, pMsg);
+    if ( msg->message == WM_KEYDOWN && msg->wParam == VK_ESCAPE )
+    {
+        int idCancel = GetEscapeId();
+        switch ( idCancel )
+        {
+            case wxID_NONE:
+                // don't handle Esc specially at all
+                break;
+
+            case wxID_ANY:
+                // this value is special: it means translate Esc to wxID_CANCEL
+                // but if there is no such button, then fall back to wxID_OK
+                if ( EmulateButtonClickIfPresent(wxID_CANCEL) )
+                    return true;
+                idCancel = wxID_OK;
+                // fall through
+
+            default:
+                // translate Esc to button press for the button with given id
+                if ( EmulateButtonClickIfPresent(idCancel) )
+                    return true;
+        }
+    }
+
+    return wxDialogBase::MSWProcessMessage(pMsg);
+}
+
 WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
 {
     WXLRESULT rc = 0;
@@ -454,17 +533,13 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar
         {
             switch ( LOWORD(wParam) )
             {
-#ifndef __SMARTPHONE__
+#ifdef __POCKETPC__
                 case IDOK:
-                    wxButton *btn = wxDynamicCast(FindWindow(wxID_CANCEL), wxButton);
-                    if ( btn && btn->IsEnabled() )
-                    {
-                        // if we do have a cancel button, do press it
-                        btn->MSWCommand(BN_CLICKED, 0 /* unused */);
-                        processed = true;
-                        break;
-                    }
-#else // ifdef __SMARTPHONE__
+                    processed = DoOK();
+                    if (!processed)
+                        processed = !Close();
+#endif
+#ifdef __SMARTPHONE__
                 case IDM_LEFT:
                 case IDM_RIGHT:
                     processed = HandleCommand( LOWORD(wParam) , 0 , NULL );