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;
|
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()
|
void wxStdDialogButtonSizer::Realize()
|
||||||
{
|
{
|
||||||
#ifdef __WXMAC__
|
#ifdef __WXMAC__
|
||||||
@@ -2585,14 +2608,26 @@ void wxStdDialogButtonSizer::Realize()
|
|||||||
if (m_buttonHelp)
|
if (m_buttonHelp)
|
||||||
Add(m_buttonHelp, flagsBtn);
|
Add(m_buttonHelp, flagsBtn);
|
||||||
|
|
||||||
// extra whitespace between help and cancel/ok buttons
|
// Align the rest of the buttons to the right.
|
||||||
AddStretchSpacer();
|
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)
|
if (m_buttonNegative)
|
||||||
Add(m_buttonNegative, flagsBtn);
|
Add(m_buttonNegative, flagsBtn);
|
||||||
|
|
||||||
if (m_buttonApply)
|
if (m_buttonApply)
|
||||||
{
|
|
||||||
Add(m_buttonApply, flagsBtn);
|
Add(m_buttonApply, flagsBtn);
|
||||||
|
|
||||||
if (m_buttonCancel)
|
if (m_buttonCancel)
|
||||||
@@ -2601,14 +2636,6 @@ void wxStdDialogButtonSizer::Realize()
|
|||||||
if (m_buttonAffirmative)
|
if (m_buttonAffirmative)
|
||||||
Add(m_buttonAffirmative, flagsBtn);
|
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.
|
// Ensure that the right margin is 12 as well.
|
||||||
AddSpacer(9);
|
AddSpacer(9);
|
||||||
|
Reference in New Issue
Block a user