]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/richtext/richtextbulletspage.cpp
Refactor children traversal in wxWindow::TransferData{To,From}Window().
[wxWidgets.git] / src / richtext / richtextbulletspage.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/richtext/richtextbulletspage.cpp
3// Purpose:
4// Author: Julian Smart
5// Modified by:
6// Created: 10/4/2006 10:32:31 AM
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#if wxUSE_RICHTEXT
13
14#include "wx/spinctrl.h"
15#include "wx/utils.h"
16#include "wx/richtext/richtextbulletspage.h"
17#include "wx/richtext/richtextsymboldlg.h"
18
19/*!
20 * wxRichTextBulletsPage type definition
21 */
22
23IMPLEMENT_DYNAMIC_CLASS( wxRichTextBulletsPage, wxRichTextDialogPage )
24
25/*!
26 * wxRichTextBulletsPage event table definition
27 */
28
29BEGIN_EVENT_TABLE( wxRichTextBulletsPage, wxRichTextDialogPage )
30
31////@begin wxRichTextBulletsPage event table entries
32 EVT_LISTBOX( ID_RICHTEXTBULLETSPAGE_STYLELISTBOX, wxRichTextBulletsPage::OnStylelistboxSelected )
33
34 EVT_CHECKBOX( ID_RICHTEXTBULLETSPAGE_PERIODCTRL, wxRichTextBulletsPage::OnPeriodctrlClick )
35 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_PERIODCTRL, wxRichTextBulletsPage::OnPeriodctrlUpdate )
36
37 EVT_CHECKBOX( ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, wxRichTextBulletsPage::OnParenthesesctrlClick )
38 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, wxRichTextBulletsPage::OnParenthesesctrlUpdate )
39
40 EVT_CHECKBOX( ID_RICHTEXTBULLETSPAGE_RIGHTPARENTHESISCTRL, wxRichTextBulletsPage::OnRightParenthesisCtrlClick )
41 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_RIGHTPARENTHESISCTRL, wxRichTextBulletsPage::OnRightParenthesisCtrlUpdate )
42
43 EVT_COMBOBOX( ID_RICHTEXTBULLETSPAGE_BULLETALIGNMENTCTRL, wxRichTextBulletsPage::OnBulletAlignmentCtrlSelected )
44
45 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, wxRichTextBulletsPage::OnSymbolstaticUpdate )
46
47 EVT_COMBOBOX( ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxRichTextBulletsPage::OnSymbolctrlSelected )
48 EVT_TEXT( ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxRichTextBulletsPage::OnSymbolctrlUpdated )
49 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxRichTextBulletsPage::OnSymbolctrlUpdate )
50
51 EVT_BUTTON( ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL, wxRichTextBulletsPage::OnChooseSymbolClick )
52 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL, wxRichTextBulletsPage::OnChooseSymbolUpdate )
53
54 EVT_COMBOBOX( ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, wxRichTextBulletsPage::OnSymbolfontctrlSelected )
55 EVT_TEXT( ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, wxRichTextBulletsPage::OnSymbolfontctrlUpdated )
56 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, wxRichTextBulletsPage::OnSymbolfontctrlUIUpdate )
57
58 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NAMESTATIC, wxRichTextBulletsPage::OnNamestaticUpdate )
59
60 EVT_COMBOBOX( ID_RICHTEXTBULLETSPAGE_NAMECTRL, wxRichTextBulletsPage::OnNamectrlSelected )
61 EVT_TEXT( ID_RICHTEXTBULLETSPAGE_NAMECTRL, wxRichTextBulletsPage::OnNamectrlUpdated )
62 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NAMECTRL, wxRichTextBulletsPage::OnNamectrlUIUpdate )
63
64 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC, wxRichTextBulletsPage::OnNumberstaticUpdate )
65
66 EVT_SPINCTRL( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUpdated )
67 EVT_SPIN_UP( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUp )
68 EVT_SPIN_DOWN( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlDown )
69 EVT_TEXT( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlTextUpdated )
70 EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUpdate )
71
72////@end wxRichTextBulletsPage event table entries
73
74END_EVENT_TABLE()
75
76IMPLEMENT_HELP_PROVISION(wxRichTextBulletsPage)
77
78/*!
79 * wxRichTextBulletsPage constructors
80 */
81
82wxRichTextBulletsPage::wxRichTextBulletsPage( )
83{
84 Init();
85}
86
87wxRichTextBulletsPage::wxRichTextBulletsPage( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
88{
89 Init();
90 Create(parent, id, pos, size, style);
91}
92
93/*!
94 * Initialise members
95 */
96
97void wxRichTextBulletsPage::Init()
98{
99 m_hasBulletStyle = false;
100 m_hasBulletNumber = false;
101 m_hasBulletSymbol = false;
102 m_dontUpdate = false;
103
104////@begin wxRichTextBulletsPage member initialisation
105 m_styleListBox = NULL;
106 m_periodCtrl = NULL;
107 m_parenthesesCtrl = NULL;
108 m_rightParenthesisCtrl = NULL;
109 m_bulletAlignmentCtrl = NULL;
110 m_symbolCtrl = NULL;
111 m_symbolFontCtrl = NULL;
112 m_bulletNameCtrl = NULL;
113 m_numberCtrl = NULL;
114 m_previewCtrl = NULL;
115////@end wxRichTextBulletsPage member initialisation
116}
117
118/*!
119 * wxRichTextBulletsPage creator
120 */
121
122bool wxRichTextBulletsPage::Create( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style )
123{
124////@begin wxRichTextBulletsPage creation
125 wxRichTextDialogPage::Create( parent, id, pos, size, style );
126
127 CreateControls();
128 if (GetSizer())
129 {
130 GetSizer()->SetSizeHints(this);
131 }
132 Centre();
133////@end wxRichTextBulletsPage creation
134 return true;
135}
136
137/*!
138 * Control creation for wxRichTextBulletsPage
139 */
140
141void wxRichTextBulletsPage::CreateControls()
142{
143 m_dontUpdate = true;
144
145////@begin wxRichTextBulletsPage content construction
146 wxRichTextBulletsPage* itemRichTextDialogPage1 = this;
147
148 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
149 itemRichTextDialogPage1->SetSizer(itemBoxSizer2);
150
151 wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxVERTICAL);
152 itemBoxSizer2->Add(itemBoxSizer3, 1, wxGROW|wxALL, 5);
153
154 wxBoxSizer* itemBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
155 itemBoxSizer3->Add(itemBoxSizer4, 0, wxGROW, 5);
156
157 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
158 itemBoxSizer4->Add(itemBoxSizer5, 0, wxGROW, 5);
159
160 wxStaticText* itemStaticText6 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("&Bullet style:"), wxDefaultPosition, wxDefaultSize, 0 );
161 itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
162
163 wxArrayString m_styleListBoxStrings;
164 m_styleListBox = new wxListBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_STYLELISTBOX, wxDefaultPosition, wxSize(-1, 90), m_styleListBoxStrings, wxLB_SINGLE );
165 m_styleListBox->SetHelpText(_("The available bullet styles."));
166 if (wxRichTextBulletsPage::ShowToolTips())
167 m_styleListBox->SetToolTip(_("The available bullet styles."));
168 itemBoxSizer5->Add(m_styleListBox, 1, wxGROW|wxALL, 5);
169
170 wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxHORIZONTAL);
171 itemBoxSizer5->Add(itemBoxSizer8, 0, wxGROW, 5);
172
173 m_periodCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_PERIODCTRL, _("Peri&od"), wxDefaultPosition, wxDefaultSize, 0 );
174 m_periodCtrl->SetValue(false);
175 m_periodCtrl->SetHelpText(_("Check to add a period after the bullet."));
176 if (wxRichTextBulletsPage::ShowToolTips())
177 m_periodCtrl->SetToolTip(_("Check to add a period after the bullet."));
178 itemBoxSizer8->Add(m_periodCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
179
180 m_parenthesesCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, _("(*)"), wxDefaultPosition, wxDefaultSize, 0 );
181 m_parenthesesCtrl->SetValue(false);
182 m_parenthesesCtrl->SetHelpText(_("Check to enclose the bullet in parentheses."));
183 if (wxRichTextBulletsPage::ShowToolTips())
184 m_parenthesesCtrl->SetToolTip(_("Check to enclose the bullet in parentheses."));
185 itemBoxSizer8->Add(m_parenthesesCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
186
187 m_rightParenthesisCtrl = new wxCheckBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_RIGHTPARENTHESISCTRL, _("*)"), wxDefaultPosition, wxDefaultSize, 0 );
188 m_rightParenthesisCtrl->SetValue(false);
189 m_rightParenthesisCtrl->SetHelpText(_("Check to add a right parenthesis."));
190 if (wxRichTextBulletsPage::ShowToolTips())
191 m_rightParenthesisCtrl->SetToolTip(_("Check to add a right parenthesis."));
192 itemBoxSizer8->Add(m_rightParenthesisCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
193
194 itemBoxSizer5->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5);
195
196 wxStaticText* itemStaticText13 = new wxStaticText( itemRichTextDialogPage1, wxID_STATIC, _("Bullet &Alignment:"), wxDefaultPosition, wxDefaultSize, 0 );
197 itemBoxSizer5->Add(itemStaticText13, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
198
199 wxArrayString m_bulletAlignmentCtrlStrings;
200 m_bulletAlignmentCtrlStrings.Add(_("Left"));
201 m_bulletAlignmentCtrlStrings.Add(_("Centre"));
202 m_bulletAlignmentCtrlStrings.Add(_("Right"));
203 m_bulletAlignmentCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_BULLETALIGNMENTCTRL, _("Left"), wxDefaultPosition, wxSize(60, -1), m_bulletAlignmentCtrlStrings, wxCB_READONLY );
204 m_bulletAlignmentCtrl->SetStringSelection(_("Left"));
205 m_bulletAlignmentCtrl->SetHelpText(_("The bullet character."));
206 if (wxRichTextBulletsPage::ShowToolTips())
207 m_bulletAlignmentCtrl->SetToolTip(_("The bullet character."));
208 itemBoxSizer5->Add(m_bulletAlignmentCtrl, 0, wxGROW|wxALL|wxFIXED_MINSIZE, 5);
209
210 itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
211
212 wxStaticLine* itemStaticLine16 = new wxStaticLine( itemRichTextDialogPage1, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
213 itemBoxSizer4->Add(itemStaticLine16, 0, wxGROW|wxLEFT|wxRIGHT, 5);
214
215 itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5);
216
217 wxBoxSizer* itemBoxSizer18 = new wxBoxSizer(wxVERTICAL);
218 itemBoxSizer4->Add(itemBoxSizer18, 0, wxGROW, 5);
219
220 wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxHORIZONTAL);
221 itemBoxSizer18->Add(itemBoxSizer19, 0, wxGROW, 5);
222
223 wxStaticText* itemStaticText20 = new wxStaticText( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, _("&Symbol:"), wxDefaultPosition, wxDefaultSize, 0 );
224 itemBoxSizer19->Add(itemStaticText20, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
225
226 wxArrayString m_symbolCtrlStrings;
227 m_symbolCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxEmptyString, wxDefaultPosition, wxSize(60, -1), m_symbolCtrlStrings, wxCB_DROPDOWN );
228 m_symbolCtrl->SetHelpText(_("The bullet character."));
229 if (wxRichTextBulletsPage::ShowToolTips())
230 m_symbolCtrl->SetToolTip(_("The bullet character."));
231 itemBoxSizer19->Add(m_symbolCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE, 5);
232
233 wxButton* itemButton22 = new wxButton( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL, _("Ch&oose..."), wxDefaultPosition, wxDefaultSize, 0 );
234 itemButton22->SetHelpText(_("Click to browse for a symbol."));
235 if (wxRichTextBulletsPage::ShowToolTips())
236 itemButton22->SetToolTip(_("Click to browse for a symbol."));
237 itemBoxSizer19->Add(itemButton22, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
238
239 itemBoxSizer18->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5);
240
241 wxStaticText* itemStaticText24 = new wxStaticText( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, _("Symbol &font:"), wxDefaultPosition, wxDefaultSize, 0 );
242 itemBoxSizer18->Add(itemStaticText24, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
243
244 wxArrayString m_symbolFontCtrlStrings;
245 m_symbolFontCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, m_symbolFontCtrlStrings, wxCB_DROPDOWN );
246 m_symbolFontCtrl->SetHelpText(_("Available fonts."));
247 if (wxRichTextBulletsPage::ShowToolTips())
248 m_symbolFontCtrl->SetToolTip(_("Available fonts."));
249 itemBoxSizer18->Add(m_symbolFontCtrl, 0, wxGROW|wxALL, 5);
250
251 itemBoxSizer18->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL, 5);
252
253 wxStaticText* itemStaticText27 = new wxStaticText( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_NAMESTATIC, _("S&tandard bullet name:"), wxDefaultPosition, wxDefaultSize, 0 );
254 itemBoxSizer18->Add(itemStaticText27, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
255
256 wxArrayString m_bulletNameCtrlStrings;
257 m_bulletNameCtrl = new wxComboBox( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_NAMECTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, m_bulletNameCtrlStrings, wxCB_DROPDOWN );
258 m_bulletNameCtrl->SetHelpText(_("A standard bullet name."));
259 if (wxRichTextBulletsPage::ShowToolTips())
260 m_bulletNameCtrl->SetToolTip(_("A standard bullet name."));
261 itemBoxSizer18->Add(m_bulletNameCtrl, 0, wxGROW|wxALL, 5);
262
263 itemBoxSizer18->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL, 5);
264
265 wxStaticText* itemStaticText30 = new wxStaticText( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC, _("&Number:"), wxDefaultPosition, wxDefaultSize, 0 );
266 itemBoxSizer18->Add(itemStaticText30, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP, 5);
267
268 m_numberCtrl = new wxSpinCtrl( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxT("0"), wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 0, 100000, 0 );
269 m_numberCtrl->SetHelpText(_("The list item number."));
270 if (wxRichTextBulletsPage::ShowToolTips())
271 m_numberCtrl->SetToolTip(_("The list item number."));
272 itemBoxSizer18->Add(m_numberCtrl, 0, wxGROW|wxALL, 5);
273
274 itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5);
275
276 m_previewCtrl = new wxRichTextCtrl( itemRichTextDialogPage1, ID_RICHTEXTBULLETSPAGE_PREVIEW_CTRL, wxEmptyString, wxDefaultPosition, wxSize(350, 100), wxBORDER_THEME|wxVSCROLL|wxTE_READONLY );
277 m_previewCtrl->SetHelpText(_("Shows a preview of the bullet settings."));
278 if (wxRichTextBulletsPage::ShowToolTips())
279 m_previewCtrl->SetToolTip(_("Shows a preview of the bullet settings."));
280 itemBoxSizer3->Add(m_previewCtrl, 1, wxGROW|wxALL, 5);
281
282////@end wxRichTextBulletsPage content construction
283
284 if (wxGetDisplaySize().y < 600)
285 m_previewCtrl->SetMinSize(wxSize(350, 50));
286
287 m_styleListBox->Append(_("(None)"));
288 m_styleListBox->Append(_("Arabic"));
289 m_styleListBox->Append(_("Upper case letters"));
290 m_styleListBox->Append(_("Lower case letters"));
291 m_styleListBox->Append(_("Upper case roman numerals"));
292 m_styleListBox->Append(_("Lower case roman numerals"));
293 m_styleListBox->Append(_("Numbered outline"));
294 m_styleListBox->Append(_("Symbol"));
295 m_styleListBox->Append(_("Bitmap"));
296 m_styleListBox->Append(_("Standard"));
297
298 m_symbolCtrl->Append(_("*"));
299 m_symbolCtrl->Append(_("-"));
300 m_symbolCtrl->Append(_(">"));
301 m_symbolCtrl->Append(_("+"));
302 m_symbolCtrl->Append(_("~"));
303
304 wxArrayString standardBulletNames;
305 if (wxRichTextBuffer::GetRenderer())
306 wxRichTextBuffer::GetRenderer()->EnumerateStandardBulletNames(standardBulletNames);
307
308 size_t i;
309 for (i = 0; i < standardBulletNames.GetCount(); i++)
310 m_bulletNameCtrl->Append(wxGetTranslation(standardBulletNames[i]));
311
312 wxArrayString facenames = wxRichTextCtrl::GetAvailableFontNames();
313 facenames.Sort();
314
315 m_symbolFontCtrl->Append(facenames);
316
317 m_dontUpdate = false;
318}
319
320/// Transfer data from/to window
321bool wxRichTextBulletsPage::TransferDataFromWindow()
322{
323 wxPanel::TransferDataFromWindow();
324
325 wxRichTextAttr* attr = GetAttributes();
326
327 int index = m_styleListBox->GetSelection();
328 if (index < 1)
329 {
330 m_hasBulletStyle = false;
331 m_hasBulletNumber = false;
332 m_hasBulletSymbol = false;
333 attr->SetBulletStyle(wxTEXT_ATTR_BULLET_STYLE_NONE);
334 attr->SetFlags(attr->GetFlags() & ~(wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_TEXT|wxTEXT_ATTR_BULLET_NAME));
335 }
336 else
337 {
338 m_hasBulletStyle = true;
339 }
340
341 if (m_hasBulletStyle)
342 {
343 long bulletStyle = wxRICHTEXT_BULLETINDEX_NONE;
344
345 if (index == wxRICHTEXT_BULLETINDEX_ARABIC)
346 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_ARABIC;
347
348 else if (index == wxRICHTEXT_BULLETINDEX_UPPER_CASE)
349 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER;
350
351 else if (index == wxRICHTEXT_BULLETINDEX_LOWER_CASE)
352 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER;
353
354 else if (index == wxRICHTEXT_BULLETINDEX_UPPER_CASE_ROMAN)
355 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER;
356
357 else if (index == wxRICHTEXT_BULLETINDEX_LOWER_CASE_ROMAN)
358 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER;
359
360 else if (index == wxRICHTEXT_BULLETINDEX_OUTLINE)
361 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_OUTLINE;
362
363 else if (index == wxRICHTEXT_BULLETINDEX_SYMBOL)
364 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_SYMBOL;
365
366 else if (index == wxRICHTEXT_BULLETINDEX_BITMAP)
367 {
368 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_BITMAP;
369 if (m_bulletNameCtrl->GetValue().IsEmpty())
370 attr->SetFlags(attr->GetFlags() & ~wxTEXT_ATTR_BULLET_NAME);
371 else
372 attr->SetBulletName(m_bulletNameCtrl->GetValue());
373 }
374
375 else if (index == wxRICHTEXT_BULLETINDEX_STANDARD)
376 {
377 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_STANDARD;
378 wxArrayString standardBulletNames;
379 if (wxRichTextBuffer::GetRenderer() && m_bulletNameCtrl->GetSelection() != wxNOT_FOUND)
380 {
381 int sel = m_bulletNameCtrl->GetSelection();
382 wxString selName = m_bulletNameCtrl->GetString(sel);
383
384 // Try to get the untranslated name using the current selection index of the combobox.
385 // into account.
386 wxRichTextBuffer::GetRenderer()->EnumerateStandardBulletNames(standardBulletNames);
387 if (sel < (int) standardBulletNames.GetCount() && m_bulletNameCtrl->GetValue() == selName)
388 attr->SetBulletName(standardBulletNames[sel]);
389 else
390 attr->SetBulletName(m_bulletNameCtrl->GetValue());
391 }
392 else
393 attr->SetBulletName(m_bulletNameCtrl->GetValue());
394 }
395
396 if (m_parenthesesCtrl->GetValue())
397 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_PARENTHESES;
398 if (m_rightParenthesisCtrl->GetValue())
399 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS;
400 if (m_periodCtrl->GetValue())
401 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_PERIOD;
402
403 if (m_bulletAlignmentCtrl->GetSelection() == 1)
404 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE;
405 else if (m_bulletAlignmentCtrl->GetSelection() == 2)
406 bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT;
407 // Left is implied
408
409 attr->SetBulletStyle(bulletStyle);
410 }
411
412 if (m_hasBulletNumber)
413 {
414 attr->SetBulletNumber(m_numberCtrl->GetValue());
415 }
416
417 if (m_hasBulletSymbol)
418 {
419 attr->SetBulletText(m_symbolCtrl->GetValue());
420 attr->SetBulletFont(m_symbolFontCtrl->GetValue());
421 }
422
423 return true;
424}
425
426bool wxRichTextBulletsPage::TransferDataToWindow()
427{
428 m_dontUpdate = true;
429
430 wxPanel::TransferDataToWindow();
431
432 wxRichTextAttr* attr = GetAttributes();
433
434 if (attr->HasBulletStyle())
435 {
436 m_hasBulletStyle = true;
437 int index = wxRICHTEXT_BULLETINDEX_NONE;
438
439 if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_ARABIC)
440 index = wxRICHTEXT_BULLETINDEX_ARABIC;
441
442 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER)
443 index = wxRICHTEXT_BULLETINDEX_UPPER_CASE;
444
445 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER)
446 index = wxRICHTEXT_BULLETINDEX_LOWER_CASE;
447
448 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER)
449 index = wxRICHTEXT_BULLETINDEX_UPPER_CASE_ROMAN;
450
451 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER)
452 index = wxRICHTEXT_BULLETINDEX_LOWER_CASE_ROMAN;
453
454 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_OUTLINE)
455 index = wxRICHTEXT_BULLETINDEX_OUTLINE;
456
457 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_SYMBOL)
458 index = wxRICHTEXT_BULLETINDEX_SYMBOL;
459
460 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_BITMAP)
461 index = wxRICHTEXT_BULLETINDEX_BITMAP;
462
463 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_STANDARD)
464 index = wxRICHTEXT_BULLETINDEX_STANDARD;
465
466 m_styleListBox->SetSelection(index);
467
468 if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_PARENTHESES)
469 m_parenthesesCtrl->SetValue(true);
470 else
471 m_parenthesesCtrl->SetValue(false);
472
473 if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS)
474 m_rightParenthesisCtrl->SetValue(true);
475 else
476 m_rightParenthesisCtrl->SetValue(false);
477
478 if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_PERIOD)
479 m_periodCtrl->SetValue(true);
480 else
481 m_periodCtrl->SetValue(false);
482
483 if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE)
484 m_bulletAlignmentCtrl->SetSelection(1);
485 else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT)
486 m_bulletAlignmentCtrl->SetSelection(2);
487 else
488 m_bulletAlignmentCtrl->SetSelection(0);
489 }
490 else
491 {
492 m_hasBulletStyle = false;
493 m_styleListBox->SetSelection(-1);
494 m_bulletAlignmentCtrl->SetSelection(-1);
495 }
496
497 if (attr->HasBulletText())
498 {
499 m_symbolCtrl->SetValue(attr->GetBulletText());
500 m_symbolFontCtrl->SetValue(attr->GetBulletFont());
501 }
502 else
503 m_symbolCtrl->SetValue(wxEmptyString);
504
505 if (attr->HasBulletNumber())
506 m_numberCtrl->SetValue(attr->GetBulletNumber());
507 else
508 m_numberCtrl->SetValue(0);
509
510 if (attr->HasBulletName())
511 {
512 wxArrayString standardBulletNames;
513 if (wxRichTextBuffer::GetRenderer())
514 {
515 // Try to set the control by index in order to take translated combo control strings
516 // into account.
517 wxRichTextBuffer::GetRenderer()->EnumerateStandardBulletNames(standardBulletNames);
518 int idx = standardBulletNames.Index(attr->GetBulletName());
519 if (idx != -1 && idx < (int) m_bulletNameCtrl->GetCount())
520 m_bulletNameCtrl->SetSelection(idx);
521 else
522 m_bulletNameCtrl->SetValue(attr->GetBulletName());
523 }
524 else
525 m_bulletNameCtrl->SetValue(attr->GetBulletName());
526 }
527 else
528 m_bulletNameCtrl->SetValue(wxEmptyString);
529
530 UpdatePreview();
531
532 m_dontUpdate = false;
533
534 return true;
535}
536
537/// Updates the bullet preview
538void wxRichTextBulletsPage::UpdatePreview()
539{
540 static const wxChar* s_para1 = wxT("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \
541Nullam ante sapien, vestibulum nonummy, pulvinar sed, luctus ut, lacus.\n");
542
543 static const wxChar* s_para2 = wxT("Duis pharetra consequat dui. Cum sociis natoque penatibus \
544et magnis dis parturient montes, nascetur ridiculus mus. Nullam vitae justo id mauris lobortis interdum.\n");
545
546 static const wxChar* s_para3 = wxT("Integer convallis dolor at augue \
547iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n");
548
549 TransferDataFromWindow();
550 wxRichTextAttr attr(*GetAttributes());
551 attr.SetFlags(attr.GetFlags() &
552 (wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_TEXT|wxTEXT_ATTR_BULLET_NAME|
553 wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER|
554 wxTEXT_ATTR_LINE_SPACING));
555
556 wxFont font(m_previewCtrl->GetFont());
557 font.SetPointSize(9);
558 m_previewCtrl->SetFont(font);
559
560 wxRichTextAttr normalParaAttr;
561 normalParaAttr.SetFont(font);
562 normalParaAttr.SetTextColour(wxColour(wxT("LIGHT GREY")));
563
564 m_previewCtrl->Freeze();
565 m_previewCtrl->Clear();
566
567 m_previewCtrl->BeginStyle(normalParaAttr);
568 m_previewCtrl->WriteText(s_para1);
569 m_previewCtrl->EndStyle();
570
571 m_previewCtrl->BeginStyle(attr);
572 m_previewCtrl->WriteText(s_para2);
573 m_previewCtrl->EndStyle();
574
575 m_previewCtrl->BeginStyle(normalParaAttr);
576 m_previewCtrl->WriteText(s_para3);
577 m_previewCtrl->EndStyle();
578
579 m_previewCtrl->NumberList(wxRichTextRange(0, m_previewCtrl->GetLastPosition()+1));
580
581 m_previewCtrl->Thaw();
582}
583
584wxRichTextAttr* wxRichTextBulletsPage::GetAttributes()
585{
586 return wxRichTextFormattingDialog::GetDialogAttributes(this);
587}
588
589/*!
590 * Should we show tooltips?
591 */
592
593bool wxRichTextBulletsPage::ShowToolTips()
594{
595 return wxRichTextFormattingDialog::ShowToolTips();
596}
597
598/*!
599 * Get bitmap resources
600 */
601
602wxBitmap wxRichTextBulletsPage::GetBitmapResource( const wxString& name )
603{
604 // Bitmap retrieval
605////@begin wxRichTextBulletsPage bitmap retrieval
606 wxUnusedVar(name);
607 return wxNullBitmap;
608////@end wxRichTextBulletsPage bitmap retrieval
609}
610
611/*!
612 * Get icon resources
613 */
614
615wxIcon wxRichTextBulletsPage::GetIconResource( const wxString& name )
616{
617 // Icon retrieval
618////@begin wxRichTextBulletsPage icon retrieval
619 wxUnusedVar(name);
620 return wxNullIcon;
621////@end wxRichTextBulletsPage icon retrieval
622}
623
624/*!
625 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_STYLELISTBOX
626 */
627
628void wxRichTextBulletsPage::OnStylelistboxSelected( wxCommandEvent& WXUNUSED(event) )
629{
630 if (!m_dontUpdate)
631 {
632 m_hasBulletStyle = true;
633
634 if (m_styleListBox->GetSelection() == wxRICHTEXT_BULLETINDEX_SYMBOL)
635 m_hasBulletSymbol = true;
636
637 UpdatePreview();
638 }
639}
640
641/*!
642 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL
643 */
644
645void wxRichTextBulletsPage::OnSymbolctrlSelected( wxCommandEvent& WXUNUSED(event) )
646{
647 if (!m_dontUpdate)
648 {
649 m_hasBulletSymbol = true;
650 UpdatePreview();
651 }
652}
653
654/*!
655 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL
656 */
657
658void wxRichTextBulletsPage::OnSymbolctrlUpdated( wxCommandEvent& WXUNUSED(event) )
659{
660 if (!m_dontUpdate)
661 {
662 m_hasBulletSymbol = true;
663 UpdatePreview();
664 }
665}
666
667/*!
668 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL
669 */
670
671void wxRichTextBulletsPage::OnSymbolctrlUpdate( wxUpdateUIEvent& event )
672{
673 OnSymbolUpdate(event);
674}
675
676/*!
677 * wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL
678 */
679
680void wxRichTextBulletsPage::OnNumberctrlUpdated( wxSpinEvent& WXUNUSED(event) )
681{
682 if (!m_dontUpdate)
683 {
684 m_hasBulletNumber = true;
685 UpdatePreview();
686 }
687}
688
689/*!
690 * wxEVT_SCROLL_LINEUP event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL
691 */
692
693void wxRichTextBulletsPage::OnNumberctrlUp( wxSpinEvent& WXUNUSED(event) )
694{
695 if (!m_dontUpdate)
696 {
697 m_hasBulletNumber = true;
698 UpdatePreview();
699 }
700}
701
702/*!
703 * wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL
704 */
705
706void wxRichTextBulletsPage::OnNumberctrlDown( wxSpinEvent& WXUNUSED(event) )
707{
708 if (!m_dontUpdate)
709 {
710 m_hasBulletNumber = true;
711 UpdatePreview();
712 }
713}
714
715/*!
716 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL
717 */
718
719void wxRichTextBulletsPage::OnNumberctrlTextUpdated( wxCommandEvent& WXUNUSED(event) )
720{
721 if (!m_dontUpdate)
722 {
723 m_hasBulletNumber = true;
724 UpdatePreview();
725 }
726}
727
728/*!
729 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL
730 */
731
732void wxRichTextBulletsPage::OnNumberctrlUpdate( wxUpdateUIEvent& event )
733{
734 OnNumberUpdate(event);
735}
736
737/*!
738 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL
739 */
740
741void wxRichTextBulletsPage::OnParenthesesctrlClick( wxCommandEvent& WXUNUSED(event) )
742{
743 if (!m_dontUpdate)
744 {
745 m_hasBulletStyle = true;
746 UpdatePreview();
747 }
748}
749
750/*!
751 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL
752 */
753
754void wxRichTextBulletsPage::OnParenthesesctrlUpdate( wxUpdateUIEvent& event )
755{
756 int sel = m_styleListBox->GetSelection();
757 event.Enable(m_hasBulletStyle && (sel != wxRICHTEXT_BULLETINDEX_SYMBOL &&
758 sel != wxRICHTEXT_BULLETINDEX_BITMAP &&
759 sel != wxRICHTEXT_BULLETINDEX_NONE));
760}
761
762/*!
763 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL
764 */
765
766void wxRichTextBulletsPage::OnPeriodctrlClick( wxCommandEvent& WXUNUSED(event) )
767{
768 if (!m_dontUpdate)
769 {
770 m_hasBulletStyle = true;
771 UpdatePreview();
772 }
773}
774
775/*!
776 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL
777 */
778
779void wxRichTextBulletsPage::OnPeriodctrlUpdate( wxUpdateUIEvent& event )
780{
781 int sel = m_styleListBox->GetSelection();
782 event.Enable(m_hasBulletStyle && (sel != wxRICHTEXT_BULLETINDEX_SYMBOL &&
783 sel != wxRICHTEXT_BULLETINDEX_BITMAP &&
784 sel != wxRICHTEXT_BULLETINDEX_NONE));
785}
786
787/*!
788 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL
789 */
790
791void wxRichTextBulletsPage::OnChooseSymbolClick( wxCommandEvent& WXUNUSED(event) )
792{
793 int sel = m_styleListBox->GetSelection();
794 if (m_hasBulletStyle && sel == wxRICHTEXT_BULLETINDEX_SYMBOL)
795 {
796 wxString symbol = m_symbolCtrl->GetValue();
797 wxString fontName = m_symbolFontCtrl->GetValue();
798 wxSymbolPickerDialog dlg(symbol, fontName, fontName, this);
799
800 if (dlg.ShowModal() == wxID_OK)
801 {
802 m_dontUpdate = true;
803
804 m_symbolCtrl->SetValue(dlg.GetSymbol());
805 m_symbolFontCtrl->SetValue(dlg.GetFontName());
806
807 UpdatePreview();
808
809 m_dontUpdate = false;
810 }
811 }
812}
813
814/*!
815 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL
816 */
817
818void wxRichTextBulletsPage::OnChooseSymbolUpdate( wxUpdateUIEvent& event )
819{
820 OnSymbolUpdate(event);
821}
822/*!
823 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL
824 */
825
826void wxRichTextBulletsPage::OnSymbolfontctrlSelected( wxCommandEvent& WXUNUSED(event) )
827{
828 if (m_dontUpdate)
829 return;
830 UpdatePreview();
831}
832
833/*!
834 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL
835 */
836
837void wxRichTextBulletsPage::OnSymbolfontctrlUpdated( wxCommandEvent& WXUNUSED(event) )
838{
839 if (m_dontUpdate)
840 return;
841 UpdatePreview();
842}
843
844
845/*!
846 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL
847 */
848
849void wxRichTextBulletsPage::OnSymbolfontctrlUIUpdate( wxUpdateUIEvent& event )
850{
851 OnSymbolUpdate(event);
852}
853
854/// Update for symbol-related controls
855void wxRichTextBulletsPage::OnSymbolUpdate( wxUpdateUIEvent& event )
856{
857 int sel = m_styleListBox->GetSelection();
858 event.Enable(m_hasBulletStyle && (sel == wxRICHTEXT_BULLETINDEX_SYMBOL));
859}
860
861/// Update for number-related controls
862void wxRichTextBulletsPage::OnNumberUpdate( wxUpdateUIEvent& event )
863{
864 int sel = m_styleListBox->GetSelection();
865 event.Enable( m_hasBulletStyle && (sel != wxRICHTEXT_BULLETINDEX_SYMBOL &&
866 sel != wxRICHTEXT_BULLETINDEX_BITMAP &&
867 sel != wxRICHTEXT_BULLETINDEX_STANDARD &&
868 sel != wxRICHTEXT_BULLETINDEX_NONE));
869}
870
871/// Update for standard bullet-related controls
872void wxRichTextBulletsPage::OnStandardBulletUpdate( wxUpdateUIEvent& event )
873{
874 int sel = m_styleListBox->GetSelection();
875 event.Enable( sel == wxRICHTEXT_BULLETINDEX_STANDARD || sel == wxRICHTEXT_BULLETINDEX_BITMAP );
876}
877
878
879/*!
880 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC
881 */
882
883void wxRichTextBulletsPage::OnSymbolstaticUpdate( wxUpdateUIEvent& event )
884{
885 OnSymbolUpdate(event);
886}
887
888
889/*!
890 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC
891 */
892
893void wxRichTextBulletsPage::OnNumberstaticUpdate( wxUpdateUIEvent& event )
894{
895 OnNumberUpdate(event);
896}
897
898/*!
899 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMESTATIC
900 */
901
902void wxRichTextBulletsPage::OnNamestaticUpdate( wxUpdateUIEvent& event )
903{
904 OnStandardBulletUpdate(event);
905}
906
907
908/*!
909 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL
910 */
911
912void wxRichTextBulletsPage::OnNamectrlSelected( wxCommandEvent& WXUNUSED(event) )
913{
914 if (m_dontUpdate)
915 return;
916 UpdatePreview();
917}
918
919/*!
920 * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL
921 */
922
923void wxRichTextBulletsPage::OnNamectrlUpdated( wxCommandEvent& WXUNUSED(event) )
924{
925 if (m_dontUpdate)
926 return;
927 UpdatePreview();
928}
929
930/*!
931 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL
932 */
933
934void wxRichTextBulletsPage::OnNamectrlUIUpdate( wxUpdateUIEvent& event )
935{
936 OnStandardBulletUpdate(event);
937}
938
939#endif // wxUSE_RICHTEXT
940/*!
941 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_RIGHT_PARENTHESIS_CTRL
942 */
943
944void wxRichTextBulletsPage::OnRightParenthesisCtrlClick( wxCommandEvent& WXUNUSED(event) )
945{
946 if (!m_dontUpdate)
947 {
948 m_hasBulletStyle = true;
949 UpdatePreview();
950 }
951}
952
953/*!
954 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_RIGHT_PARENTHESIS_CTRL
955 */
956
957void wxRichTextBulletsPage::OnRightParenthesisCtrlUpdate( wxUpdateUIEvent& event )
958{
959 int sel = m_styleListBox->GetSelection();
960 event.Enable(m_hasBulletStyle && (sel != wxRICHTEXT_BULLETINDEX_SYMBOL &&
961 sel != wxRICHTEXT_BULLETINDEX_BITMAP &&
962 sel != wxRICHTEXT_BULLETINDEX_NONE));
963}
964
965/*!
966 * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_COMBOBOX
967 */
968
969void wxRichTextBulletsPage::OnBulletAlignmentCtrlSelected( wxCommandEvent& WXUNUSED(event) )
970{
971 if (m_dontUpdate)
972 return;
973 UpdatePreview();
974}
975
976