X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..edd802c67c82f95d773635a813645287a47594e4:/src/common/dlgcmn.cpp diff --git a/src/common/dlgcmn.cpp b/src/common/dlgcmn.cpp index d16c32fd0f..d874e1a2fe 100644 --- a/src/common/dlgcmn.cpp +++ b/src/common/dlgcmn.cpp @@ -37,13 +37,40 @@ #include "wx/stattext.h" #include "wx/sizer.h" #include "wx/button.h" + #include "wx/containr.h" #endif + //-------------------------------------------------------------------------- // wxDialogBase //-------------------------------------------------------------------------- -wxSizer *wxDialogBase::CreateTextSizer( const wxString &message ) +// FIXME - temporary hack in absence of wxtopLevelWindow, should be always used +#ifdef wxTopLevelWindowNative +BEGIN_EVENT_TABLE(wxDialogBase, wxTopLevelWindow) + WX_EVENT_TABLE_CONTROL_CONTAINER(wxDialogBase) +END_EVENT_TABLE() + +WX_DELEGATE_TO_CONTROL_CONTAINER(wxDialogBase) +#endif + +void wxDialogBase::Init() +{ + m_returnCode = 0; + + // 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 + SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS); + +#ifdef wxTopLevelWindowNative // FIXME - temporary hack, should be always used! + m_container.SetContainerWindow(this); +#endif +} + +#if wxUSE_STATTEXT && wxUSE_TEXTCTRL + +wxSizer *wxDialogBase::CreateTextSizer( const wxString& message ) { wxBoxSizer *box = new wxBoxSizer( wxVERTICAL ); @@ -55,24 +82,34 @@ wxSizer *wxDialogBase::CreateTextSizer( const wxString &message ) GetTextExtent(_T("H"), (int*)NULL, &y, (int*)NULL, (int*)NULL, &font); wxString line; - for (size_t pos = 0; pos < message.Len(); pos++) + for ( size_t pos = 0; pos < message.length(); pos++ ) { - if (message[pos] == wxT('\n')) - { - if (!line.IsEmpty()) - { - wxStaticText *s1 = new wxStaticText( this, -1, line ); - box->Add( s1 ); - line = wxT(""); - } - else - { - box->Add( 5, y ); - } - } - else + switch ( message[pos] ) { - line += message[pos]; + case _T('\n'): + if (!line.IsEmpty()) + { + wxStaticText *s1 = new wxStaticText( this, -1, line ); + box->Add( s1 ); + line = wxT(""); + } + else + { + box->Add( 5, y ); + } + break; + + case _T('&'): + // this is used as accel mnemonic prefix in the wxWindows + // controls but in the static messages created by + // CreateTextSizer() (used by wxMessageBox, for example), we + // don't want this special meaning, so we need to quote it + line += _T('&'); + + // fall through to add it normally too + + default: + line += message[pos]; } } @@ -86,6 +123,10 @@ wxSizer *wxDialogBase::CreateTextSizer( const wxString &message ) return box; } +#endif // wxUSE_STATTEXT && wxUSE_TEXTCTRL + +#if wxUSE_BUTTON + wxSizer *wxDialogBase::CreateButtonSizer( long flags ) { wxBoxSizer *box = new wxBoxSizer( wxHORIZONTAL ); @@ -101,54 +142,49 @@ wxSizer *wxDialogBase::CreateButtonSizer( long flags ) wxButton *yes = (wxButton *) NULL; wxButton *no = (wxButton *) NULL; - // always show an OK button, unless only YES_NO is given - if ((flags & wxYES_NO) == 0) flags = flags | wxOK; + // always show an OK button, unless we have both YES and NO + if ( (flags & wxYES_NO) != wxYES_NO ) + flags |= wxOK; - if (flags & wxYES_NO) - { - yes = new wxButton( this, wxID_YES, _("Yes") ); - box->Add( yes, 0, wxLEFT|wxRIGHT, margin ); - no = new wxButton( this, wxID_NO, _("No") ); - box->Add( no, 0, wxLEFT|wxRIGHT, margin ); - } else if (flags & wxYES) { - yes = new wxButton( this, wxID_YES, _("Yes") ); + yes = new wxButton( this, wxID_YES, _("Yes"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ); box->Add( yes, 0, wxLEFT|wxRIGHT, margin ); - } else + } if (flags & wxNO) { - no = new wxButton( this, wxID_NO, _("No") ); + no = new wxButton( this, wxID_NO, _("No"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ); box->Add( no, 0, wxLEFT|wxRIGHT, margin ); } if (flags & wxOK) { - ok = new wxButton( this, wxID_OK, _("OK") ); + ok = new wxButton( this, wxID_OK, _("OK"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ); box->Add( ok, 0, wxLEFT|wxRIGHT, margin ); } if (flags & wxFORWARD) - box->Add( new wxButton( this, wxID_FORWARD, _("Forward") ), 0, wxLEFT|wxRIGHT, margin ); + box->Add( new wxButton( this, wxID_FORWARD, _("Forward"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ), 0, wxLEFT|wxRIGHT, margin ); if (flags & wxBACKWARD) - box->Add( new wxButton( this, wxID_BACKWARD, _("Backward") ), 0, wxLEFT|wxRIGHT, margin ); + box->Add( new wxButton( this, wxID_BACKWARD, _("Backward"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ), 0, wxLEFT|wxRIGHT, margin ); if (flags & wxSETUP) - box->Add( new wxButton( this, wxID_SETUP, _("Setup") ), 0, wxLEFT|wxRIGHT, margin ); + box->Add( new wxButton( this, wxID_SETUP, _("Setup"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ), 0, wxLEFT|wxRIGHT, margin ); if (flags & wxMORE) - box->Add( new wxButton( this, wxID_MORE, _("More...") ), 0, wxLEFT|wxRIGHT, margin ); + box->Add( new wxButton( this, wxID_MORE, _("More..."),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ), 0, wxLEFT|wxRIGHT, margin ); if (flags & wxHELP) - box->Add( new wxButton( this, wxID_HELP, _("Help") ), 0, wxLEFT|wxRIGHT, margin ); + box->Add( new wxButton( this, wxID_HELP, _("Help"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ), 0, wxLEFT|wxRIGHT, margin ); if (flags & wxCANCEL) { - cancel = new wxButton( this, wxID_CANCEL, _("Cancel") ); + cancel = new wxButton( this, wxID_CANCEL, _("Cancel"),wxDefaultPosition,wxDefaultSize,wxCLIP_SIBLINGS ); box->Add( cancel, 0, wxLEFT|wxRIGHT, margin ); } + // choose the default button if (flags & wxNO_DEFAULT) { if (no) @@ -174,3 +210,4 @@ wxSizer *wxDialogBase::CreateButtonSizer( long flags ) return box; } +#endif // wxUSE_BUTTON