]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textdlg.cpp
Added wxGTK-only cmn dialogs.
[wxWidgets.git] / src / gtk / textdlg.cpp
diff --git a/src/gtk/textdlg.cpp b/src/gtk/textdlg.cpp
new file mode 100644 (file)
index 0000000..313ab0f
--- /dev/null
@@ -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 <stdio.h>
+#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);
+}
+