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 
45 const wxChar wxGetTextFromUserPromptStr[] = wxT("Input Text");
46 const wxChar wxGetPasswordFromUserPromptStr[] = wxT("Enter Password");
47 
48 // ----------------------------------------------------------------------------
49 // constants
50 // ----------------------------------------------------------------------------
51 
52 static const int wxID_TEXT = 3000;
53 
54 // ============================================================================
55 // implementation
56 // ============================================================================
57 
58 // ----------------------------------------------------------------------------
59 // wxTextEntryDialog
60 // ----------------------------------------------------------------------------
61 
BEGIN_EVENT_TABLE(wxTextEntryDialog,wxDialog)62 BEGIN_EVENT_TABLE(wxTextEntryDialog, wxDialog)
63     EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK)
64 END_EVENT_TABLE()
65 
66 IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
67 
68 wxTextEntryDialog::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 
OnOK(wxCommandEvent & WXUNUSED (event))130 void 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 
SetValue(const wxString & val)145 void wxTextEntryDialog::SetValue(const wxString& val)
146 {
147     m_value = val;
148 
149     m_textctrl->SetValue(val);
150 }
151 
152 #if wxUSE_VALIDATORS
SetTextValidator(long style)153 void wxTextEntryDialog::SetTextValidator( long style )
154 {
155     wxTextValidator validator( style, &m_value );
156     m_textctrl->SetValidator( validator );
157 }
158 
SetTextValidator(const wxTextValidator & validator)159 void wxTextEntryDialog::SetTextValidator( const wxTextValidator& validator )
160 {
161     m_textctrl->SetValidator( validator );
162 }
163 
164 #endif
165   // wxUSE_VALIDATORS
166 
167 // ----------------------------------------------------------------------------
168 // wxPasswordEntryDialog
169 // ----------------------------------------------------------------------------
170 
IMPLEMENT_CLASS(wxPasswordEntryDialog,wxTextEntryDialog)171 IMPLEMENT_CLASS(wxPasswordEntryDialog, wxTextEntryDialog)
172 
173 wxPasswordEntryDialog::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