///////////////////////////////////////////////////////////////////////////// // Name: textdlgg.cpp // Purpose: wxTextEntryDialog // Author: Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ #pragma implementation "textdlgg.h" #endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #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" #endif #include "wx/generic/textdlgg.h" // wxTextEntryDialog #if !USE_SHARED_LIBRARY BEGIN_EVENT_TABLE(wxTextEntryDialog, wxDialog) EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK) END_EVENT_TABLE() IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog) #endif // Split message, using constraints to position controls static void wxSplitMessage2(const wxChar *message, wxList *messageList, wxWindow *parent, wxRowColSizer *sizer) { wxChar *copyMessage = copystring(message); size_t i = 0; size_t len = wxStrlen(copyMessage); wxChar *currentMessage = copyMessage; // wxWindow *lastWindow = parent; while (i < len) { while ((i < len) && (copyMessage[i] != _T('\n'))) i++; if (i < len) copyMessage[i] = 0; wxStaticText *mess = new wxStaticText(parent, -1, currentMessage); /* wxLayoutConstraints *c = new wxLayoutConstraints; c->left.SameAs (parent, wxLeft, 10); c->top.SameAs (lastWindow, wxBottom, 5); c->right.AsIs (); c->height.AsIs (); mess->SetConstraints(c); */ sizer->AddSizerChild(mess); messageList->Append(mess); currentMessage = copyMessage + i + 1; } delete[] copyMessage; } 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|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); buttonSizer->SetSpacing(12,0); wxButton *ok = NULL; wxButton *cancel = NULL; if (style & wxOK) { ok = new wxButton(this, wxID_OK, _("OK"), wxDefaultPosition, wxSize(75,-1)); buttonSizer->AddSizerChild(ok); } if (style & wxCANCEL) { cancel = new wxButton(this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1)); buttonSizer->AddSizerChild(cancel); } if (ok) ok->SetDefault(); Layout(); Centre(wxBOTH); wxEndBusyCursor(); } void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) ) { wxTextCtrl *textCtrl = (wxTextCtrl *)FindWindow(wxID_TEXT); if ( textCtrl ) m_value = textCtrl->GetValue(); EndModal(wxID_OK); }