1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/generic/textdlgg.cpp
3// Purpose:     wxTextEntryDialog
4// Author:      Julian Smart
5// Modified by:
6// Created:     04/01/98
7// RCS-ID:      $Id: textdlgg.cpp 41838 2006-10-09 21:08:45Z VZ $
8// Copyright:   (c) Julian Smart
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20// For compilers that support precompilation, includes "wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
24    #pragma hdrstop
25#endif
26
27#if wxUSE_TEXTDLG
28
29#include "wx/generic/textdlgg.h"
30
31#ifndef WX_PRECOMP
32    #include "wx/utils.h"
33    #include "wx/dialog.h"
34    #include "wx/button.h"
35    #include "wx/stattext.h"
36    #include "wx/textctrl.h"
37    #include "wx/intl.h"
38    #include "wx/sizer.h"
39#endif
40
41#if wxUSE_STATLINE
42    #include "wx/statline.h"
43#endif
44
45const wxChar wxGetTextFromUserPromptStr[] = wxT("Input Text");
46const wxChar wxGetPasswordFromUserPromptStr[] = wxT("Enter Password");
47
48// ----------------------------------------------------------------------------
49// constants
50// ----------------------------------------------------------------------------
51
52static const int wxID_TEXT = 3000;
53
54// ============================================================================
55// implementation
56// ============================================================================
57
58// ----------------------------------------------------------------------------
59// wxTextEntryDialog
60// ----------------------------------------------------------------------------
61
62BEGIN_EVENT_TABLE(wxTextEntryDialog, wxDialog)
63    EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK)
64END_EVENT_TABLE()
65
66IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
67
68wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent,
69                                     const wxString& message,
70                                     const wxString& caption,
71                                     const wxString& value,
72                                     long style,
73                                     const wxPoint& pos)
74                 : wxDialog(parent, wxID_ANY, caption, pos, wxDefaultSize,
75                            wxDEFAULT_DIALOG_STYLE),
76                   m_value(value)
77{
78    m_dialogStyle = style;
79    m_value = value;
80
81    wxBeginBusyCursor();
82
83    wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
84
85    wxSizerFlags flagsBorder2;
86    flagsBorder2.DoubleBorder();
87
88#if wxUSE_STATTEXT
89    // 1) text message
90    topsizer->Add(CreateTextSizer(message), flagsBorder2);
91#endif
92
93    // 2) text ctrl
94    m_textctrl = new wxTextCtrl(this, wxID_TEXT, value,
95                                wxDefaultPosition, wxSize(300, wxDefaultCoord),
96                                style & ~wxTextEntryDialogStyle);
97
98    topsizer->Add(m_textctrl,
99                  wxSizerFlags(style & wxTE_MULTILINE ? 1 : 0).
100                    Expand().
101                    TripleBorder(wxLEFT | wxRIGHT));
102
103#if wxUSE_VALIDATORS
104    wxTextValidator validator( wxFILTER_NONE, &m_value );
105    m_textctrl->SetValidator( validator );
106#endif // wxUSE_VALIDATORS
107
108    // 3) buttons if any
109    wxSizer *buttonSizer = CreateSeparatedButtonSizer(style & ButtonSizerFlags);
110    if ( buttonSizer )
111    {
112        topsizer->Add(buttonSizer, wxSizerFlags(flagsBorder2).Expand());
113    }
114
115    SetAutoLayout( true );
116    SetSizer( topsizer );
117
118    topsizer->SetSizeHints( this );
119    topsizer->Fit( this );
120
121    if ( style & wxCENTRE )
122        Centre( wxBOTH );
123
124    m_textctrl->SetSelection(-1, -1);
125    m_textctrl->SetFocus();
126
127    wxEndBusyCursor();
128}
129
130void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) )
131{
132#if wxUSE_VALIDATORS
133    if( Validate() && TransferDataFromWindow() )
134    {
135        EndModal( wxID_OK );
136    }
137#else
138    m_value = m_textctrl->GetValue();
139
140    EndModal(wxID_OK);
141#endif
142  // wxUSE_VALIDATORS
143}
144
145void wxTextEntryDialog::SetValue(const wxString& val)
146{
147    m_value = val;
148
149    m_textctrl->SetValue(val);
150}
151
152#if wxUSE_VALIDATORS
153void wxTextEntryDialog::SetTextValidator( long style )
154{
155    wxTextValidator validator( style, &m_value );
156    m_textctrl->SetValidator( validator );
157}
158
159void wxTextEntryDialog::SetTextValidator( const wxTextValidator& validator )
160{
161    m_textctrl->SetValidator( validator );
162}
163
164#endif
165  // wxUSE_VALIDATORS
166
167// ----------------------------------------------------------------------------
168// wxPasswordEntryDialog
169// ----------------------------------------------------------------------------
170
171IMPLEMENT_CLASS(wxPasswordEntryDialog, wxTextEntryDialog)
172
173wxPasswordEntryDialog::wxPasswordEntryDialog(wxWindow *parent,
174                                     const wxString& message,
175                                     const wxString& caption,
176                                     const wxString& value,
177                                     long style,
178                                     const wxPoint& pos)
179                 : wxTextEntryDialog(parent, message, caption, value,
180                                     style | wxTE_PASSWORD, pos)
181{
182    // Only change from wxTextEntryDialog is the password style
183}
184
185#endif // wxUSE_TEXTDLG
186