X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/603f702b4a0e19ffa27cffc52872efaac1aa8c54..3cca1b3d8b187098cb67460fb2fc8115963fd2b9:/src/richtext/richtextstyledlg.cpp diff --git a/src/richtext/richtextstyledlg.cpp b/src/richtext/richtextstyledlg.cpp index 6979d66f9e..40705cff21 100644 --- a/src/richtext/richtextstyledlg.cpp +++ b/src/richtext/richtextstyledlg.cpp @@ -51,6 +51,9 @@ BEGIN_EVENT_TABLE( wxRichTextStyleOrganiserDialog, wxDialog ) EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, wxRichTextStyleOrganiserDialog::OnNewListClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST, wxRichTextStyleOrganiserDialog::OnNewListUpdate ) + EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX, wxRichTextStyleOrganiserDialog::OnNewBoxClick ) + EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX, wxRichTextStyleOrganiserDialog::OnNewBoxUpdate ) + EVT_BUTTON( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, wxRichTextStyleOrganiserDialog::OnApplyClick ) EVT_UPDATE_UI( ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY, wxRichTextStyleOrganiserDialog::OnApplyUpdate ) @@ -105,6 +108,7 @@ void wxRichTextStyleOrganiserDialog::Init() m_newCharacter = NULL; m_newParagraph = NULL; m_newList = NULL; + m_newBox = NULL; m_applyStyle = NULL; m_renameStyle = NULL; m_editStyle = NULL; @@ -148,6 +152,10 @@ bool wxRichTextStyleOrganiserDialog::Create( int flags, wxRichTextStyleSheet* sh void wxRichTextStyleOrganiserDialog::CreateControls() { +#ifdef __WXMAC__ + SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif + bool hideTypeSelector = false; wxRichTextStyleListBox::wxRichTextStyleType typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_ALL; @@ -161,6 +169,11 @@ void wxRichTextStyleOrganiserDialog::CreateControls() typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_PARAGRAPH; hideTypeSelector = true; } + else if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_BOX) != 0) + { + typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_BOX; + hideTypeSelector = true; + } else if ((m_flags & wxRICHTEXT_ORGANISER_SHOW_LIST) != 0) { typesToShow = wxRichTextStyleListBox::wxRICHTEXT_STYLE_LIST; @@ -205,7 +218,7 @@ void wxRichTextStyleOrganiserDialog::CreateControls() wxStaticText* itemStaticText9 = new wxStaticText( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE, _(" "), wxDefaultPosition, wxDefaultSize, 0 ); itemBoxSizer8->Add(itemStaticText9, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP, 5); - m_previewCtrl = new wxRichTextCtrl( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_PREVIEW, wxEmptyString, wxDefaultPosition, wxSize(250, 200), wxVSCROLL|wxTE_READONLY ); + m_previewCtrl = new wxRichTextCtrl( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_PREVIEW, wxEmptyString, wxDefaultPosition, wxSize(250, 200), wxBORDER_THEME|wxVSCROLL|wxTE_READONLY ); m_previewCtrl->SetHelpText(_("The style preview.")); if (wxRichTextStyleOrganiserDialog::ShowToolTips()) m_previewCtrl->SetToolTip(_("The style preview.")); @@ -235,6 +248,12 @@ void wxRichTextStyleOrganiserDialog::CreateControls() m_newList->SetToolTip(_("Click to create a new list style.")); m_buttonSizer->Add(m_newList, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); + m_newBox = new wxButton( itemDialog1, ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX, _("New &Box Style..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_newBox->SetHelpText(_("Click to create a new box style.")); + if (wxRichTextStyleOrganiserDialog::ShowToolTips()) + m_newBox->SetToolTip(_("Click to create a new box style.")); + m_buttonSizer->Add(m_newBox, 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 ); @@ -289,8 +308,8 @@ void wxRichTextStyleOrganiserDialog::CreateControls() m_cancelButton = new wxButton( itemDialog1, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); m_stdButtonSizer->AddButton(m_cancelButton); - wxButton* itemButton28 = new wxButton( itemDialog1, wxID_HELP, _("&Help"), wxDefaultPosition, wxDefaultSize, 0 ); - m_stdButtonSizer->AddButton(itemButton28); + wxButton* itemButton29 = new wxButton( itemDialog1, wxID_HELP, _("&Help"), wxDefaultPosition, wxDefaultSize, 0 ); + m_stdButtonSizer->AddButton(itemButton29); m_stdButtonSizer->Realize(); @@ -308,6 +327,7 @@ void wxRichTextStyleOrganiserDialog::CreateControls() m_buttonSizer->Show(m_newCharacter, false); m_buttonSizer->Show(m_newParagraph, false); m_buttonSizer->Show(m_newList, false); + m_buttonSizer->Show(m_newBox, false); } if ((m_flags & wxRICHTEXT_ORGANISER_DELETE_STYLES) == 0) { @@ -432,8 +452,8 @@ iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n"); } wxRichTextStyleDefinition* def = m_stylesListBox->GetStyleListBox()->GetStyle(sel); - wxRichTextListStyleDefinition* listDef = wxDynamicCast(def, wxRichTextListStyleDefinition); + wxRichTextBoxStyleDefinition* boxDef = wxDynamicCast(def, wxRichTextBoxStyleDefinition); wxStaticText* labelCtrl = (wxStaticText*) FindWindow(ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE); if (labelCtrl) @@ -456,10 +476,9 @@ iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n"); m_previewCtrl->WriteText(s_para1); m_previewCtrl->EndStyle(); - m_previewCtrl->BeginStyle(attr); - if (listDef) { + m_previewCtrl->BeginStyle(attr); long listStart = m_previewCtrl->GetInsertionPoint() + 1; int i; for (i = 0; i < 10; i++) @@ -472,14 +491,32 @@ iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n"); } long listEnd = m_previewCtrl->GetInsertionPoint(); m_previewCtrl->NumberList(wxRichTextRange(listStart, listEnd), listDef); + m_previewCtrl->EndStyle(); + } + else if (boxDef) + { + wxRichTextAttr cellParaAttr; + cellParaAttr.SetFont(font); + cellParaAttr.SetTextColour(*wxBLACK); + + wxRichTextBox* textBox = m_previewCtrl->WriteTextBox(attr); + m_previewCtrl->SetFocusObject(textBox); + m_previewCtrl->BeginStyle(cellParaAttr); + wxString text(s_para2); + text.Replace(wxT("\n"), wxEmptyString); + m_previewCtrl->WriteText(text); + m_previewCtrl->EndStyle(); + m_previewCtrl->SetFocusObject(NULL); // Set the focus back to the main buffer + m_previewCtrl->SetInsertionPointEnd(); + m_previewCtrl->SetDefaultStyle(wxRichTextAttr()); } else { + m_previewCtrl->BeginStyle(attr); m_previewCtrl->WriteText(s_para2); + m_previewCtrl->EndStyle(); } - m_previewCtrl->EndStyle(); - m_previewCtrl->BeginStyle(normalParaAttr); m_previewCtrl->WriteText(s_para3); m_previewCtrl->EndStyle(); @@ -505,14 +542,11 @@ bool wxRichTextStyleOrganiserDialog::ApplyStyle(wxRichTextCtrl* 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()) + if (listDef && m_restartNumberingCtrl->GetValue() && ctrl->HasSelection()) { wxRichTextRange range = ctrl->GetSelectionRange(); return ctrl->SetListStyle(range, listDef, wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_RENUMBER); @@ -677,18 +711,22 @@ void wxRichTextStyleOrganiserDialog::OnEditClick( wxCommandEvent& WXUNUSED(event int pages = wxRICHTEXT_FORMAT_STYLE_EDITOR; - if (def->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition))) + if (wxDynamicCast(def, wxRichTextCharacterStyleDefinition)) { pages |= wxRICHTEXT_FORMAT_FONT; } - else if (def->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition))) + else if (wxDynamicCast(def, wxRichTextListStyleDefinition)) { pages |= wxRICHTEXT_FORMAT_LIST_STYLE|wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING; } - else if (def->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition))) + else if (wxDynamicCast(def, wxRichTextParagraphStyleDefinition)) { pages |= wxRICHTEXT_FORMAT_FONT|wxRICHTEXT_FORMAT_INDENTS_SPACING|wxRICHTEXT_FORMAT_TABS|wxRICHTEXT_FORMAT_BULLETS; } + else if (wxDynamicCast(def, wxRichTextBoxStyleDefinition)) + { + pages |= wxRICHTEXT_FORMAT_MARGINS|wxRICHTEXT_FORMAT_SIZE|wxRICHTEXT_FORMAT_BORDERS|wxRICHTEXT_FORMAT_BACKGROUND; + } wxRichTextFormattingDialog formatDlg; formatDlg.SetStyleDefinition(*def, GetStyleSheet()); @@ -699,6 +737,7 @@ void wxRichTextStyleOrganiserDialog::OnEditClick( wxCommandEvent& WXUNUSED(event wxRichTextParagraphStyleDefinition* paraDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextParagraphStyleDefinition); wxRichTextCharacterStyleDefinition* charDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextCharacterStyleDefinition); wxRichTextListStyleDefinition* listDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextListStyleDefinition); + wxRichTextBoxStyleDefinition* boxDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextBoxStyleDefinition); if (listDef) { @@ -708,6 +747,10 @@ void wxRichTextStyleOrganiserDialog::OnEditClick( wxCommandEvent& WXUNUSED(event { (*((wxRichTextParagraphStyleDefinition* ) def)) = (*paraDef); } + else if (boxDef) + { + (*((wxRichTextBoxStyleDefinition* ) def)) = (*boxDef); + } else { (*((wxRichTextCharacterStyleDefinition* ) def)) = (*charDef); @@ -745,12 +788,14 @@ void wxRichTextStyleOrganiserDialog::OnDeleteClick( wxCommandEvent& WXUNUSED(eve { m_stylesListBox->GetStyleListBox()->SetItemCount(0); - if (def->IsKindOf(CLASSINFO(wxRichTextListStyleDefinition))) + if (wxDynamicCast(def, wxRichTextListStyleDefinition)) GetStyleSheet()->RemoveListStyle((wxRichTextListStyleDefinition*) def, true); - else if (def->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition))) + else if (wxDynamicCast(def, wxRichTextParagraphStyleDefinition)) GetStyleSheet()->RemoveParagraphStyle((wxRichTextParagraphStyleDefinition*) def, true); - else if (def->IsKindOf(CLASSINFO(wxRichTextCharacterStyleDefinition))) + else if (wxDynamicCast(def, wxRichTextCharacterStyleDefinition)) GetStyleSheet()->RemoveCharacterStyle((wxRichTextCharacterStyleDefinition*) def, true); + else if (wxDynamicCast(def, wxRichTextBoxStyleDefinition)) + GetStyleSheet()->RemoveBoxStyle((wxRichTextBoxStyleDefinition*) def, true); m_stylesListBox->UpdateStyles(); @@ -856,7 +901,7 @@ void wxRichTextStyleOrganiserDialog::OnRenameClick( wxCommandEvent& WXUNUSED(eve if (styleName == def->GetName()) return; - if (GetStyleSheet()->FindParagraphStyle(styleName) || GetStyleSheet()->FindCharacterStyle(styleName) || GetStyleSheet()->FindListStyle(styleName)) + if (GetStyleSheet()->FindParagraphStyle(styleName) || GetStyleSheet()->FindCharacterStyle(styleName) || GetStyleSheet()->FindListStyle(styleName) || GetStyleSheet()->FindBoxStyle(styleName)) { wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this); return; @@ -885,6 +930,52 @@ void wxRichTextStyleOrganiserDialog::OnListSelection(wxCommandEvent& event) event.Skip(); } +/*! + * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX + */ + +void wxRichTextStyleOrganiserDialog::OnNewBoxClick( wxCommandEvent& WXUNUSED(event) ) +{ + wxString styleName = wxGetTextFromUser(_("Enter a box style name"), _("New Style")); + if (!styleName.IsEmpty()) + { + if (GetStyleSheet()->FindBoxStyle(styleName)) + { + wxMessageBox(_("Sorry, that name is taken. Please choose another."), _("New Style"), wxICON_EXCLAMATION|wxOK, this); + return; + } + + wxRichTextBoxStyleDefinition* style = new wxRichTextBoxStyleDefinition(styleName); + + int pages = wxRICHTEXT_FORMAT_MARGINS|wxRICHTEXT_FORMAT_SIZE|wxRICHTEXT_FORMAT_BORDERS|wxRICHTEXT_FORMAT_BACKGROUND; + wxRichTextFormattingDialog formatDlg; + formatDlg.SetStyleDefinition(*style, GetStyleSheet()); + formatDlg.Create(pages, this); + + if (formatDlg.ShowModal() == wxID_OK) + { + wxRichTextBoxStyleDefinition* boxDef = wxDynamicCast(formatDlg.GetStyleDefinition(), wxRichTextBoxStyleDefinition); + + (*((wxRichTextBoxStyleDefinition* ) style)) = (*boxDef); + + GetStyleSheet()->AddBoxStyle(style); + + m_stylesListBox->UpdateStyles(); + ShowPreview(); + } + else + delete style; + } +} + +/*! + * wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_BOX + */ + +void wxRichTextStyleOrganiserDialog::OnNewBoxUpdate( wxUpdateUIEvent& event ) +{ + event.Enable((GetFlags() & wxRICHTEXT_ORGANISER_CREATE_STYLES) != 0); +} + #endif // wxUSE_RICHTEXT -