]> git.saurik.com Git - wxWidgets.git/blob - src/richtext/richtextstyledlg.cpp
Whitespaces and headers cleaning.
[wxWidgets.git] / src / richtext / richtextstyledlg.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/richtext/richtextstyledlg.cpp
3 // Purpose:
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 10/5/2006 12:05:31 PM
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
14
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18
19 #ifndef WX_PRECOMP
20 #include "wx/wx.h"
21 #endif
22
23 ////@begin includes
24 ////@end includes
25
26 #include "wx/richtext/richtextstyledlg.h"
27 #include "wx/richtext/richtextformatdlg.h"
28
29 ////@begin XPM images
30 ////@end XPM images
31
32 /*!
33 * wxRichTextStyleOrganiserDialog type definition
34 */
35
36 bool wxRichTextStyleOrganiserDialog::sm_showToolTips = false;
37
38 IMPLEMENT_DYNAMIC_CLASS( wxRichTextStyleOrganiserDialog, wxDialog )
39
40 /*!
41 * wxRichTextStyleOrganiserDialog event table definition
42 */
43
44 BEGIN_EVENT_TABLE( wxRichTextStyleOrganiserDialog, wxDialog )
45
46 EVT_LISTBOX(wxID_ANY, wxRichTextStyleOrganiserDialog::OnListSelection)
47
48 ////@begin wxRichTextStyleOrganiserDialog event table entries
49 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR, wxRichTextStyleOrganiserDialog::OnNewCharClick )
50 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR, wxRichTextStyleOrganiserDialog::OnNewCharUpdate )
51
52 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA, wxRichTextStyleOrganiserDialog::OnNewParaClick )
53 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA, wxRichTextStyleOrganiserDialog::OnNewParaUpdate )
54
55 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, wxRichTextStyleOrganiserDialog::OnNewListClick )
56 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, wxRichTextStyleOrganiserDialog::OnNewListUpdate )
57
58 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, wxRichTextStyleOrganiserDialog::OnApplyClick )
59 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, wxRichTextStyleOrganiserDialog::OnApplyUpdate )
60
61 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME, wxRichTextStyleOrganiserDialog::OnRenameClick )
62 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME, wxRichTextStyleOrganiserDialog::OnRenameUpdate )
63
64 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT, wxRichTextStyleOrganiserDialog::OnEditClick )
65 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT, wxRichTextStyleOrganiserDialog::OnEditUpdate )
66
67 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE, wxRichTextStyleOrganiserDialog::OnDeleteClick )
68 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE, wxRichTextStyleOrganiserDialog::OnDeleteUpdate )
69
70 ////@end wxRichTextStyleOrganiserDialog event table entries
71
72 END_EVENT_TABLE()
73
74 /*!
75 * wxRichTextStyleOrganiserDialog constructors
76 */
77
78 wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( )
79 {
80 Init();
81 }
82
83 wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( int flags, wxRichTextStyleSheet* sheet, wxRichTextCtrl* ctrl, wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
84 {
85 Init();
86 Create(flags, sheet, ctrl, parent, id, caption, pos, size, style);
87 }
88
89 /*!
90 * Member initialisation for wxSymbolPickerDialog
91 */
92
93 void wxRichTextStyleOrganiserDialog::Init()
94 {
95 m_richTextStyleSheet = NULL;
96 m_richTextCtrl = NULL;
97 m_dontUpdate = false;
98 m_flags = 0;
99 m_restartNumbering = true;
100
101 ////@begin wxRichTextStyleOrganiserDialog member initialisation
102 m_innerSizer = NULL;
103 m_buttonSizerParent = NULL;
104 m_stylesListBox = NULL;
105 m_previewCtrl = NULL;
106 m_buttonSizer = NULL;
107 m_newCharacter = NULL;
108 m_newParagraph = NULL;
109 m_newList = NULL;
110 m_applyStyle = NULL;
111 m_renameStyle = NULL;
112 m_editStyle = NULL;
113 m_deleteStyle = NULL;
114 m_closeButton = NULL;
115 m_bottomButtonSizer = NULL;
116
117 m_restartNumberingCtrl = NULL;
118 m_okButton = NULL;
119 m_cancelButton = NULL;
120 ////@end wxRichTextStyleOrganiserDialog member initialisation
121 }
122
123 /*!
124 * wxRichTextStyleOrganiserDialog creator
125 */
126
127 bool wxRichTextStyleOrganiserDialog::Create( int flags, wxRichTextStyleSheet* sheet, wxRichTextCtrl* ctrl, wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
128 {
129 m_richTextStyleSheet = sheet;
130 m_richTextCtrl = ctrl;
131 m_flags = flags;
132
133 ////@begin wxRichTextStyleOrganiserDialog creation
134 SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS|wxDIALOG_EX_CONTEXTHELP);
135 wxDialog::Create( parent, id, caption, pos, size, style );
136
137 CreateControls();
138 if (GetSizer())
139 {
140 GetSizer()->SetSizeHints(this);
141 }
142 Centre();
143 ////@end wxRichTextStyleOrganiserDialog creation
144 return true;
145 }
146
147 /*!
148 * Control creation for wxRichTextStyleOrganiserDialog
149 */
150
151 void wxRichTextStyleOrganiserDialog::CreateControls()
152 {
153 bool hideTypeSelector = false;
154 wxRichTextStyleListBox::wxRichTextStyleType typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL;
155
156 if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_CHARACTER) != 0)
157 {
158 typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER;
159 hideTypeSelector = true;
160 }
161 else if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH) != 0)
162 {
163 typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH;
164 hideTypeSelector = true;
165 }
166 else if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_LIST) != 0)
167 {
168 typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST;
169 hideTypeSelector = true;
170 }
171 else
172 {
173 // wxRICHTEXT_ORGANISER_SHOW_ALL is implied if the other styles aren't included
174 }
175
176 long listCtrlStyle = 0;
177 if (hideTypeSelector)
178 listCtrlStyle = wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR;
179
180 ////@begin wxRichTextStyleOrganiserDialog content construction
181 wxRichTextStyleOrganiserDialog* itemDialog1 = this;
182
183 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
184 itemDialog1->SetSizer(itemBoxSizer2);
185
186 m_innerSizer = new wxBoxSizer(wxVERTICAL);
187 itemBoxSizer2->Add(m_innerSizer, 1, wxGROW|wxALL, 5);
188
189 m_buttonSizerParent = new wxBoxSizer(wxHORIZONTAL);
190 m_innerSizer->Add(m_buttonSizerParent, 1, wxGROW, 5);
191
192 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
193 m_buttonSizerParent->Add(itemBoxSizer5, 1, wxGROW, 5);
194
195 wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("&Styles:"), wxDefaultPosition, wxDefaultSize, 0 );
196 itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
197
198 m_stylesListBox = new wxRichTextStyleListCtrl( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_STYLES, wxDefaultPosition, wxSize(200, 350), wxSIMPLE_BORDER|listCtrlStyle );
199 m_stylesListBox->SetHelpText(_("The available styles."));
200 if (ShowToolTips())
201 m_stylesListBox->SetToolTip(_("The available styles."));
202 itemBoxSizer5->Add(m_stylesListBox, 1, wxGROW|wxALL, 5);
203
204 wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL);
205 m_buttonSizerParent->Add(itemBoxSizer8, 0, wxGROW, 5);
206
207 wxStaticText* itemStaticText9 = new wxStaticText( itemDialog1, wxID_STATIC, _(" "), wxDefaultPosition, wxDefaultSize, 0 );
208 itemBoxSizer8->Add(itemStaticText9, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
209
210 m_previewCtrl = new wxRichTextCtrl( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_PREVIEW, wxEmptyString, wxDefaultPosition, wxSize(310, 200), wxSIMPLE_BORDER|wxTE_READONLY );
211 m_previewCtrl->SetHelpText(_("The style preview."));
212 if (ShowToolTips())
213 m_previewCtrl->SetToolTip(_("The style preview."));
214 itemBoxSizer8->Add(m_previewCtrl, 1, wxGROW|wxALL, 5);
215
216 m_buttonSizer = new wxBoxSizer(wxVERTICAL);
217 m_buttonSizerParent->Add(m_buttonSizer, 0, wxGROW, 5);
218
219 wxStaticText* itemStaticText12 = new wxStaticText( itemDialog1, wxID_STATIC, _(" "), wxDefaultPosition, wxDefaultSize, 0 );
220 m_buttonSizer->Add(itemStaticText12, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5);
221
222 m_newCharacter = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR, _("New &Character Style..."), wxDefaultPosition, wxDefaultSize, 0 );
223 m_newCharacter->SetHelpText(_("Click to create a new character style."));
224 if (ShowToolTips())
225 m_newCharacter->SetToolTip(_("Click to create a new character style."));
226 m_buttonSizer->Add(m_newCharacter, 0, wxGROW|wxALL, 5);
227
228 m_newParagraph = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA, _("New &Paragraph Style..."), wxDefaultPosition, wxDefaultSize, 0 );
229 m_newParagraph->SetHelpText(_("Click to create a new paragraph style."));
230 if (ShowToolTips())
231 m_newParagraph->SetToolTip(_("Click to create a new paragraph style."));
232 m_buttonSizer->Add(m_newParagraph, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
233
234 m_newList = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, _("New &List Style..."), wxDefaultPosition, wxDefaultSize, 0 );
235 m_newList->SetHelpText(_("Click to create a new list style."));
236 if (ShowToolTips())
237 m_newList->SetToolTip(_("Click to create a new list style."));
238 m_buttonSizer->Add(m_newList, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
239
240 m_buttonSizer->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
241
242 m_applyStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, _("&Apply Style"), wxDefaultPosition, wxDefaultSize, 0 );
243 m_applyStyle->SetHelpText(_("Click to apply the selected style."));
244 if (ShowToolTips())
245 m_applyStyle->SetToolTip(_("Click to apply the selected style."));
246 m_buttonSizer->Add(m_applyStyle, 0, wxGROW|wxALL, 5);
247
248 m_renameStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME, _("&Rename Style..."), wxDefaultPosition, wxDefaultSize, 0 );
249 m_renameStyle->SetHelpText(_("Click to rename the selected style."));
250 if (ShowToolTips())
251 m_renameStyle->SetToolTip(_("Click to rename the selected style."));
252 m_buttonSizer->Add(m_renameStyle, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
253
254 m_editStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT, _("&Edit Style..."), wxDefaultPosition, wxDefaultSize, 0 );
255 m_editStyle->SetHelpText(_("Click to edit the selected style."));
256 if (ShowToolTips())
257 m_editStyle->SetToolTip(_("Click to edit the selected style."));
258 m_buttonSizer->Add(m_editStyle, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
259
260 m_deleteStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE, _("&Delete Style..."), wxDefaultPosition, wxDefaultSize, 0 );
261 m_deleteStyle->SetHelpText(_("Click to delete the selected style."));
262 if (ShowToolTips())
263 m_deleteStyle->SetToolTip(_("Click to delete the selected style."));
264 m_buttonSizer->Add(m_deleteStyle, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5);
265
266 m_buttonSizer->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
267
268 m_closeButton = new wxButton( itemDialog1, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 );
269 m_closeButton->SetDefault();
270 m_closeButton->SetHelpText(_("Click to close this window."));
271 if (ShowToolTips())
272 m_closeButton->SetToolTip(_("Click to close this window."));
273 m_buttonSizer->Add(m_closeButton, 0, wxGROW|wxALL, 5);
274
275 m_bottomButtonSizer = new wxBoxSizer(wxHORIZONTAL);
276 m_innerSizer->Add(m_bottomButtonSizer, 0, wxGROW, 5);
277
278 m_restartNumberingCtrl = new wxCheckBox( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_RESTART_NUMBERING, _("&Restart numbering"), wxDefaultPosition, wxDefaultSize, 0 );
279 m_restartNumberingCtrl->SetValue(false);
280 m_restartNumberingCtrl->SetHelpText(_("Check to restart numbering."));
281 if (ShowToolTips())
282 m_restartNumberingCtrl->SetToolTip(_("Check to restart numbering."));
283 m_bottomButtonSizer->Add(m_restartNumberingCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
284
285 m_bottomButtonSizer->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5);
286
287 m_okButton = new wxButton( itemDialog1, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 );
288 m_okButton->SetDefault();
289 m_okButton->SetHelpText(_("Click to confirm your selection."));
290 if (ShowToolTips())
291 m_okButton->SetToolTip(_("Click to confirm your selection."));
292 m_bottomButtonSizer->Add(m_okButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
293
294 m_cancelButton = new wxButton( itemDialog1, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
295 m_cancelButton->SetHelpText(_("Click to cancel this window."));
296 if (ShowToolTips())
297 m_cancelButton->SetToolTip(_("Click to cancel this window."));
298 m_bottomButtonSizer->Add(m_cancelButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
299
300 ////@end wxRichTextStyleOrganiserDialog content construction
301
302 if ((m_flags & wxRICHTEXT_ORGANISER_CREATE_STYLES) == 0)
303 {
304 m_buttonSizer->Show(m_newCharacter, false);
305 m_buttonSizer->Show(m_newParagraph, false);
306 m_buttonSizer->Show(m_newList, false);
307 }
308 if ((m_flags & wxRICHTEXT_ORGANISER_DELETE_STYLES) == 0)
309 {
310 m_buttonSizer->Show(m_deleteStyle, false);
311 }
312 if ((m_flags & wxRICHTEXT_ORGANISER_APPLY_STYLES) == 0)
313 {
314 m_buttonSizer->Show(m_applyStyle, false);
315 }
316 if ((m_flags & wxRICHTEXT_ORGANISER_EDIT_STYLES) == 0)
317 {
318 m_buttonSizer->Show(m_editStyle, false);
319 }
320 if ((m_flags & wxRICHTEXT_ORGANISER_RENAME_STYLES) == 0)
321 {
322 m_buttonSizer->Show(m_renameStyle, false);
323 }
324 if ((m_flags & wxRICHTEXT_ORGANISER_RENUMBER) == 0)
325 {
326 m_bottomButtonSizer->Show(m_restartNumberingCtrl, false);
327 }
328
329 if ((m_flags & wxRICHTEXT_ORGANISER_OK_CANCEL) == 0)
330 {
331 m_bottomButtonSizer->Show(m_okButton, false);
332 m_bottomButtonSizer->Show(m_cancelButton, false);
333 }
334 else
335 {
336 m_buttonSizer->Show(m_closeButton, false);
337 }
338
339 // No buttons in the vertical group are shown, so hide the whole sizer
340 if ((m_flags & wxRICHTEXT_ORGANISER_ORGANISE) == 0)
341 {
342 m_buttonSizerParent->Show(m_buttonSizer, false);
343 }
344
345 // No buttons in the horizontal group are shown, so hide the whole sizer
346 if ((m_flags & (wxRICHTEXT_ORGANISER_OK_CANCEL|wxRICHTEXT_ORGANISER_RENUMBER)) == 0)
347 {
348 m_innerSizer->Show(m_bottomButtonSizer, false);
349 }
350
351 if (hideTypeSelector)
352 {
353 m_stylesListBox->GetStyleListBox()->SetStyleType(typesToShow);
354 }
355
356 m_stylesListBox->SetStyleSheet(m_richTextStyleSheet);
357 m_stylesListBox->SetRichTextCtrl(m_richTextCtrl);
358 m_stylesListBox->UpdateStyles();
359 m_stylesListBox->GetStyleListBox()->SetAutoSetSelection(false); // stop idle-time auto selection
360 if (m_stylesListBox->GetStyleListBox()->GetItemCount() > 0)
361 {
362 m_stylesListBox->GetStyleListBox()->SetSelection(0);
363 ShowPreview();
364 }
365 }
366
367 /*!
368 * Should we show tooltips?
369 */
370
371 /// Get selected style name or definition
372 wxString wxRichTextStyleOrganiserDialog::GetSelectedStyle() const
373 {
374 wxRichTextStyleDefinition* def = GetSelectedStyleDefinition();
375 if (def)
376 return def->GetName();
377 else
378 return wxEmptyString;
379 }
380
381 wxRichTextStyleDefinition* wxRichTextStyleOrganiserDialog::GetSelectedStyleDefinition() const
382 {
383 int sel = m_stylesListBox->GetStyleListBox()->GetSelection();
384 return m_stylesListBox->GetStyleListBox()->GetStyle(sel);
385 }
386
387
388 /// Transfer data from/to window
389 bool wxRichTextStyleOrganiserDialog::TransferDataFromWindow()
390 {
391 if (!wxDialog::TransferDataFromWindow())
392 return false;
393
394 m_restartNumbering = m_restartNumberingCtrl->GetValue();
395
396 return true;
397 }
398
399 bool wxRichTextStyleOrganiserDialog::TransferDataToWindow()
400 {
401 if (!wxDialog::TransferDataToWindow())
402 return false;
403
404 m_restartNumberingCtrl->SetValue(m_restartNumbering);
405
406 return true;
407 }
408
409 /// Show preview for given or selected preview
410 void wxRichTextStyleOrganiserDialog::ShowPreview(int sel)
411 {
412 static const wxChar* s_para1 = wxT("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \
413 Nullam ante sapien, vestibulum nonummy, pulvinar sed, luctus ut, lacus.");
414
415 static const wxChar* s_para2List = wxT("Duis pharetra consequat dui. Nullam vitae justo id mauris lobortis interdum.");
416
417 static const wxChar* s_para2 = wxT("Duis pharetra consequat dui. Cum sociis natoque penatibus \
418 et magnis dis parturient montes, nascetur ridiculus mus. Nullam vitae justo id mauris lobortis interdum.");
419
420 static const wxChar* s_para3 = wxT("\nInteger convallis dolor at augue \
421 iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n");
422
423 if (sel == -1)
424 {
425 sel = m_stylesListBox->GetStyleListBox()->GetSelection();
426 if (sel == -1)
427 return;
428 }
429
430 wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel);
431
432 wxRichTextListStyleDefinition* listDef = wxDynamicCast(def, wxRichTextListStyleDefinition);
433 //wxRichTextParagraphStyleDefinition* paraDef = wxDynamicCast(def, wxRichTextParagraphStyleDefinition);
434 //wxRichTextCharacterStyleDefinition* charDef = wxDynamicCast(def, wxRichTextCharacterStyleDefinition);
435
436 wxTextAttrEx attr(def->GetStyle());
437 #if 0
438 attr.SetFlags(attr.GetFlags() &
439 (wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER|
440 wxTEXT_ATTR_LINE_SPACING|
441 wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_SYMBOL));
442 #endif
443
444 wxFont font(m_previewCtrl->GetFont());
445 font.SetPointSize(9);
446 m_previewCtrl->SetFont(font);
447
448 wxTextAttrEx normalParaAttr;
449 normalParaAttr.SetFont(font);
450 normalParaAttr.SetTextColour(wxColour(wxT("LIGHT GREY")));
451
452 m_previewCtrl->Freeze();
453 m_previewCtrl->Clear();
454
455 m_previewCtrl->BeginStyle(normalParaAttr);
456 m_previewCtrl->WriteText(s_para1);
457 m_previewCtrl->EndStyle();
458
459 m_previewCtrl->BeginStyle(attr);
460
461 if (listDef)
462 {
463 int i;
464 for (i = 0; i < 10; i++)
465 {
466 wxTextAttrEx levelAttr = * listDef->GetLevelAttributes(i);
467 levelAttr.SetBulletNumber(1);
468 m_previewCtrl->BeginStyle(levelAttr);
469 m_previewCtrl->WriteText(wxString::Format(wxT("\nList level %d. "), i+1) + s_para2List);
470 m_previewCtrl->EndStyle();
471 }
472 }
473 else
474 {
475 m_previewCtrl->WriteText(wxString(wxT("\n")) + s_para2);
476 }
477
478 m_previewCtrl->EndStyle();
479
480 m_previewCtrl->BeginStyle(normalParaAttr);
481 m_previewCtrl->WriteText(s_para3);
482 m_previewCtrl->EndStyle();
483
484 m_previewCtrl->Thaw();
485 }
486
487 /// Clears the preview
488 void wxRichTextStyleOrganiserDialog::ClearPreview()
489 {
490 m_richTextCtrl->Clear();
491 }
492
493 bool wxRichTextStyleOrganiserDialog::ApplyStyle(wxRichTextCtrl* ctrl)
494 {
495 int sel = m_stylesListBox->GetStyleListBox()->GetSelection();
496 if (sel == -1)
497 return false;
498 if (!ctrl)
499 ctrl = GetRichTextCtrl();
500 if (!ctrl)
501 return false;
502 if (!ctrl->HasSelection())
503 return false;
504
505
506 wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel);
507 wxRichTextListStyleDefinition* listDef = wxDynamicCast(def, wxRichTextListStyleDefinition);
508
509 if (listDef && m_restartNumberingCtrl->GetValue())
510 {
511 wxRichTextRange range = ctrl->GetSelectionRange();
512 return ctrl->SetListStyle(range, listDef, wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_RENUMBER);
513 }
514 else
515 {
516 return ctrl->ApplyStyle(def);
517 }
518 }
519
520 /*!
521 * Get bitmap resources
522 */
523
524 wxBitmap wxRichTextStyleOrganiserDialog::GetBitmapResource( const wxString& name )
525 {
526 // Bitmap retrieval
527 ////@begin wxRichTextStyleOrganiserDialog bitmap retrieval
528 wxUnusedVar(name);
529 return wxNullBitmap;
530 ////@end wxRichTextStyleOrganiserDialog bitmap retrieval
531 }
532
533 /*!
534 * Get icon resources
535 */
536
537 wxIcon wxRichTextStyleOrganiserDialog::GetIconResource( const wxString& name )
538 {
539 // Icon retrieval
540 ////@begin wxRichTextStyleOrganiserDialog icon retrieval
541 wxUnusedVar(name);
542 return wxNullIcon;
543 ////@end wxRichTextStyleOrganiserDialog icon retrieval
544 }
545
546 /*!
547 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
548 */
549
550 void wxRichTextStyleOrganiserDialog::OnApplyClick( wxCommandEvent& WXUNUSED(event) )
551 {
552 ApplyStyle();
553 }
554
555 /*!
556 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
557 */
558
559 void wxRichTextStyleOrganiserDialog::OnApplyUpdate( wxUpdateUIEvent& event )
560 {
561 event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_APPLY_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND);
562 }
563
564
565 /*!
566 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
567 */
568
569 void wxRichTextStyleOrganiserDialog::OnNewCharClick( wxCommandEvent& WXUNUSED(event) )
570 {
571 wxString styleName = wxGetTextFromUser(_("Enter a character style name"), _("New Style"));
572 if (!styleName.IsEmpty())
573 {
574 if (GetStyleSheet()->FindCharacterStyle(styleName))
575 {
576 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this);
577 return;
578 }
579
580 wxRichTextCharacterStyleDefinition* style = new wxRichTextCharacterStyleDefinition(styleName);
581
582 int pages = wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_STYLE_EDITOR;
583 wxRichTextFormattingDialog formatDlg;
584 formatDlg.SetStyleDefinition(*style, GetStyleSheet());
585 formatDlg.Create(pages, this);
586
587 if (formatDlg.ShowModal() == wxID_OK)
588 {
589 wxRichTextCharacterStyleDefinition* charDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextCharacterStyleDefinition);
590
591 (*((wxRichTextCharacterStyleDefinition* ) style)) = (*charDef);
592
593 GetStyleSheet()->AddCharacterStyle(style);
594
595 m_stylesListBox->UpdateStyles();
596 ShowPreview();
597 }
598 else
599 delete style;
600 }
601 }
602
603 /*!
604 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
605 */
606
607 void wxRichTextStyleOrganiserDialog::OnNewCharUpdate( wxUpdateUIEvent& event )
608 {
609 event.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES) != 0);
610 }
611
612
613 /*!
614 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
615 */
616
617 void wxRichTextStyleOrganiserDialog::OnNewParaClick( wxCommandEvent& WXUNUSED(event) )
618 {
619 wxString styleName = wxGetTextFromUser(_("Enter a paragraph style name"), _("New Style"));
620 if (!styleName.IsEmpty())
621 {
622 if (GetStyleSheet()->FindParagraphStyle(styleName))
623 {
624 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this);
625 return;
626 }
627
628 wxRichTextParagraphStyleDefinition* style = new wxRichTextParagraphStyleDefinition(styleName);
629
630 int pages = wxRICHTEXT_FORMAT_STYLE_EDITOR|wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING|wxRICHTEXT_FORMAT_TABS|wxRICHTEXT_FORMAT_BULLETS;
631 wxRichTextFormattingDialog formatDlg;
632 formatDlg.SetStyleDefinition(*style, GetStyleSheet());
633 formatDlg.Create(pages, this);
634
635 if (formatDlg.ShowModal() == wxID_OK)
636 {
637 wxRichTextParagraphStyleDefinition* paraDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextParagraphStyleDefinition);
638
639 (*((wxRichTextParagraphStyleDefinition* ) style)) = (*paraDef);
640
641 GetStyleSheet()->AddParagraphStyle(style);
642
643 m_stylesListBox->UpdateStyles();
644 ShowPreview();
645 }
646 else
647 delete style;
648 }
649 }
650
651 /*!
652 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
653 */
654
655 void wxRichTextStyleOrganiserDialog::OnNewParaUpdate( wxUpdateUIEvent& event )
656 {
657 event.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES) != 0);
658 }
659
660
661 /*!
662 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
663 */
664
665 void wxRichTextStyleOrganiserDialog::OnEditClick( wxCommandEvent& WXUNUSED(event) )
666 {
667 int sel = m_stylesListBox->GetStyleListBox()->GetSelection();
668 if (sel != wxNOT_FOUND)
669 {
670 wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel);
671
672 int pages = wxRICHTEXT_FORMAT_STYLE_EDITOR;
673
674 if (def->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition)))
675 {
676 pages |= wxRICHTEXT_FORMAT_FONT;
677 }
678 else if (def->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition)))
679 {
680 pages |= wxRICHTEXT_FORMAT_LIST_STYLE|wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING;
681 }
682 else if (def->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition)))
683 {
684 pages |= wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING|wxRICHTEXT_FORMAT_TABS|wxRICHTEXT_FORMAT_BULLETS;
685 }
686
687 wxRichTextFormattingDialog formatDlg;
688 formatDlg.SetStyleDefinition(*def, GetStyleSheet());
689 formatDlg.Create(pages, this);
690
691 if (formatDlg.ShowModal() == wxID_OK)
692 {
693 wxRichTextParagraphStyleDefinition* paraDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextParagraphStyleDefinition);
694 wxRichTextCharacterStyleDefinition* charDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextCharacterStyleDefinition);
695 wxRichTextListStyleDefinition* listDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextListStyleDefinition);
696
697 if (listDef)
698 {
699 (*((wxRichTextListStyleDefinition* ) def)) = (*listDef);
700 }
701 else if (paraDef)
702 {
703 (*((wxRichTextParagraphStyleDefinition* ) def)) = (*paraDef);
704 }
705 else
706 {
707 (*((wxRichTextCharacterStyleDefinition* ) def)) = (*charDef);
708 }
709
710 m_stylesListBox->UpdateStyles();
711 ShowPreview();
712 }
713 }
714 }
715
716 /*!
717 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
718 */
719
720 void wxRichTextStyleOrganiserDialog::OnEditUpdate( wxUpdateUIEvent& event )
721 {
722 event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_EDIT_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND);
723 }
724
725
726 /*!
727 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
728 */
729
730 void wxRichTextStyleOrganiserDialog::OnDeleteClick( wxCommandEvent& WXUNUSED(event) )
731 {
732 int sel = m_stylesListBox->GetStyleListBox()->GetSelection();
733 if (sel != wxNOT_FOUND)
734 {
735 wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel);
736 wxString name(def->GetName());
737 if (wxYES == wxMessageBox(wxString::Format(_("Delete style %s?"), (const wxChar*) name), _("Delete Style"), wxYES_NO|wxICON_QUESTION, this))
738 {
739 m_stylesListBox->GetStyleListBox()->SetItemCount(0);
740
741 if (def->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition)))
742 GetStyleSheet()->RemoveListStyle((wxRichTextListStyleDefinition*) def, true);
743 else if (def->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition)))
744 GetStyleSheet()->RemoveParagraphStyle((wxRichTextParagraphStyleDefinition*) def, true);
745 else if (def->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition)))
746 GetStyleSheet()->RemoveCharacterStyle((wxRichTextCharacterStyleDefinition*) def, true);
747
748 m_stylesListBox->UpdateStyles();
749
750 if (m_stylesListBox->GetStyleListBox()->GetSelection() != -1)
751 ShowPreview();
752 else
753 ClearPreview();
754 }
755 }
756 }
757
758 /*!
759 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
760 */
761
762 void wxRichTextStyleOrganiserDialog::OnDeleteUpdate( wxUpdateUIEvent& event )
763 {
764 event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_DELETE_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND);
765 }
766
767 /*!
768 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
769 */
770
771 void wxRichTextStyleOrganiserDialog::OnNewListClick( wxCommandEvent& WXUNUSED(event) )
772 {
773 wxString styleName = wxGetTextFromUser(_("Enter a list style name"), _("New Style"));
774 if (!styleName.IsEmpty())
775 {
776 if (GetStyleSheet()->FindListStyle(styleName))
777 {
778 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this);
779 return;
780 }
781
782 wxRichTextListStyleDefinition* style = new wxRichTextListStyleDefinition(styleName);
783
784 // Initialize the style to make it easier to edit
785 int i;
786 for (i = 0; i < 10; i++)
787 {
788 wxString bulletSymbol;
789 if (i == 0)
790 bulletSymbol = wxT("*");
791 else if (i == 1)
792 bulletSymbol = wxT("-");
793 else if (i == 2)
794 bulletSymbol = wxT("*");
795 else if (i == 3)
796 bulletSymbol = wxT("-");
797 else
798 bulletSymbol = wxT("*");
799
800 style->SetAttributes(i, (i+1)*60, 60, wxTEXT_ATTR_BULLET_STYLE_SYMBOL, bulletSymbol);
801 }
802
803 int pages = wxRICHTEXT_FORMAT_LIST_STYLE|wxRICHTEXT_FORMAT_STYLE_EDITOR|wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING;
804 wxRichTextFormattingDialog formatDlg;
805 formatDlg.SetStyleDefinition(*style, GetStyleSheet());
806 formatDlg.Create(pages, this);
807
808 if (formatDlg.ShowModal() == wxID_OK)
809 {
810 wxRichTextListStyleDefinition* listDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextListStyleDefinition);
811
812 (*((wxRichTextListStyleDefinition* ) style)) = (*listDef);
813
814 GetStyleSheet()->AddListStyle(style);
815
816 m_stylesListBox->UpdateStyles();
817 ShowPreview();
818 }
819 else
820 delete style;
821 }
822 }
823
824 /*!
825 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
826 */
827
828 void wxRichTextStyleOrganiserDialog::OnNewListUpdate( wxUpdateUIEvent& event )
829 {
830 event.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES) != 0);
831 }
832
833 /*!
834 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
835 */
836
837 void wxRichTextStyleOrganiserDialog::OnRenameClick( wxCommandEvent& WXUNUSED(event) )
838 {
839 }
840
841 /*!
842 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
843 */
844
845 void wxRichTextStyleOrganiserDialog::OnRenameUpdate( wxUpdateUIEvent& event )
846 {
847 event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_RENAME_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND);
848 }
849
850 /// List selection
851 void wxRichTextStyleOrganiserDialog::OnListSelection(wxCommandEvent& event)
852 {
853 if (event.GetEventObject() == m_stylesListBox->GetStyleListBox())
854 ShowPreview();
855 else
856 event.Skip();
857 }