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