///////////////////////////////////////////////////////////////////////////// // Name: src/richtext/richtextstyledlg.cpp // Purpose: // Author: Julian Smart // Modified by: // Created: 10/5/2006 12:05:31 PM // RCS-ID: $Id: richtextstyledlg.cpp 61185 2009-06-24 10:35:46Z JS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #if wxUSE_RICHTEXT #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "wx/richtext/richtextstyledlg.h" #include "wx/richtext/richtextformatdlg.h" /*! * wxRichTextStyleOrganiserDialog type definition */ bool wxRichTextStyleOrganiserDialog::sm_showToolTips = false; IMPLEMENT_DYNAMIC_CLASS( wxRichTextStyleOrganiserDialog, wxDialog ) /*! * wxRichTextStyleOrganiserDialog event table definition */ BEGIN_EVENT_TABLE( wxRichTextStyleOrganiserDialog, wxDialog ) EVT_LISTBOX(wxID_ANY, wxRichTextStyleOrganiserDialog::OnListSelection) ////@begin wxRichTextStyleOrganiserDialog event table entries EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR, wxRichTextStyleOrganiserDialog::OnNewCharClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR, wxRichTextStyleOrganiserDialog::OnNewCharUpdate ) EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA, wxRichTextStyleOrganiserDialog::OnNewParaClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA, wxRichTextStyleOrganiserDialog::OnNewParaUpdate ) EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, wxRichTextStyleOrganiserDialog::OnNewListClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, wxRichTextStyleOrganiserDialog::OnNewListUpdate ) EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, wxRichTextStyleOrganiserDialog::OnApplyClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, wxRichTextStyleOrganiserDialog::OnApplyUpdate ) EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME, wxRichTextStyleOrganiserDialog::OnRenameClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME, wxRichTextStyleOrganiserDialog::OnRenameUpdate ) EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT, wxRichTextStyleOrganiserDialog::OnEditClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT, wxRichTextStyleOrganiserDialog::OnEditUpdate ) EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE, wxRichTextStyleOrganiserDialog::OnDeleteClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE, wxRichTextStyleOrganiserDialog::OnDeleteUpdate ) ////@end wxRichTextStyleOrganiserDialog event table entries END_EVENT_TABLE() /*! * wxRichTextStyleOrganiserDialog constructors */ wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( ) { Init(); } wxRichTextStyleOrganiserDialog::wxRichTextStyleOrganiserDialog( int flags, wxRichTextStyleSheet* sheet, wxRichTextCtrl* ctrl, wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { Init(); Create(flags, sheet, ctrl, parent, id, caption, pos, size, style); } /*! * Member initialisation for wxSymbolPickerDialog */ void wxRichTextStyleOrganiserDialog::Init() { m_richTextStyleSheet = NULL; m_richTextCtrl = NULL; m_dontUpdate = false; m_flags = 0; m_restartNumbering = true; ////@begin wxRichTextStyleOrganiserDialog member initialisation m_innerSizer = NULL; m_buttonSizerParent = NULL; m_stylesListBox = NULL; m_previewCtrl = NULL; m_buttonSizer = NULL; m_newCharacter = NULL; m_newParagraph = NULL; m_newList = NULL; m_applyStyle = NULL; m_renameStyle = NULL; m_editStyle = NULL; m_deleteStyle = NULL; m_closeButton = NULL; m_bottomButtonSizer = NULL; m_restartNumberingCtrl = NULL; m_okButton = NULL; m_cancelButton = NULL; ////@end wxRichTextStyleOrganiserDialog member initialisation } /*! * wxRichTextStyleOrganiserDialog creator */ bool wxRichTextStyleOrganiserDialog::Create( int flags, wxRichTextStyleSheet* sheet, wxRichTextCtrl* ctrl, wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) { m_richTextStyleSheet = sheet; m_richTextCtrl = ctrl; m_flags = flags; ////@begin wxRichTextStyleOrganiserDialog creation SetExtraStyle(wxWS_EX_BLOCK_EVENTS|wxDIALOG_EX_CONTEXTHELP); wxDialog::Create( parent, id, caption, pos, size, style ); CreateControls(); if (GetSizer()) { GetSizer()->SetSizeHints(this); } Centre(); ////@end wxRichTextStyleOrganiserDialog creation return true; } /*! * Control creation for wxRichTextStyleOrganiserDialog */ void wxRichTextStyleOrganiserDialog::CreateControls() { #ifdef __WXMAC__ SetWindowVariant(wxWINDOW_VARIANT_SMALL); #endif bool hideTypeSelector = false; wxRichTextStyleListBox::wxRichTextStyleType typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL; if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_CHARACTER) != 0) { typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_CHARACTER; hideTypeSelector = true; } else if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH) != 0) { typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH; hideTypeSelector = true; } else if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_LIST) != 0) { typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST; hideTypeSelector = true; } else { // wxRICHTEXT_ORGANISER_SHOW_ALL is implied if the other styles aren't included } long listCtrlStyle = 0; if (hideTypeSelector) listCtrlStyle = wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR; ////@begin wxRichTextStyleOrganiserDialog content construction wxRichTextStyleOrganiserDialog* itemDialog1 = this; wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); itemDialog1->SetSizer(itemBoxSizer2); m_innerSizer = new wxBoxSizer(wxVERTICAL); itemBoxSizer2->Add(m_innerSizer, 1, wxGROW|wxALL, 5); m_buttonSizerParent = new wxBoxSizer(wxHORIZONTAL); m_innerSizer->Add(m_buttonSizerParent, 1, wxGROW, 5); wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL); m_buttonSizerParent->Add(itemBoxSizer5, 1, wxGROW, 5); wxStaticText* itemStaticText6 = new wxStaticText( itemDialog1, wxID_STATIC, _("&Styles:"), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_stylesListBox = new wxRichTextStyleListCtrl( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_STYLES, wxDefaultPosition, wxSize(280, 260), listCtrlStyle ); m_stylesListBox->SetHelpText(_("The available styles.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_stylesListBox->SetToolTip(_("The available styles.")); itemBoxSizer5->Add(m_stylesListBox, 1, wxGROW|wxALL, 5); wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxVERTICAL); m_buttonSizerParent->Add(itemBoxSizer8, 0, wxGROW, 5); wxStaticText* itemStaticText9 = new wxStaticText( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE, _(" "), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer8->Add(itemStaticText9, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_previewCtrl = new wxRichTextCtrl( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_PREVIEW, wxEmptyString, wxDefaultPosition, wxSize(250, 200), wxVSCROLL|wxTE_READONLY ); m_previewCtrl->SetHelpText(_("The style preview.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_previewCtrl->SetToolTip(_("The style preview.")); itemBoxSizer8->Add(m_previewCtrl, 1, wxGROW|wxALL, 5); m_buttonSizer = new wxBoxSizer(wxVERTICAL); m_buttonSizerParent->Add(m_buttonSizer, 0, wxGROW, 5); wxStaticText* itemStaticText12 = new wxStaticText( itemDialog1, wxID_STATIC, _(" "), wxDefaultPosition, wxDefaultSize, 0 ); m_buttonSizer->Add(itemStaticText12, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); m_newCharacter = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR, _("New &Character Style..."), wxDefaultPosition, wxDefaultSize, 0 ); m_newCharacter->SetHelpText(_("Click to create a new character style.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_newCharacter->SetToolTip(_("Click to create a new character style.")); m_buttonSizer->Add(m_newCharacter, 0, wxGROW|wxALL, 5); m_newParagraph = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA, _("New &Paragraph Style..."), wxDefaultPosition, wxDefaultSize, 0 ); m_newParagraph->SetHelpText(_("Click to create a new paragraph style.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_newParagraph->SetToolTip(_("Click to create a new paragraph style.")); m_buttonSizer->Add(m_newParagraph, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_newList = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, _("New &List Style..."), wxDefaultPosition, wxDefaultSize, 0 ); m_newList->SetHelpText(_("Click to create a new list style.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_newList->SetToolTip(_("Click to create a new list style.")); m_buttonSizer->Add(m_newList, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_buttonSizer->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); m_applyStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, _("&Apply Style"), wxDefaultPosition, wxDefaultSize, 0 ); m_applyStyle->SetHelpText(_("Click to apply the selected style.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_applyStyle->SetToolTip(_("Click to apply the selected style.")); m_buttonSizer->Add(m_applyStyle, 0, wxGROW|wxALL, 5); m_renameStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME, _("&Rename Style..."), wxDefaultPosition, wxDefaultSize, 0 ); m_renameStyle->SetHelpText(_("Click to rename the selected style.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_renameStyle->SetToolTip(_("Click to rename the selected style.")); m_buttonSizer->Add(m_renameStyle, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_editStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT, _("&Edit Style..."), wxDefaultPosition, wxDefaultSize, 0 ); m_editStyle->SetHelpText(_("Click to edit the selected style.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_editStyle->SetToolTip(_("Click to edit the selected style.")); m_buttonSizer->Add(m_editStyle, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_deleteStyle = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE, _("&Delete Style..."), wxDefaultPosition, wxDefaultSize, 0 ); m_deleteStyle->SetHelpText(_("Click to delete the selected style.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_deleteStyle->SetToolTip(_("Click to delete the selected style.")); m_buttonSizer->Add(m_deleteStyle, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); m_buttonSizer->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); m_closeButton = new wxButton( itemDialog1, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 ); m_closeButton->SetDefault(); m_closeButton->SetHelpText(_("Click to close this window.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_closeButton->SetToolTip(_("Click to close this window.")); m_buttonSizer->Add(m_closeButton, 0, wxGROW|wxALL, 5); m_bottomButtonSizer = new wxBoxSizer(wxHORIZONTAL); m_innerSizer->Add(m_bottomButtonSizer, 0, wxGROW, 5); m_restartNumberingCtrl = new wxCheckBox( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_RESTART_NUMBERING, _("&Restart numbering"), wxDefaultPosition, wxDefaultSize, 0 ); m_restartNumberingCtrl->SetValue(false); m_restartNumberingCtrl->SetHelpText(_("Check to restart numbering.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_restartNumberingCtrl->SetToolTip(_("Check to restart numbering.")); m_bottomButtonSizer->Add(m_restartNumberingCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); m_bottomButtonSizer->Add(5, 5, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5); m_okButton = new wxButton( itemDialog1, wxID_OK, _("OK"), wxDefaultPosition, wxDefaultSize, 0 ); m_okButton->SetDefault(); m_okButton->SetHelpText(_("Click to confirm your selection.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_okButton->SetToolTip(_("Click to confirm your selection.")); m_bottomButtonSizer->Add(m_okButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); m_cancelButton = new wxButton( itemDialog1, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); m_cancelButton->SetHelpText(_("Click to cancel this window.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_cancelButton->SetToolTip(_("Click to cancel this window.")); m_bottomButtonSizer->Add(m_cancelButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); ////@end wxRichTextStyleOrganiserDialog content construction if ((m_flags & wxRICHTEXT_ORGANISER_CREATE_STYLES) == 0) { m_buttonSizer->Show(m_newCharacter, false); m_buttonSizer->Show(m_newParagraph, false); m_buttonSizer->Show(m_newList, false); } if ((m_flags & wxRICHTEXT_ORGANISER_DELETE_STYLES) == 0) { m_buttonSizer->Show(m_deleteStyle, false); } if ((m_flags & wxRICHTEXT_ORGANISER_APPLY_STYLES) == 0) { m_buttonSizer->Show(m_applyStyle, false); } if ((m_flags & wxRICHTEXT_ORGANISER_EDIT_STYLES) == 0) { m_buttonSizer->Show(m_editStyle, false); } if ((m_flags & wxRICHTEXT_ORGANISER_RENAME_STYLES) == 0) { m_buttonSizer->Show(m_renameStyle, false); } if ((m_flags & wxRICHTEXT_ORGANISER_RENUMBER) == 0) { m_bottomButtonSizer->Show(m_restartNumberingCtrl, false); } if ((m_flags & wxRICHTEXT_ORGANISER_OK_CANCEL) == 0) { m_bottomButtonSizer->Show(m_okButton, false); m_bottomButtonSizer->Show(m_cancelButton, false); } else { m_buttonSizer->Show(m_closeButton, false); } // No buttons in the vertical group are shown, so hide the whole sizer if ((m_flags & wxRICHTEXT_ORGANISER_ORGANISE) == 0) { m_buttonSizerParent->Show(m_buttonSizer, false); } // No buttons in the horizontal group are shown, so hide the whole sizer if ((m_flags & (wxRICHTEXT_ORGANISER_OK_CANCEL|wxRICHTEXT_ORGANISER_RENUMBER)) == 0) { m_innerSizer->Show(m_bottomButtonSizer, false); } if (hideTypeSelector) { m_stylesListBox->GetStyleListBox()->SetStyleType(typesToShow); } m_stylesListBox->SetStyleSheet(m_richTextStyleSheet); m_stylesListBox->SetRichTextCtrl(m_richTextCtrl); m_stylesListBox->UpdateStyles(); m_stylesListBox->GetStyleListBox()->SetAutoSetSelection(false); // stop idle-time auto selection if (m_stylesListBox->GetStyleListBox()->GetItemCount() > 0) { m_stylesListBox->GetStyleListBox()->SetSelection(0); ShowPreview(); } } /*! * Should we show tooltips? */ /// Get selected style name or definition wxString wxRichTextStyleOrganiserDialog::GetSelectedStyle() const { wxRichTextStyleDefinition* def = GetSelectedStyleDefinition(); if (def) return def->GetName(); else return wxEmptyString; } wxRichTextStyleDefinition* wxRichTextStyleOrganiserDialog::GetSelectedStyleDefinition() const { int sel = m_stylesListBox->GetStyleListBox()->GetSelection(); return m_stylesListBox->GetStyleListBox()->GetStyle(sel); } /// Transfer data from/to window bool wxRichTextStyleOrganiserDialog::TransferDataFromWindow() { if (!wxDialog::TransferDataFromWindow()) return false; m_restartNumbering = m_restartNumberingCtrl->GetValue(); return true; } bool wxRichTextStyleOrganiserDialog::TransferDataToWindow() { if (!wxDialog::TransferDataToWindow()) return false; m_restartNumberingCtrl->SetValue(m_restartNumbering); return true; } /// Show preview for given or selected preview void wxRichTextStyleOrganiserDialog::ShowPreview(int sel) { static const wxChar* s_para1 = wxT("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. \ Nullam ante sapien, vestibulum nonummy, pulvinar sed, luctus ut, lacus.\n"); static const wxChar* s_para2List = wxT("Duis pharetra consequat dui. Nullam vitae justo id mauris lobortis interdum.\n"); static const wxChar* s_para2 = wxT("Duis pharetra consequat dui. Cum sociis natoque penatibus \ et magnis dis parturient montes, nascetur ridiculus mus. Nullam vitae justo id mauris lobortis interdum.\n"); static const wxChar* s_para3 = wxT("Integer convallis dolor at augue \ iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n"); if (sel == -1) { sel = m_stylesListBox->GetStyleListBox()->GetSelection(); if (sel == -1) return; } wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel); wxRichTextListStyleDefinition* listDef = wxDynamicCast(def, wxRichTextListStyleDefinition); wxStaticText* labelCtrl = (wxStaticText*) FindWindow(ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE); if (labelCtrl) labelCtrl->SetLabel(def->GetName() + wxT(":")); wxTextAttrEx attr(def->GetStyleMergedWithBase(GetStyleSheet())); wxFont font(m_previewCtrl->GetFont()); font.SetPointSize(9); m_previewCtrl->SetFont(font); wxTextAttrEx normalParaAttr; normalParaAttr.SetFont(font); normalParaAttr.SetTextColour(wxColour(wxT("LIGHT GREY"))); m_previewCtrl->Freeze(); m_previewCtrl->Clear(); m_previewCtrl->BeginStyle(normalParaAttr); m_previewCtrl->WriteText(s_para1); m_previewCtrl->EndStyle(); m_previewCtrl->BeginStyle(attr); if (listDef) { long listStart = m_previewCtrl->GetInsertionPoint() + 1; int i; for (i = 0; i < 10; i++) { wxTextAttrEx levelAttr = * listDef->GetLevelAttributes(i); levelAttr.SetBulletNumber(1); m_previewCtrl->BeginStyle(levelAttr); m_previewCtrl->WriteText(wxString::Format(wxT("List level %d. "), i+1) + s_para2List); m_previewCtrl->EndStyle(); } long listEnd = m_previewCtrl->GetInsertionPoint(); m_previewCtrl->NumberList(wxRichTextRange(listStart, listEnd), listDef); } else { m_previewCtrl->WriteText(s_para2); } m_previewCtrl->EndStyle(); m_previewCtrl->BeginStyle(normalParaAttr); m_previewCtrl->WriteText(s_para3); m_previewCtrl->EndStyle(); m_previewCtrl->Thaw(); } /// Clears the preview void wxRichTextStyleOrganiserDialog::ClearPreview() { m_previewCtrl->Clear(); wxStaticText* labelCtrl = (wxStaticText*) FindWindow(ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE); if (labelCtrl) labelCtrl->SetLabel(wxEmptyString); } bool wxRichTextStyleOrganiserDialog::ApplyStyle(wxRichTextCtrl* ctrl) { int sel = m_stylesListBox->GetStyleListBox()->GetSelection(); if (sel == -1) return false; if (!ctrl) ctrl = GetRichTextCtrl(); if (!ctrl) return false; if (!ctrl->HasSelection()) return false; wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel); wxRichTextListStyleDefinition* listDef = wxDynamicCast(def, wxRichTextListStyleDefinition); if (listDef && m_restartNumberingCtrl->GetValue()) { wxRichTextRange range = ctrl->GetSelectionRange(); return ctrl->SetListStyle(range, listDef, wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_RENUMBER); } else { return ctrl->ApplyStyle(def); } } /*! * Get bitmap resources */ wxBitmap wxRichTextStyleOrganiserDialog::GetBitmapResource( const wxString& name ) { // Bitmap retrieval ////@begin wxRichTextStyleOrganiserDialog bitmap retrieval wxUnusedVar(name); return wxNullBitmap; ////@end wxRichTextStyleOrganiserDialog bitmap retrieval } /*! * Get icon resources */ wxIcon wxRichTextStyleOrganiserDialog::GetIconResource( const wxString& name ) { // Icon retrieval ////@begin wxRichTextStyleOrganiserDialog icon retrieval wxUnusedVar(name); return wxNullIcon; ////@end wxRichTextStyleOrganiserDialog icon retrieval } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY */ void wxRichTextStyleOrganiserDialog::OnApplyClick( wxCommandEvent& WXUNUSED(event) ) { ApplyStyle(); } /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY */ void wxRichTextStyleOrganiserDialog::OnApplyUpdate( wxUpdateUIEvent& event ) { event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_APPLY_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR */ void wxRichTextStyleOrganiserDialog::OnNewCharClick( wxCommandEvent& WXUNUSED(event) ) { wxString styleName = wxGetTextFromUser(_("Enter a character style name"), _("New Style")); if (!styleName.IsEmpty()) { if (GetStyleSheet()->FindCharacterStyle(styleName)) { wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this); return; } wxRichTextCharacterStyleDefinition* style = new wxRichTextCharacterStyleDefinition(styleName); int pages = wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_STYLE_EDITOR; wxRichTextFormattingDialog formatDlg; formatDlg.SetStyleDefinition(*style, GetStyleSheet()); formatDlg.Create(pages, this); if (formatDlg.ShowModal() == wxID_OK) { wxRichTextCharacterStyleDefinition* charDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextCharacterStyleDefinition); (*((wxRichTextCharacterStyleDefinition* ) style)) = (*charDef); GetStyleSheet()->AddCharacterStyle(style); m_stylesListBox->UpdateStyles(); ShowPreview(); } else delete style; } } /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR */ void wxRichTextStyleOrganiserDialog::OnNewCharUpdate( wxUpdateUIEvent& event ) { event.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES) != 0); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA */ void wxRichTextStyleOrganiserDialog::OnNewParaClick( wxCommandEvent& WXUNUSED(event) ) { wxString styleName = wxGetTextFromUser(_("Enter a paragraph style name"), _("New Style")); if (!styleName.IsEmpty()) { if (GetStyleSheet()->FindParagraphStyle(styleName)) { wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this); return; } wxRichTextParagraphStyleDefinition* style = new wxRichTextParagraphStyleDefinition(styleName); int pages = wxRICHTEXT_FORMAT_STYLE_EDITOR|wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING|wxRICHTEXT_FORMAT_TABS|wxRICHTEXT_FORMAT_BULLETS; wxRichTextFormattingDialog formatDlg; formatDlg.SetStyleDefinition(*style, GetStyleSheet()); formatDlg.Create(pages, this); if (formatDlg.ShowModal() == wxID_OK) { wxRichTextParagraphStyleDefinition* paraDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextParagraphStyleDefinition); (*((wxRichTextParagraphStyleDefinition* ) style)) = (*paraDef); GetStyleSheet()->AddParagraphStyle(style); m_stylesListBox->UpdateStyles(); ShowPreview(); } else delete style; } } /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA */ void wxRichTextStyleOrganiserDialog::OnNewParaUpdate( wxUpdateUIEvent& event ) { event.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES) != 0); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT */ void wxRichTextStyleOrganiserDialog::OnEditClick( wxCommandEvent& WXUNUSED(event) ) { int sel = m_stylesListBox->GetStyleListBox()->GetSelection(); if (sel != wxNOT_FOUND) { wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel); int pages = wxRICHTEXT_FORMAT_STYLE_EDITOR; if (def->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition))) { pages |= wxRICHTEXT_FORMAT_FONT; } else if (def->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition))) { pages |= wxRICHTEXT_FORMAT_LIST_STYLE|wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING; } else if (def->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition))) { pages |= wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING|wxRICHTEXT_FORMAT_TABS|wxRICHTEXT_FORMAT_BULLETS; } wxRichTextFormattingDialog formatDlg; formatDlg.SetStyleDefinition(*def, GetStyleSheet()); formatDlg.Create(pages, this); if (formatDlg.ShowModal() == wxID_OK) { wxRichTextParagraphStyleDefinition* paraDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextParagraphStyleDefinition); wxRichTextCharacterStyleDefinition* charDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextCharacterStyleDefinition); wxRichTextListStyleDefinition* listDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextListStyleDefinition); if (listDef) { (*((wxRichTextListStyleDefinition* ) def)) = (*listDef); } else if (paraDef) { (*((wxRichTextParagraphStyleDefinition* ) def)) = (*paraDef); } else { (*((wxRichTextCharacterStyleDefinition* ) def)) = (*charDef); } m_stylesListBox->UpdateStyles(); m_stylesListBox->GetStyleListBox()->SetSelection(sel); ShowPreview(); } } } /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT */ void wxRichTextStyleOrganiserDialog::OnEditUpdate( wxUpdateUIEvent& event ) { event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_EDIT_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE */ void wxRichTextStyleOrganiserDialog::OnDeleteClick( wxCommandEvent& WXUNUSED(event) ) { int sel = m_stylesListBox->GetStyleListBox()->GetSelection(); if (sel != wxNOT_FOUND) { wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel); wxString name(def->GetName()); if (wxYES == wxMessageBox(wxString::Format(_("Delete style %s?"), (const wxChar*) name), _("Delete Style"), wxYES_NO|wxICON_QUESTION, this)) { m_stylesListBox->GetStyleListBox()->SetItemCount(0); if (def->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition))) GetStyleSheet()->RemoveListStyle((wxRichTextListStyleDefinition*) def, true); else if (def->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition))) GetStyleSheet()->RemoveParagraphStyle((wxRichTextParagraphStyleDefinition*) def, true); else if (def->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition))) GetStyleSheet()->RemoveCharacterStyle((wxRichTextCharacterStyleDefinition*) def, true); m_stylesListBox->UpdateStyles(); if (m_stylesListBox->GetStyleListBox()->GetSelection() != -1) ShowPreview(); else ClearPreview(); } } } /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE */ void wxRichTextStyleOrganiserDialog::OnDeleteUpdate( wxUpdateUIEvent& event ) { event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_DELETE_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST */ void wxRichTextStyleOrganiserDialog::OnNewListClick( wxCommandEvent& WXUNUSED(event) ) { wxString styleName = wxGetTextFromUser(_("Enter a list style name"), _("New Style")); if (!styleName.IsEmpty()) { if (GetStyleSheet()->FindListStyle(styleName)) { wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this); return; } wxRichTextListStyleDefinition* style = new wxRichTextListStyleDefinition(styleName); // Initialize the style to make it easier to edit int i; for (i = 0; i < 10; i++) { wxString bulletSymbol; if (i == 0) bulletSymbol = wxT("*"); else if (i == 1) bulletSymbol = wxT("-"); else if (i == 2) bulletSymbol = wxT("*"); else if (i == 3) bulletSymbol = wxT("-"); else bulletSymbol = wxT("*"); style->SetAttributes(i, (i+1)*60, 60, wxTEXT_ATTR_BULLET_STYLE_SYMBOL, bulletSymbol); } int pages = wxRICHTEXT_FORMAT_LIST_STYLE|wxRICHTEXT_FORMAT_STYLE_EDITOR|wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING; wxRichTextFormattingDialog formatDlg; formatDlg.SetStyleDefinition(*style, GetStyleSheet()); formatDlg.Create(pages, this); if (formatDlg.ShowModal() == wxID_OK) { wxRichTextListStyleDefinition* listDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextListStyleDefinition); (*((wxRichTextListStyleDefinition* ) style)) = (*listDef); GetStyleSheet()->AddListStyle(style); m_stylesListBox->UpdateStyles(); ShowPreview(); } else delete style; } } /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST */ void wxRichTextStyleOrganiserDialog::OnNewListUpdate( wxUpdateUIEvent& event ) { event.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES) != 0); } /*! * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME */ void wxRichTextStyleOrganiserDialog::OnRenameClick( wxCommandEvent& WXUNUSED(event) ) { int sel = m_stylesListBox->GetStyleListBox()->GetSelection(); if (sel == -1) return; wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel); if (!def) return; wxString styleName = wxGetTextFromUser(_("Enter a new style name"), _("New Style"), def->GetName()); if (!styleName.IsEmpty()) { if (styleName == def->GetName()) return; if (GetStyleSheet()->FindParagraphStyle(styleName) || GetStyleSheet()->FindCharacterStyle(styleName) || GetStyleSheet()->FindListStyle(styleName)) { wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this); return; } def->SetName(styleName); m_stylesListBox->UpdateStyles(); } } /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME */ void wxRichTextStyleOrganiserDialog::OnRenameUpdate( wxUpdateUIEvent& event ) { event.Enable(((GetFlags() & wxRICHTEXT_ORGANISER_RENAME_STYLES) != 0) && m_stylesListBox->GetStyleListBox()->GetSelection() != wxNOT_FOUND); } /// List selection void wxRichTextStyleOrganiserDialog::OnListSelection(wxCommandEvent& event) { if (event.GetEventObject() == m_stylesListBox->GetStyleListBox()) ShowPreview(); else event.Skip(); } #endif // wxUSE_RICHTEXT