From: Vadim Zeitlin Date: Thu, 11 Sep 2008 23:37:35 +0000 (+0000) Subject: added wxCANCEL_DEFAULT style to wxMessageDialog (only implemented for MSW for now... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f45d6ade08b5b19979f62d0b641f5b86c3a37e6e added wxCANCEL_DEFAULT style to wxMessageDialog (only implemented for MSW for now); also tightened up the style checks in wxMessageDialog::SetMessageDialogStyle() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55561 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/changes.txt b/docs/changes.txt index cb0268bff5..9a8617c5d6 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -309,6 +309,7 @@ All (GUI): - Added wxWrapSizer (Arne Steinarson) - Added wxSpinCtrlDouble (John Labenski) - Support custom labels in wxMessageDialog (Gareth Simpson for wxMac version). +- Also added wxCANCEL_DEFAULT to wxMessageDialog. - Allow copying text in the log dialogs. - Added multisample (anti-aliasing) support to wxGLCanvas (Olivier Playez). - Initialize wx{Client,Paint,Window}DC with fonts/colours of its window. diff --git a/include/wx/msgdlg.h b/include/wx/msgdlg.h index 7dbffe33a3..0b9de3f1f7 100644 --- a/include/wx/msgdlg.h +++ b/include/wx/msgdlg.h @@ -143,9 +143,24 @@ public: wxASSERT_MSG( ((style & wxYES_NO) == wxYES_NO) || !(style & wxYES_NO), "wxYES and wxNO may only be used together" ); + wxASSERT_MSG( !(style & wxYES) || !(style & wxOK), + "wxOK and wxYES/wxNO can't be used together" ); + + wxASSERT_MSG( (style & wxYES) || (style & wxOK), + "one of wxOK and wxYES/wxNO must be used" ); + wxASSERT_MSG( (style & wxID_OK) != wxID_OK, "wxMessageBox: Did you mean wxOK (and not wxID_OK)?" ); + wxASSERT_MSG( !(style & wxNO_DEFAULT) || (style & wxNO), + "wxNO_DEFAULT is invalid without wxNO" ); + + wxASSERT_MSG( !(style & wxCANCEL_DEFAULT) || (style & wxCANCEL), + "wxCANCEL_DEFAULT is invalid without wxCANCEL" ); + + wxASSERT_MSG( !(style & wxCANCEL_DEFAULT) || !(style & wxNO_DEFAULT), + "only one default button can be specified" ); + m_dialogStyle = style; } diff --git a/interface/wx/msgdlg.h b/interface/wx/msgdlg.h index 87f9158451..e484febad1 100644 --- a/interface/wx/msgdlg.h +++ b/interface/wx/msgdlg.h @@ -39,9 +39,14 @@ public: @c wxCANCEL. @style{wxNO_DEFAULT} Makes the "No" button default, can only be used with @c wxYES_NO. + @style{wxCANCEL_DEFAULT} + Makes the "Cancel" button default, can only be used with @c wxCANCEL @style{wxYES_DEFAULT} Makes the "Yes" button default, this is the default behaviour and this flag exists solely for symmetry with @c wxNO_DEFAULT. + @style{wxOK_DEFAULT} + Makes the "OK" button default, this is the default behaviour and + this flag exists solely for symmetry with @c wxCANCEL_DEFAULT. @style{wxICON_EXCLAMATION} Displays an exclamation mark symbol. @style{wxICON_ERROR} @@ -62,6 +67,11 @@ public: implemented only under MSW). @endStyleTable + Notice that not all styles are compatible: only one of @c wxOK and @c + wxYES_NO may be specified (and one of them must be specified) and at + most one default button style can be used and it is only valid if the + corresponding button is shown in the message box. + @param parent Parent window. @param message @@ -75,7 +85,7 @@ public: */ wxMessageDialog(wxWindow* parent, const wxString& message, const wxString& caption = "Message box", - long style = wxOK | wxCANCEL, + long style = wxOK | wxCENTRE, const wxPoint& pos = wxDefaultPosition); /** diff --git a/src/msw/msgdlg.cpp b/src/msw/msgdlg.cpp index 04e2e68262..c0b9100fed 100644 --- a/src/msw/msgdlg.cpp +++ b/src/msw/msgdlg.cpp @@ -446,9 +446,9 @@ int wxMessageDialog::ShowModal() HWND hWnd = m_parent ? GetHwndOf(m_parent) : NULL; // translate wx style in MSW - unsigned int msStyle = MB_OK; + unsigned int msStyle; const long wxStyle = GetMessageDialogStyle(); - if (wxStyle & wxYES_NO) + if ( wxStyle & wxYES_NO ) { #if !(defined(__SMARTPHONE__) && defined(__WXWINCE__)) if (wxStyle & wxCANCEL) @@ -457,17 +457,26 @@ int wxMessageDialog::ShowModal() #endif // !(__SMARTPHONE__ && __WXWINCE__) msStyle = MB_YESNO; - if (wxStyle & wxNO_DEFAULT) + if ( wxStyle & wxNO_DEFAULT ) msStyle |= MB_DEFBUTTON2; + else if ( wxStyle & wxCANCEL_DEFAULT ) + msStyle |= MB_DEFBUTTON3; } - - if (wxStyle & wxOK) + else // without Yes/No we're going to have an OK button { - if (wxStyle & wxCANCEL) + if ( wxStyle & wxCANCEL ) + { msStyle = MB_OKCANCEL; - else + + if ( wxStyle & wxCANCEL_DEFAULT ) + msStyle |= MB_DEFBUTTON2; + } + else // just "OK" + { msStyle = MB_OK; + } } + if (wxStyle & wxICON_EXCLAMATION) msStyle |= MB_ICONEXCLAMATION; else if (wxStyle & wxICON_HAND)