X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/660296aa90ad5ecc98c585cc24567cee8130499a..90c6edd706882b8fd06b6d5359d9682ac0ee858c:/src/msw/dialog.cpp diff --git a/src/msw/dialog.cpp b/src/msw/dialog.cpp index cda785f0b3..ed5230d7d1 100644 --- a/src/msw/dialog.cpp +++ b/src/msw/dialog.cpp @@ -17,10 +17,6 @@ // 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" @@ -28,18 +24,20 @@ #pragma hdrstop #endif +#include "wx/dialog.h" + #ifndef WX_PRECOMP - #include "wx/dialog.h" #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/toolbar.h" #endif #include "wx/msw/private.h" -#include "wx/log.h" #include "wx/evtloop.h" #include "wx/ptr_scpd.h" @@ -49,10 +47,6 @@ #include "wx/msw/wince/resources.h" #endif // __SMARTPHONE__ && __WXWINCE__ -#if wxUSE_TOOLBAR && defined(__POCKETPC__) -#include "wx/toolbar.h" -#endif - // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -86,10 +80,14 @@ wxBEGIN_FLAGS( wxDialogStyle ) wxFLAGS_MEMBER(wxWS_EX_VALIDATE_RECURSIVELY) wxFLAGS_MEMBER(wxSTAY_ON_TOP) wxFLAGS_MEMBER(wxCAPTION) +#if WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxTHICK_FRAME) +#endif // WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxSYSTEM_MENU) wxFLAGS_MEMBER(wxRESIZE_BORDER) +#if WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxRESIZE_BOX) +#endif // WXWIN_COMPATIBILITY_2_6 wxFLAGS_MEMBER(wxCLOSE_BOX) wxFLAGS_MEMBER(wxMAXIMIZE_BOX) wxFLAGS_MEMBER(wxMINIMIZE_BOX) @@ -146,7 +144,7 @@ private: wxModalEventLoop m_evtLoop; }; -wxDEFINE_TIED_SCOPED_PTR_TYPE(wxDialogModalData); +wxDEFINE_TIED_SCOPED_PTR_TYPE(wxDialogModalData) // ============================================================================ // implementation @@ -199,6 +197,8 @@ bool wxDialog::Create(wxWindow *parent, return true; } +#if WXWIN_COMPATIBILITY_2_6 + // deprecated ctor wxDialog::wxDialog(wxWindow *parent, const wxString& title, @@ -220,6 +220,8 @@ void wxDialog::SetModal(bool WXUNUSED(flag)) // nothing to do, obsolete method } +#endif // WXWIN_COMPATIBILITY_2_6 + wxDialog::~wxDialog() { m_isBeingDeleted = true; @@ -232,11 +234,15 @@ wxDialog::~wxDialog() // showing the dialogs // ---------------------------------------------------------------------------- +#if WXWIN_COMPATIBILITY_2_6 + bool wxDialog::IsModalShowing() const { return IsModal(); } +#endif // WXWIN_COMPATIBILITY_2_6 + wxWindow *wxDialog::FindSuitableParent() const { // first try to use the currently active window @@ -383,6 +389,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)) { @@ -447,23 +464,16 @@ void wxDialog::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event)) // sending the event, by calling SetAffirmativeId. bool wxDialog::DoOK() { - wxButton *btn = wxDynamicCast(FindWindow(GetAffirmativeId()), wxButton); - - if ( btn && btn->IsEnabled() ) - { - // If we have this button, press it - btn->MSWCommand(BN_CLICKED, 0 /* unused */); + const int idOk = GetAffirmativeId(); + if ( EmulateButtonClickIfPresent(idOk) ) return true; - } - else - { - wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetAffirmativeId()); - event.SetEventObject(this); - return GetEventHandler()->ProcessEvent(event); - } + wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetAffirmativeId()); + event.SetEventObject(this); + + return GetEventHandler()->ProcessEvent(event); } -#endif +#endif // __POCKETPC__ #if wxUSE_TOOLBAR && defined(__POCKETPC__) // create main toolbar by calling OnCreateToolBar() @@ -486,9 +496,39 @@ wxToolBar *wxDialog::OnCreateToolBar(long style, #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; @@ -573,4 +613,3 @@ WXLRESULT wxDialog::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lPar return rc; } -