diff --git a/docs/changes.txt b/docs/changes.txt index 4c145eeb69..89057a8130 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -35,6 +35,7 @@ INCOMPATIBLE CHANGES SINCE 2.6.x - wxGLContext class has no 1:1 coupling to a wxGLCanvas class any more. As a consequence, the class interface changed largely. Code updates, if any are required at all, are easy to accomplish though. +- wxDialog::CreateButtonSizer() may return NULL now, please see the manual diff --git a/docs/latex/wx/sizer.tex b/docs/latex/wx/sizer.tex index 87aa48b05d..b3442af356 100644 --- a/docs/latex/wx/sizer.tex +++ b/docs/latex/wx/sizer.tex @@ -609,6 +609,22 @@ Sets the object of the wxSizerFlags to center itself in the area it is given. \helpref{wxSizerFlags::Center}{wxsizerflagscenter} for people with the other dialect of english. +\membersection{wxSizerFlags::DoubleBorder}\label{wxsizerflagsdoubleborder} + +\func{wxSizerFlags\& }{DoubleBorder}{\param{int }{direction = wxALL}} + +Sets the border in the given \arg{direction} having twice the default border +size. + + +\membersection{wxSizerFlags::DoubleHorzBorder}\label{wxsizerflagsdoublehorzborder} + +\func{wxSizerFlags\& }{DoubleHorzBorder}{\void} + +Sets the border in left and right directions having twice the default border +size. + + \membersection{wxSizerFlags::Expand}\label{wxsizerflagsexpand} \func{wxSizerFlags\& }{Expand}{\void} @@ -651,3 +667,12 @@ Aligns the object to the right, shortcut for \texttt{Align(wxALIGN\_RIGHT)} \helpref{Align}{wxsizerflagsalign} + +\membersection{wxSizerFlags::TripleBorder}\label{wxsizerflagstriplebleborder} + +\func{wxSizerFlags\& }{TripleBorder}{\param{int }{direction = wxALL}} + +Sets the border in the given \arg{direction} having thrice the default border +size. + + diff --git a/include/wx/dialog.h b/include/wx/dialog.h index 1dd7535bc0..766771c42d 100644 --- a/include/wx/dialog.h +++ b/include/wx/dialog.h @@ -70,10 +70,18 @@ public: wxSizer *CreateTextSizer( const wxString &message ); #endif // wxUSE_STATTEXT // && wxUSE_TEXTCTRL - // places buttons into a horizontal wxBoxSizer - wxSizer *CreateButtonSizer( long flags, - bool separated = false, - wxCoord distance = 0 ); + // returns a horizontal wxBoxSizer containing the given buttons + // + // notice that the returned sizer can be NULL if no buttons are put in the + // sizer (this mostly happens under smart phones and other atypical + // platforms which have hardware buttons replacing OK/Cancel and such) + wxSizer *CreateButtonSizer(long flags); + + // returns the sizer containing CreateButtonSizer() below a separating + // static line for the platforms which use static lines for items + // separation (i.e. not Mac) + wxSizer *CreateSeparatedButtonSizer(long flags); + #if wxUSE_BUTTON wxStdDialogButtonSizer *CreateStdDialogButtonSizer( long flags ); #endif // wxUSE_BUTTON diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp index dd09b3a322..74af36254e 100644 --- a/src/common/dlgcmn.cpp +++ b/src/common/dlgcmn.cpp @@ -279,80 +279,62 @@ Wrap(int width) #endif // wxUSE_STATTEXT -wxSizer *wxDialogBase::CreateButtonSizer( long flags, bool separated, wxCoord distance ) +wxSizer *wxDialogBase::CreateButtonSizer(long flags) { + wxSizer *sizer = NULL; + #ifdef __SMARTPHONE__ - wxUnusedVar(separated); - wxUnusedVar(distance); - wxDialog* dialog = (wxDialog*) this; - if (flags & wxOK){ + if ( flags & wxOK ) dialog->SetLeftMenu(wxID_OK); - } - if (flags & wxCANCEL){ + if ( flags & wxCANCEL ) dialog->SetRightMenu(wxID_CANCEL); - } - if (flags & wxYES){ + if ( flags & wxYES ) dialog->SetLeftMenu(wxID_YES); - } - - if (flags & wxNO){ - dialog->SetLeftMenu(wxID_NO); - } - wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); - return sizer; + if ( flags & wxNO ) + dialog->SetRightMenu(wxID_NO); #else // !__SMARTPHONE__ -#ifdef __POCKETPC__ - // PocketPC guidelines recommend for Ok/Cancel dialogs to use - // OK button located inside caption bar and implement Cancel functionality - // through Undo outside dialog. As native behaviour this will be default - // here but can be easily replaced with real wxButtons - // with "wince.dialog.real-ok-cancel" option set to 1 - if ( ((flags & ~(wxCANCEL|wxNO_DEFAULT))== wxOK) && - (wxSystemOptions::GetOptionInt(wxT("wince.dialog.real-ok-cancel"))==0) - ) - { - wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); - return sizer; - } -#endif // __POCKETPC__ - #if wxUSE_BUTTON - wxSizer* buttonSizer = CreateStdDialogButtonSizer( flags ); - - // Mac Human Interface Guidelines recommend not to use static lines as grouping elements -#if wxUSE_STATLINE && !defined(__WXMAC__) - if(!separated) - return buttonSizer; - - wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); - topsizer->Add( new wxStaticLine( this, wxID_ANY ), 0, wxEXPAND | wxBOTTOM, distance ); - topsizer->Add( buttonSizer, 0, wxEXPAND ); - return topsizer; - -#else // !wxUSE_STATLINE - - wxUnusedVar(separated); - wxUnusedVar(distance); - return buttonSizer; - -#endif // wxUSE_STATLINE/!wxUSE_STATLINE - -#else // !wxUSE_BUTTON - - wxUnusedVar(separated); - wxUnusedVar(distance); - wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); - return sizer; - -#endif // wxUSE_BUTTON/!wxUSE_BUTTON +#ifdef __POCKETPC__ + // PocketPC guidelines recommend for Ok/Cancel dialogs to use OK button + // located inside caption bar and implement Cancel functionality through + // Undo outside dialog. As native behaviour this will be default here but + // can be replaced with real wxButtons by setting the option below to 1 + if ( (flags & ~(wxCANCEL|wxNO_DEFAULT)) != wxOK || + wxSystemOptions::GetOptionInt(wxT("wince.dialog.real-ok-cancel")) ) +#endif // __POCKETPC__ + { + sizer = CreateStdDialogButtonSizer(flags); + } +#endif // wxUSE_BUTTON #endif // __SMARTPHONE__/!__SMARTPHONE__ + + return sizer; +} + +wxSizer *wxDialogBase::CreateSeparatedButtonSizer(long flags) +{ + wxSizer *sizer = CreateButtonSizer(flags); + if ( !sizer ) + return NULL; + + // Mac Human Interface Guidelines recommend not to use static lines as + // grouping elements +#if wxUSE_STATLINE && !defined(__WXMAC__) + wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL); + topsizer->Add(new wxStaticLine(this), + wxSizerFlags().Expand().DoubleBorder(wxBOTTOM)); + topsizer->Add(sizer, wxSizerFlags().Expand()); + sizer = topsizer; +#endif // wxUSE_STATLINE + + return sizer; } #if wxUSE_BUTTON @@ -365,27 +347,32 @@ wxStdDialogButtonSizer *wxDialogBase::CreateStdDialogButtonSizer( long flags ) wxButton *yes = NULL; wxButton *no = NULL; - if (flags & wxOK){ + if (flags & wxOK) + { ok = new wxButton(this, wxID_OK); sizer->AddButton(ok); } - if (flags & wxCANCEL){ + if (flags & wxCANCEL) + { wxButton *cancel = new wxButton(this, wxID_CANCEL); sizer->AddButton(cancel); } - if (flags & wxYES){ + if (flags & wxYES) + { yes = new wxButton(this, wxID_YES); sizer->AddButton(yes); } - if (flags & wxNO){ + if (flags & wxNO) + { no = new wxButton(this, wxID_NO); sizer->AddButton(no); } - if (flags & wxHELP){ + if (flags & wxHELP) + { wxButton *help = new wxButton(this, wxID_HELP); sizer->AddButton(help); }