X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cfd1ac216d14febc1278a48d116b1218efe0316b..ef25e5a4c8102c9d981e3f720c27462c72102b54:/src/common/dlgcmn.cpp diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp index 8ac52135d9..64011f46c7 100644 --- a/src/common/dlgcmn.cpp +++ b/src/common/dlgcmn.cpp @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "dialogbase.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -40,6 +36,9 @@ #include "wx/containr.h" #endif +#include "wx/statline.h" +#include "wx/sysopt.h" + #if wxUSE_STATTEXT // ---------------------------------------------------------------------------- @@ -112,7 +111,8 @@ void wxDialogBase::Init() { m_returnCode = 0; m_affirmativeId = wxID_OK; - + m_escapeId = wxID_ANY; + // the dialogs have this flag on by default to prevent the events from the // dialog controls from reaching the parent frame which is usually // undesirable and can lead to unexpected and hard to find bugs @@ -262,13 +262,15 @@ private: wxString m_text; }; +// NB: don't "factor out" the scope operator, SGI MIPSpro 7.3 (but not 7.4) +// gets confused if it doesn't immediately follow the class name void #if defined(__WXGTK__) && !defined(__WXUNIVERSAL__) -wxStaticText +wxStaticText:: #else -wxStaticTextBase +wxStaticTextBase:: #endif -::Wrap(int width) +Wrap(int width) { wxLabelWrapper wrapper; wrapper.WrapLabel(this, width); @@ -276,11 +278,12 @@ wxStaticTextBase #endif // wxUSE_STATTEXT -#if wxUSE_BUTTON - -wxSizer *wxDialogBase::CreateButtonSizer( long flags ) +wxSizer *wxDialogBase::CreateButtonSizer( long flags, bool separated, wxCoord distance ) { #ifdef __SMARTPHONE__ + wxUnusedVar(separated); + wxUnusedVar(distance); + wxDialog* dialog = (wxDialog*) this; if (flags & wxOK){ dialog->SetLeftMenu(wxID_OK); @@ -299,14 +302,64 @@ wxSizer *wxDialogBase::CreateButtonSizer( long flags ) } wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); return sizer; -#else - return CreateStdDialogButtonSizer( flags ); -#endif + +#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 + +#endif // __SMARTPHONE__/!__SMARTPHONE__ } +#if wxUSE_BUTTON + wxStdDialogButtonSizer *wxDialogBase::CreateStdDialogButtonSizer( long flags ) { wxStdDialogButtonSizer *sizer = new wxStdDialogButtonSizer(); + wxButton *ok = NULL; wxButton *yes = NULL; wxButton *no = NULL; @@ -336,8 +389,6 @@ wxStdDialogButtonSizer *wxDialogBase::CreateStdDialogButtonSizer( long flags ) sizer->AddButton(help); } - sizer->Realize(); - if (flags & wxNO_DEFAULT) { if (no) @@ -359,14 +410,15 @@ wxStdDialogButtonSizer *wxDialogBase::CreateStdDialogButtonSizer( long flags ) yes->SetFocus(); } } - + if (flags & wxOK) SetAffirmativeId(wxID_OK); else if (flags & wxYES) SetAffirmativeId(wxID_YES); + sizer->Realize(); + return sizer; } - #endif // wxUSE_BUTTON