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"
25 #include "wx/richtext/richtextstyledlg.h"
26 #include "wx/richtext/richtextformatdlg.h"
29 * wxRichTextStyleOrganiserDialog type definition
32 bool wxRichTextStyleOrganiserDialog::sm_showToolTips
= false;
34 IMPLEMENT_DYNAMIC_CLASS( wxRichTextStyleOrganiserDialog
, wxDialog
)
37 * wxRichTextStyleOrganiserDialog event table definition
40 BEGIN_EVENT_TABLE( wxRichTextStyleOrganiserDialog
, wxDialog
)
42 EVT_LISTBOX(wxID_ANY
, wxRichTextStyleOrganiserDialog::OnListSelection
)
44 ////@begin wxRichTextStyleOrganiserDialog event table entries
45 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
, wxRichTextStyleOrganiserDialog::OnNewCharClick
)
46 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
, wxRichTextStyleOrganiserDialog::OnNewCharUpdate
)
48 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
, wxRichTextStyleOrganiserDialog::OnNewParaClick
)
49 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
, wxRichTextStyleOrganiserDialog::OnNewParaUpdate
)
51 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
, wxRichTextStyleOrganiserDialog::OnNewListClick
)
52 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
, wxRichTextStyleOrganiserDialog::OnNewListUpdate
)
54 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX
, wxRichTextStyleOrganiserDialog::OnNewBoxClick
)
55 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX
, wxRichTextStyleOrganiserDialog::OnNewBoxUpdate
)
57 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
, wxRichTextStyleOrganiserDialog::OnApplyClick
)
58 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
, wxRichTextStyleOrganiserDialog::OnApplyUpdate
)
60 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
, wxRichTextStyleOrganiserDialog::OnRenameClick
)
61 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
, wxRichTextStyleOrganiserDialog::OnRenameUpdate
)
63 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
, wxRichTextStyleOrganiserDialog::OnEditClick
)
64 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
, wxRichTextStyleOrganiserDialog::OnEditUpdate
)
66 EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
, wxRichTextStyleOrganiserDialog::OnDeleteClick
)
67 EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
, wxRichTextStyleOrganiserDialog::OnDeleteUpdate
)
69 ////@end wxRichTextStyleOrganiserDialog event table entries
73 IMPLEMENT_HELP_PROVISION(wxRichTextStyleOrganiserDialog
)
76 * wxRichTextStyleOrganiserDialog constructors
79 wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( )
84 wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( int flags
, wxRichTextStyleSheet
* sheet
, wxRichTextCtrl
* ctrl
, wxWindow
* parent
, wxWindowID id
, const wxString
& caption
, const wxPoint
& pos
, const wxSize
& size
, long style
)
87 Create(flags
, sheet
, ctrl
, parent
, id
, caption
, pos
, size
, style
);
91 * Member initialisation for wxSymbolPickerDialog
94 void wxRichTextStyleOrganiserDialog::Init()
96 m_richTextStyleSheet
= NULL
;
97 m_richTextCtrl
= NULL
;
100 m_restartNumbering
= true;
102 ////@begin wxRichTextStyleOrganiserDialog member initialisation
104 m_buttonSizerParent
= NULL
;
105 m_stylesListBox
= NULL
;
106 m_previewCtrl
= NULL
;
107 m_buttonSizer
= NULL
;
108 m_newCharacter
= NULL
;
109 m_newParagraph
= NULL
;
113 m_renameStyle
= NULL
;
115 m_deleteStyle
= NULL
;
116 m_closeButton
= NULL
;
117 m_bottomButtonSizer
= NULL
;
118 m_restartNumberingCtrl
= NULL
;
119 m_stdButtonSizer
= NULL
;
121 m_cancelButton
= NULL
;
122 ////@end wxRichTextStyleOrganiserDialog member initialisation
126 * wxRichTextStyleOrganiserDialog creator
129 bool wxRichTextStyleOrganiserDialog::Create( int flags
, wxRichTextStyleSheet
* sheet
, wxRichTextCtrl
* ctrl
, wxWindow
* parent
, wxWindowID id
, const wxString
& caption
, const wxPoint
& pos
, const wxSize
& size
, long style
)
131 m_richTextStyleSheet
= sheet
;
132 m_richTextCtrl
= ctrl
;
135 ////@begin wxRichTextStyleOrganiserDialog creation
136 SetExtraStyle(wxWS_EX_BLOCK_EVENTS
|wxDIALOG_EX_CONTEXTHELP
);
137 wxDialog::Create( parent
, id
, caption
, pos
, size
, style
);
142 GetSizer()->SetSizeHints(this);
145 ////@end wxRichTextStyleOrganiserDialog creation
150 * Control creation for wxRichTextStyleOrganiserDialog
153 void wxRichTextStyleOrganiserDialog::CreateControls()
156 SetWindowVariant(wxWINDOW_VARIANT_SMALL
);
159 bool hideTypeSelector
= false;
160 wxRichTextStyleListBox::wxRichTextStyleType typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL
;
162 if ((m_flags
& wxRICHTEXT_ORGANISER_SHOW_CHARACTER
) != 0)
164 typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER
;
165 hideTypeSelector
= true;
167 else if ((m_flags
& wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH
) != 0)
169 typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH
;
170 hideTypeSelector
= true;
172 else if ((m_flags
& wxRICHTEXT_ORGANISER_SHOW_BOX
) != 0)
174 typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_BOX
;
175 hideTypeSelector
= true;
177 else if ((m_flags
& wxRICHTEXT_ORGANISER_SHOW_LIST
) != 0)
179 typesToShow
= wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST
;
180 hideTypeSelector
= true;
184 // wxRICHTEXT_ORGANISER_SHOW_ALL is implied if the other styles aren't included
187 long listCtrlStyle
= 0;
188 if (hideTypeSelector
)
189 listCtrlStyle
= wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR
;
191 ////@begin wxRichTextStyleOrganiserDialog content construction
192 wxRichTextStyleOrganiserDialog
* itemDialog1
= this;
194 wxBoxSizer
* itemBoxSizer2
= new wxBoxSizer(wxVERTICAL
);
195 itemDialog1
->SetSizer(itemBoxSizer2
);
197 m_innerSizer
= new wxBoxSizer(wxVERTICAL
);
198 itemBoxSizer2
->Add(m_innerSizer
, 1, wxGROW
|wxALL
, 5);
200 m_buttonSizerParent
= new wxBoxSizer(wxHORIZONTAL
);
201 m_innerSizer
->Add(m_buttonSizerParent
, 1, wxGROW
, 5);
203 wxBoxSizer
* itemBoxSizer5
= new wxBoxSizer(wxVERTICAL
);
204 m_buttonSizerParent
->Add(itemBoxSizer5
, 1, wxGROW
, 5);
206 wxStaticText
* itemStaticText6
= new wxStaticText( itemDialog1
, wxID_STATIC
, _("&Styles:"), wxDefaultPosition
, wxDefaultSize
, 0 );
207 itemBoxSizer5
->Add(itemStaticText6
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
209 m_stylesListBox
= new wxRichTextStyleListCtrl( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_STYLES
, wxDefaultPosition
, wxSize(280, 260), listCtrlStyle
);
210 m_stylesListBox
->SetHelpText(_("The available styles."));
211 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
212 m_stylesListBox
->SetToolTip(_("The available styles."));
213 itemBoxSizer5
->Add(m_stylesListBox
, 1, wxGROW
|wxALL
, 5);
215 wxBoxSizer
* itemBoxSizer8
= new wxBoxSizer(wxVERTICAL
);
216 m_buttonSizerParent
->Add(itemBoxSizer8
, 0, wxGROW
, 5);
218 wxStaticText
* itemStaticText9
= new wxStaticText( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE
, _(" "), wxDefaultPosition
, wxDefaultSize
, 0 );
219 itemBoxSizer8
->Add(itemStaticText9
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
221 m_previewCtrl
= new wxRichTextCtrl( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_PREVIEW
, wxEmptyString
, wxDefaultPosition
, wxSize(250, 200), wxBORDER_THEME
|wxVSCROLL
|wxTE_READONLY
);
222 m_previewCtrl
->SetHelpText(_("The style preview."));
223 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
224 m_previewCtrl
->SetToolTip(_("The style preview."));
225 itemBoxSizer8
->Add(m_previewCtrl
, 1, wxGROW
|wxALL
, 5);
227 m_buttonSizer
= new wxBoxSizer(wxVERTICAL
);
228 m_buttonSizerParent
->Add(m_buttonSizer
, 0, wxGROW
, 5);
230 wxStaticText
* itemStaticText12
= new wxStaticText( itemDialog1
, wxID_STATIC
, _(" "), wxDefaultPosition
, wxDefaultSize
, 0 );
231 m_buttonSizer
->Add(itemStaticText12
, 0, wxALIGN_LEFT
|wxLEFT
|wxRIGHT
|wxTOP
, 5);
233 m_newCharacter
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
, _("New &Character Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
234 m_newCharacter
->SetHelpText(_("Click to create a new character style."));
235 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
236 m_newCharacter
->SetToolTip(_("Click to create a new character style."));
237 m_buttonSizer
->Add(m_newCharacter
, 0, wxGROW
|wxALL
, 5);
239 m_newParagraph
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
, _("New &Paragraph Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
240 m_newParagraph
->SetHelpText(_("Click to create a new paragraph style."));
241 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
242 m_newParagraph
->SetToolTip(_("Click to create a new paragraph style."));
243 m_buttonSizer
->Add(m_newParagraph
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
245 m_newList
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
, _("New &List Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
246 m_newList
->SetHelpText(_("Click to create a new list style."));
247 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
248 m_newList
->SetToolTip(_("Click to create a new list style."));
249 m_buttonSizer
->Add(m_newList
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
251 m_newBox
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX
, _("New &Box Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
252 m_newBox
->SetHelpText(_("Click to create a new box style."));
253 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
254 m_newBox
->SetToolTip(_("Click to create a new box style."));
255 m_buttonSizer
->Add(m_newBox
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
257 m_buttonSizer
->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL
|wxALL
, 5);
259 m_applyStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
, _("&Apply Style"), wxDefaultPosition
, wxDefaultSize
, 0 );
260 m_applyStyle
->SetHelpText(_("Click to apply the selected style."));
261 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
262 m_applyStyle
->SetToolTip(_("Click to apply the selected style."));
263 m_buttonSizer
->Add(m_applyStyle
, 0, wxGROW
|wxALL
, 5);
265 m_renameStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
, _("&Rename Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
266 m_renameStyle
->SetHelpText(_("Click to rename the selected style."));
267 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
268 m_renameStyle
->SetToolTip(_("Click to rename the selected style."));
269 m_buttonSizer
->Add(m_renameStyle
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
271 m_editStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
, _("&Edit Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
272 m_editStyle
->SetHelpText(_("Click to edit the selected style."));
273 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
274 m_editStyle
->SetToolTip(_("Click to edit the selected style."));
275 m_buttonSizer
->Add(m_editStyle
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
277 m_deleteStyle
= new wxButton( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
, _("&Delete Style..."), wxDefaultPosition
, wxDefaultSize
, 0 );
278 m_deleteStyle
->SetHelpText(_("Click to delete the selected style."));
279 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
280 m_deleteStyle
->SetToolTip(_("Click to delete the selected style."));
281 m_buttonSizer
->Add(m_deleteStyle
, 0, wxGROW
|wxLEFT
|wxRIGHT
|wxBOTTOM
, 5);
283 m_buttonSizer
->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL
|wxALL
, 5);
285 m_closeButton
= new wxButton( itemDialog1
, wxID_CANCEL
, _("Close"), wxDefaultPosition
, wxDefaultSize
, 0 );
286 m_closeButton
->SetDefault();
287 m_closeButton
->SetHelpText(_("Click to close this window."));
288 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
289 m_closeButton
->SetToolTip(_("Click to close this window."));
290 m_buttonSizer
->Add(m_closeButton
, 0, wxGROW
|wxALL
, 5);
292 m_bottomButtonSizer
= new wxBoxSizer(wxHORIZONTAL
);
293 m_innerSizer
->Add(m_bottomButtonSizer
, 0, wxGROW
, 5);
295 m_restartNumberingCtrl
= new wxCheckBox( itemDialog1
, ID_RICHTEXTSTYLEORGANISERDIALOG_RESTART_NUMBERING
, _("&Restart numbering"), wxDefaultPosition
, wxDefaultSize
, 0 );
296 m_restartNumberingCtrl
->SetValue(false);
297 m_restartNumberingCtrl
->SetHelpText(_("Check to restart numbering."));
298 if (wxRichTextStyleOrganiserDialog::ShowToolTips())
299 m_restartNumberingCtrl
->SetToolTip(_("Check to restart numbering."));
300 m_bottomButtonSizer
->Add(m_restartNumberingCtrl
, 0, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
302 m_stdButtonSizer
= new wxStdDialogButtonSizer
;
304 m_bottomButtonSizer
->Add(m_stdButtonSizer
, 1, wxALIGN_CENTER_VERTICAL
|wxALL
, 5);
305 m_okButton
= new wxButton( itemDialog1
, wxID_OK
, _("OK"), wxDefaultPosition
, wxDefaultSize
, 0 );
306 m_stdButtonSizer
->AddButton(m_okButton
);
308 m_cancelButton
= new wxButton( itemDialog1
, wxID_CANCEL
, _("Cancel"), wxDefaultPosition
, wxDefaultSize
, 0 );
309 m_stdButtonSizer
->AddButton(m_cancelButton
);
311 wxButton
* itemButton29
= new wxButton( itemDialog1
, wxID_HELP
, _("&Help"), wxDefaultPosition
, wxDefaultSize
, 0 );
312 m_stdButtonSizer
->AddButton(itemButton29
);
314 m_stdButtonSizer
->Realize();
316 ////@end wxRichTextStyleOrganiserDialog content construction
318 if (GetHelpId() == -1)
320 wxWindow
* button
= FindWindowById(wxID_HELP
);
322 m_stdButtonSizer
->Show(button
, false);
325 if ((m_flags
& wxRICHTEXT_ORGANISER_CREATE_STYLES
) == 0)
327 m_buttonSizer
->Show(m_newCharacter
, false);
328 m_buttonSizer
->Show(m_newParagraph
, false);
329 m_buttonSizer
->Show(m_newList
, false);
330 m_buttonSizer
->Show(m_newBox
, false);
332 if ((m_flags
& wxRICHTEXT_ORGANISER_DELETE_STYLES
) == 0)
334 m_buttonSizer
->Show(m_deleteStyle
, false);
336 if ((m_flags
& wxRICHTEXT_ORGANISER_APPLY_STYLES
) == 0)
338 m_buttonSizer
->Show(m_applyStyle
, false);
340 if ((m_flags
& wxRICHTEXT_ORGANISER_EDIT_STYLES
) == 0)
342 m_buttonSizer
->Show(m_editStyle
, false);
344 if ((m_flags
& wxRICHTEXT_ORGANISER_RENAME_STYLES
) == 0)
346 m_buttonSizer
->Show(m_renameStyle
, false);
348 if ((m_flags
& wxRICHTEXT_ORGANISER_RENUMBER
) == 0)
350 m_bottomButtonSizer
->Show(m_restartNumberingCtrl
, false);
353 if ((m_flags
& wxRICHTEXT_ORGANISER_OK_CANCEL
) == 0)
355 m_stdButtonSizer
->Show(m_okButton
, false);
356 m_stdButtonSizer
->Show(m_cancelButton
, false);
360 m_buttonSizer
->Show(m_closeButton
, false);
363 // No buttons in the vertical group are shown, so hide the whole sizer
364 if ((m_flags
& wxRICHTEXT_ORGANISER_ORGANISE
) == 0)
366 m_buttonSizerParent
->Show(m_buttonSizer
, false);
369 // No buttons in the horizontal group are shown, so hide the whole sizer
370 if ((m_flags
& (wxRICHTEXT_ORGANISER_OK_CANCEL
|wxRICHTEXT_ORGANISER_RENUMBER
)) == 0)
372 m_innerSizer
->Show(m_bottomButtonSizer
, false);
375 if (hideTypeSelector
)
377 m_stylesListBox
->GetStyleListBox()->SetStyleType(typesToShow
);
380 m_stylesListBox
->SetStyleSheet(m_richTextStyleSheet
);
381 m_stylesListBox
->SetRichTextCtrl(m_richTextCtrl
);
382 m_stylesListBox
->UpdateStyles();
383 m_stylesListBox
->GetStyleListBox()->SetAutoSetSelection(false); // stop idle-time auto selection
384 if (m_stylesListBox
->GetStyleListBox()->GetItemCount() > 0)
386 m_stylesListBox
->GetStyleListBox()->SetSelection(0);
392 * Should we show tooltips?
395 /// Get selected style name or definition
396 wxString
wxRichTextStyleOrganiserDialog::GetSelectedStyle() const
398 wxRichTextStyleDefinition
* def
= GetSelectedStyleDefinition();
400 return def
->GetName();
402 return wxEmptyString
;
405 wxRichTextStyleDefinition
* wxRichTextStyleOrganiserDialog::GetSelectedStyleDefinition() const
407 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
408 return m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
412 /// Transfer data from/to window
413 bool wxRichTextStyleOrganiserDialog::TransferDataFromWindow()
415 if (!wxDialog::TransferDataFromWindow())
418 m_restartNumbering
= m_restartNumberingCtrl
->GetValue();
423 bool wxRichTextStyleOrganiserDialog::TransferDataToWindow()
425 if (!wxDialog::TransferDataToWindow())
428 m_restartNumberingCtrl
->SetValue(m_restartNumbering
);
433 /// Show preview for given or selected preview
434 void wxRichTextStyleOrganiserDialog::ShowPreview(int sel
)
436 static const wxChar
* s_para1
= wxT("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \
437 Nullam ante sapien, vestibulum nonummy, pulvinar sed, luctus ut, lacus.\n");
439 static const wxChar
* s_para2List
= wxT("Duis pharetra consequat dui. Nullam vitae justo id mauris lobortis interdum.\n");
441 static const wxChar
* s_para2
= wxT("Duis pharetra consequat dui. Cum sociis natoque penatibus \
442 et magnis dis parturient montes, nascetur ridiculus mus. Nullam vitae justo id mauris lobortis interdum.\n");
444 static const wxChar
* s_para3
= wxT("Integer convallis dolor at augue \
445 iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n");
449 sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
454 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
455 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(def
, wxRichTextListStyleDefinition
);
456 wxRichTextBoxStyleDefinition
* boxDef
= wxDynamicCast(def
, wxRichTextBoxStyleDefinition
);
458 wxStaticText
* labelCtrl
= (wxStaticText
*) FindWindow(ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE
);
460 labelCtrl
->SetLabel(def
->GetName() + wxT(":"));
462 wxRichTextAttr
attr(def
->GetStyleMergedWithBase(GetStyleSheet()));
464 wxFont
font(m_previewCtrl
->GetFont());
465 font
.SetPointSize(9);
466 m_previewCtrl
->SetFont(font
);
468 wxRichTextAttr normalParaAttr
;
469 normalParaAttr
.SetFont(font
);
470 normalParaAttr
.SetTextColour(wxColour(wxT("LIGHT GREY")));
472 m_previewCtrl
->Freeze();
473 m_previewCtrl
->Clear();
475 m_previewCtrl
->BeginStyle(normalParaAttr
);
476 m_previewCtrl
->WriteText(s_para1
);
477 m_previewCtrl
->EndStyle();
481 m_previewCtrl
->BeginStyle(attr
);
482 long listStart
= m_previewCtrl
->GetInsertionPoint() + 1;
484 for (i
= 0; i
< 10; i
++)
486 wxRichTextAttr levelAttr
= * listDef
->GetLevelAttributes(i
);
487 levelAttr
.SetBulletNumber(1);
488 m_previewCtrl
->BeginStyle(levelAttr
);
489 m_previewCtrl
->WriteText(wxString::Format(wxT("List level %d. "), i
+1) + s_para2List
);
490 m_previewCtrl
->EndStyle();
492 long listEnd
= m_previewCtrl
->GetInsertionPoint();
493 m_previewCtrl
->NumberList(wxRichTextRange(listStart
, listEnd
), listDef
);
494 m_previewCtrl
->EndStyle();
498 wxRichTextAttr cellParaAttr
;
499 cellParaAttr
.SetFont(font
);
500 cellParaAttr
.SetTextColour(*wxBLACK
);
502 wxRichTextBox
* textBox
= m_previewCtrl
->WriteTextBox(attr
);
503 m_previewCtrl
->SetFocusObject(textBox
);
504 m_previewCtrl
->BeginStyle(cellParaAttr
);
505 wxString
text(s_para2
);
506 text
.Replace(wxT("\n"), wxEmptyString
);
507 m_previewCtrl
->WriteText(text
);
508 m_previewCtrl
->EndStyle();
509 m_previewCtrl
->SetFocusObject(NULL
); // Set the focus back to the main buffer
510 m_previewCtrl
->SetInsertionPointEnd();
511 m_previewCtrl
->SetDefaultStyle(wxRichTextAttr());
515 m_previewCtrl
->BeginStyle(attr
);
516 m_previewCtrl
->WriteText(s_para2
);
517 m_previewCtrl
->EndStyle();
520 m_previewCtrl
->BeginStyle(normalParaAttr
);
521 m_previewCtrl
->WriteText(s_para3
);
522 m_previewCtrl
->EndStyle();
524 m_previewCtrl
->Thaw();
527 /// Clears the preview
528 void wxRichTextStyleOrganiserDialog::ClearPreview()
530 m_previewCtrl
->Clear();
531 wxStaticText
* labelCtrl
= (wxStaticText
*) FindWindow(ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE
);
533 labelCtrl
->SetLabel(wxEmptyString
);
536 bool wxRichTextStyleOrganiserDialog::ApplyStyle(wxRichTextCtrl
* ctrl
)
538 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
542 ctrl
= GetRichTextCtrl();
546 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
547 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(def
, wxRichTextListStyleDefinition
);
549 if (listDef
&& m_restartNumberingCtrl
->GetValue() && ctrl
->HasSelection())
551 wxRichTextRange range
= ctrl
->GetSelectionRange();
552 return ctrl
->SetListStyle(range
, listDef
, wxRICHTEXT_SETSTYLE_WITH_UNDO
|wxRICHTEXT_SETSTYLE_RENUMBER
);
556 return ctrl
->ApplyStyle(def
);
561 * Get bitmap resources
564 wxBitmap
wxRichTextStyleOrganiserDialog::GetBitmapResource( const wxString
& name
)
567 ////@begin wxRichTextStyleOrganiserDialog bitmap retrieval
570 ////@end wxRichTextStyleOrganiserDialog bitmap retrieval
577 wxIcon
wxRichTextStyleOrganiserDialog::GetIconResource( const wxString
& name
)
580 ////@begin wxRichTextStyleOrganiserDialog icon retrieval
583 ////@end wxRichTextStyleOrganiserDialog icon retrieval
587 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
590 void wxRichTextStyleOrganiserDialog::OnApplyClick( wxCommandEvent
& WXUNUSED(event
) )
596 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY
599 void wxRichTextStyleOrganiserDialog::OnApplyUpdate( wxUpdateUIEvent
& event
)
601 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_APPLY_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
606 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
609 void wxRichTextStyleOrganiserDialog::OnNewCharClick( wxCommandEvent
& WXUNUSED(event
) )
611 wxString styleName
= wxGetTextFromUser(_("Enter a character style name"), _("New Style"));
612 if (!styleName
.IsEmpty())
614 if (GetStyleSheet()->FindCharacterStyle(styleName
))
616 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
620 wxRichTextCharacterStyleDefinition
* style
= new wxRichTextCharacterStyleDefinition(styleName
);
622 int pages
= wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_STYLE_EDITOR
;
623 wxRichTextFormattingDialog formatDlg
;
624 formatDlg
.SetStyleDefinition(*style
, GetStyleSheet());
625 formatDlg
.Create(pages
, this);
627 if (formatDlg
.ShowModal() == wxID_OK
)
629 wxRichTextCharacterStyleDefinition
* charDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextCharacterStyleDefinition
);
631 (*((wxRichTextCharacterStyleDefinition
* ) style
)) = (*charDef
);
633 GetStyleSheet()->AddCharacterStyle(style
);
635 m_stylesListBox
->UpdateStyles();
644 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR
647 void wxRichTextStyleOrganiserDialog::OnNewCharUpdate( wxUpdateUIEvent
& event
)
649 event
.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES
) != 0);
654 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
657 void wxRichTextStyleOrganiserDialog::OnNewParaClick( wxCommandEvent
& WXUNUSED(event
) )
659 wxString styleName
= wxGetTextFromUser(_("Enter a paragraph style name"), _("New Style"));
660 if (!styleName
.IsEmpty())
662 if (GetStyleSheet()->FindParagraphStyle(styleName
))
664 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
668 wxRichTextParagraphStyleDefinition
* style
= new wxRichTextParagraphStyleDefinition(styleName
);
670 int pages
= wxRICHTEXT_FORMAT_STYLE_EDITOR
|wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_INDENTS_SPACING
|wxRICHTEXT_FORMAT_TABS
|wxRICHTEXT_FORMAT_BULLETS
;
671 wxRichTextFormattingDialog formatDlg
;
672 formatDlg
.SetStyleDefinition(*style
, GetStyleSheet());
673 formatDlg
.Create(pages
, this);
675 if (formatDlg
.ShowModal() == wxID_OK
)
677 wxRichTextParagraphStyleDefinition
* paraDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextParagraphStyleDefinition
);
679 (*((wxRichTextParagraphStyleDefinition
* ) style
)) = (*paraDef
);
681 GetStyleSheet()->AddParagraphStyle(style
);
683 m_stylesListBox
->UpdateStyles();
692 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA
695 void wxRichTextStyleOrganiserDialog::OnNewParaUpdate( wxUpdateUIEvent
& event
)
697 event
.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES
) != 0);
702 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
705 void wxRichTextStyleOrganiserDialog::OnEditClick( wxCommandEvent
& WXUNUSED(event
) )
707 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
708 if (sel
!= wxNOT_FOUND
)
710 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
712 int pages
= wxRICHTEXT_FORMAT_STYLE_EDITOR
;
714 if (def
->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition
)))
716 pages
|= wxRICHTEXT_FORMAT_FONT
;
718 else if (def
->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition
)))
720 pages
|= wxRICHTEXT_FORMAT_LIST_STYLE
|wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_INDENTS_SPACING
;
722 else if (def
->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition
)))
724 pages
|= wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_INDENTS_SPACING
|wxRICHTEXT_FORMAT_TABS
|wxRICHTEXT_FORMAT_BULLETS
;
726 else if (def
->IsKindOf(CLASSINFO(wxRichTextBoxStyleDefinition
)))
728 pages
|= wxRICHTEXT_FORMAT_MARGINS
|wxRICHTEXT_FORMAT_SIZE
|wxRICHTEXT_FORMAT_BORDERS
|wxRICHTEXT_FORMAT_BACKGROUND
;
731 wxRichTextFormattingDialog formatDlg
;
732 formatDlg
.SetStyleDefinition(*def
, GetStyleSheet());
733 formatDlg
.Create(pages
, this);
735 if (formatDlg
.ShowModal() == wxID_OK
)
737 wxRichTextParagraphStyleDefinition
* paraDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextParagraphStyleDefinition
);
738 wxRichTextCharacterStyleDefinition
* charDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextCharacterStyleDefinition
);
739 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextListStyleDefinition
);
740 wxRichTextBoxStyleDefinition
* boxDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextBoxStyleDefinition
);
744 (*((wxRichTextListStyleDefinition
* ) def
)) = (*listDef
);
748 (*((wxRichTextParagraphStyleDefinition
* ) def
)) = (*paraDef
);
752 (*((wxRichTextBoxStyleDefinition
* ) def
)) = (*boxDef
);
756 (*((wxRichTextCharacterStyleDefinition
* ) def
)) = (*charDef
);
759 m_stylesListBox
->UpdateStyles();
760 m_stylesListBox
->GetStyleListBox()->SetSelection(sel
);
767 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT
770 void wxRichTextStyleOrganiserDialog::OnEditUpdate( wxUpdateUIEvent
& event
)
772 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_EDIT_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
777 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
780 void wxRichTextStyleOrganiserDialog::OnDeleteClick( wxCommandEvent
& WXUNUSED(event
) )
782 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
783 if (sel
!= wxNOT_FOUND
)
785 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
786 wxString
name(def
->GetName());
787 if (wxYES
== wxMessageBox(wxString::Format(_("Delete style %s?"), name
), _("Delete Style"), wxYES_NO
|wxICON_QUESTION
, this))
789 m_stylesListBox
->GetStyleListBox()->SetItemCount(0);
791 if (def
->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition
)))
792 GetStyleSheet()->RemoveListStyle((wxRichTextListStyleDefinition
*) def
, true);
793 else if (def
->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition
)))
794 GetStyleSheet()->RemoveParagraphStyle((wxRichTextParagraphStyleDefinition
*) def
, true);
795 else if (def
->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition
)))
796 GetStyleSheet()->RemoveCharacterStyle((wxRichTextCharacterStyleDefinition
*) def
, true);
797 else if (def
->IsKindOf(CLASSINFO(wxRichTextBoxStyleDefinition
)))
798 GetStyleSheet()->RemoveBoxStyle((wxRichTextBoxStyleDefinition
*) def
, true);
800 m_stylesListBox
->UpdateStyles();
802 if (m_stylesListBox
->GetStyleListBox()->GetSelection() != -1)
811 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE
814 void wxRichTextStyleOrganiserDialog::OnDeleteUpdate( wxUpdateUIEvent
& event
)
816 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_DELETE_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
820 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
823 void wxRichTextStyleOrganiserDialog::OnNewListClick( wxCommandEvent
& WXUNUSED(event
) )
825 wxString styleName
= wxGetTextFromUser(_("Enter a list style name"), _("New Style"));
826 if (!styleName
.IsEmpty())
828 if (GetStyleSheet()->FindListStyle(styleName
))
830 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
834 wxRichTextListStyleDefinition
* style
= new wxRichTextListStyleDefinition(styleName
);
836 // Initialize the style to make it easier to edit
838 for (i
= 0; i
< 10; i
++)
840 wxString bulletSymbol
;
842 bulletSymbol
= wxT("*");
844 bulletSymbol
= wxT("-");
846 bulletSymbol
= wxT("*");
848 bulletSymbol
= wxT("-");
850 bulletSymbol
= wxT("*");
852 style
->SetAttributes(i
, (i
+1)*60, 60, wxTEXT_ATTR_BULLET_STYLE_SYMBOL
, bulletSymbol
);
855 int pages
= wxRICHTEXT_FORMAT_LIST_STYLE
|wxRICHTEXT_FORMAT_STYLE_EDITOR
|wxRICHTEXT_FORMAT_FONT
|wxRICHTEXT_FORMAT_INDENTS_SPACING
;
856 wxRichTextFormattingDialog formatDlg
;
857 formatDlg
.SetStyleDefinition(*style
, GetStyleSheet());
858 formatDlg
.Create(pages
, this);
860 if (formatDlg
.ShowModal() == wxID_OK
)
862 wxRichTextListStyleDefinition
* listDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextListStyleDefinition
);
864 (*((wxRichTextListStyleDefinition
* ) style
)) = (*listDef
);
866 GetStyleSheet()->AddListStyle(style
);
868 m_stylesListBox
->UpdateStyles();
877 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST
880 void wxRichTextStyleOrganiserDialog::OnNewListUpdate( wxUpdateUIEvent
& event
)
882 event
.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES
) != 0);
886 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
889 void wxRichTextStyleOrganiserDialog::OnRenameClick( wxCommandEvent
& WXUNUSED(event
) )
891 int sel
= m_stylesListBox
->GetStyleListBox()->GetSelection();
894 wxRichTextStyleDefinition
* def
= m_stylesListBox
->GetStyleListBox()->GetStyle(sel
);
898 wxString styleName
= wxGetTextFromUser(_("Enter a new style name"), _("New Style"), def
->GetName());
899 if (!styleName
.IsEmpty())
901 if (styleName
== def
->GetName())
904 if (GetStyleSheet()->FindParagraphStyle(styleName
) || GetStyleSheet()->FindCharacterStyle(styleName
) || GetStyleSheet()->FindListStyle(styleName
) || GetStyleSheet()->FindBoxStyle(styleName
))
906 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
910 def
->SetName(styleName
);
911 m_stylesListBox
->UpdateStyles();
916 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME
919 void wxRichTextStyleOrganiserDialog::OnRenameUpdate( wxUpdateUIEvent
& event
)
921 event
.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_RENAME_STYLES
) != 0) && m_stylesListBox
->GetStyleListBox()->GetSelection() != wxNOT_FOUND
);
925 void wxRichTextStyleOrganiserDialog::OnListSelection(wxCommandEvent
& event
)
927 if (event
.GetEventObject() == m_stylesListBox
->GetStyleListBox())
934 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX
937 void wxRichTextStyleOrganiserDialog::OnNewBoxClick( wxCommandEvent
& WXUNUSED(event
) )
939 wxString styleName
= wxGetTextFromUser(_("Enter a box style name"), _("New Style"));
940 if (!styleName
.IsEmpty())
942 if (GetStyleSheet()->FindBoxStyle(styleName
))
944 wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION
|wxOK
, this);
948 wxRichTextBoxStyleDefinition
* style
= new wxRichTextBoxStyleDefinition(styleName
);
950 int pages
= wxRICHTEXT_FORMAT_MARGINS
|wxRICHTEXT_FORMAT_SIZE
|wxRICHTEXT_FORMAT_BORDERS
|wxRICHTEXT_FORMAT_BACKGROUND
;
951 wxRichTextFormattingDialog formatDlg
;
952 formatDlg
.SetStyleDefinition(*style
, GetStyleSheet());
953 formatDlg
.Create(pages
, this);
955 if (formatDlg
.ShowModal() == wxID_OK
)
957 wxRichTextBoxStyleDefinition
* boxDef
= wxDynamicCast(formatDlg
.GetStyleDefinition(), wxRichTextBoxStyleDefinition
);
959 (*((wxRichTextBoxStyleDefinition
* ) style
)) = (*boxDef
);
961 GetStyleSheet()->AddBoxStyle(style
);
963 m_stylesListBox
->UpdateStyles();
972 * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX
975 void wxRichTextStyleOrganiserDialog::OnNewBoxUpdate( wxUpdateUIEvent
& event
)
977 event
.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES
) != 0);