+wxTextAttr::wxTextAttr(const wxColour& colText,
+ const wxColour& colBack,
+ const wxFont& font,
+ wxTextAttrAlignment alignment)
+ : m_colText(colText), m_colBack(colBack), m_font(font), m_textAlignment(alignment)
+{
+ m_flags = 0;
+ m_leftIndent = 0;
+ m_leftSubIndent = 0;
+ m_rightIndent = 0;
+ if (m_colText.Ok()) m_flags |= wxTEXT_ATTR_TEXT_COLOUR;
+ if (m_colBack.Ok()) m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR;
+ if (m_font.Ok()) m_flags |= wxTEXT_ATTR_FONT;
+ if (alignment != wxTEXT_ALIGNMENT_DEFAULT)
+ m_flags |= wxTEXT_ATTR_ALIGNMENT;
+}
+
+void wxTextAttr::Init()
+{
+ m_textAlignment = wxTEXT_ALIGNMENT_DEFAULT;
+ m_flags = 0;
+ m_leftIndent = 0;
+ m_leftSubIndent = 0;
+ m_rightIndent = 0;
+}
+
+/* static */
+wxTextAttr wxTextAttr::Combine(const wxTextAttr& attr,
+ const wxTextAttr& attrDef,
+ const wxTextCtrlBase *text)
+{
+ wxFont font = attr.GetFont();
+ if ( !font.Ok() )
+ {
+ font = attrDef.GetFont();
+
+ if ( text && !font.Ok() )
+ font = text->GetFont();
+ }
+
+ wxColour colFg = attr.GetTextColour();
+ if ( !colFg.Ok() )
+ {
+ colFg = attrDef.GetTextColour();
+
+ if ( text && !colFg.Ok() )
+ colFg = text->GetForegroundColour();
+ }
+
+ wxColour colBg = attr.GetBackgroundColour();
+ if ( !colBg.Ok() )
+ {
+ colBg = attrDef.GetBackgroundColour();
+
+ if ( text && !colBg.Ok() )
+ colBg = text->GetBackgroundColour();
+ }
+
+ wxTextAttr newAttr(colFg, colBg, font);
+
+ if (attr.HasAlignment())
+ newAttr.SetAlignment(attr.GetAlignment());
+ else if (attrDef.HasAlignment())
+ newAttr.SetAlignment(attrDef.GetAlignment());
+
+ if (attr.HasTabs())
+ newAttr.SetTabs(attr.GetTabs());
+ else if (attrDef.HasTabs())
+ newAttr.SetTabs(attrDef.GetTabs());
+
+ if (attr.HasLeftIndent())
+ newAttr.SetLeftIndent(attr.GetLeftIndent(), attr.GetLeftSubIndent());
+ else if (attrDef.HasLeftIndent())
+ newAttr.SetLeftIndent(attrDef.GetLeftIndent(), attr.GetLeftSubIndent());
+
+ if (attr.HasRightIndent())
+ newAttr.SetRightIndent(attr.GetRightIndent());
+ else if (attrDef.HasRightIndent())
+ newAttr.SetRightIndent(attrDef.GetRightIndent());
+
+ return newAttr;
+}
+
+void wxTextAttr::operator= (const wxTextAttr& attr)
+{
+ m_font = attr.m_font;
+ m_colText = attr.m_colText;
+ m_colBack = attr.m_colBack;
+ m_textAlignment = attr.m_textAlignment;
+ m_leftIndent = attr.m_leftIndent;
+ m_leftSubIndent = attr.m_leftSubIndent;
+ m_rightIndent = attr.m_rightIndent;
+ m_tabs = attr.m_tabs;
+ m_flags = attr.m_flags;
+}
+
+
+// apply styling to text range
+bool wxTextCtrlBase::SetStyle(long WXUNUSED(start), long WXUNUSED(end),
+ const wxTextAttr& WXUNUSED(style))
+{
+ // to be implemented in derived TextCtrl classes
+ return false;
+}
+
+// get the styling at the given position
+bool wxTextCtrlBase::GetStyle(long WXUNUSED(position), wxTextAttr& WXUNUSED(style))
+{
+ // to be implemented in derived TextCtrl classes
+ return false;
+}
+
+// change default text attributes
+bool wxTextCtrlBase::SetDefaultStyle(const wxTextAttr& style)
+{
+ // keep the old attributes if the new style doesn't specify them unless the
+ // new style is empty - then reset m_defaultStyle (as there is no other way
+ // to do it)
+ if ( style.IsDefault() )
+ m_defaultStyle = style;
+ else
+ m_defaultStyle = wxTextAttr::Combine(style, m_defaultStyle, this);
+
+ return true;
+}
+
+// get default text attributes
+const wxTextAttr& wxTextCtrlBase::GetDefaultStyle() const