]> git.saurik.com Git - wxWidgets.git/blob - src/generic/textdlgg.cpp
fix for a crash due to using NULL inputConv in Unicode build introduced in rev 1.162
[wxWidgets.git] / src / generic / textdlgg.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: textdlgg.cpp
3 // Purpose: wxTextEntryDialog
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 04/01/98
7 // RCS-ID: $Id$
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 #ifndef WX_PRECOMP
30 #include "wx/utils.h"
31 #include "wx/dialog.h"
32 #include "wx/button.h"
33 #include "wx/stattext.h"
34 #include "wx/textctrl.h"
35 #include "wx/intl.h"
36 #include "wx/sizer.h"
37 #endif
38
39 #if wxUSE_STATLINE
40 #include "wx/statline.h"
41 #endif
42
43 #include "wx/generic/textdlgg.h"
44
45 // ----------------------------------------------------------------------------
46 // constants
47 // ----------------------------------------------------------------------------
48
49 static const int wxID_TEXT = 3000;
50
51 // ---------------------------------------------------------------------------
52 // macros
53 // ---------------------------------------------------------------------------
54
55 /* Macro for avoiding #ifdefs when value have to be different depending on size of
56 device we display on - take it from something like wxDesktopPolicy in the future
57 */
58
59 #if defined(__SMARTPHONE__)
60 #define wxLARGESMALL(large,small) small
61 #else
62 #define wxLARGESMALL(large,small) large
63 #endif
64
65 // ============================================================================
66 // implementation
67 // ============================================================================
68
69 // ----------------------------------------------------------------------------
70 // wxTextEntryDialog
71 // ----------------------------------------------------------------------------
72
73 BEGIN_EVENT_TABLE(wxTextEntryDialog, wxDialog)
74 EVT_BUTTON(wxID_OK, wxTextEntryDialog::OnOK)
75 END_EVENT_TABLE()
76
77 IMPLEMENT_CLASS(wxTextEntryDialog, wxDialog)
78
79 wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent,
80 const wxString& message,
81 const wxString& caption,
82 const wxString& value,
83 long style,
84 const wxPoint& pos)
85 : wxDialog(parent, wxID_ANY, caption, pos, wxDefaultSize,
86 wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL),
87 m_value(value)
88 {
89 m_dialogStyle = style;
90 m_value = value;
91
92 wxBeginBusyCursor();
93
94 wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
95
96 #if wxUSE_STATTEXT
97 // 1) text message
98 topsizer->Add( CreateTextSizer( message ), 0, wxALL, wxLARGESMALL(10,0) );
99 #endif
100
101 // 2) text ctrl
102 m_textctrl = new wxTextCtrl(this, wxID_TEXT, value,
103 wxDefaultPosition, wxSize(300, wxDefaultCoord),
104 style & ~wxTextEntryDialogStyle);
105 topsizer->Add( m_textctrl, style & wxTE_MULTILINE ? 1 : 0, wxEXPAND | wxLEFT|wxRIGHT, wxLARGESMALL(15,0) );
106
107 #if wxUSE_VALIDATORS
108 wxTextValidator validator( wxFILTER_NONE, &m_value );
109 m_textctrl->SetValidator( validator );
110 #endif
111 // wxUSE_VALIDATORS
112
113 // smart phones does not support or do not waste space for wxButtons
114 #ifdef __SMARTPHONE__
115
116 SetRightMenu(wxID_CANCEL, _("Cancel"));
117
118 #else // __SMARTPHONE__/!__SMARTPHONE__
119
120 #if wxUSE_STATLINE
121 // 3) static line
122 topsizer->Add( new wxStaticLine( this, wxID_ANY ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
123 #endif
124
125 // 4) buttons
126 topsizer->Add( CreateButtonSizer( style ), 0, wxEXPAND | wxALL, 10 );
127
128 #endif // !__SMARTPHONE__
129
130 SetAutoLayout( true );
131 SetSizer( topsizer );
132
133 #if !defined(__SMARTPHONE__) && !defined(__POCKETPC__)
134 topsizer->SetSizeHints( this );
135 topsizer->Fit( this );
136
137 if ( style & wxCENTRE )
138 Centre( wxBOTH );
139 #endif
140
141 m_textctrl->SetSelection(-1, -1);
142 m_textctrl->SetFocus();
143
144 wxEndBusyCursor();
145 }
146
147 void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) )
148 {
149 #if wxUSE_VALIDATORS
150 if( Validate() && TransferDataFromWindow() )
151 {
152 EndModal( wxID_OK );
153 }
154 #else
155 m_value = m_textctrl->GetValue();
156
157 EndModal(wxID_OK);
158 #endif
159 // wxUSE_VALIDATORS
160 }
161
162 void wxTextEntryDialog::SetValue(const wxString& val)
163 {
164 m_value = val;
165
166 m_textctrl->SetValue(val);
167 }
168
169 #if wxUSE_VALIDATORS
170 void wxTextEntryDialog::SetTextValidator( long style )
171 {
172 wxTextValidator validator( style, &m_value );
173 m_textctrl->SetValidator( validator );
174 }
175
176 void wxTextEntryDialog::SetTextValidator( const wxTextValidator& validator )
177 {
178 m_textctrl->SetValidator( validator );
179 }
180
181 #endif
182 // wxUSE_VALIDATORS
183
184 // ----------------------------------------------------------------------------
185 // wxPasswordEntryDialog
186 // ----------------------------------------------------------------------------
187
188 IMPLEMENT_CLASS(wxPasswordEntryDialog, wxTextEntryDialog)
189
190 wxPasswordEntryDialog::wxPasswordEntryDialog(wxWindow *parent,
191 const wxString& message,
192 const wxString& caption,
193 const wxString& value,
194 long style,
195 const wxPoint& pos)
196 : wxTextEntryDialog(parent, message, caption, value,
197 style | wxTE_PASSWORD, pos)
198 {
199 // Only change from wxTextEntryDialog is the password style
200 }
201
202 #endif // wxUSE_TEXTDLG