X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4efd74436a13b03d10d9cf5759e65cbbb36993d9..408859237485ea905d349a5e430837151c472b99:/src/generic/textdlgg.cpp diff --git a/src/generic/textdlgg.cpp b/src/generic/textdlgg.cpp index 3fc44116dd..1c64ac410f 100644 --- a/src/generic/textdlgg.cpp +++ b/src/generic/textdlgg.cpp @@ -21,19 +21,58 @@ #endif #ifndef WX_PRECOMP -#include -#include "wx/utils.h" -#include "wx/dialog.h" -#include "wx/listbox.h" -#include "wx/button.h" -#include "wx/stattext.h" -#include "wx/textctrl.h" -#include "wx/layout.h" -#include "wx/intl.h" + #include + #include "wx/utils.h" + #include "wx/dialog.h" + #include "wx/button.h" + #include "wx/stattext.h" + #include "wx/textctrl.h" + #include "wx/intl.h" +#endif + +#if wxUSE_STATLINE + #include "wx/statline.h" #endif #include "wx/generic/textdlgg.h" +/* Split message, using constraints to position controls */ +static wxSize wxSplitMessage2( const wxString &message, wxWindow *parent ) +{ + int y = 10; + int w = 50; + wxString line( _T("") ); + for (size_t pos = 0; pos < message.Len(); pos++) + { + if (message[pos] == _T('\n')) + { + if (!line.IsEmpty()) + { + wxStaticText *s1 = new wxStaticText( parent, -1, line, wxPoint(15,y) ); + wxSize size1( s1->GetSize() ); + if (size1.x > w) w = size1.x; + line = _T(""); + } + y += 18; + } + else + { + line += message[pos]; + } + } + + if (!line.IsEmpty()) + { + wxStaticText *s2 = new wxStaticText( parent, -1, line, wxPoint(15,y) ); + wxSize size2( s2->GetSize() ); + if (size2.x > w) w = size2.x; + } + + y += 18; + + return wxSize(w+30,y); +} + // wxTextEntryDialog #if !USE_SHARED_LIBRARY @@ -44,80 +83,70 @@ END_EVENT_TABLE() IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog) #endif -extern void wxSplitMessage2(const char *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer); - wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent, const wxString& message, const wxString& caption, const wxString& value, long style, const wxPoint& pos): - wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL) + wxDialog(parent, -1, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL|wxTAB_TRAVERSAL) { - m_dialogStyle = style; - m_value = value; - - wxBeginBusyCursor(); - - wxSizer *topSizer = new wxSizer(this, wxSizerShrink); - topSizer->SetBorder(10, 10); - - wxRowColSizer *messageSizer = new wxRowColSizer(topSizer, wxSIZER_COLS, 100); - messageSizer->SetName("messageSizer"); - -// bool centre = ((style & wxCENTRE) == wxCENTRE); - - wxList messageList; - wxSplitMessage2(message, &messageList, this, messageSizer); - - // Insert a spacer - wxSpacingSizer *spacingSizer = new wxSpacingSizer(topSizer, wxBelow, messageSizer, 10); - - wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, -1), wxSize(350, -1)); - - wxRowColSizer *textSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); - textSizer->AddSizerChild(textCtrl); - textSizer->SetName("textSizer"); - - // Create constraints for the text sizer - wxLayoutConstraints *textC = new wxLayoutConstraints; - textC->left.SameAs (messageSizer, wxLeft); - textC->top.Below (spacingSizer); - textSizer->SetConstraints(textC); - - // Insert another spacer - wxSpacingSizer *spacingSizer2 = new wxSpacingSizer(topSizer, wxBelow, textSizer, 10); - spacingSizer->SetName("spacingSizer2"); - - // Insert a sizer for the buttons - wxRowColSizer *buttonSizer = new wxRowColSizer(topSizer, wxSIZER_ROWS); - buttonSizer->SetName("buttonSizer"); - - // Specify constraints for the button sizer - wxLayoutConstraints *c = new wxLayoutConstraints; - c->width.AsIs (); - c->height.AsIs (); - c->top.Below (spacingSizer2); - c->centreX.SameAs (textSizer, wxCentreX); - buttonSizer->SetConstraints(c); - - wxButton *ok = NULL; - wxButton *cancel = NULL; - - if (style & wxOK) { - ok = new wxButton(this, wxID_OK, _("OK")); - buttonSizer->AddSizerChild(ok); - } - - if (style & wxCANCEL) { - cancel = new wxButton(this, wxID_CANCEL, _("Cancel")); - buttonSizer->AddSizerChild(cancel); - } + m_dialogStyle = style; + m_value = value; + + wxBeginBusyCursor(); + + wxSize message_size( wxSplitMessage2( message, this ) ); + + wxButton *ok = (wxButton *) NULL; + wxButton *cancel = (wxButton *) NULL; + wxList m_buttons; + + int y = message_size.y + 15; + + wxTextCtrl *textCtrl = new wxTextCtrl(this, wxID_TEXT, value, wxPoint(-1, y), wxSize(350, -1)); + + y += 65; + + if (style & wxOK) + { + ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) ); + m_buttons.Append( ok ); + } + + if (style & wxCANCEL) + { + cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) ); + m_buttons.Append( cancel ); + } + + if (ok) + { + ok->SetDefault(); + ok->SetFocus(); + } + + int w = wxMax( 350, m_buttons.GetCount() * 100 ); + w = wxMax( w, message_size.x ); + int space = w / (m_buttons.GetCount()*2); + + textCtrl->SetSize( 20, -1, w-10, -1 ); + + int m = 0; + wxNode *node = m_buttons.First(); + while (node) + { + wxWindow *win = (wxWindow*)node->Data(); + int x = (m*2+1)*space - 40 + 15; + win->Move( x, -1 ); + node = node->Next(); + m++; + } + +#if wxUSE_STATLINE + (void) new wxStaticLine( this, -1, wxPoint(0,y-20), wxSize(w+30, 5) ); +#endif + + SetSize( w+30, y+40 ); - if (ok) - { - ok->SetDefault(); - ok->SetFocus(); - } + Centre( wxBOTH ); - Layout(); - Centre(wxBOTH); wxEndBusyCursor(); } @@ -131,13 +160,3 @@ void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) ) EndModal(wxID_OK); } -wxString wxGetTextFromUser(const wxString& message, const wxString& caption, - const wxString& defaultValue, wxWindow *parent, - int x, int y, bool WXUNUSED(centre) ) -{ - wxTextEntryDialog dialog(parent, message, caption, defaultValue, wxOK|wxCANCEL, wxPoint(x, y)); - if (dialog.ShowModal() == wxID_OK) - return dialog.GetValue(); - else - return wxString(""); -}