]> git.saurik.com Git - wxWidgets.git/blob - samples/dialogs/dialogs.cpp
Some tweaks to includes for compilers without precompiled headers
[wxWidgets.git] / samples / dialogs / dialogs.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dialogs.cpp
3 // Purpose: Common dialogs demo
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 04/01/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifdef __GNUG__
13 #pragma implementation
14 #pragma interface
15 #endif
16
17 // For compilers that support precompilation, includes "wx/wx.h".
18 #include "wx/wxprec.h"
19
20 #ifdef __BORLANDC__
21 #pragma hdrstop
22 #endif
23
24 #ifndef WX_PRECOMP
25 #include "wx/wx.h"
26 #endif
27
28 #include <wx/colordlg.h>
29 #include <wx/filedlg.h>
30 #include <wx/dirdlg.h>
31 #include <wx/fontdlg.h>
32 #include <wx/choicdlg.h>
33
34 #define wxTEST_GENERIC_DIALOGS_IN_MSW 0
35
36 #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW
37 #include <wx/generic/colrdlgg.h>
38 #include <wx/generic/fontdlgg.h>
39 #endif
40
41 #include "dialogs.h"
42
43 IMPLEMENT_APP(MyApp)
44
45 MyCanvas *myCanvas = (MyCanvas *) NULL;
46
47 // A macro needed for some compilers (AIX) that need 'main' to be defined
48 // in the application itself.
49 IMPLEMENT_WXWIN_MAIN
50
51 // `Main program' equivalent, creating windows and returning main app frame
52 bool MyApp::OnInit(void)
53 {
54 m_canvasTextColour = wxColour("BLACK");
55 m_canvasFont = *wxNORMAL_FONT;
56
57 // Create the main frame window
58 MyFrame *frame = new MyFrame((wxFrame *) NULL, (char *) "wxWindows dialogs example", wxPoint(50, 50), wxSize(400, 300));
59
60 // Make a menubar
61 wxMenu *file_menu = new wxMenu;
62
63 file_menu->Append(DIALOGS_CHOOSE_COLOUR, "&Choose colour");
64
65 #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW
66 file_menu->Append(DIALOGS_CHOOSE_COLOUR_GENERIC, "Choose colour (&generic)");
67 #endif
68
69 file_menu->AppendSeparator();
70 file_menu->Append(DIALOGS_CHOOSE_FONT, "Choose &font");
71
72 #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW
73 file_menu->Append(DIALOGS_CHOOSE_FONT_GENERIC, "Choose f&ont (generic)");
74
75 #endif
76 file_menu->AppendSeparator();
77 file_menu->Append(DIALOGS_MESSAGE_BOX, "&Message box");
78 file_menu->Append(DIALOGS_TEXT_ENTRY, "Text &entry");
79 file_menu->Append(DIALOGS_SINGLE_CHOICE, "&Single choice");
80 file_menu->AppendSeparator();
81 file_menu->Append(DIALOGS_FILE_OPEN, "&Open file");
82 file_menu->Append(DIALOGS_FILE_SAVE, "Sa&ve file");
83 file_menu->Append(DIALOGS_DIR_CHOOSE, "&Choose a directory");
84 file_menu->AppendSeparator();
85 file_menu->Append(wxID_EXIT, "E&xit");
86 wxMenuBar *menu_bar = new wxMenuBar;
87 menu_bar->Append(file_menu, "&File");
88 frame->SetMenuBar(menu_bar);
89
90 myCanvas = new MyCanvas(frame);
91 myCanvas->SetBackgroundColour(*wxWHITE);
92
93 frame->Centre(wxBOTH);
94
95 // Show the frame
96 frame->Show(TRUE);
97
98 SetTopWindow(frame);
99
100 return TRUE;
101 }
102
103 // My frame constructor
104 MyFrame::MyFrame(wxWindow *parent, const wxString& title, const wxPoint& pos, const wxSize& size):
105 wxFrame(parent, -1, title, pos, size)
106 {}
107
108 void MyFrame::ChooseColour(wxCommandEvent& WXUNUSED(event) )
109 {
110 wxColourData data;
111 data.SetChooseFull(TRUE);
112 for (int i = 0; i < 16; i++)
113 {
114 wxColour colour(i*16, i*16, i*16);
115 data.SetCustomColour(i, colour);
116 }
117
118 wxColourDialog *dialog = new wxColourDialog(this, &data);
119 if (dialog->ShowModal() == wxID_OK)
120 {
121 wxColourData retData = dialog->GetColourData();
122 wxColour col = retData.GetColour();
123 // wxBrush *brush = wxTheBrushList->FindOrCreateBrush(&col, wxSOLID);
124 myCanvas->SetBackgroundColour(col);
125 myCanvas->Clear();
126 myCanvas->Refresh();
127 }
128 dialog->Close();
129 }
130
131 void MyFrame::ChooseFont(wxCommandEvent& WXUNUSED(event) )
132 {
133 wxFontData data;
134 data.SetInitialFont(wxGetApp().m_canvasFont);
135 data.SetColour(wxGetApp().m_canvasTextColour);
136
137 wxFontDialog *dialog = new wxFontDialog(this, &data);
138 if (dialog->ShowModal() == wxID_OK)
139 {
140 wxFontData retData = dialog->GetFontData();
141 wxGetApp().m_canvasFont = retData.GetChosenFont();
142 wxGetApp().m_canvasTextColour = retData.GetColour();
143 myCanvas->Refresh();
144 }
145 dialog->Close();
146 }
147
148 #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW
149 void MyFrame::ChooseColourGeneric(wxCommandEvent& WXUNUSED(event))
150 {
151 wxColourData data;
152 data.SetChooseFull(TRUE);
153 for (int i = 0; i < 16; i++)
154 {
155 wxColour colour(i*16, i*16, i*16);
156 data.SetCustomColour(i, colour);
157 }
158
159 wxGenericColourDialog *dialog = new wxGenericColourDialog(this, &data);
160 if (dialog->ShowModal() == wxID_OK)
161 {
162 wxColourData retData = dialog->GetColourData();
163 wxColour col = retData.GetColour();
164 // wxBrush *brush = wxTheBrushList->FindOrCreateBrush(&col, wxSOLID);
165 myCanvas->SetBackgroundColour(col);
166 myCanvas->Clear();
167 myCanvas->Refresh();
168 }
169 dialog->Close();
170 }
171
172 void MyFrame::ChooseFontGeneric(wxCommandEvent& WXUNUSED(event) )
173 {
174 wxFontData data;
175 data.SetInitialFont(wxGetApp().m_canvasFont);
176 data.SetColour(wxGetApp().m_canvasTextColour);
177
178 wxGenericFontDialog *dialog = new wxGenericFontDialog(this, &data);
179 if (dialog->ShowModal() == wxID_OK)
180 {
181 wxFontData retData = dialog->GetFontData();
182 wxGetApp().m_canvasFont = retData.GetChosenFont();
183 wxGetApp().m_canvasTextColour = retData.GetColour();
184 myCanvas->Refresh();
185 }
186 dialog->Close();
187 }
188 #endif
189
190 void MyFrame::MessageBox(wxCommandEvent& WXUNUSED(event) )
191 {
192 wxMessageDialog dialog(this, "This is a message box\nA long, long string to test out the message box properly",
193 "Message box text", wxYES_NO|wxCANCEL);
194
195 dialog.ShowModal();
196 }
197
198 void MyFrame::TextEntry(wxCommandEvent& WXUNUSED(event) )
199 {
200 wxTextEntryDialog dialog(this, "This is a small sample\nA long, long string to test out the text entrybox",
201 "Please enter a string", "Default value", wxOK|wxCANCEL);
202
203 if (dialog.ShowModal() == wxID_OK)
204 {
205 wxMessageDialog dialog2(this, dialog.GetValue(), "Got string");
206 dialog2.ShowModal();
207 }
208 }
209
210 void MyFrame::SingleChoice(wxCommandEvent& WXUNUSED(event) )
211 {
212 const wxString choices[] = { "One", "Two", "Three", "Four", "Five" } ;
213 int n = 5;
214
215 wxSingleChoiceDialog dialog(this, "This is a small sample\nA single-choice convenience dialog",
216 "Please select a value", n, (const wxString *)choices);
217
218 dialog.SetSelection(2);
219
220 if (dialog.ShowModal() == wxID_OK)
221 {
222 wxMessageDialog dialog2(this, dialog.GetStringSelection(), "Got string");
223 dialog2.ShowModal();
224 }
225 }
226
227 void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) )
228 {
229 wxFileDialog dialog(this, "Testing open file dialog", "", "", "*.txt", 0);
230
231 if (dialog.ShowModal() == wxID_OK)
232 {
233 wxMessageDialog dialog2(this, dialog.GetPath(), "Selected path");
234 dialog2.ShowModal();
235 }
236 }
237
238 void MyFrame::FileSave(wxCommandEvent& WXUNUSED(event) )
239 {
240 wxFileDialog dialog(this, "Testing save file dialog", "", "",
241 "Text files (*.txt)|*.txt|Document files (*.doc)|*.doc",
242 wxSAVE|wxOVERWRITE_PROMPT);
243
244 if (dialog.ShowModal() == wxID_OK)
245 {
246 char buf[400];
247 sprintf(buf, "%s, filter %d", (const char *)dialog.GetPath(), dialog.GetFilterIndex());
248 wxMessageDialog dialog2(this, wxString(buf), "Selected path");
249 dialog2.ShowModal();
250 }
251 }
252
253 void MyFrame::DirChoose(wxCommandEvent& WXUNUSED(event) )
254 {
255 wxDirDialog dialog(this, "Testing directory picker", "");
256
257 if (dialog.ShowModal() == wxID_OK)
258 {
259 wxMessageDialog dialog2(this, dialog.GetPath(), "Selected path");
260 dialog2.ShowModal();
261 }
262 }
263
264 void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event) )
265 {
266 Close(TRUE);
267 }
268
269 void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event) )
270 {
271 wxPaintDC dc(this);
272 dc.SetFont(wxGetApp().m_canvasFont);
273 dc.SetTextForeground(wxGetApp().m_canvasTextColour);
274 dc.SetBackgroundMode(wxTRANSPARENT);
275 dc.DrawText("wxWindows common dialogs test application", 10, 10);
276 }
277
278 BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
279 EVT_PAINT(MyCanvas::OnPaint)
280 END_EVENT_TABLE()
281
282 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
283 EVT_MENU(DIALOGS_CHOOSE_COLOUR, MyFrame::ChooseColour)
284 EVT_MENU(DIALOGS_CHOOSE_FONT, MyFrame::ChooseFont)
285 EVT_MENU(DIALOGS_MESSAGE_BOX, MyFrame::MessageBox)
286 EVT_MENU(DIALOGS_TEXT_ENTRY, MyFrame::TextEntry)
287 EVT_MENU(DIALOGS_SINGLE_CHOICE, MyFrame::SingleChoice)
288 EVT_MENU(DIALOGS_FILE_OPEN, MyFrame::FileOpen)
289 EVT_MENU(DIALOGS_FILE_SAVE, MyFrame::FileSave)
290 EVT_MENU(DIALOGS_DIR_CHOOSE, MyFrame::DirChoose)
291 #if defined(__WXMSW__) && wxTEST_GENERIC_DIALOGS_IN_MSW
292 EVT_MENU(DIALOGS_CHOOSE_COLOUR_GENERIC, MyFrame::ChooseColourGeneric)
293 EVT_MENU(DIALOGS_CHOOSE_FONT_GENERIC, MyFrame::ChooseFontGeneric)
294 #endif
295 EVT_MENU(wxID_EXIT, MyFrame::OnExit)
296 END_EVENT_TABLE()
297