]> git.saurik.com Git - wxWidgets.git/blame - samples/preferences/preferences.cpp
Turkish translations update from Çağrı Doğan.
[wxWidgets.git] / samples / preferences / preferences.cpp
CommitLineData
6bf92117
VS
1///////////////////////////////////////////////////////////////////////////////
2// Name: samples/preferences/preferences.cpp
3// Purpose: Sample demonstrating wxPreferencesEditor use.
4// Author: Vaclav Slavik
5// Created: 2013-02-19
6bf92117
VS
6// Copyright: (c) 2013 Vaclav Slavik <vslavik@fastmail.fm>
7// Licence: wxWindows licence
8///////////////////////////////////////////////////////////////////////////////
9
10
11#include "wx/wxprec.h"
12
13#ifdef __BORLANDC__
14 #pragma hdrstop
15#endif
16
17#include "wx/preferences.h"
18
19#include "wx/app.h"
20#include "wx/config.h"
21#include "wx/panel.h"
22#include "wx/scopedptr.h"
23#include "wx/menu.h"
24#include "wx/checkbox.h"
25#include "wx/listbox.h"
26#include "wx/stattext.h"
27#include "wx/sizer.h"
28#include "wx/artprov.h"
29#include "wx/frame.h"
30
31class MyApp : public wxApp
32{
33public:
34 virtual bool OnInit();
35
36 void ShowPreferencesEditor(wxWindow* parent);
37 void DismissPreferencesEditor();
38
39private:
40 wxScopedPtr<wxPreferencesEditor> m_prefEditor;
41};
42
43IMPLEMENT_APP(MyApp)
44
45
46class MyFrame : public wxFrame
47{
48public:
49 MyFrame() : wxFrame(NULL, wxID_ANY, "Preferences sample")
50 {
51 wxMenu *fileMenu = new wxMenu;
52 fileMenu->Append(wxID_PREFERENCES);
53 fileMenu->Append(wxID_EXIT);
54
55 wxMenuBar *menuBar = new wxMenuBar();
56 menuBar->Append(fileMenu, "&File");
57 SetMenuBar(menuBar);
58
59 Connect(wxID_PREFERENCES,
ce7fe42e 60 wxEVT_MENU,
6bf92117
VS
61 wxCommandEventHandler(MyFrame::OnPref), NULL, this);
62 Connect(wxID_EXIT,
ce7fe42e 63 wxEVT_MENU,
6bf92117
VS
64 wxCommandEventHandler(MyFrame::OnExit), NULL, this);
65 Connect(wxEVT_CLOSE_WINDOW,
66 wxCloseEventHandler(MyFrame::OnClose), NULL, this);
67 }
68
69private:
70 void OnPref(wxCommandEvent&)
71 {
72 wxGetApp().ShowPreferencesEditor(this);
73 }
74
75 void OnExit(wxCommandEvent&)
76 {
77 Close();
78 }
79
80 void OnClose(wxCloseEvent& e)
81 {
82 wxGetApp().DismissPreferencesEditor();
83 e.Skip();
84 }
85};
86
87
88class PrefsPageGeneralPanel : public wxPanel
89{
90public:
91 PrefsPageGeneralPanel(wxWindow *parent) : wxPanel(parent)
92 {
93 m_useMarkdown = new wxCheckBox(this, wxID_ANY, "User Markdown syntax");
94 m_spellcheck = new wxCheckBox(this, wxID_ANY, "Check spelling");
95
96 wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
97 sizer->Add(m_useMarkdown, wxSizerFlags().Border());
98 sizer->Add(m_spellcheck, wxSizerFlags().Border());
99
100 SetSizerAndFit(sizer);
101
102 // On some platforms (OS X, GNOME), changes to preferences are applied
103 // immediately rather than after the OK or Apply button is pressed.
104 if ( wxPreferencesEditor::ShouldApplyChangesImmediately() )
105 {
ce7fe42e 106 m_useMarkdown->Connect(wxEVT_CHECKBOX,
6bf92117
VS
107 wxCommandEventHandler(PrefsPageGeneralPanel::ChangedUseMarkdown),
108 NULL, this);
ce7fe42e 109 m_spellcheck->Connect(wxEVT_CHECKBOX,
6bf92117
VS
110 wxCommandEventHandler(PrefsPageGeneralPanel::ChangedSpellcheck),
111 NULL, this);
112 }
113 }
114
115 virtual bool TransferDataToWindow()
116 {
117 // This is the place where you can initialize values, e.g. from wxConfig.
118 // For demonstration purposes, we just set hardcoded values.
119 m_useMarkdown->SetValue(true);
120 m_spellcheck->SetValue(false);
121 return true;
122 }
123
124 virtual bool TransferDataFromWindow()
125 {
126 // Called on platforms with modal preferences dialog to save and apply
127 // the changes.
128 wxCommandEvent dummy;
129 ChangedUseMarkdown(dummy);
130 ChangedSpellcheck(dummy);
131 return true;
132 }
133
134private:
135 void ChangedUseMarkdown(wxCommandEvent& WXUNUSED(e))
136 {
137 // save new m_useMarkdown value and apply the change to the app
138 }
139
140 void ChangedSpellcheck(wxCommandEvent& WXUNUSED(e))
141 {
142 // save new m_spellcheck value and apply the change to the app
143 }
144
145 wxCheckBox *m_useMarkdown;
146 wxCheckBox *m_spellcheck;
147};
148
149class PrefsPageGeneral : public wxStockPreferencesPage
150{
151public:
152 PrefsPageGeneral() : wxStockPreferencesPage(Kind_General) {}
153 virtual wxWindow *CreateWindow(wxWindow *parent)
154 { return new PrefsPageGeneralPanel(parent); }
155};
156
157
158class PrefsPageTopicsPanel : public wxPanel
159{
160public:
161 PrefsPageTopicsPanel(wxWindow *parent) : wxPanel(parent)
162 {
163 wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
164 sizer->Add(new wxStaticText(this, wxID_ANY, "Search in these topics:"), wxSizerFlags().Border());
165 wxListBox *box = new wxListBox(this, wxID_ANY);
166 box->SetMinSize(wxSize(400, 300));
167 sizer->Add(box, wxSizerFlags(1).Border().Expand());
168 m_fulltext = new wxCheckBox(this, wxID_ANY, "Automatically build fulltext index");
169 sizer->Add(m_fulltext, wxSizerFlags().Border());
170
171 SetSizerAndFit(sizer);
172
173 if ( wxPreferencesEditor::ShouldApplyChangesImmediately() )
174 {
ce7fe42e 175 m_fulltext->Connect(wxEVT_CHECKBOX,
6bf92117
VS
176 wxCommandEventHandler(PrefsPageTopicsPanel::ChangedFulltext),
177 NULL, this);
178 }
179 }
180
181 virtual bool TransferDataToWindow()
182 {
183 // This is the place where you can initialize values, e.g. from wxConfig.
184 // For demonstration purposes, we just set hardcoded values.
185 m_fulltext->SetValue(true);
186 // TODO: handle the listbox
187 return true;
188 }
189
190 virtual bool TransferDataFromWindow()
191 {
192 // Called on platforms with modal preferences dialog to save and apply
193 // the changes.
194 wxCommandEvent dummy;
195 ChangedFulltext(dummy);
196 // TODO: handle the listbox
197 return true;
198 }
199
200private:
201 void ChangedFulltext(wxCommandEvent& WXUNUSED(e))
202 {
203 // save new m_fulltext value and apply the change to the app
204 }
205
206 wxCheckBox *m_fulltext;
207};
208
209class PrefsPageTopics : public wxPreferencesPage
210{
211public:
212 virtual wxString GetName() const { return "Topics"; }
213 virtual wxBitmap GetLargeIcon() const
214 { return wxArtProvider::GetBitmap(wxART_HELP, wxART_TOOLBAR); }
215 virtual wxWindow *CreateWindow(wxWindow *parent)
216 { return new PrefsPageTopicsPanel(parent); }
217};
218
219
220
221bool MyApp::OnInit()
222{
223 if ( !wxApp::OnInit() )
224 return false;
225
dc5d118e
VZ
226 // This will be used in the title of the preferences dialog under some
227 // platforms, don't leave it as default "Preferences" because this would
228 // result in rather strange "Preferences Preferences" title.
229 SetAppDisplayName("wxWidgets Sample");
230
6bf92117
VS
231 MyFrame *frame = new MyFrame();
232 frame->Show(true);
233
234 return true;
235}
236
237void MyApp::ShowPreferencesEditor(wxWindow* parent)
238{
239 if ( !m_prefEditor )
240 {
241 m_prefEditor.reset(new wxPreferencesEditor);
242 m_prefEditor->AddPage(new PrefsPageGeneral());
243 m_prefEditor->AddPage(new PrefsPageTopics());
244 }
245
246 m_prefEditor->Show(parent);
247}
248
249void MyApp::DismissPreferencesEditor()
250{
251 if ( m_prefEditor )
252 m_prefEditor->Dismiss();
253}