X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/92049cd473c81fbce934e71796b2d841d5e605fa..57dde4bd5860cda4666326b611f535dfc28139f2:/src/gtk1/textdlg.cpp?ds=sidebyside diff --git a/src/gtk1/textdlg.cpp b/src/gtk1/textdlg.cpp new file mode 100644 index 0000000000..313ab0f8c8 --- /dev/null +++ b/src/gtk1/textdlg.cpp @@ -0,0 +1,162 @@ +///////////////////////////////////////////////////////////////////////////// +// 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/gtk/textdlg.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); +} +