From: Vadim Zeitlin Date: Mon, 30 Aug 2010 21:48:11 +0000 (+0000) Subject: Fix button order in wxStdDialogButtonSizer in all cases under GTK. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/a01d6442f4dcf2d30d52e50bc8c8410066f76265 Fix button order in wxStdDialogButtonSizer in all cases under GTK. The order of Yes/No/Cancel was recently fixed by the changes in r65346 but it broke the order of the buttons in Ok/Cancel case. Ensure the correct order is used in all cases now: the one described by GNOME HIG by default but different order for the special case of Yes/No/Cancel which follows the native message box. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65447 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index fdf018eae7..89eaacb15d 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -2526,6 +2526,29 @@ void wxStdDialogButtonSizer::SetCancelButton( wxButton *button ) m_buttonCancel = button; } +#ifdef __WXGTK20__ + +namespace +{ + +// Returns true only if the button is non-NULL and has the given id and text +// (possible translated). +bool IsStdButtonWithStdText(wxButton *btn, wxWindowID id, const char *label) +{ + if ( !btn ) + return false; + + if ( btn->GetId() != id ) + return false; + + const wxString labelText = btn->GetLabelText(); + return labelText == label || labelText == wxGetTranslation(label); +} + +} // anonymous namespace + +#endif // __WXGTK20__ + void wxStdDialogButtonSizer::Realize() { #ifdef __WXMAC__ @@ -2585,15 +2608,27 @@ void wxStdDialogButtonSizer::Realize() if (m_buttonHelp) Add(m_buttonHelp, flagsBtn); - // extra whitespace between help and cancel/ok buttons + // Align the rest of the buttons to the right. AddStretchSpacer(); - if (m_buttonNegative) + // "No Yes Cancel" is an exception to the general rule according to + // which the affirmative buttons goes after "Cancel" so treat it + // separately + if ( IsStdButtonWithStdText(m_buttonNegative, wxID_NO, "No") && + IsStdButtonWithStdText(m_buttonAffirmative, wxID_YES, "Yes") && + IsStdButtonWithStdText(m_buttonCancel, wxID_CANCEL, "Cancel") ) + { Add(m_buttonNegative, flagsBtn); - - if (m_buttonApply) + Add(m_buttonAffirmative, flagsBtn); + Add(m_buttonCancel, flagsBtn); + } + else // Use standard layout { - Add(m_buttonApply, flagsBtn); + if (m_buttonNegative) + Add(m_buttonNegative, flagsBtn); + + if (m_buttonApply) + Add(m_buttonApply, flagsBtn); if (m_buttonCancel) Add(m_buttonCancel, flagsBtn); @@ -2601,14 +2636,6 @@ void wxStdDialogButtonSizer::Realize() if (m_buttonAffirmative) Add(m_buttonAffirmative, flagsBtn); } - else // No [Apply] - { - if (m_buttonAffirmative) - Add(m_buttonAffirmative, flagsBtn); - - if (m_buttonCancel) - Add(m_buttonCancel, flagsBtn); - } // Ensure that the right margin is 12 as well. AddSpacer(9);