From 2f987d8309bad8ec8f05bcb0910c0c34dd6d8986 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Mon, 2 Jan 2012 21:18:05 +0000 Subject: [PATCH] Added a box style definition name to the box attribute. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/richtext/richtextbuffer.h | 19 ++++++++++++++++- interface/wx/richtext/richtextbuffer.h | 16 ++++++++++++++ src/richtext/richtextbuffer.cpp | 39 +++++++++++++++++++++++++++++++++- src/richtext/richtextxml.cpp | 13 ++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) diff --git a/include/wx/richtext/richtextbuffer.h b/include/wx/richtext/richtextbuffer.h index 8d73233..38d75f1 100644 --- a/include/wx/richtext/richtextbuffer.h +++ b/include/wx/richtext/richtextbuffer.h @@ -273,7 +273,8 @@ enum wxTextBoxAttrFlags wxTEXT_BOX_ATTR_FLOAT = 0x00000001, wxTEXT_BOX_ATTR_CLEAR = 0x00000002, wxTEXT_BOX_ATTR_COLLAPSE_BORDERS = 0x00000004, - wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT = 0x00000008 + wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT = 0x00000008, + wxTEXT_BOX_ATTR_BOX_STYLE_NAME = 0x00000010 }; /** @@ -1332,6 +1333,21 @@ public: wxTextAttrDimension& GetHeight() { return m_size.m_height; } const wxTextAttrDimension& GetHeight() const { return m_size.m_height; } + /** + Returns the box style name. + */ + const wxString& GetBoxStyleName() const { return m_boxStyleName; } + + /** + Sets the box style name. + */ + void SetBoxStyleName(const wxString& name) { m_boxStyleName = name; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); } + + /** + Returns @true if the box style name is present. + */ + bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); } + public: int m_flags; @@ -1349,6 +1365,7 @@ public: wxTextBoxAttrClearStyle m_clearMode; wxTextBoxAttrCollapseMode m_collapseMode; wxTextBoxAttrVerticalAlignment m_verticalAlignment; + wxString m_boxStyleName; }; /** diff --git a/interface/wx/richtext/richtextbuffer.h b/interface/wx/richtext/richtextbuffer.h index 6c2a6b2..c9c4b65 100644 --- a/interface/wx/richtext/richtextbuffer.h +++ b/interface/wx/richtext/richtextbuffer.h @@ -1217,6 +1217,21 @@ public: wxTextAttrDimension& GetHeight() { return m_size.m_height; } const wxTextAttrDimension& GetHeight() const { return m_size.m_height; } + /** + Returns the box style name. + */ + const wxString& GetBoxStyleName() const { return m_boxStyleName; } + + /** + Sets the box style name. + */ + void SetBoxStyleName(const wxString& name) { m_boxStyleName = name; AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); } + + /** + Returns @true if the box style name is present. + */ + bool HasBoxStyleName() const { return HasFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); } + public: int m_flags; @@ -1234,6 +1249,7 @@ public: wxTextBoxAttrClearStyle m_clearMode; wxTextBoxAttrCollapseMode m_collapseMode; wxTextBoxAttrVerticalAlignment m_verticalAlignment; + wxString m_boxStyleName; }; /** diff --git a/src/richtext/richtextbuffer.cpp b/src/richtext/richtextbuffer.cpp index e762e5a..dcd5578 100644 --- a/src/richtext/richtextbuffer.cpp +++ b/src/richtext/richtextbuffer.cpp @@ -10746,6 +10746,7 @@ void wxTextBoxAttr::Reset() m_clearMode = wxTEXT_BOX_ATTR_CLEAR_NONE; m_collapseMode = wxTEXT_BOX_ATTR_COLLAPSE_NONE; m_verticalAlignment = wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT_NONE; + m_boxStyleName = wxEmptyString; m_margins.Reset(); m_padding.Reset(); @@ -10774,7 +10775,9 @@ bool wxTextBoxAttr::operator== (const wxTextBoxAttr& attr) const m_size == attr.m_size && m_border == attr.m_border && - m_outline == attr.m_outline + m_outline == attr.m_outline && + + m_boxStyleName == attr.m_boxStyleName ); } @@ -10793,6 +10796,9 @@ bool wxTextBoxAttr::EqPartial(const wxTextBoxAttr& attr) const if (attr.HasVerticalAlignment() && HasVerticalAlignment() && (attr.GetVerticalAlignment() != GetVerticalAlignment())) return false; + if (attr.HasBoxStyleName() && HasBoxStyleName() && (attr.GetBoxStyleName() != GetBoxStyleName())) + return false; + // Position if (!m_position.EqPartial(attr.m_position)) @@ -10850,6 +10856,12 @@ bool wxTextBoxAttr::Apply(const wxTextBoxAttr& attr, const wxTextBoxAttr* compar SetVerticalAlignment(attr.GetVerticalAlignment()); } + if (attr.HasBoxStyleName()) + { + if (!(compareWith && compareWith->HasBoxStyleName() && compareWith->GetBoxStyleName() == attr.GetBoxStyleName())) + SetBoxStyleName(attr.GetBoxStyleName()); + } + m_margins.Apply(attr.m_margins, compareWith ? (& attr.m_margins) : (const wxTextAttrDimensions*) NULL); m_padding.Apply(attr.m_padding, compareWith ? (& attr.m_padding) : (const wxTextAttrDimensions*) NULL); m_position.Apply(attr.m_position, compareWith ? (& attr.m_position) : (const wxTextAttrDimensions*) NULL); @@ -10877,6 +10889,12 @@ bool wxTextBoxAttr::RemoveStyle(const wxTextBoxAttr& attr) if (attr.HasVerticalAlignment()) RemoveFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT); + if (attr.HasBoxStyleName()) + { + SetBoxStyleName(wxEmptyString); + RemoveFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); + } + m_margins.RemoveStyle(attr.m_margins); m_padding.RemoveStyle(attr.m_padding); m_position.RemoveStyle(attr.m_position); @@ -10969,6 +10987,25 @@ void wxTextBoxAttr::CollectCommonAttributes(const wxTextBoxAttr& attr, wxTextBox else absentAttr.AddFlag(wxTEXT_BOX_ATTR_VERTICAL_ALIGNMENT); + if (attr.HasBoxStyleName()) + { + if (!clashingAttr.HasBoxStyleName() && !absentAttr.HasBoxStyleName()) + { + if (HasBoxStyleName()) + { + if (GetBoxStyleName() != attr.GetBoxStyleName()) + { + clashingAttr.AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); + RemoveFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); + } + } + else + SetBoxStyleName(attr.GetBoxStyleName()); + } + } + else + absentAttr.AddFlag(wxTEXT_BOX_ATTR_BOX_STYLE_NAME); + m_margins.CollectCommonAttributes(attr.m_margins, clashingAttr.m_margins, absentAttr.m_margins); m_padding.CollectCommonAttributes(attr.m_padding, clashingAttr.m_padding, absentAttr.m_padding); m_position.CollectCommonAttributes(attr.m_position, clashingAttr.m_position, absentAttr.m_position); diff --git a/src/richtext/richtextxml.cpp b/src/richtext/richtextxml.cpp index 9a34fd8..a8d3894 100644 --- a/src/richtext/richtextxml.cpp +++ b/src/richtext/richtextxml.cpp @@ -1162,6 +1162,9 @@ wxString wxRichTextXMLHandler::AddAttributes(const wxRichTextAttr& attr, bool is if (!attr.GetListStyleName().empty()) AddAttribute(str, wxT("liststyle"), AttributeToXML(attr.GetListStyleName())); + if (!attr.GetTextBoxAttr().GetBoxStyleName().empty()) + AddAttribute(str, wxT("boxstyle"), AttributeToXML(attr.GetTextBoxAttr().GetBoxStyleName())); + if (attr.HasTabs()) { wxString strTabs; @@ -1451,6 +1454,9 @@ bool wxRichTextXMLHandler::AddAttributes(wxXmlNode* node, wxRichTextAttr& attr, if (!attr.GetListStyleName().empty()) node->AddAttribute(wxT("liststyle"), attr.GetListStyleName()); + if (!attr.GetTextBoxAttr().GetBoxStyleName().empty()) + node->AddAttribute(wxT("boxstyle"), attr.GetTextBoxAttr().GetBoxStyleName()); + if (attr.HasTabs()) { wxString tabs; @@ -1804,6 +1810,13 @@ bool wxRichTextXMLHandler::ImportStyle(wxRichTextAttr& attr, wxXmlNode* node, bo attr.SetListStyleName(value); } } + else if (name == wxT("boxstyle")) + { + if (!value.empty()) + { + attr.GetTextBoxAttr().SetBoxStyleName(value); + } + } else if (name == wxT("tabs")) { if (!value.empty()) -- 2.7.4