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
This commit is contained in:
@@ -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,14 +2608,26 @@ 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();
|
||||
|
||||
// "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);
|
||||
Add(m_buttonAffirmative, flagsBtn);
|
||||
Add(m_buttonCancel, flagsBtn);
|
||||
}
|
||||
else // Use standard layout
|
||||
{
|
||||
if (m_buttonNegative)
|
||||
Add(m_buttonNegative, flagsBtn);
|
||||
|
||||
if (m_buttonApply)
|
||||
{
|
||||
Add(m_buttonApply, flagsBtn);
|
||||
|
||||
if (m_buttonCancel)
|
||||
@@ -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);
|
||||
|
Reference in New Issue
Block a user