From f089713f9e8be7aa10fd7094b11de361c9bc949a Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Fri, 20 Oct 2006 13:04:12 +0000 Subject: [PATCH] Added the ability to use built-in bullet styles, currently standard/circle or standard/square. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42166 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/richtext/richtextbuffer.h | 41 +++- include/wx/richtext/richtextbulletspage.h | 86 +++++--- include/wx/richtext/richtextctrl.h | 13 ++ include/wx/richtext/richtextliststylepage.h | 42 ++-- src/richtext/richtextbuffer.cpp | 149 ++++++++++++- src/richtext/richtextbulletspage.cpp | 219 ++++++++++++++------ src/richtext/richtextliststylepage.cpp | 179 +++++++++++----- src/richtext/richtextxml.cpp | 16 +- 8 files changed, 556 insertions(+), 189 deletions(-) diff --git a/include/wx/richtext/richtextbuffer.h b/include/wx/richtext/richtextbuffer.h index 5865f60140..d299f6be2a 100644 --- a/include/wx/richtext/richtextbuffer.h +++ b/include/wx/richtext/richtextbuffer.h @@ -180,10 +180,11 @@ class WXDLLIMPEXP_RICHTEXT wxRichTextListStyleDefinition; #define wxTEXT_ATTR_LINE_SPACING 0x00002000 #define wxTEXT_ATTR_CHARACTER_STYLE_NAME 0x00004000 #define wxTEXT_ATTR_PARAGRAPH_STYLE_NAME 0x00008000 -#define wxTEXT_ATTR_BULLET_STYLE 0x00010000 -#define wxTEXT_ATTR_BULLET_NUMBER 0x00020000 -#define wxTEXT_ATTR_BULLET_SYMBOL 0x00040000 -#define wxTEXT_ATTR_LIST_STYLE_NAME 0x00080000 +#define wxTEXT_ATTR_LIST_STYLE_NAME 0x00010000 +#define wxTEXT_ATTR_BULLET_STYLE 0x00020000 +#define wxTEXT_ATTR_BULLET_NUMBER 0x00040000 +#define wxTEXT_ATTR_BULLET_SYMBOL 0x00080000 +#define wxTEXT_ATTR_BULLET_NAME 0x00100000 /*! * Styles for wxTextAttrEx::SetBulletStyle @@ -199,6 +200,7 @@ class WXDLLIMPEXP_RICHTEXT wxRichTextListStyleDefinition; #define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x0040 #define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x0080 #define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x0100 +#define wxTEXT_ATTR_BULLET_STYLE_STANDARD 0x0200 /*! * Line spacing values @@ -306,6 +308,7 @@ public: void SetBulletStyle(int style) { m_bulletStyle = style; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_STYLE); } void SetBulletNumber(int n) { m_bulletNumber = n; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_NUMBER); } void SetBulletSymbol(wxChar symbol) { m_bulletSymbol = symbol; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_SYMBOL); } + void SetBulletName(const wxString& name) { m_bulletName = name; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_NAME); } void SetBulletFont(const wxString& bulletFont) { m_bulletFont = bulletFont; } const wxString& GetCharacterStyleName() const { return m_characterStyleName; } @@ -317,6 +320,7 @@ public: int GetBulletStyle() const { return m_bulletStyle; } int GetBulletNumber() const { return m_bulletNumber; } wxChar GetBulletSymbol() const { return m_bulletSymbol; } + const wxString& GetBulletName() const { return m_bulletName; } const wxString& GetBulletFont() const { return m_bulletFont; } bool HasWeight() const { return (GetFlags() & wxTEXT_ATTR_FONT_WEIGHT) != 0; } @@ -334,12 +338,13 @@ public: bool HasBulletStyle() const { return HasFlag(wxTEXT_ATTR_BULLET_STYLE); } bool HasBulletNumber() const { return HasFlag(wxTEXT_ATTR_BULLET_NUMBER); } bool HasBulletSymbol() const { return HasFlag(wxTEXT_ATTR_BULLET_SYMBOL); } + bool HasBulletName() const { return HasFlag(wxTEXT_ATTR_BULLET_NAME); } // Is this a character style? bool IsCharacterStyle() const { return (0 != (GetFlags() & (wxTEXT_ATTR_FONT | wxTEXT_ATTR_BACKGROUND_COLOUR | wxTEXT_ATTR_TEXT_COLOUR))); } bool IsParagraphStyle() const { return (0 != (GetFlags() & (wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_TABS| wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER|wxTEXT_ATTR_LINE_SPACING| - wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER))); } + wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_NAME))); } // returns false if we have any attributes set, true otherwise bool IsDefault() const @@ -348,7 +353,7 @@ public: !HasTabs() && !HasLeftIndent() && !HasRightIndent() && !HasParagraphSpacingAfter() && !HasParagraphSpacingBefore() && !HasLineSpacing() && !HasCharacterStyleName() && !HasParagraphStyleName() && !HasListStyleName() && - !HasBulletNumber() && !HasBulletStyle() && !HasBulletSymbol(); + !HasBulletNumber() && !HasBulletStyle() && !HasBulletSymbol() && !HasBulletName(); } // return the attribute having the valid font and colours: it uses the @@ -367,6 +372,7 @@ private: int m_bulletNumber; wxChar m_bulletSymbol; wxString m_bulletFont; + wxString m_bulletName; // Character style wxString m_characterStyleName; @@ -443,6 +449,7 @@ public: void SetBulletNumber(int n) { m_bulletNumber = n; m_flags |= wxTEXT_ATTR_BULLET_NUMBER; } void SetBulletSymbol(wxChar symbol) { m_bulletSymbol = symbol; m_flags |= wxTEXT_ATTR_BULLET_NUMBER; } void SetBulletFont(const wxString& bulletFont) { m_bulletFont = bulletFont; } + void SetBulletName(const wxString& name) { m_bulletName = name; } const wxColour& GetTextColour() const { return m_colText; } const wxColour& GetBackgroundColour() const { return m_colBack; } @@ -469,6 +476,7 @@ public: int GetBulletNumber() const { return m_bulletNumber; } wxChar GetBulletSymbol() const { return m_bulletSymbol; } const wxString& GetBulletFont() const { return m_bulletFont; } + const wxString& GetBulletName() const { return m_bulletName; } // accessors bool HasTextColour() const { return m_colText.Ok() && HasFlag(wxTEXT_ATTR_TEXT_COLOUR) ; } @@ -493,6 +501,7 @@ public: bool HasBulletStyle() const { return (m_flags & wxTEXT_ATTR_BULLET_STYLE) != 0; } bool HasBulletNumber() const { return (m_flags & wxTEXT_ATTR_BULLET_NUMBER) != 0; } bool HasBulletSymbol() const { return (m_flags & wxTEXT_ATTR_BULLET_SYMBOL) != 0; } + bool HasBulletName() const { return (m_flags & wxTEXT_ATTR_BULLET_NAME) != 0; } bool HasFlag(long flag) const { return (m_flags & flag) != 0; } @@ -500,7 +509,7 @@ public: bool IsCharacterStyle() const { return (0 != (GetFlags() & (wxTEXT_ATTR_FONT | wxTEXT_ATTR_BACKGROUND_COLOUR | wxTEXT_ATTR_TEXT_COLOUR))); } bool IsParagraphStyle() const { return (0 != (GetFlags() & (wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_TABS| wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER|wxTEXT_ATTR_LINE_SPACING| - wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER))); } + wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_NAME))); } // returns false if we have any attributes set, true otherwise bool IsDefault() const @@ -509,7 +518,7 @@ public: !HasTabs() && !HasLeftIndent() && !HasRightIndent() && !HasParagraphSpacingAfter() && !HasParagraphSpacingBefore() && !HasLineSpacing() && !HasCharacterStyleName() && !HasParagraphStyleName() && !HasListStyleName() && - !HasBulletNumber() && !HasBulletStyle() && !HasBulletSymbol(); + !HasBulletNumber() && !HasBulletStyle() && !HasBulletSymbol() && !HasBulletName(); } // return the attribute having the valid font and colours: it uses the @@ -537,6 +546,7 @@ private: int m_bulletNumber; wxChar m_bulletSymbol; wxString m_bulletFont; + wxString m_bulletName; // Character styles wxColour m_colText, @@ -561,7 +571,8 @@ private: #define wxTEXT_ATTR_PARAGRAPH (wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_TABS|\ wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER|wxTEXT_ATTR_LINE_SPACING|\ - wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_SYMBOL|wxTEXT_ATTR_PARAGRAPH_STYLE_NAME|wxTEXT_ATTR_LIST_STYLE_NAME) + wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_SYMBOL|wxTEXT_ATTR_BULLET_NAME|\ + wxTEXT_ATTR_PARAGRAPH_STYLE_NAME|wxTEXT_ATTR_LIST_STYLE_NAME) #define wxTEXT_ATTR_ALL (wxTEXT_ATTR_CHARACTER|wxTEXT_ATTR_PARAGRAPH) @@ -1682,6 +1693,12 @@ public: /// End symbol bullet bool EndSymbolBullet() { return EndStyle(); } + /// Begin standard bullet + bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD); + + /// End standard bullet + bool EndStandardBullet() { return EndStyle(); } + /// Begin named character style bool BeginCharacterStyle(const wxString& characterStyle); @@ -1694,6 +1711,12 @@ public: /// End named character style bool EndParagraphStyle() { return EndStyle(); } + /// Begin named list style + bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1); + + /// End named character style + bool EndListStyle() { return EndStyle(); } + // Implementation /// Copy diff --git a/include/wx/richtext/richtextbulletspage.h b/include/wx/richtext/richtextbulletspage.h index 0b5a9939a4..f6fb9a475b 100644 --- a/include/wx/richtext/richtextbulletspage.h +++ b/include/wx/richtext/richtextbulletspage.h @@ -17,8 +17,8 @@ */ ////@begin includes -#include "wx/statline.h" #include "wx/spinctrl.h" +#include "wx/statline.h" ////@end includes /*! @@ -81,11 +81,44 @@ public: /// Update for number-related controls void OnNumberUpdate( wxUpdateUIEvent& event ); + /// Update for standard bullet-related controls + void OnStandardBulletUpdate( wxUpdateUIEvent& event ); + ////@begin wxRichTextBulletsPage event handler declarations /// wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_STYLELISTBOX void OnStylelistboxSelected( wxCommandEvent& event ); + /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL + void OnPeriodctrlClick( wxCommandEvent& event ); + + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL + void OnPeriodctrlUpdate( wxUpdateUIEvent& event ); + + /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL + void OnParenthesesctrlClick( wxCommandEvent& event ); + + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL + void OnParenthesesctrlUpdate( wxUpdateUIEvent& event ); + + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC + void OnNumberstaticUpdate( wxUpdateUIEvent& event ); + + /// wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL + void OnNumberctrlUpdated( wxSpinEvent& event ); + + /// wxEVT_SCROLL_LINEUP event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL + void OnNumberctrlUp( wxSpinEvent& event ); + + /// wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL + void OnNumberctrlDown( wxSpinEvent& event ); + + /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL + void OnNumberctrlTextUpdated( wxCommandEvent& event ); + + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL + void OnNumberctrlUpdate( wxUpdateUIEvent& event ); + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC void OnSymbolstaticUpdate( wxUpdateUIEvent& event ); @@ -113,35 +146,17 @@ public: /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL void OnSymbolfontctrlUIUpdate( wxUpdateUIEvent& event ); - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC - void OnNumberstaticUpdate( wxUpdateUIEvent& event ); + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMESTATIC + void OnNamestaticUpdate( wxUpdateUIEvent& event ); - /// wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlUpdated( wxSpinEvent& event ); + /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL + void OnNamectrlSelected( wxCommandEvent& event ); - /// wxEVT_SCROLL_LINEUP event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlUp( wxSpinEvent& event ); - - /// wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlDown( wxSpinEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlTextUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL - void OnParenthesesctrlClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL - void OnParenthesesctrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL - void OnPeriodctrlClick( wxCommandEvent& event ); + /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL + void OnNamectrlUpdated( wxCommandEvent& event ); - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL - void OnPeriodctrlUpdate( wxUpdateUIEvent& event ); + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL + void OnNamectrlUIUpdate( wxUpdateUIEvent& event ); ////@end wxRichTextBulletsPage event handler declarations @@ -159,24 +174,27 @@ public: ////@begin wxRichTextBulletsPage member variables wxListBox* m_styleListBox; + wxCheckBox* m_periodCtrl; + wxCheckBox* m_parenthesesCtrl; + wxSpinCtrl* m_numberCtrl; wxComboBox* m_symbolCtrl; wxComboBox* m_symbolFontCtrl; - wxSpinCtrl* m_numberCtrl; - wxCheckBox* m_parenthesesCtrl; - wxCheckBox* m_periodCtrl; + wxComboBox* m_bulletNameCtrl; wxRichTextCtrl* m_previewCtrl; /// Control identifiers enum { ID_RICHTEXTBULLETSPAGE = 10300, ID_RICHTEXTBULLETSPAGE_STYLELISTBOX = 10305, + ID_RICHTEXTBULLETSPAGE_PERIODCTRL = 10313, + ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL = 10311, + ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC = 10302, + ID_RICHTEXTBULLETSPAGE_NUMBERCTRL = 10310, ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC = 10301, ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL = 10307, ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL = 10308, ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL = 10309, - ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC = 10302, - ID_RICHTEXTBULLETSPAGE_NUMBERCTRL = 10310, - ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL = 10311, - ID_RICHTEXTBULLETSPAGE_PERIODCTRL = 10313, + ID_RICHTEXTBULLETSPAGE_NAMESTATIC = 10303, + ID_RICHTEXTBULLETSPAGE_NAMECTRL = 10304, ID_RICHTEXTBULLETSPAGE_PREVIEW_CTRL = 10314 }; ////@end wxRichTextBulletsPage member variables diff --git a/include/wx/richtext/richtextctrl.h b/include/wx/richtext/richtextctrl.h index d1a681e08c..15c1d3791a 100644 --- a/include/wx/richtext/richtextctrl.h +++ b/include/wx/richtext/richtextctrl.h @@ -384,6 +384,13 @@ public: /// End symbol bullet bool EndSymbolBullet() { return GetBuffer().EndSymbolBullet(); } + /// Begin standard bullet + bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD) + { return GetBuffer().BeginStandardBullet(bulletName, leftIndent, leftSubIndent, bulletStyle); } + + /// End standard bullet + bool EndStandardBullet() { return GetBuffer().EndStandardBullet(); } + /// Begin named character style bool BeginCharacterStyle(const wxString& characterStyle) { return GetBuffer().BeginCharacterStyle(characterStyle); } @@ -396,6 +403,12 @@ public: /// End named character style bool EndParagraphStyle() { return GetBuffer().EndParagraphStyle(); } + /// Begin named list style + bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1) { return GetBuffer().BeginListStyle(listStyle, level, number); } + + /// End named character style + bool EndListStyle() { return GetBuffer().EndListStyle(); } + /// Sets the default style to the style under the cursor bool SetDefaultStyleToCursorStyle(); diff --git a/include/wx/richtext/richtextliststylepage.h b/include/wx/richtext/richtextliststylepage.h index 61c3e6cfb0..8e40bc091e 100644 --- a/include/wx/richtext/richtextliststylepage.h +++ b/include/wx/richtext/richtextliststylepage.h @@ -73,6 +73,9 @@ public: /// Update for number-related controls void OnNumberUpdate( wxUpdateUIEvent& event ); + /// Update for standard bullet-related controls + void OnStandardBulletUpdate( wxUpdateUIEvent& event ); + /// Just transfer to the window void DoTransferDataToWindow(); @@ -102,6 +105,18 @@ public: /// wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_STYLELISTBOX void OnStylelistboxSelected( wxCommandEvent& event ); + /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL + void OnPeriodctrlClick( wxCommandEvent& event ); + + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL + void OnPeriodctrlUpdate( wxUpdateUIEvent& event ); + + /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL + void OnParenthesesctrlClick( wxCommandEvent& event ); + + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL + void OnParenthesesctrlUpdate( wxUpdateUIEvent& event ); + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC void OnSymbolstaticUpdate( wxUpdateUIEvent& event ); @@ -129,17 +144,17 @@ public: /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL void OnSymbolfontctrlUIUpdate( wxUpdateUIEvent& event ); - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL - void OnParenthesesctrlClick( wxCommandEvent& event ); + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMESTATIC + void OnNamestaticUpdate( wxUpdateUIEvent& event ); - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL - void OnParenthesesctrlUpdate( wxUpdateUIEvent& event ); + /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL + void OnNamectrlSelected( wxCommandEvent& event ); - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL - void OnPeriodctrlClick( wxCommandEvent& event ); + /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL + void OnNamectrlUpdated( wxCommandEvent& event ); - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL - void OnPeriodctrlUpdate( wxUpdateUIEvent& event ); + /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL + void OnNamectrlUIUpdate( wxUpdateUIEvent& event ); /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_ALIGNLEFT void OnRichtextliststylepageAlignleftSelected( wxCommandEvent& event ); @@ -191,10 +206,11 @@ public: ////@begin wxRichTextListStylePage member variables wxSpinCtrl* m_levelCtrl; wxListBox* m_styleListBox; + wxCheckBox* m_periodCtrl; + wxCheckBox* m_parenthesesCtrl; wxComboBox* m_symbolCtrl; wxComboBox* m_symbolFontCtrl; - wxCheckBox* m_parenthesesCtrl; - wxCheckBox* m_periodCtrl; + wxComboBox* m_bulletNameCtrl; wxRadioButton* m_alignmentLeft; wxRadioButton* m_alignmentRight; wxRadioButton* m_alignmentJustified; @@ -215,12 +231,14 @@ public: ID_RICHTEXTLISTSTYLEPAGE_NOTEBOOK = 10618, ID_RICHTEXTLISTSTYLEPAGE_BULLETS = 10619, ID_RICHTEXTLISTSTYLEPAGE_STYLELISTBOX = 10620, + ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL = 10627, + ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL = 10626, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC = 10621, ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL = 10622, ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL = 10623, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL = 10625, - ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL = 10626, - ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL = 10627, + ID_RICHTEXTLISTSTYLEPAGE_NAMESTATIC = 10600, + ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL = 10601, ID_RICHTEXTLISTSTYLEPAGE_SPACING = 10628, ID_RICHTEXTLISTSTYLEPAGE_ALIGNLEFT = 10629, ID_RICHTEXTLISTSTYLEPAGE_ALIGNRIGHT = 10630, diff --git a/src/richtext/richtextbuffer.cpp b/src/richtext/richtextbuffer.cpp index 9df7d15069..f1ed9eacf1 100644 --- a/src/richtext/richtextbuffer.cpp +++ b/src/richtext/richtextbuffer.cpp @@ -2171,6 +2171,23 @@ bool wxRichTextParagraphLayoutBox::CollectStyle(wxTextAttrEx& currentStyle, cons } } + if (style.HasBulletName() && !wxHasStyle(multipleStyleAttributes, wxTEXT_ATTR_BULLET_NAME)) + { + if (currentStyle.HasBulletName()) + { + if (currentStyle.HasBulletName() != style.HasBulletName()) + { + // Clash of style - mark as such + multipleStyleAttributes |= wxTEXT_ATTR_BULLET_NAME; + currentStyle.SetFlags(currentStyle.GetFlags() & ~wxTEXT_ATTR_BULLET_NAME); + } + } + else + { + currentStyle.SetBulletName(style.GetBulletName()); + } + } + return true; } @@ -2884,6 +2901,62 @@ bool wxRichTextParagraph::Draw(wxDC& dc, const wxRichTextRange& WXUNUSED(range), { // TODO } + else if (attr.GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_STANDARD) + { + wxTextAttrEx bulletAttr(GetCombinedAttributes()); + if (bulletAttr.GetTextColour().Ok()) + { + dc.SetPen(wxPen(bulletAttr.GetTextColour())); + dc.SetBrush(wxBrush(bulletAttr.GetTextColour())); + } + else + { + dc.SetPen(*wxBLACK_PEN); + dc.SetBrush(*wxBLACK_BRUSH); + } + + wxFont font; + if (bulletAttr.GetFont().Ok()) + font = bulletAttr.GetFont(); + else + font = (*wxNORMAL_FONT); + + dc.SetFont(font); + + // Get line height from first line, if any + wxRichTextLine* line = m_cachedLines.GetFirst() ? (wxRichTextLine* ) m_cachedLines.GetFirst()->GetData() : (wxRichTextLine*) NULL; + + wxPoint linePos; + int lineHeight wxDUMMY_INITIALIZE(0); + if (line) + { + lineHeight = line->GetSize().y; + linePos = line->GetPosition() + GetPosition(); + } + else + { + lineHeight = dc.GetCharHeight(); + linePos = GetPosition(); + linePos.y += spaceBeforePara; + } + + int charHeight = dc.GetCharHeight(); + + int bulletWidth = wxMax(2, (charHeight/3 + 1)); + int bulletHeight = bulletWidth; + + int x = GetPosition().x + leftIndent; + int y = linePos.y + (lineHeight - charHeight/2) - bulletHeight/2; + + if (bulletAttr.GetBulletName() == wxT("standard/square")) + { + dc.DrawRectangle(x, y, bulletWidth, bulletHeight); + } + else // "standard/round", and catch-all + { + dc.DrawEllipse(x, y, bulletWidth, bulletHeight); + } + } else { wxString bulletText = GetBulletText(); @@ -4943,7 +5016,7 @@ bool wxRichTextBuffer::BeginLineSpacing(int lineSpacing) bool wxRichTextBuffer::BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle) { wxTextAttrEx attr; - attr.SetFlags(wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_LEFT_INDENT); + attr.SetFlags(wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_LEFT_INDENT); attr.SetBulletStyle(bulletStyle); attr.SetBulletNumber(bulletNumber); attr.SetLeftIndent(leftIndent, leftSubIndent); @@ -4955,7 +5028,7 @@ bool wxRichTextBuffer::BeginNumberedBullet(int bulletNumber, int leftIndent, int bool wxRichTextBuffer::BeginSymbolBullet(wxChar symbol, int leftIndent, int leftSubIndent, int bulletStyle) { wxTextAttrEx attr; - attr.SetFlags(wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_SYMBOL|wxTEXT_ATTR_LEFT_INDENT); + attr.SetFlags(wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_LEFT_INDENT); attr.SetBulletStyle(bulletStyle); attr.SetLeftIndent(leftIndent, leftSubIndent); attr.SetBulletSymbol(symbol); @@ -4963,6 +5036,18 @@ bool wxRichTextBuffer::BeginSymbolBullet(wxChar symbol, int leftIndent, int left return BeginStyle(attr); } +/// Begin standard bullet +bool wxRichTextBuffer::BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle) +{ + wxTextAttrEx attr; + attr.SetFlags(wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_LEFT_INDENT); + attr.SetBulletStyle(bulletStyle); + attr.SetLeftIndent(leftIndent, leftSubIndent); + attr.SetBulletName(bulletName); + + return BeginStyle(attr); +} + /// Begin named character style bool wxRichTextBuffer::BeginCharacterStyle(const wxString& characterStyle) { @@ -4995,6 +5080,24 @@ bool wxRichTextBuffer::BeginParagraphStyle(const wxString& paragraphStyle) return false; } +/// Begin named list style +bool wxRichTextBuffer::BeginListStyle(const wxString& listStyle, int level, int number) +{ + if (GetStyleSheet()) + { + wxRichTextListStyleDefinition* def = GetStyleSheet()->FindListStyle(listStyle); + if (def) + { + wxTextAttrEx attr(def->GetCombinedStyleForLevel(level)); + + attr.SetBulletNumber(number); + + return BeginStyle(attr); + } + } + return false; +} + /// Adds a handler to the end void wxRichTextBuffer::AddHandler(wxRichTextFileHandler *handler) { @@ -5760,6 +5863,7 @@ bool wxTextAttrEq(const wxTextAttrEx& attr1, const wxRichTextAttr& attr2) attr1.GetBulletStyle() == attr2.GetBulletStyle() && attr1.GetBulletNumber() == attr2.GetBulletNumber() && attr1.GetBulletSymbol() == attr2.GetBulletSymbol() && + attr1.GetBulletName() == attr2.GetBulletName() && attr1.GetBulletFont() == attr2.GetBulletFont() && attr1.GetCharacterStyleName() == attr2.GetCharacterStyleName() && attr1.GetParagraphStyleName() == attr2.GetParagraphStyleName() && @@ -5840,11 +5944,12 @@ bool wxTextAttrEqPartial(const wxTextAttrEx& attr1, const wxTextAttrEx& attr2, i return false; if ((flags & wxTEXT_ATTR_BULLET_SYMBOL) && - (attr1.GetBulletSymbol() != attr2.GetBulletSymbol())) + (attr1.GetBulletSymbol() != attr2.GetBulletSymbol()) && + (attr1.GetBulletFont() != attr2.GetBulletFont())) return false; - if ((flags & wxTEXT_ATTR_BULLET_SYMBOL) && - (attr1.GetBulletFont() != attr2.GetBulletFont())) + if ((flags & wxTEXT_ATTR_BULLET_NAME) && + (attr1.GetBulletName() != attr2.GetBulletName())) return false; if ((flags & wxTEXT_ATTR_TABS) && @@ -5929,11 +6034,12 @@ bool wxTextAttrEqPartial(const wxTextAttrEx& attr1, const wxRichTextAttr& attr2, return false; if ((flags & wxTEXT_ATTR_BULLET_SYMBOL) && - (attr1.GetBulletSymbol() != attr2.GetBulletSymbol())) + (attr1.GetBulletSymbol() != attr2.GetBulletSymbol()) && + (attr1.GetBulletFont() != attr2.GetBulletFont())) return false; - if ((flags & wxTEXT_ATTR_BULLET_SYMBOL) && - (attr1.GetBulletFont() != attr2.GetBulletFont())) + if ((flags & wxTEXT_ATTR_BULLET_NAME) && + (attr1.GetBulletName() != attr2.GetBulletName())) return false; if ((flags & wxTEXT_ATTR_TABS) && @@ -6046,12 +6152,17 @@ bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxTextAttrEx& style) destStyle.SetListStyleName(style.GetListStyleName()); if (style.HasBulletStyle()) - { destStyle.SetBulletStyle(style.GetBulletStyle()); + + if (style.HasBulletSymbol()) + { destStyle.SetBulletSymbol(style.GetBulletSymbol()); destStyle.SetBulletFont(style.GetBulletFont()); } + if (style.HasBulletName()) + destStyle.SetBulletName(style.GetBulletName()); + if (style.HasBulletNumber()) destStyle.SetBulletNumber(style.GetBulletNumber()); @@ -6249,6 +6360,12 @@ bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxRichTextAttr& style, destStyle.SetBulletNumber(style.GetBulletNumber()); } + if (style.HasBulletName()) + { + if (!(compareWith && compareWith->HasBulletName() && compareWith->GetBulletName() == style.GetBulletName())) + destStyle.SetBulletName(style.GetBulletName()); + } + return true; } @@ -6388,6 +6505,7 @@ void wxRichTextAttr::operator= (const wxRichTextAttr& attr) m_bulletNumber = attr.m_bulletNumber; m_bulletSymbol = attr.m_bulletSymbol; m_bulletFont = attr.m_bulletFont; + m_bulletName = attr.m_bulletName; } // operators @@ -6411,6 +6529,7 @@ void wxRichTextAttr::operator= (const wxTextAttrEx& attr) m_bulletStyle = attr.GetBulletStyle(); m_bulletNumber = attr.GetBulletNumber(); m_bulletSymbol = attr.GetBulletSymbol(); + m_bulletName = attr.GetBulletName(); m_bulletFont = attr.GetBulletFont(); if (attr.GetFont().Ok()) @@ -6450,6 +6569,7 @@ bool wxRichTextAttr::operator== (const wxRichTextAttr& attr) const GetBulletSymbol() == attr.GetBulletSymbol() && GetBulletNumber() == attr.GetBulletNumber() && GetBulletFont() == attr.GetBulletFont() && + GetBulletName() == attr.GetBulletName() && m_fontSize == attr.m_fontSize && m_fontStyle == attr.m_fontStyle && @@ -6475,6 +6595,7 @@ void wxRichTextAttr::CopyTo(wxTextAttrEx& attr) const attr.SetBulletStyle(m_bulletStyle); attr.SetBulletNumber(m_bulletNumber); attr.SetBulletSymbol(m_bulletSymbol); + attr.SetBulletName(m_bulletName); attr.SetBulletFont(m_bulletFont); attr.SetCharacterStyleName(m_characterStyleName); attr.SetParagraphStyleName(m_paragraphStyleName); @@ -6593,6 +6714,9 @@ wxRichTextAttr wxRichTextAttr::Combine(const wxRichTextAttr& attr, if (attr.HasBulletNumber()) newAttr.SetBulletNumber(attr.GetBulletNumber()); + if (attr.HasBulletName()) + newAttr.SetBulletName(attr.GetBulletName()); + if (attr.HasBulletSymbol()) { newAttr.SetBulletSymbol(attr.GetBulletSymbol()); @@ -6617,6 +6741,7 @@ wxTextAttrEx::wxTextAttrEx(const wxTextAttrEx& attr): wxTextAttr(attr) m_bulletStyle = attr.m_bulletStyle; m_bulletNumber = attr.m_bulletNumber; m_bulletSymbol = attr.m_bulletSymbol; + m_bulletName = attr.m_bulletName; m_bulletFont = attr.m_bulletFont; } @@ -6628,7 +6753,6 @@ void wxTextAttrEx::Init() m_lineSpacing = 0; m_bulletStyle = wxTEXT_ATTR_BULLET_STYLE_NONE; m_bulletNumber = 0; - m_bulletSymbol = 0; m_bulletSymbol = wxT('*'); } @@ -6647,6 +6771,7 @@ void wxTextAttrEx::operator= (const wxTextAttrEx& attr) m_bulletNumber = attr.m_bulletNumber; m_bulletSymbol = attr.m_bulletSymbol; m_bulletFont = attr.m_bulletFont; + m_bulletName = attr.m_bulletName; } // Assignment from a wxTextAttr object. @@ -6673,6 +6798,7 @@ bool wxTextAttrEx::operator== (const wxTextAttrEx& attr) const GetBulletStyle() == attr.GetBulletStyle() && GetBulletNumber() == attr.GetBulletNumber() && GetBulletSymbol() == attr.GetBulletSymbol() && + GetBulletName() == attr.GetBulletName() && GetBulletFont() == attr.GetBulletFont() && GetCharacterStyleName() == attr.GetCharacterStyleName() && GetParagraphStyleName() == attr.GetParagraphStyleName() && @@ -6815,6 +6941,9 @@ wxTextAttrEx wxTextAttrEx::CombineEx(const wxTextAttrEx& attr, if (attr.HasBulletNumber()) newAttr.SetBulletNumber(attr.GetBulletNumber()); + if (attr.HasBulletName()) + newAttr.SetBulletName(attr.GetBulletName()); + if (attr.HasBulletSymbol()) { newAttr.SetBulletSymbol(attr.GetBulletSymbol()); diff --git a/src/richtext/richtextbulletspage.cpp b/src/richtext/richtextbulletspage.cpp index efad695f0b..2a3cc06244 100644 --- a/src/richtext/richtextbulletspage.cpp +++ b/src/richtext/richtextbulletspage.cpp @@ -30,6 +30,20 @@ BEGIN_EVENT_TABLE( wxRichTextBulletsPage, wxPanel ) ////@begin wxRichTextBulletsPage event table entries EVT_LISTBOX( ID_RICHTEXTBULLETSPAGE_STYLELISTBOX, wxRichTextBulletsPage::OnStylelistboxSelected ) + EVT_CHECKBOX( ID_RICHTEXTBULLETSPAGE_PERIODCTRL, wxRichTextBulletsPage::OnPeriodctrlClick ) + EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_PERIODCTRL, wxRichTextBulletsPage::OnPeriodctrlUpdate ) + + EVT_CHECKBOX( ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, wxRichTextBulletsPage::OnParenthesesctrlClick ) + EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, wxRichTextBulletsPage::OnParenthesesctrlUpdate ) + + EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC, wxRichTextBulletsPage::OnNumberstaticUpdate ) + + EVT_SPINCTRL( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUpdated ) + EVT_SPIN_UP( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUp ) + EVT_SPIN_DOWN( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlDown ) + EVT_TEXT( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlTextUpdated ) + EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUpdate ) + EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, wxRichTextBulletsPage::OnSymbolstaticUpdate ) EVT_COMBOBOX( ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxRichTextBulletsPage::OnSymbolctrlSelected ) @@ -43,19 +57,11 @@ BEGIN_EVENT_TABLE( wxRichTextBulletsPage, wxPanel ) EVT_TEXT( ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, wxRichTextBulletsPage::OnSymbolfontctrlUpdated ) EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, wxRichTextBulletsPage::OnSymbolfontctrlUIUpdate ) - EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC, wxRichTextBulletsPage::OnNumberstaticUpdate ) + EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NAMESTATIC, wxRichTextBulletsPage::OnNamestaticUpdate ) - EVT_SPINCTRL( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUpdated ) - EVT_SPIN_UP( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUp ) - EVT_SPIN_DOWN( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlDown ) - EVT_TEXT( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlTextUpdated ) - EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, wxRichTextBulletsPage::OnNumberctrlUpdate ) - - EVT_CHECKBOX( ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, wxRichTextBulletsPage::OnParenthesesctrlClick ) - EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, wxRichTextBulletsPage::OnParenthesesctrlUpdate ) - - EVT_CHECKBOX( ID_RICHTEXTBULLETSPAGE_PERIODCTRL, wxRichTextBulletsPage::OnPeriodctrlClick ) - EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_PERIODCTRL, wxRichTextBulletsPage::OnPeriodctrlUpdate ) + EVT_COMBOBOX( ID_RICHTEXTBULLETSPAGE_NAMECTRL, wxRichTextBulletsPage::OnNamectrlSelected ) + EVT_TEXT( ID_RICHTEXTBULLETSPAGE_NAMECTRL, wxRichTextBulletsPage::OnNamectrlUpdated ) + EVT_UPDATE_UI( ID_RICHTEXTBULLETSPAGE_NAMECTRL, wxRichTextBulletsPage::OnNamectrlUIUpdate ) ////@end wxRichTextBulletsPage event table entries @@ -89,11 +95,12 @@ void wxRichTextBulletsPage::Init() ////@begin wxRichTextBulletsPage member initialisation m_styleListBox = NULL; + m_periodCtrl = NULL; + m_parenthesesCtrl = NULL; + m_numberCtrl = NULL; m_symbolCtrl = NULL; m_symbolFontCtrl = NULL; - m_numberCtrl = NULL; - m_parenthesesCtrl = NULL; - m_periodCtrl = NULL; + m_bulletNameCtrl = NULL; m_previewCtrl = NULL; ////@end wxRichTextBulletsPage member initialisation } @@ -142,87 +149,92 @@ void wxRichTextBulletsPage::CreateControls() itemBoxSizer5->Add(itemStaticText6, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); wxString* m_styleListBoxStrings = NULL; - m_styleListBox = new wxListBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_STYLELISTBOX, wxDefaultPosition, wxDefaultSize, 0, m_styleListBoxStrings, wxLB_SINGLE ); + m_styleListBox = new wxListBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_STYLELISTBOX, wxDefaultPosition, wxSize(-1, 130), 0, m_styleListBoxStrings, wxLB_SINGLE ); m_styleListBox->SetHelpText(_("The available bullet styles.")); if (ShowToolTips()) m_styleListBox->SetToolTip(_("The available bullet styles.")); - itemBoxSizer5->Add(m_styleListBox, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + itemBoxSizer5->Add(m_styleListBox, 1, wxGROW|wxALL, 5); + + wxBoxSizer* itemBoxSizer8 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer5->Add(itemBoxSizer8, 0, wxGROW, 5); + + m_periodCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_PERIODCTRL, _("Peri&od"), wxDefaultPosition, wxDefaultSize, 0 ); + m_periodCtrl->SetValue(false); + m_periodCtrl->SetHelpText(_("Check to add a period after the bullet.")); + if (ShowToolTips()) + m_periodCtrl->SetToolTip(_("Check to add a period after the bullet.")); + itemBoxSizer8->Add(m_periodCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + + m_parenthesesCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, _("&Parentheses"), wxDefaultPosition, wxDefaultSize, 0 ); + m_parenthesesCtrl->SetValue(false); + m_parenthesesCtrl->SetHelpText(_("Check to enclose the bullet in parentheses.")); + if (ShowToolTips()) + m_parenthesesCtrl->SetToolTip(_("Check to enclose the bullet in parentheses.")); + itemBoxSizer8->Add(m_parenthesesCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + + itemBoxSizer5->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5); + + wxStaticText* itemStaticText12 = new wxStaticText( itemPanel1, ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC, _("&Number:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer5->Add(itemStaticText12, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + + m_numberCtrl = new wxSpinCtrl( itemPanel1, ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, _T("0"), wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 0, 100000, 0 ); + m_numberCtrl->SetHelpText(_("The list item number.")); + if (ShowToolTips()) + m_numberCtrl->SetToolTip(_("The list item number.")); + itemBoxSizer5->Add(m_numberCtrl, 0, wxGROW|wxALL, 5); itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); - wxStaticLine* itemStaticLine9 = new wxStaticLine( itemPanel1, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - itemBoxSizer4->Add(itemStaticLine9, 0, wxGROW|wxALL, 5); + wxStaticLine* itemStaticLine15 = new wxStaticLine( itemPanel1, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + itemBoxSizer4->Add(itemStaticLine15, 0, wxGROW|wxLEFT|wxRIGHT, 5); itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); - wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer4->Add(itemBoxSizer11, 0, wxGROW, 5); + wxBoxSizer* itemBoxSizer17 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer4->Add(itemBoxSizer17, 0, wxGROW, 5); - wxStaticText* itemStaticText12 = new wxStaticText( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, _("&Symbol:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer11->Add(itemStaticText12, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + wxStaticText* itemStaticText18 = new wxStaticText( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, _("&Symbol:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer17->Add(itemStaticText18, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxHORIZONTAL); - itemBoxSizer11->Add(itemBoxSizer13, 0, wxGROW, 5); + wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer17->Add(itemBoxSizer19, 0, wxGROW, 5); wxString* m_symbolCtrlStrings = NULL; - m_symbolCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxEmptyString, wxDefaultPosition, wxSize(60, -1), 0, m_symbolCtrlStrings, wxCB_DROPDOWN ); + m_symbolCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, _T(""), wxDefaultPosition, wxSize(60, -1), 0, m_symbolCtrlStrings, wxCB_DROPDOWN ); m_symbolCtrl->SetHelpText(_("The bullet character.")); if (ShowToolTips()) m_symbolCtrl->SetToolTip(_("The bullet character.")); - itemBoxSizer13->Add(m_symbolCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE, 5); + itemBoxSizer19->Add(m_symbolCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE, 5); - wxButton* itemButton15 = new wxButton( itemPanel1, ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL, _("Ch&oose..."), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton15->SetHelpText(_("Click to browse for a symbol.")); + wxButton* itemButton21 = new wxButton( itemPanel1, ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL, _("Ch&oose..."), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton21->SetHelpText(_("Click to browse for a symbol.")); if (ShowToolTips()) - itemButton15->SetToolTip(_("Click to browse for a symbol.")); - itemBoxSizer13->Add(itemButton15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + itemButton21->SetToolTip(_("Click to browse for a symbol.")); + itemBoxSizer19->Add(itemButton21, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - itemBoxSizer11->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + itemBoxSizer17->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5); - wxStaticText* itemStaticText17 = new wxStaticText( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, _("Symbol &font:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer11->Add(itemStaticText17, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + wxStaticText* itemStaticText23 = new wxStaticText( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC, _("Symbol &font:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer17->Add(itemStaticText23, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); wxString* m_symbolFontCtrlStrings = NULL; - m_symbolFontCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, m_symbolFontCtrlStrings, wxCB_DROPDOWN ); + m_symbolFontCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_symbolFontCtrlStrings, wxCB_DROPDOWN ); m_symbolFontCtrl->SetHelpText(_("Available fonts.")); if (ShowToolTips()) m_symbolFontCtrl->SetToolTip(_("Available fonts.")); - itemBoxSizer11->Add(m_symbolFontCtrl, 0, wxGROW|wxALL, 5); - - itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); - - wxStaticLine* itemStaticLine20 = new wxStaticLine( itemPanel1, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - itemBoxSizer4->Add(itemStaticLine20, 0, wxGROW|wxALL, 5); - - itemBoxSizer4->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); - - wxBoxSizer* itemBoxSizer22 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer4->Add(itemBoxSizer22, 0, wxGROW, 5); + itemBoxSizer17->Add(m_symbolFontCtrl, 0, wxGROW|wxALL, 5); - wxStaticText* itemStaticText23 = new wxStaticText( itemPanel1, ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC, _("&Number:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer22->Add(itemStaticText23, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + itemBoxSizer17->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - m_numberCtrl = new wxSpinCtrl( itemPanel1, ID_RICHTEXTBULLETSPAGE_NUMBERCTRL, _T("0"), wxDefaultPosition, wxSize(50, -1), wxSP_ARROW_KEYS, 0, 100000, 0 ); - m_numberCtrl->SetHelpText(_("The list item number.")); - if (ShowToolTips()) - m_numberCtrl->SetToolTip(_("The list item number.")); - itemBoxSizer22->Add(m_numberCtrl, 0, wxGROW|wxALL, 5); + wxStaticText* itemStaticText26 = new wxStaticText( itemPanel1, ID_RICHTEXTBULLETSPAGE_NAMESTATIC, _("S&tandard bullet name:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer17->Add(itemStaticText26, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - itemBoxSizer22->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - - m_parenthesesCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL, _("&Parentheses"), wxDefaultPosition, wxDefaultSize, 0 ); - m_parenthesesCtrl->SetValue(false); - m_parenthesesCtrl->SetHelpText(_("Check to enclose the bullet in parentheses.")); + wxString* m_bulletNameCtrlStrings = NULL; + m_bulletNameCtrl = new wxComboBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_NAMECTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_bulletNameCtrlStrings, wxCB_DROPDOWN ); + m_bulletNameCtrl->SetHelpText(_("A standard bullet name.")); if (ShowToolTips()) - m_parenthesesCtrl->SetToolTip(_("Check to enclose the bullet in parentheses.")); - itemBoxSizer22->Add(m_parenthesesCtrl, 0, wxALIGN_LEFT|wxALL, 5); - - m_periodCtrl = new wxCheckBox( itemPanel1, ID_RICHTEXTBULLETSPAGE_PERIODCTRL, _("Peri&od"), wxDefaultPosition, wxDefaultSize, 0 ); - m_periodCtrl->SetValue(false); - m_periodCtrl->SetHelpText(_("Check to add a period after the bullet.")); - if (ShowToolTips()) - m_periodCtrl->SetToolTip(_("Check to add a period after the bullet.")); - itemBoxSizer22->Add(m_periodCtrl, 0, wxALIGN_LEFT|wxALL, 5); + m_bulletNameCtrl->SetToolTip(_("A standard bullet name.")); + itemBoxSizer17->Add(m_bulletNameCtrl, 0, wxGROW|wxALL, 5); itemBoxSizer3->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); @@ -242,12 +254,16 @@ void wxRichTextBulletsPage::CreateControls() m_styleListBox->Append(_("Lower case roman numerals")); m_styleListBox->Append(_("Symbol")); m_styleListBox->Append(_("Bitmap")); + m_styleListBox->Append(_("Standard")); m_symbolCtrl->Append(_("*")); m_symbolCtrl->Append(_("-")); m_symbolCtrl->Append(_(">")); m_symbolCtrl->Append(_("+")); m_symbolCtrl->Append(_("~")); + + m_bulletNameCtrl->Append(_("standard/round")); + m_bulletNameCtrl->Append(_("standard/square")); wxArrayString facenames = wxRichTextCtrl::GetAvailableFontNames(); facenames.Sort(); @@ -281,6 +297,11 @@ bool wxRichTextBulletsPage::TransferDataFromWindow() bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_SYMBOL; else if (index == 7) bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_BITMAP; + else if (index == 8) + { + bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_STANDARD; + attr->SetBulletName(m_bulletNameCtrl->GetValue()); + } if (m_parenthesesCtrl->GetValue()) bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_PARENTHESES; @@ -316,6 +337,7 @@ bool wxRichTextBulletsPage::TransferDataToWindow() if (attr->HasBulletStyle()) { + m_hasBulletStyle = true; int index = -1; if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_ARABIC) index = 1; @@ -331,6 +353,8 @@ bool wxRichTextBulletsPage::TransferDataToWindow() index = 6; else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_BITMAP) index = 7; + else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_STANDARD) + index = 8; m_styleListBox->SetSelection(index); if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_PARENTHESES) @@ -344,7 +368,10 @@ bool wxRichTextBulletsPage::TransferDataToWindow() m_periodCtrl->SetValue(false); } else + { + m_hasBulletStyle = false; m_styleListBox->SetSelection(-1); + } if (attr->HasBulletSymbol()) { @@ -362,6 +389,11 @@ bool wxRichTextBulletsPage::TransferDataToWindow() else m_numberCtrl->SetValue(0); + if (attr->HasBulletName()) + m_bulletNameCtrl->SetValue(attr->GetBulletName()); + else + m_bulletNameCtrl->SetValue(wxEmptyString); + UpdatePreview(); m_dontUpdate = false; @@ -384,7 +416,7 @@ iaculis malesuada. Donec bibendum ipsum ut ante porta fringilla.\n"); TransferDataFromWindow(); wxTextAttrEx attr(*GetAttributes()); attr.SetFlags(attr.GetFlags() & - (wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_SYMBOL| + (wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_SYMBOL|wxTEXT_ATTR_BULLET_NAME| wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER| wxTEXT_ATTR_LINE_SPACING)); @@ -691,9 +723,17 @@ void wxRichTextBulletsPage::OnSymbolUpdate( wxUpdateUIEvent& event ) void wxRichTextBulletsPage::OnNumberUpdate( wxUpdateUIEvent& event ) { int sel = m_styleListBox->GetSelection(); - event.Enable( m_hasBulletStyle && (sel != 6 && sel != 7 && sel != 0)); + event.Enable( m_hasBulletStyle && (sel != 6 && sel != 7 && sel != 8 && sel != 0)); } +/// Update for standard bullet-related controls +void wxRichTextBulletsPage::OnStandardBulletUpdate( wxUpdateUIEvent& event ) +{ + int sel = m_styleListBox->GetSelection(); + event.Enable( sel == 8 ); +} + + /*! * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC */ @@ -713,4 +753,45 @@ void wxRichTextBulletsPage::OnNumberstaticUpdate( wxUpdateUIEvent& event ) OnNumberUpdate(event); } +/*! + * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMESTATIC + */ + +void wxRichTextBulletsPage::OnNamestaticUpdate( wxUpdateUIEvent& event ) +{ + OnStandardBulletUpdate(event); +} + + +/*! + * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL + */ + +void wxRichTextBulletsPage::OnNamectrlSelected( wxCommandEvent& WXUNUSED(event) ) +{ + if (m_dontUpdate) + return; + UpdatePreview(); +} + +/*! + * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL + */ + +void wxRichTextBulletsPage::OnNamectrlUpdated( wxCommandEvent& WXUNUSED(event) ) +{ + if (m_dontUpdate) + return; + UpdatePreview(); +} + +/*! + * wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL + */ + +void wxRichTextBulletsPage::OnNamectrlUIUpdate( wxUpdateUIEvent& event ) +{ + OnStandardBulletUpdate(event); +} + #endif // wxUSE_RICHTEXT diff --git a/src/richtext/richtextliststylepage.cpp b/src/richtext/richtextliststylepage.cpp index b50a379f77..75a7f77ee6 100644 --- a/src/richtext/richtextliststylepage.cpp +++ b/src/richtext/richtextliststylepage.cpp @@ -37,6 +37,12 @@ BEGIN_EVENT_TABLE( wxRichTextListStylePage, wxPanel ) EVT_LISTBOX( ID_RICHTEXTLISTSTYLEPAGE_STYLELISTBOX, wxRichTextListStylePage::OnStylelistboxSelected ) + EVT_CHECKBOX( ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL, wxRichTextListStylePage::OnPeriodctrlClick ) + EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL, wxRichTextListStylePage::OnPeriodctrlUpdate ) + + EVT_CHECKBOX( ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL, wxRichTextListStylePage::OnParenthesesctrlClick ) + EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL, wxRichTextListStylePage::OnParenthesesctrlUpdate ) + EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC, wxRichTextListStylePage::OnSymbolstaticUpdate ) EVT_COMBOBOX( ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxRichTextListStylePage::OnSymbolctrlSelected ) @@ -50,11 +56,11 @@ BEGIN_EVENT_TABLE( wxRichTextListStylePage, wxPanel ) EVT_TEXT( ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL, wxRichTextListStylePage::OnSymbolfontctrlUpdated ) EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL, wxRichTextListStylePage::OnSymbolfontctrlUIUpdate ) - EVT_CHECKBOX( ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL, wxRichTextListStylePage::OnParenthesesctrlClick ) - EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL, wxRichTextListStylePage::OnParenthesesctrlUpdate ) + EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_NAMESTATIC, wxRichTextListStylePage::OnNamestaticUpdate ) - EVT_CHECKBOX( ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL, wxRichTextListStylePage::OnPeriodctrlClick ) - EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL, wxRichTextListStylePage::OnPeriodctrlUpdate ) + EVT_COMBOBOX( ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL, wxRichTextListStylePage::OnNamectrlSelected ) + EVT_TEXT( ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL, wxRichTextListStylePage::OnNamectrlUpdated ) + EVT_UPDATE_UI( ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL, wxRichTextListStylePage::OnNamectrlUIUpdate ) EVT_RADIOBUTTON( ID_RICHTEXTLISTSTYLEPAGE_ALIGNLEFT, wxRichTextListStylePage::OnRichtextliststylepageAlignleftSelected ) @@ -128,10 +134,11 @@ void wxRichTextListStylePage::Init() ////@begin wxRichTextListStylePage member initialisation m_levelCtrl = NULL; m_styleListBox = NULL; + m_periodCtrl = NULL; + m_parenthesesCtrl = NULL; m_symbolCtrl = NULL; m_symbolFontCtrl = NULL; - m_parenthesesCtrl = NULL; - m_periodCtrl = NULL; + m_bulletNameCtrl = NULL; m_alignmentLeft = NULL; m_alignmentRight = NULL; m_alignmentJustified = NULL; @@ -146,6 +153,7 @@ void wxRichTextListStylePage::Init() m_previewCtrl = NULL; ////@end wxRichTextListStylePage member initialisation } + /*! * Control creation for wxRichTextListStylePage */ @@ -181,7 +189,7 @@ void wxRichTextListStylePage::CreateControls() itemButton8->SetToolTip(_("Click to choose the font for this level.")); itemBoxSizer4->Add(itemButton8, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - wxNotebook* itemNotebook9 = new wxNotebook( itemPanel1, ID_RICHTEXTLISTSTYLEPAGE_NOTEBOOK, wxDefaultPosition, wxDefaultSize, wxBK_TOP ); + wxNotebook* itemNotebook9 = new wxNotebook( itemPanel1, ID_RICHTEXTLISTSTYLEPAGE_NOTEBOOK, wxDefaultPosition, wxDefaultSize, wxNB_TOP ); wxPanel* itemPanel10 = new wxPanel( itemNotebook9, ID_RICHTEXTLISTSTYLEPAGE_BULLETS, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxTAB_TRAVERSAL ); wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL); @@ -195,72 +203,77 @@ void wxRichTextListStylePage::CreateControls() itemBoxSizer13->Add(itemStaticText14, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); wxString* m_styleListBoxStrings = NULL; - m_styleListBox = new wxListBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_STYLELISTBOX, wxDefaultPosition, wxDefaultSize, 0, m_styleListBoxStrings, wxLB_SINGLE ); + m_styleListBox = new wxListBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_STYLELISTBOX, wxDefaultPosition, wxSize(-1, 130), 0, m_styleListBoxStrings, wxLB_SINGLE ); m_styleListBox->SetHelpText(_("The available bullet styles.")); if (ShowToolTips()) m_styleListBox->SetToolTip(_("The available bullet styles.")); - itemBoxSizer13->Add(m_styleListBox, 1, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + itemBoxSizer13->Add(m_styleListBox, 1, wxGROW|wxALL, 5); + + wxBoxSizer* itemBoxSizer16 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer13->Add(itemBoxSizer16, 0, wxGROW, 5); + m_periodCtrl = new wxCheckBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL, _("Peri&od"), wxDefaultPosition, wxDefaultSize, 0 ); + m_periodCtrl->SetValue(false); + m_periodCtrl->SetHelpText(_("Check to add a period after the bullet.")); + if (ShowToolTips()) + m_periodCtrl->SetToolTip(_("Check to add a period after the bullet.")); + itemBoxSizer16->Add(m_periodCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + + m_parenthesesCtrl = new wxCheckBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL, _("&Parentheses"), wxDefaultPosition, wxDefaultSize, 0 ); + m_parenthesesCtrl->SetValue(false); + m_parenthesesCtrl->SetHelpText(_("Check to enclose the bullet in parentheses.")); + if (ShowToolTips()) + m_parenthesesCtrl->SetToolTip(_("Check to enclose the bullet in parentheses.")); + itemBoxSizer16->Add(m_parenthesesCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); itemBoxSizer12->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); - wxStaticLine* itemStaticLine17 = new wxStaticLine( itemPanel10, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - itemBoxSizer12->Add(itemStaticLine17, 0, wxGROW|wxALL, 5); + wxStaticLine* itemStaticLine20 = new wxStaticLine( itemPanel10, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); + itemBoxSizer12->Add(itemStaticLine20, 0, wxGROW|wxALL, 5); itemBoxSizer12->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); - wxBoxSizer* itemBoxSizer19 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer12->Add(itemBoxSizer19, 0, wxGROW, 5); - wxStaticText* itemStaticText20 = new wxStaticText( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC, _("&Symbol:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer19->Add(itemStaticText20, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + wxBoxSizer* itemBoxSizer22 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer12->Add(itemBoxSizer22, 0, wxGROW, 5); + wxStaticText* itemStaticText23 = new wxStaticText( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC, _("&Symbol:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer22->Add(itemStaticText23, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - wxBoxSizer* itemBoxSizer21 = new wxBoxSizer(wxHORIZONTAL); - itemBoxSizer19->Add(itemBoxSizer21, 0, wxGROW, 5); + wxBoxSizer* itemBoxSizer24 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer22->Add(itemBoxSizer24, 0, wxGROW, 5); wxString* m_symbolCtrlStrings = NULL; - m_symbolCtrl = new wxComboBox( itemPanel10, ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, wxEmptyString, wxDefaultPosition, wxSize(60, -1), 0, m_symbolCtrlStrings, wxCB_DROPDOWN ); + m_symbolCtrl = new wxComboBox( itemPanel10, ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL, _T(""), wxDefaultPosition, wxSize(60, -1), 0, m_symbolCtrlStrings, wxCB_DROPDOWN ); m_symbolCtrl->SetHelpText(_("The bullet character.")); if (ShowToolTips()) m_symbolCtrl->SetToolTip(_("The bullet character.")); - itemBoxSizer21->Add(m_symbolCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE, 5); + itemBoxSizer24->Add(m_symbolCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxFIXED_MINSIZE, 5); - wxButton* itemButton23 = new wxButton( itemPanel10, ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL, _("Ch&oose..."), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton23->SetHelpText(_("Click to browse for a symbol.")); + wxButton* itemButton26 = new wxButton( itemPanel10, ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL, _("Ch&oose..."), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton26->SetHelpText(_("Click to browse for a symbol.")); if (ShowToolTips()) - itemButton23->SetToolTip(_("Click to browse for a symbol.")); - itemBoxSizer21->Add(itemButton23, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + itemButton26->SetToolTip(_("Click to browse for a symbol.")); + itemBoxSizer24->Add(itemButton26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - itemBoxSizer19->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + itemBoxSizer22->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL, 5); - wxStaticText* itemStaticText25 = new wxStaticText( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC, _("Symbol &font:"), wxDefaultPosition, wxDefaultSize, 0 ); - itemBoxSizer19->Add(itemStaticText25, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + wxStaticText* itemStaticText28 = new wxStaticText( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC, _("Symbol &font:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer22->Add(itemStaticText28, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); wxString* m_symbolFontCtrlStrings = NULL; - m_symbolFontCtrl = new wxComboBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, m_symbolFontCtrlStrings, wxCB_DROPDOWN ); + m_symbolFontCtrl = new wxComboBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_symbolFontCtrlStrings, wxCB_DROPDOWN ); if (ShowToolTips()) m_symbolFontCtrl->SetToolTip(_("Available fonts.")); - itemBoxSizer19->Add(m_symbolFontCtrl, 0, wxGROW|wxALL, 5); - - itemBoxSizer12->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); + itemBoxSizer22->Add(m_symbolFontCtrl, 0, wxGROW|wxALL, 5); - wxStaticLine* itemStaticLine28 = new wxStaticLine( itemPanel10, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL ); - itemBoxSizer12->Add(itemStaticLine28, 0, wxGROW|wxALL, 5); + itemBoxSizer22->Add(5, 5, 1, wxALIGN_CENTER_HORIZONTAL, 5); - itemBoxSizer12->Add(2, 1, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5); + wxStaticText* itemStaticText31 = new wxStaticText( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_NAMESTATIC, _("S&tandard bullet name:"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer22->Add(itemStaticText31, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - wxBoxSizer* itemBoxSizer30 = new wxBoxSizer(wxVERTICAL); - itemBoxSizer12->Add(itemBoxSizer30, 0, wxALIGN_TOP|wxRIGHT|wxTOP|wxBOTTOM, 5); - m_parenthesesCtrl = new wxCheckBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL, _("&Parentheses"), wxDefaultPosition, wxDefaultSize, 0 ); - m_parenthesesCtrl->SetValue(false); - m_parenthesesCtrl->SetHelpText(_("Check to enclose the bullet in parentheses.")); - if (ShowToolTips()) - m_parenthesesCtrl->SetToolTip(_("Check to enclose the bullet in parentheses.")); - itemBoxSizer30->Add(m_parenthesesCtrl, 0, wxALIGN_LEFT|wxALL, 5); - - m_periodCtrl = new wxCheckBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL, _("Peri&od"), wxDefaultPosition, wxDefaultSize, 0 ); - m_periodCtrl->SetValue(false); - m_periodCtrl->SetHelpText(_("Check to add a period after the bullet.")); + wxString* m_bulletNameCtrlStrings = NULL; + m_bulletNameCtrl = new wxComboBox( itemPanel10, ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0, m_bulletNameCtrlStrings, wxCB_DROPDOWN ); + m_bulletNameCtrl->SetHelpText(_("A standard bullet name.")); if (ShowToolTips()) - m_periodCtrl->SetToolTip(_("Check to add a period after the bullet.")); - itemBoxSizer30->Add(m_periodCtrl, 0, wxALIGN_LEFT|wxALL, 5); + m_bulletNameCtrl->SetToolTip(_("A standard bullet name.")); + itemBoxSizer22->Add(m_bulletNameCtrl, 0, wxGROW|wxALL, 5); itemNotebook9->AddPage(itemPanel10, _("Bullet style")); @@ -339,7 +352,7 @@ void wxRichTextListStylePage::CreateControls() wxBoxSizer* itemBoxSizer55 = new wxBoxSizer(wxHORIZONTAL); itemFlexGridSizer53->Add(itemBoxSizer55, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); - m_indentLeft = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_INDENTLEFT, wxEmptyString, wxDefaultPosition, wxSize(50, -1), 0 ); + m_indentLeft = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_INDENTLEFT, _T(""), wxDefaultPosition, wxSize(50, -1), 0 ); m_indentLeft->SetHelpText(_("The left indent.")); if (ShowToolTips()) m_indentLeft->SetToolTip(_("The left indent.")); @@ -350,7 +363,7 @@ void wxRichTextListStylePage::CreateControls() wxBoxSizer* itemBoxSizer58 = new wxBoxSizer(wxHORIZONTAL); itemFlexGridSizer53->Add(itemBoxSizer58, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); - m_indentLeftFirst = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_INDENTFIRSTLINE, wxEmptyString, wxDefaultPosition, wxSize(50, -1), 0 ); + m_indentLeftFirst = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_INDENTFIRSTLINE, _T(""), wxDefaultPosition, wxSize(50, -1), 0 ); m_indentLeftFirst->SetHelpText(_("The first line indent.")); if (ShowToolTips()) m_indentLeftFirst->SetToolTip(_("The first line indent.")); @@ -361,7 +374,7 @@ void wxRichTextListStylePage::CreateControls() wxBoxSizer* itemBoxSizer61 = new wxBoxSizer(wxHORIZONTAL); itemFlexGridSizer53->Add(itemBoxSizer61, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); - m_indentRight = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_INDENTRIGHT, wxEmptyString, wxDefaultPosition, wxSize(50, -1), 0 ); + m_indentRight = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_INDENTRIGHT, _T(""), wxDefaultPosition, wxSize(50, -1), 0 ); m_indentRight->SetHelpText(_("The right indent.")); if (ShowToolTips()) m_indentRight->SetToolTip(_("The right indent.")); @@ -390,7 +403,7 @@ void wxRichTextListStylePage::CreateControls() wxBoxSizer* itemBoxSizer72 = new wxBoxSizer(wxHORIZONTAL); itemFlexGridSizer70->Add(itemBoxSizer72, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); - m_spacingBefore = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_SPACINGBEFORE, wxEmptyString, wxDefaultPosition, wxSize(50, -1), 0 ); + m_spacingBefore = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_SPACINGBEFORE, _T(""), wxDefaultPosition, wxSize(50, -1), 0 ); m_spacingBefore->SetHelpText(_("The spacing before the paragraph.")); if (ShowToolTips()) m_spacingBefore->SetToolTip(_("The spacing before the paragraph.")); @@ -401,7 +414,7 @@ void wxRichTextListStylePage::CreateControls() wxBoxSizer* itemBoxSizer75 = new wxBoxSizer(wxHORIZONTAL); itemFlexGridSizer70->Add(itemBoxSizer75, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); - m_spacingAfter = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_SPACINGAFTER, wxEmptyString, wxDefaultPosition, wxSize(50, -1), 0 ); + m_spacingAfter = new wxTextCtrl( itemPanel33, ID_RICHTEXTLISTSTYLEPAGE_SPACINGAFTER, _T(""), wxDefaultPosition, wxSize(50, -1), 0 ); m_spacingAfter->SetHelpText(_("The spacing after the paragraph.")); if (ShowToolTips()) m_spacingAfter->SetToolTip(_("The spacing after the paragraph.")); @@ -444,6 +457,7 @@ void wxRichTextListStylePage::CreateControls() m_styleListBox->Append(_("Lower case roman numerals")); m_styleListBox->Append(_("Symbol")); m_styleListBox->Append(_("Bitmap")); + m_styleListBox->Append(_("Standard")); m_symbolCtrl->Append(_("*")); m_symbolCtrl->Append(_("-")); @@ -451,6 +465,9 @@ void wxRichTextListStylePage::CreateControls() m_symbolCtrl->Append(_("+")); m_symbolCtrl->Append(_("~")); + m_bulletNameCtrl->Append(_("standard/round")); + m_bulletNameCtrl->Append(_("standard/square")); + wxArrayString facenames = wxRichTextCtrl::GetAvailableFontNames(); facenames.Sort(); @@ -601,6 +618,11 @@ bool wxRichTextListStylePage::TransferDataFromWindow() bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_SYMBOL; else if (index == 7) bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_BITMAP; + else if (index == 8) + { + bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_STANDARD; + attr->SetBulletName(m_bulletNameCtrl->GetValue()); + } if (m_parenthesesCtrl->GetValue()) bulletStyle |= wxTEXT_ATTR_BULLET_STYLE_PARENTHESES; @@ -735,6 +757,8 @@ void wxRichTextListStylePage::DoTransferDataToWindow() index = 6; else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_BITMAP) index = 7; + else if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_STANDARD) + index = 8; m_styleListBox->SetSelection(index); if (attr->GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_PARENTHESES) @@ -761,6 +785,11 @@ void wxRichTextListStylePage::DoTransferDataToWindow() else m_symbolCtrl->SetValue(wxEmptyString); + if (attr->HasBulletName()) + m_bulletNameCtrl->SetValue(attr->GetBulletName()); + else + m_bulletNameCtrl->SetValue(wxEmptyString); + m_dontUpdate = false; } @@ -832,7 +861,7 @@ void wxRichTextListStylePage::OnLevelDown( wxSpinEvent& event ) * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_LEVEL */ -void wxRichTextListStylePage::OnLevelTextUpdated( wxCommandEvent& event ) +void wxRichTextListStylePage::OnLevelTextUpdated( wxCommandEvent& WXUNUSED(event) ) { // Can cause problems #if 0 @@ -1151,7 +1180,14 @@ void wxRichTextListStylePage::OnSymbolUpdate( wxUpdateUIEvent& event ) void wxRichTextListStylePage::OnNumberUpdate( wxUpdateUIEvent& event ) { int sel = m_styleListBox->GetSelection(); - event.Enable((sel != 6 && sel != 7 && sel != 0)); + event.Enable((sel != 6 && sel != 7 && sel != 8 && sel != 0)); +} + +/// Update for standard bullet-related controls +void wxRichTextListStylePage::OnStandardBulletUpdate( wxUpdateUIEvent& event ) +{ + int sel = m_styleListBox->GetSelection(); + event.Enable( sel == 8 ); } /*! @@ -1173,3 +1209,38 @@ void wxRichTextListStylePage::OnChooseFontClick( wxCommandEvent& WXUNUSED(event) TransferAndPreview(); } } +/*! + * wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMESTATIC + */ + +void wxRichTextListStylePage::OnNamestaticUpdate( wxUpdateUIEvent& event ) +{ + OnStandardBulletUpdate(event); +} + +/*! + * wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL + */ + +void wxRichTextListStylePage::OnNamectrlSelected( wxCommandEvent& WXUNUSED(event) ) +{ + TransferAndPreview(); +} + +/*! + * wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL + */ + +void wxRichTextListStylePage::OnNamectrlUpdated( wxCommandEvent& WXUNUSED(event) ) +{ + TransferAndPreview(); +} + +/*! + * wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL + */ + +void wxRichTextListStylePage::OnNamectrlUIUpdate( wxUpdateUIEvent& event ) +{ + OnStandardBulletUpdate(event); +} diff --git a/src/richtext/richtextxml.cpp b/src/richtext/richtextxml.cpp index eed0a71f4f..93976ae167 100644 --- a/src/richtext/richtextxml.cpp +++ b/src/richtext/richtextxml.cpp @@ -657,7 +657,7 @@ wxString wxRichTextXMLHandler::CreateStyle(const wxTextAttrEx& attr, bool isPara } if (!attr.GetCharacterStyleName().empty()) - str << wxT(" charactertyle=\"") << wxString(attr.GetCharacterStyleName()) << wxT("\""); + str << wxT(" characterstyle=\"") << wxString(attr.GetCharacterStyleName()) << wxT("\""); if (isPara) { @@ -694,9 +694,15 @@ wxString wxRichTextXMLHandler::CreateStyle(const wxTextAttrEx& attr, bool isPara str << wxT(" bulletfont=\"") << attr.GetBulletFont() << wxT("\""); } + if (attr.HasBulletName()) + str << wxT(" bulletname=\"") << attr.GetBulletName() << wxT("\""); + if (!attr.GetParagraphStyleName().empty()) str << wxT(" parstyle=\"") << wxString(attr.GetParagraphStyleName()) << wxT("\""); + if (!attr.GetListStyleName().empty()) + str << wxT(" liststyle=\"") << wxString(attr.GetListStyleName()) << wxT("\""); + if (attr.HasTabs()) { str << wxT(" tabs=\""); @@ -853,10 +859,18 @@ bool wxRichTextXMLHandler::GetStyle(wxTextAttrEx& attr, wxXmlNode* node, bool is if (!value.empty()) attr.SetBulletFont(value); + value = node->GetPropVal(wxT("bulletname"), wxEmptyString); + if (!value.empty()) + attr.SetBulletName(value); + value = node->GetPropVal(wxT("parstyle"), wxEmptyString); if (!value.empty()) attr.SetParagraphStyleName(value); + value = node->GetPropVal(wxT("liststyle"), wxEmptyString); + if (!value.empty()) + attr.SetListStyleName(value); + value = node->GetPropVal(wxT("tabs"), wxEmptyString); if (!value.empty()) { -- 2.45.2