1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/richtext/richtextstyledlg.cpp
4 // Author: Julian Smart
6 // Created: 10/5/2006 12:05:31 PM
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
26 #include "wx/richtext/richtextstyledlg.h"
27 #include "wx/richtext/richtextformatdlg.h"
33 * wxRichTextStyleOrganiserDialog type definition
36 bool wxRichTextStyleOrganiserDialog::sm_showToolTips
= false;
38 IMPLEMENT_DYNAMIC_CLASS( wxRichTextStyleOrganiserDialog
, wxDialog
)
41 * wxRichTextStyleOrganiserDialog event table definition
44 BEGIN_EVENT_TABLE( wxRichTextStyleOrganiserDialog
, wxDialog
)
46 EVT_LISTBOX(wxID_ANY
, wxRichTextStyleOrganiserDialog::OnListSelection
)
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
)
52 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
, wxRichTextStyleOrganiserDialog::OnNewParaClick
)
53 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
, wxRichTextStyleOrganiserDialog::OnNewParaUpdate
)
55 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
, wxRichTextStyleOrganiserDialog::OnNewListClick
)
56 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
, wxRichTextStyleOrganiserDialog::OnNewListUpdate
)
58 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
, wxRichTextStyleOrganiserDialog::OnApplyClick
)
59 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
, wxRichTextStyleOrganiserDialog::OnApplyUpdate
)
61 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
, wxRichTextStyleOrganiserDialog::OnRenameClick
)
62 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
, wxRichTextStyleOrganiserDialog::OnRenameUpdate
)
64 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
, wxRichTextStyleOrganiserDialog::OnEditClick
)
65 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
, wxRichTextStyleOrganiserDialog::OnEditUpdate
)
67 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
, wxRichTextStyleOrganiserDialog::OnDeleteClick
)
68 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
, wxRichTextStyleOrganiserDialog::OnDeleteUpdate
)
70 ////@end wxRichTextStyleOrganiserDialog event table entries
75 * wxRichTextStyleOrganiserDialog constructors
78 wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( )
83 wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( int flags
, wxRichTextStyleSheet
* sheet
, wxRichTextCtrl
* ctrl
, wxWindow
* parent
, wxWindowID id
, const wxString
& caption
, const wxPoint
& pos
, const wxSize
& size
, long style
)
86 Create(flags
, sheet
, ctrl
, parent
, id
, caption
, pos
, size
, style
);
90 * Member initialisation for wxSymbolPickerDialog
93 void wxRichTextStyleOrganiserDialog::Init()
95 m_richTextStyleSheet
= NULL
;
96 m_richTextCtrl
= NULL
;
99 m_restartNumbering
= true;
101 ////@begin wxRichTextStyleOrganiserDialog member initialisation
103 m_buttonSizerParent
= NULL
;
104 m_stylesListBox
= NULL
;
105 m_previewCtrl
= NULL
;
106 m_buttonSizer
= NULL
;
107 m_newCharacter
= NULL
;
108 m_newParagraph
= NULL
;
111 m_renameStyle
= NULL
;
113 m_deleteStyle
= NULL
;
114 m_closeButton
= NULL
;
115 m_bottomButtonSizer
= NULL
;
117 m_restartNumberingCtrl
= NULL
;
119 m_cancelButton
= NULL
;
120 ////@end wxRichTextStyleOrganiserDialog member initialisation
124 * wxRichTextStyleOrganiserDialog creator
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
)
129 m_richTextStyleSheet
= sheet
;
130 m_richTextCtrl
= ctrl
;
133 ////@begin wxRichTextStyleOrganiserDialog creation
134 SetExtraStyle(GetExtraStyle()|wxWS_EX_BLOCK_EVENTS
|wxDIALOG_EX_CONTEXTHELP
);
135 wxDialog::Create( parent
, id
, caption
, pos
, size
, style
);
140 GetSizer()->SetSizeHints(this);
143 ////@end wxRichTextStyleOrganiserDialog creation
148 * Control creation for wxRichTextStyleOrganiserDialog
151 void wxRichTextStyleOrganiserDialog::CreateControls()
153 bool hideTypeSelector
= false;
154 wxRichTextStyleListBox::wxRichTextStyleType typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL
;
156 if ((m_flags
& wxRICHTEXT_ORGANISER_SHOW_CHARACTER
) != 0)
158 typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER
;
159 hideTypeSelector
= true;
161 else if ((m_flags
& wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH
) != 0)
163 typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH
;
164 hideTypeSelector
= true;
166 else if ((m_flags
& wxRICHTEXT_ORGANISER_SHOW_LIST
) != 0)
168 typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST
;
169 hideTypeSelector
= true;
173 // wxRICHTEXT_ORGANISER_SHOW_ALL is implied if the other styles aren't included
176 long listCtrlStyle
= 0;
177 if (hideTypeSelector
)
178 listCtrlStyle
= wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR
;
180 ////@begin wxRichTextStyleOrganiserDialog content construction
181 wxRichTextStyleOrganiserDialog
* itemDialog1
= this;
183 wxBoxSizer
* itemBoxSizer2
= new wxBoxSizer(wxVERTICAL
);
184 itemDialog1
->SetSizer(itemBoxSizer2
);
186 m_innerSizer
= new wxBoxSizer(wxVERTICAL
);
187 itemBoxSizer2
->Add(m_innerSizer
, 1, wxGROW
|wxALL
, 5);
189 m_buttonSizerParent
= new wxBoxSizer(wxHORIZONTAL
);
190 m_innerSizer
->Add(m_buttonSizerParent
, 1, wxGROW
, 5);
192 wxBoxSizer
* itemBoxSizer5
= new wxBoxSizer(wxVERTICAL
);
193 m_buttonSizerParent
->Add(itemBoxSizer5
, 1, wxGROW
, 5);
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);
198 m_stylesListBox
= new wxRichTextStyleListCtrl( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_STYLES
, wxDefaultPosition
, wxSize(200, 350), wxSIMPLE_BORDER
|listCtrlStyle
);
199 m_stylesListBox
->SetHelpText(_("The available styles."));
201 m_stylesListBox
->SetToolTip(_("The available styles."));
202 itemBoxSizer5
->Add(m_stylesListBox
, 1, wxGROW
|wxALL
, 5);
204 wxBoxSizer
* itemBoxSizer8
= new wxBoxSizer(wxVERTICAL
);
205 m_buttonSizerParent
->Add(itemBoxSizer8
, 0, wxGROW
, 5);
207 wxStaticText
* itemStaticText9
= new wxStaticText( itemDialog1
, wxID_STATIC
, _(" "), wxDefaultPosition
, wxDefaultSize
, 0 );
208 itemBoxSizer8
->Add(itemStaticText9
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
|wxADJUST_MINSIZE
, 5);
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."));
213 m_previewCtrl
->SetToolTip(_("The style preview."));
214 itemBoxSizer8
->Add(m_previewCtrl
, 1, wxGROW
|wxALL
, 5);
216 m_buttonSizer
= new wxBoxSizer(wxVERTICAL
);
217 m_buttonSizerParent
->Add(m_buttonSizer
, 0, wxGROW
, 5);
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);
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."));
225 m_newCharacter
->SetToolTip(_("Click to create a new character style."));
226 m_buttonSizer
->Add(m_newCharacter
, 0, wxGROW
|wxALL
, 5);
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."));
231 m_newParagraph
->SetToolTip(_("Click to create a new paragraph style."));
232 m_buttonSizer
->Add(m_newParagraph
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
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."));
237 m_newList
->SetToolTip(_("Click to create a new list style."));
238 m_buttonSizer
->Add(m_newList
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
240 m_buttonSizer
->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL
|wxALL
, 5);
242 m_applyStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
, _("&Apply Style"), wxDefaultPosition
, wxDefaultSize
, 0 );
243 m_applyStyle
->SetHelpText(_("Click to apply the selected style."));
245 m_applyStyle
->SetToolTip(_("Click to apply the selected style."));
246 m_buttonSizer
->Add(m_applyStyle
, 0, wxGROW
|wxALL
, 5);
248 m_renameStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
, _("&Rename Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
249 m_renameStyle
->SetHelpText(_("Click to rename the selected style."));
251 m_renameStyle
->SetToolTip(_("Click to rename the selected style."));
252 m_buttonSizer
->Add(m_renameStyle
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
254 m_editStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
, _("&Edit Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
255 m_editStyle
->SetHelpText(_("Click to edit the selected style."));
257 m_editStyle
->SetToolTip(_("Click to edit the selected style."));
258 m_buttonSizer
->Add(m_editStyle
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
260 m_deleteStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
, _("&Delete Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
261 m_deleteStyle
->SetHelpText(_("Click to delete the selected style."));
263 m_deleteStyle
->SetToolTip(_("Click to delete the selected style."));
264 m_buttonSizer
->Add(m_deleteStyle
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
266 m_buttonSizer
->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL
|wxALL
, 5);
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."));
272 m_closeButton
->SetToolTip(_("Click to close this window."));
273 m_buttonSizer
->Add(m_closeButton
, 0, wxGROW
|wxALL
, 5);
275 m_bottomButtonSizer
= new wxBoxSizer(wxHORIZONTAL
);
276 m_innerSizer
->Add(m_bottomButtonSizer
, 0, wxGROW
, 5);
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."));
282 m_restartNumberingCtrl
->SetToolTip(_("Check to restart numbering."));
283 m_bottomButtonSizer
->Add(m_restartNumberingCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
285 m_bottomButtonSizer
->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
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."));
291 m_okButton
->SetToolTip(_("Click to confirm your selection."));
292 m_bottomButtonSizer
->Add(m_okButton
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
294 m_cancelButton
= new wxButton( itemDialog1
, wxID_CANCEL
, _("Cancel"), wxDefaultPosition
, wxDefaultSize
, 0 );
295 m_cancelButton
->SetHelpText(_("Click to cancel this window."));
297 m_cancelButton
->SetToolTip(_("Click to cancel this window."));
298 m_bottomButtonSizer
->Add(m_cancelButton
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
300 ////@end wxRichTextStyleOrganiserDialog content construction
302 if ((m_flags
& wxRICHTEXT_ORGANISER_CREATE_STYLES
) == 0)
304 m_buttonSizer
->Show(m_newCharacter
, false);
305 m_buttonSizer
->Show(m_newParagraph
, false);
306 m_buttonSizer
->Show(m_newList
, false);
308 if ((m_flags
& wxRICHTEXT_ORGANISER_DELETE_STYLES
) == 0)
310 m_buttonSizer
->Show(m_deleteStyle
, false);
312 if ((m_flags
& wxRICHTEXT_ORGANISER_APPLY_STYLES
) == 0)
314 m_buttonSizer
->Show(m_applyStyle
, false);
316 if ((m_flags
& wxRICHTEXT_ORGANISER_EDIT_STYLES
) == 0)
318 m_buttonSizer
->Show(m_editStyle
, false);
320 if ((m_flags
& wxRICHTEXT_ORGANISER_RENAME_STYLES
) == 0)
322 m_buttonSizer
->Show(m_renameStyle
, false);
324 if ((m_flags
& wxRICHTEXT_ORGANISER_RENUMBER
) == 0)
326 m_bottomButtonSizer
->Show(m_restartNumberingCtrl
, false);
329 if ((m_flags
& wxRICHTEXT_ORGANISER_OK_CANCEL
) == 0)
331 m_bottomButtonSizer
->Show(m_okButton
, false);
332 m_bottomButtonSizer
->Show(m_cancelButton
, false);
336 m_buttonSizer
->Show(m_closeButton
, false);
339 // No buttons in the vertical group are shown, so hide the whole sizer
340 if ((m_flags
& wxRICHTEXT_ORGANISER_ORGANISE
) == 0)
342 m_buttonSizerParent
->Show(m_buttonSizer
, false);
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)
348 m_innerSizer
->Show(m_bottomButtonSizer
, false);
351 if (hideTypeSelector
)
353 m_stylesListBox
->GetStyleListBox()->SetStyleType(typesToShow
);
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)
362 m_stylesListBox
->GetStyleListBox()->SetSelection(0);
368 * Should we show tooltips?
371 /// Get selected style name or definition
372 wxString
wxRichTextStyleOrganiserDialog::GetSelectedStyle() const
374 wxRichTextStyleDefinition
* def
= GetSelectedStyleDefinition();
376 return def
->GetName();
378 return wxEmptyString
;
381 wxRichTextStyleDefinition
* wxRichTextStyleOrganiserDialog::GetSelectedStyleDefinition() const
383 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
384 return m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
388 /// Transfer data from/to window
389 bool wxRichTextStyleOrganiserDialog::TransferDataFromWindow()
391 if (!wxDialog::TransferDataFromWindow())
394 m_restartNumbering
= m_restartNumberingCtrl
->GetValue();
399 bool wxRichTextStyleOrganiserDialog::TransferDataToWindow()
401 if (!wxDialog::TransferDataToWindow())
404 m_restartNumberingCtrl
->SetValue(m_restartNumbering
);
409 /// Show preview for given or selected preview
410 void wxRichTextStyleOrganiserDialog::ShowPreview(int sel
)
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.");
415 static const wxChar
* s_para2List
= wxT("Duis pharetra consequat dui. Nullam vitae justo id mauris lobortis interdum.");
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.");
420 static const wxChar
* s_para3
= wxT("\nInteger convallis dolor at augue \
421 iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n");
425 sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
430 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
432 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(def
, wxRichTextListStyleDefinition
);
433 //wxRichTextParagraphStyleDefinition* paraDef = wxDynamicCast(def, wxRichTextParagraphStyleDefinition);
434 //wxRichTextCharacterStyleDefinition* charDef = wxDynamicCast(def, wxRichTextCharacterStyleDefinition);
436 wxTextAttrEx
attr(def
->GetStyle());
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
));
444 wxFont
font(m_previewCtrl
->GetFont());
445 font
.SetPointSize(9);
446 m_previewCtrl
->SetFont(font
);
448 wxTextAttrEx normalParaAttr
;
449 normalParaAttr
.SetFont(font
);
450 normalParaAttr
.SetTextColour(wxColour(wxT("LIGHT GREY")));
452 m_previewCtrl
->Freeze();
453 m_previewCtrl
->Clear();
455 m_previewCtrl
->BeginStyle(normalParaAttr
);
456 m_previewCtrl
->WriteText(s_para1
);
457 m_previewCtrl
->EndStyle();
459 m_previewCtrl
->BeginStyle(attr
);
464 for (i
= 0; i
< 10; i
++)
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();
475 m_previewCtrl
->WriteText(wxString(wxT("\n")) + s_para2
);
478 m_previewCtrl
->EndStyle();
480 m_previewCtrl
->BeginStyle(normalParaAttr
);
481 m_previewCtrl
->WriteText(s_para3
);
482 m_previewCtrl
->EndStyle();
484 m_previewCtrl
->Thaw();
487 /// Clears the preview
488 void wxRichTextStyleOrganiserDialog::ClearPreview()
490 m_richTextCtrl
->Clear();
493 bool wxRichTextStyleOrganiserDialog::ApplyStyle(wxRichTextCtrl
* ctrl
)
495 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
499 ctrl
= GetRichTextCtrl();
502 if (!ctrl
->HasSelection())
506 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
507 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(def
, wxRichTextListStyleDefinition
);
509 if (listDef
&& m_restartNumberingCtrl
->GetValue())
511 wxRichTextRange range
= ctrl
->GetSelectionRange();
512 return ctrl
->SetListStyle(range
, listDef
, wxRICHTEXT_SETSTYLE_WITH_UNDO
|wxRICHTEXT_SETSTYLE_RENUMBER
);
516 return ctrl
->ApplyStyle(def
);
521 * Get bitmap resources
524 wxBitmap
wxRichTextStyleOrganiserDialog::GetBitmapResource( const wxString
& name
)
527 ////@begin wxRichTextStyleOrganiserDialog bitmap retrieval
530 ////@end wxRichTextStyleOrganiserDialog bitmap retrieval
537 wxIcon
wxRichTextStyleOrganiserDialog::GetIconResource( const wxString
& name
)
540 ////@begin wxRichTextStyleOrganiserDialog icon retrieval
543 ////@end wxRichTextStyleOrganiserDialog icon retrieval
547 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
550 void wxRichTextStyleOrganiserDialog::OnApplyClick( wxCommandEvent
& WXUNUSED(event
) )
556 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
559 void wxRichTextStyleOrganiserDialog::OnApplyUpdate( wxUpdateUIEvent
& event
)
561 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_APPLY_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
566 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
569 void wxRichTextStyleOrganiserDialog::OnNewCharClick( wxCommandEvent
& WXUNUSED(event
) )
571 wxString styleName
= wxGetTextFromUser(_("Enter a character style name"), _("New Style"));
572 if (!styleName
.IsEmpty())
574 if (GetStyleSheet()->FindCharacterStyle(styleName
))
576 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
580 wxRichTextCharacterStyleDefinition
* style
= new wxRichTextCharacterStyleDefinition(styleName
);
582 int pages
= wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_STYLE_EDITOR
;
583 wxRichTextFormattingDialog formatDlg
;
584 formatDlg
.SetStyleDefinition(*style
, GetStyleSheet());
585 formatDlg
.Create(pages
, this);
587 if (formatDlg
.ShowModal() == wxID_OK
)
589 wxRichTextCharacterStyleDefinition
* charDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextCharacterStyleDefinition
);
591 (*((wxRichTextCharacterStyleDefinition
* ) style
)) = (*charDef
);
593 GetStyleSheet()->AddCharacterStyle(style
);
595 m_stylesListBox
->UpdateStyles();
604 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
607 void wxRichTextStyleOrganiserDialog::OnNewCharUpdate( wxUpdateUIEvent
& event
)
609 event
.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES
) != 0);
614 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
617 void wxRichTextStyleOrganiserDialog::OnNewParaClick( wxCommandEvent
& WXUNUSED(event
) )
619 wxString styleName
= wxGetTextFromUser(_("Enter a paragraph style name"), _("New Style"));
620 if (!styleName
.IsEmpty())
622 if (GetStyleSheet()->FindParagraphStyle(styleName
))
624 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
628 wxRichTextParagraphStyleDefinition
* style
= new wxRichTextParagraphStyleDefinition(styleName
);
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);
635 if (formatDlg
.ShowModal() == wxID_OK
)
637 wxRichTextParagraphStyleDefinition
* paraDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextParagraphStyleDefinition
);
639 (*((wxRichTextParagraphStyleDefinition
* ) style
)) = (*paraDef
);
641 GetStyleSheet()->AddParagraphStyle(style
);
643 m_stylesListBox
->UpdateStyles();
652 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
655 void wxRichTextStyleOrganiserDialog::OnNewParaUpdate( wxUpdateUIEvent
& event
)
657 event
.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES
) != 0);
662 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
665 void wxRichTextStyleOrganiserDialog::OnEditClick( wxCommandEvent
& WXUNUSED(event
) )
667 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
668 if (sel
!= wxNOT_FOUND
)
670 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
672 int pages
= wxRICHTEXT_FORMAT_STYLE_EDITOR
;
674 if (def
->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition
)))
676 pages
|= wxRICHTEXT_FORMAT_FONT
;
678 else if (def
->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition
)))
680 pages
|= wxRICHTEXT_FORMAT_LIST_STYLE
|wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_INDENTS_SPACING
;
682 else if (def
->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition
)))
684 pages
|= wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_INDENTS_SPACING
|wxRICHTEXT_FORMAT_TABS
|wxRICHTEXT_FORMAT_BULLETS
;
687 wxRichTextFormattingDialog formatDlg
;
688 formatDlg
.SetStyleDefinition(*def
, GetStyleSheet());
689 formatDlg
.Create(pages
, this);
691 if (formatDlg
.ShowModal() == wxID_OK
)
693 wxRichTextParagraphStyleDefinition
* paraDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextParagraphStyleDefinition
);
694 wxRichTextCharacterStyleDefinition
* charDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextCharacterStyleDefinition
);
695 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextListStyleDefinition
);
699 (*((wxRichTextListStyleDefinition
* ) def
)) = (*listDef
);
703 (*((wxRichTextParagraphStyleDefinition
* ) def
)) = (*paraDef
);
707 (*((wxRichTextCharacterStyleDefinition
* ) def
)) = (*charDef
);
710 m_stylesListBox
->UpdateStyles();
717 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
720 void wxRichTextStyleOrganiserDialog::OnEditUpdate( wxUpdateUIEvent
& event
)
722 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_EDIT_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
727 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
730 void wxRichTextStyleOrganiserDialog::OnDeleteClick( wxCommandEvent
& WXUNUSED(event
) )
732 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
733 if (sel
!= wxNOT_FOUND
)
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))
739 m_stylesListBox
->GetStyleListBox()->SetItemCount(0);
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);
748 m_stylesListBox
->UpdateStyles();
750 if (m_stylesListBox
->GetStyleListBox()->GetSelection() != -1)
759 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
762 void wxRichTextStyleOrganiserDialog::OnDeleteUpdate( wxUpdateUIEvent
& event
)
764 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_DELETE_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
768 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
771 void wxRichTextStyleOrganiserDialog::OnNewListClick( wxCommandEvent
& WXUNUSED(event
) )
773 wxString styleName
= wxGetTextFromUser(_("Enter a list style name"), _("New Style"));
774 if (!styleName
.IsEmpty())
776 if (GetStyleSheet()->FindListStyle(styleName
))
778 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
782 wxRichTextListStyleDefinition
* style
= new wxRichTextListStyleDefinition(styleName
);
784 // Initialize the style to make it easier to edit
786 for (i
= 0; i
< 10; i
++)
788 wxString bulletSymbol
;
790 bulletSymbol
= wxT("*");
792 bulletSymbol
= wxT("-");
794 bulletSymbol
= wxT("*");
796 bulletSymbol
= wxT("-");
798 bulletSymbol
= wxT("*");
800 style
->SetAttributes(i
, (i
+1)*60, 60, wxTEXT_ATTR_BULLET_STYLE_SYMBOL
, bulletSymbol
);
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);
808 if (formatDlg
.ShowModal() == wxID_OK
)
810 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextListStyleDefinition
);
812 (*((wxRichTextListStyleDefinition
* ) style
)) = (*listDef
);
814 GetStyleSheet()->AddListStyle(style
);
816 m_stylesListBox
->UpdateStyles();
825 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
828 void wxRichTextStyleOrganiserDialog::OnNewListUpdate( wxUpdateUIEvent
& event
)
830 event
.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES
) != 0);
834 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
837 void wxRichTextStyleOrganiserDialog::OnRenameClick( wxCommandEvent
& WXUNUSED(event
) )
842 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
845 void wxRichTextStyleOrganiserDialog::OnRenameUpdate( wxUpdateUIEvent
& event
)
847 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_RENAME_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
851 void wxRichTextStyleOrganiserDialog::OnListSelection(wxCommandEvent
& event
)
853 if (event
.GetEventObject() == m_stylesListBox
->GetStyleListBox())