added wxDialog::GetParentForModalDialog() and use it to try to always create modal...
[wxWidgets.git] / src / generic / textdlgg.cpp
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$
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
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(GetParentForModalDialog(parent),
75 wxID_ANY, caption, pos, wxDefaultSize,
76 wxDEFAULT_DIALOG_STYLE),
77 m_value(value)
78 {
79 m_dialogStyle = style;
80 m_value = value;
81
82 wxBeginBusyCursor();
83
84 wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
85
86 wxSizerFlags flagsBorder2;
87 flagsBorder2.DoubleBorder();
88
89 #if wxUSE_STATTEXT
90 // 1) text message
91 topsizer->Add(CreateTextSizer(message), flagsBorder2);
92 #endif
93
94 // 2) text ctrl
95 m_textctrl = new wxTextCtrl(this, wxID_TEXT, value,
96 wxDefaultPosition, wxSize(300, wxDefaultCoord),
97 style & ~wxTextEntryDialogStyle);
98
99 topsizer->Add(m_textctrl,
100 wxSizerFlags(style & wxTE_MULTILINE ? 1 : 0).
101 Expand().
102 TripleBorder(wxLEFT | wxRIGHT));
103
104 #if wxUSE_VALIDATORS
105 wxTextValidator validator( wxFILTER_NONE, &m_value );
106 m_textctrl->SetValidator( validator );
107 #endif // wxUSE_VALIDATORS
108
109 // 3) buttons if any
110 wxSizer *buttonSizer = CreateSeparatedButtonSizer(style & ButtonSizerFlags);
111 if ( buttonSizer )
112 {
113 topsizer->Add(buttonSizer, wxSizerFlags(flagsBorder2).Expand());
114 }
115
116 SetAutoLayout( true );
117 SetSizer( topsizer );
118
119 topsizer->SetSizeHints( this );
120 topsizer->Fit( this );
121
122 if ( style & wxCENTRE )
123 Centre( wxBOTH );
124
125 m_textctrl->SetSelection(-1, -1);
126 m_textctrl->SetFocus();
127
128 wxEndBusyCursor();
129 }
130
131 void wxTextEntryDialog::OnOK(wxCommandEvent& WXUNUSED(event) )
132 {
133 #if wxUSE_VALIDATORS
134 if( Validate() && TransferDataFromWindow() )
135 {
136 EndModal( wxID_OK );
137 }
138 #else
139 m_value = m_textctrl->GetValue();
140
141 EndModal(wxID_OK);
142 #endif
143 // wxUSE_VALIDATORS
144 }
145
146 void wxTextEntryDialog::SetValue(const wxString& val)
147 {
148 m_value = val;
149
150 m_textctrl->SetValue(val);
151 }
152
153 #if wxUSE_VALIDATORS
154 void wxTextEntryDialog::SetTextValidator( long style )
155 {
156 wxTextValidator validator( style, &m_value );
157 m_textctrl->SetValidator( validator );
158 }
159
160 void wxTextEntryDialog::SetTextValidator( const wxTextValidator& validator )
161 {
162 m_textctrl->SetValidator( validator );
163 }
164
165 #endif
166 // wxUSE_VALIDATORS
167
168 // ----------------------------------------------------------------------------
169 // wxPasswordEntryDialog
170 // ----------------------------------------------------------------------------
171
172 IMPLEMENT_CLASS(wxPasswordEntryDialog, wxTextEntryDialog)
173
174 wxPasswordEntryDialog::wxPasswordEntryDialog(wxWindow *parent,
175 const wxString& message,
176 const wxString& caption,
177 const wxString& value,
178 long style,
179 const wxPoint& pos)
180 : wxTextEntryDialog(parent, message, caption, value,
181 style | wxTE_PASSWORD, pos)
182 {
183 // Only change from wxTextEntryDialog is the password style
184 }
185
186 #endif // wxUSE_TEXTDLG