Applied modified form of the StdButtonSize patch.
Tested on GTK2, MSW and Mac. Adapted various generic dialogs to stretch the button sizer so that the buttons don't end up centered but right aligned. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31198 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
#include "wx/sizer.h"
|
||||
#include "wx/utils.h"
|
||||
#include "wx/statbox.h"
|
||||
#include "wx/settings.h"
|
||||
#include "wx/listimpl.cpp"
|
||||
#if WXWIN_COMPATIBILITY_2_4
|
||||
#include "wx/notebook.h"
|
||||
@@ -43,6 +44,7 @@ IMPLEMENT_CLASS(wxBoxSizer, wxSizer)
|
||||
#if wxUSE_STATBOX
|
||||
IMPLEMENT_CLASS(wxStaticBoxSizer, wxBoxSizer)
|
||||
#endif
|
||||
IMPLEMENT_CLASS(wxStdDialogButtonSizer, wxBoxSizer)
|
||||
|
||||
WX_DEFINE_EXPORTED_LIST( wxSizerItemList );
|
||||
|
||||
@@ -1639,6 +1641,141 @@ void wxStaticBoxSizer::ShowItems( bool show )
|
||||
|
||||
#endif // wxUSE_STATBOX
|
||||
|
||||
wxStdDialogButtonSizer::wxStdDialogButtonSizer()
|
||||
: wxBoxSizer(wxHORIZONTAL)
|
||||
{
|
||||
bool is_pda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
|
||||
|
||||
// If we have a PDA screen, put yes/no button over
|
||||
// all other buttons, otherwise on the left side.
|
||||
if (is_pda)
|
||||
m_orient = wxVERTICAL;
|
||||
|
||||
m_buttonAffirmative = NULL;
|
||||
m_buttonApply = NULL;
|
||||
m_buttonNegative = NULL;
|
||||
m_buttonCancel = NULL;
|
||||
m_buttonHelp = NULL;
|
||||
}
|
||||
|
||||
void wxStdDialogButtonSizer::AddButton(wxButton *mybutton)
|
||||
{
|
||||
switch (mybutton->GetId())
|
||||
{
|
||||
case wxID_OK:
|
||||
case wxID_YES:
|
||||
case wxID_SAVE:
|
||||
m_buttonAffirmative = mybutton;
|
||||
break;
|
||||
case wxID_APPLY:
|
||||
m_buttonApply = mybutton;
|
||||
break;
|
||||
case wxID_NO:
|
||||
m_buttonNegative = mybutton;
|
||||
break;
|
||||
case wxID_CANCEL:
|
||||
m_buttonCancel = mybutton;
|
||||
break;
|
||||
case wxID_HELP:
|
||||
m_buttonHelp = mybutton;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void wxStdDialogButtonSizer::Finalise()
|
||||
{
|
||||
#ifdef __WXMAC__
|
||||
Add(0, 0, 0, wxLEFT, 6);
|
||||
if (m_buttonHelp)
|
||||
Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
|
||||
|
||||
if (m_buttonNegative){
|
||||
// HIG POLICE BULLETIN - destructive buttons need extra padding
|
||||
// 24 pixels on either side
|
||||
Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 12);
|
||||
}
|
||||
|
||||
// extra whitespace between help/negative and cancel/ok buttons
|
||||
Add(0, 0, 1, wxEXPAND, 0);
|
||||
|
||||
if (m_buttonCancel){
|
||||
Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
|
||||
// Cancel or help should be default
|
||||
// m_buttonCancel->SetDefaultButton();
|
||||
}
|
||||
|
||||
// Ugh, Mac doesn't really have apply dialogs, so I'll just
|
||||
// figure the best place is between Cancel and OK
|
||||
if (m_buttonApply)
|
||||
Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 6);
|
||||
|
||||
if (m_buttonAffirmative){
|
||||
Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT, 6);
|
||||
|
||||
if (m_buttonAffirmative->GetId() == wxID_SAVE){
|
||||
// these buttons have set labels under Mac so we should use them
|
||||
m_buttonAffirmative->SetLabel(_("Save"));
|
||||
m_buttonNegative->SetLabel(_("Don't Save"));
|
||||
}
|
||||
}
|
||||
|
||||
// Extra space around and at the right
|
||||
Add(12, 24);
|
||||
#elif defined(__WXGTK20__)
|
||||
Add(0, 0, 0, wxLEFT, 9);
|
||||
if (m_buttonHelp)
|
||||
Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
|
||||
|
||||
// extra whitespace between help and cancel/ok buttons
|
||||
Add(0, 0, 1, wxEXPAND, 0);
|
||||
|
||||
if (m_buttonNegative){
|
||||
Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
|
||||
}
|
||||
|
||||
if (m_buttonCancel){
|
||||
Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
|
||||
// Cancel or help should be default
|
||||
// m_buttonCancel->SetDefaultButton();
|
||||
}
|
||||
|
||||
if (m_buttonApply)
|
||||
Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, 3);
|
||||
|
||||
if (m_buttonAffirmative)
|
||||
Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT, 6);
|
||||
#else
|
||||
// do the same thing for GTK1 and Windows platforms
|
||||
// and assume any platform not accounted for here will use
|
||||
// Windows style
|
||||
Add(0, 0, 0, wxLEFT, 9);
|
||||
if (m_buttonHelp)
|
||||
Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonHelp->ConvertDialogToPixels(wxSize(4, 0)).x);
|
||||
|
||||
// extra whitespace between help and cancel/ok buttons
|
||||
Add(0, 0, 1, wxEXPAND, 0);
|
||||
|
||||
if (m_buttonApply)
|
||||
Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonApply->ConvertDialogToPixels(wxSize(4, 0)).x);
|
||||
|
||||
if (m_buttonAffirmative){
|
||||
Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonAffirmative->ConvertDialogToPixels(wxSize(4, 0)).x);
|
||||
}
|
||||
|
||||
if (m_buttonNegative){
|
||||
Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonNegative->ConvertDialogToPixels(wxSize(4, 0)).x);
|
||||
}
|
||||
|
||||
if (m_buttonCancel){
|
||||
Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT, m_buttonCancel->ConvertDialogToPixels(wxSize(4, 0)).x);
|
||||
// Cancel or help should be default
|
||||
// m_buttonCancel->SetDefaultButton();
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_4
|
||||
|
||||
|
Reference in New Issue
Block a user