// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
#ifdef __GNUG__
-#pragma implementation "textdlgg.h"
+ #pragma implementation "textdlgg.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
#ifndef WX_PRECOMP
- #include <stdio.h>
- #include "wx/utils.h"
- #include "wx/dialog.h"
- #include "wx/button.h"
- #include "wx/stattext.h"
- #include "wx/textctrl.h"
- #include "wx/intl.h"
+ #include <stdio.h>
+
+ #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"
+ #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 (uint 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);
-}
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+#define wxID_TEXT 3000
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
// wxTextEntryDialog
+// ----------------------------------------------------------------------------
#if !USE_SHARED_LIBRARY
BEGIN_EVENT_TABLE(wxTextEntryDialog, wxDialog)
- EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK)
+ EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK)
END_EVENT_TABLE()
IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
#endif
-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)
+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),
+ m_value(value)
{
- m_dialogStyle = style;
- m_value = value;
+ // calculate the sizes
+ // -------------------
- wxBeginBusyCursor();
+ wxArrayString lines;
+ wxSize sizeText = SplitTextMessage(message, &lines);
- wxSize message_size( wxSplitMessage2( message, this ) );
+ wxSize sizeBtn = GetStandardButtonSize();
- 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;
+ long wText = wxMax(4*sizeBtn.GetWidth(), sizeText.GetWidth());
+ long hText = GetStandardTextHeight();
- if (style & wxOK)
- {
- ok = new wxButton( this, wxID_OK, _("OK"), wxPoint(-1,y), wxSize(80,-1) );
- m_buttons.Append( ok );
- }
+ long wDialog = 4*LAYOUT_X_MARGIN + wText;
+ long hDialog = 2*LAYOUT_Y_MARGIN +
+ sizeText.GetHeight() * lines.GetCount() +
+ 2*LAYOUT_Y_MARGIN +
+ hText +
+ 2*LAYOUT_Y_MARGIN +
+ sizeBtn.GetHeight() +
+ 2*LAYOUT_Y_MARGIN;
- if (style & wxCANCEL)
- {
- cancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxPoint(-1,y), wxSize(80,-1) );
- m_buttons.Append( cancel );
- }
+ // create the controls
+ // -------------------
- if (ok)
- {
- ok->SetDefault();
- ok->SetFocus();
- }
+ // message
+ long x = 2*LAYOUT_X_MARGIN;
+ long y = CreateTextMessage(lines,
+ wxPoint(x, 2*LAYOUT_Y_MARGIN),
+ sizeText);
- 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 );
+ y += 2*LAYOUT_X_MARGIN;
+
+ // text ctrl
+ m_textctrl = new wxTextCtrl(this, wxID_TEXT, m_value,
+ wxPoint(x, y),
+ wxSize(wText, hText));
+ y += hText + 2*LAYOUT_X_MARGIN;
- Centre( wxBOTH );
+ // and buttons
+ CreateStandardButtons(wDialog, y, sizeBtn.GetWidth(), sizeBtn.GetHeight());
+ // set the dialog size and position
+ SetClientSize(wDialog, hDialog);
+ if ( pos == wxDefaultPosition )
+ {
+ // centre the dialog if no explicit position given
+ Centre(wxBOTH | wxCENTER_FRAME);
+ }
- wxEndBusyCursor();
+ m_textctrl->SetFocus();
}
void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) )
{
- wxTextCtrl *textCtrl = (wxTextCtrl *)FindWindow(wxID_TEXT);
- if ( textCtrl )
- m_value = textCtrl->GetValue();
+ m_value = m_textctrl->GetValue();
- EndModal(wxID_OK);
+ EndModal(wxID_OK);
}