-IMPLEMENT_DYNAMIC_CLASS(wxRichTextImage, wxRichTextObject)
-
-wxRichTextImage::wxRichTextImage(const wxImage& image, wxRichTextObject* parent):
- wxRichTextObject(parent)
-{
- m_image = image;
-}
-
-wxRichTextImage::wxRichTextImage(const wxRichTextImageBlock& imageBlock, wxRichTextObject* parent):
- wxRichTextObject(parent)
-{
- m_imageBlock = imageBlock;
- m_imageBlock.Load(m_image);
-}
-
-/// Load wxImage from the block
-bool wxRichTextImage::LoadFromBlock()
-{
- m_imageBlock.Load(m_image);
- return m_imageBlock.Ok();
-}
-
-/// Make block from the wxImage
-bool wxRichTextImage::MakeBlock()
-{
- if (m_imageBlock.GetImageType() == wxBITMAP_TYPE_ANY || m_imageBlock.GetImageType() == -1)
- m_imageBlock.SetImageType(wxBITMAP_TYPE_PNG);
-
- m_imageBlock.MakeImageBlock(m_image, m_imageBlock.GetImageType());
- return m_imageBlock.Ok();
-}
-
-
-/// Draw the item
-bool wxRichTextImage::Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int WXUNUSED(descent), int WXUNUSED(style))
-{
- if (!m_image.Ok() && m_imageBlock.Ok())
- LoadFromBlock();
-
- if (!m_image.Ok())
- return false;
-
- if (m_image.Ok() && !m_bitmap.Ok())
- m_bitmap = wxBitmap(m_image);
-
- int y = rect.y + (rect.height - m_image.GetHeight());
-
- if (m_bitmap.Ok())
- dc.DrawBitmap(m_bitmap, rect.x, y, true);
-
- if (selectionRange.Contains(range.GetStart()))
- {
- dc.SetBrush(*wxBLACK_BRUSH);
- dc.SetPen(*wxBLACK_PEN);
- dc.SetLogicalFunction(wxINVERT);
- dc.DrawRectangle(rect);
- dc.SetLogicalFunction(wxCOPY);
- }
-
- return true;
-}
-
-/// Lay the item out
-bool wxRichTextImage::Layout(wxDC& WXUNUSED(dc), const wxRect& rect, int WXUNUSED(style))
-{
- if (!m_image.Ok())
- LoadFromBlock();
-
- if (m_image.Ok())
- {
- SetCachedSize(wxSize(m_image.GetWidth(), m_image.GetHeight()));
- SetPosition(rect.GetPosition());
- }
-
- return true;
-}
-
-/// Get/set the object size for the given range. Returns false if the range
-/// is invalid for this object.
-bool wxRichTextImage::GetRangeSize(const wxRichTextRange& range, wxSize& size, int& WXUNUSED(descent), wxDC& WXUNUSED(dc), int WXUNUSED(flags), wxPoint WXUNUSED(position)) const
-{
- if (!range.IsWithin(GetRange()))
- return false;
-
- if (!m_image.Ok())
- return false;
-
- size.x = m_image.GetWidth();
- size.y = m_image.GetHeight();
-
- return true;
-}
-
-/// Copy
-void wxRichTextImage::Copy(const wxRichTextImage& obj)
-{
- wxRichTextObject::Copy(obj);
-
- m_image = obj.m_image;
- m_imageBlock = obj.m_imageBlock;
-}
-
-/*!
- * Utilities
- *
- */
-
-/// Compare two attribute objects
-bool wxTextAttrEq(const wxTextAttrEx& attr1, const wxTextAttrEx& attr2)
-{
- return (attr1 == attr2);
-}
-
-bool wxTextAttrEq(const wxTextAttrEx& attr1, const wxRichTextAttr& attr2)
-{
- return (
- attr1.GetTextColour() == attr2.GetTextColour() &&
- attr1.GetBackgroundColour() == attr2.GetBackgroundColour() &&
- attr1.GetFont().GetPointSize() == attr2.GetFontSize() &&
- attr1.GetFont().GetStyle() == attr2.GetFontStyle() &&
- attr1.GetFont().GetWeight() == attr2.GetFontWeight() &&
- attr1.GetFont().GetFaceName() == attr2.GetFontFaceName() &&
- attr1.GetFont().GetUnderlined() == attr2.GetFontUnderlined() &&
- attr1.GetAlignment() == attr2.GetAlignment() &&
- attr1.GetLeftIndent() == attr2.GetLeftIndent() &&
- attr1.GetRightIndent() == attr2.GetRightIndent() &&
- attr1.GetLeftSubIndent() == attr2.GetLeftSubIndent() &&
- wxRichTextTabsEq(attr1.GetTabs(), attr2.GetTabs()) &&
- attr1.GetLineSpacing() == attr2.GetLineSpacing() &&
- attr1.GetParagraphSpacingAfter() == attr2.GetParagraphSpacingAfter() &&
- attr1.GetParagraphSpacingBefore() == attr2.GetParagraphSpacingBefore() &&
- attr1.GetBulletStyle() == attr2.GetBulletStyle() &&
- attr1.GetBulletNumber() == attr2.GetBulletNumber() &&
- attr1.GetBulletText() == attr2.GetBulletText() &&
- attr1.GetBulletName() == attr2.GetBulletName() &&
- attr1.GetBulletFont() == attr2.GetBulletFont() &&
- attr1.GetCharacterStyleName() == attr2.GetCharacterStyleName() &&
- attr1.GetParagraphStyleName() == attr2.GetParagraphStyleName() &&
- attr1.GetListStyleName() == attr2.GetListStyleName());
-}
-
-/// Compare two attribute objects, but take into account the flags
-/// specifying attributes of interest.
-bool wxTextAttrEqPartial(const wxTextAttrEx& attr1, const wxTextAttrEx& attr2, int flags)
-{
- if ((flags & wxTEXT_ATTR_TEXT_COLOUR) && attr1.GetTextColour() != attr2.GetTextColour())
- return false;
-
- if ((flags & wxTEXT_ATTR_BACKGROUND_COLOUR) && attr1.GetBackgroundColour() != attr2.GetBackgroundColour())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_FACE) && attr1.GetFont().Ok() && attr2.GetFont().Ok() &&
- attr1.GetFont().GetFaceName() != attr2.GetFont().GetFaceName())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_SIZE) && attr1.GetFont().Ok() && attr2.GetFont().Ok() &&
- attr1.GetFont().GetPointSize() != attr2.GetFont().GetPointSize())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_WEIGHT) && attr1.GetFont().Ok() && attr2.GetFont().Ok() &&
- attr1.GetFont().GetWeight() != attr2.GetFont().GetWeight())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_ITALIC) && attr1.GetFont().Ok() && attr2.GetFont().Ok() &&
- attr1.GetFont().GetStyle() != attr2.GetFont().GetStyle())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_UNDERLINE) && attr1.GetFont().Ok() && attr2.GetFont().Ok() &&
- attr1.GetFont().GetUnderlined() != attr2.GetFont().GetUnderlined())
- return false;
-
- if ((flags & wxTEXT_ATTR_ALIGNMENT) && attr1.GetAlignment() != attr2.GetAlignment())
- return false;
-
- if ((flags & wxTEXT_ATTR_LEFT_INDENT) &&
- ((attr1.GetLeftIndent() != attr2.GetLeftIndent()) || (attr1.GetLeftSubIndent() != attr2.GetLeftSubIndent())))
- return false;
-
- if ((flags & wxTEXT_ATTR_RIGHT_INDENT) &&
- (attr1.GetRightIndent() != attr2.GetRightIndent()))
- return false;
-
- if ((flags & wxTEXT_ATTR_PARA_SPACING_AFTER) &&
- (attr1.GetParagraphSpacingAfter() != attr2.GetParagraphSpacingAfter()))
- return false;
-
- if ((flags & wxTEXT_ATTR_PARA_SPACING_BEFORE) &&
- (attr1.GetParagraphSpacingBefore() != attr2.GetParagraphSpacingBefore()))
- return false;
-
- if ((flags & wxTEXT_ATTR_LINE_SPACING) &&
- (attr1.GetLineSpacing() != attr2.GetLineSpacing()))
- return false;
-
- if ((flags & wxTEXT_ATTR_CHARACTER_STYLE_NAME) &&
- (attr1.GetCharacterStyleName() != attr2.GetCharacterStyleName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_PARAGRAPH_STYLE_NAME) &&
- (attr1.GetParagraphStyleName() != attr2.GetParagraphStyleName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_LIST_STYLE_NAME) &&
- (attr1.GetListStyleName() != attr2.GetListStyleName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_STYLE) &&
- (attr1.GetBulletStyle() != attr2.GetBulletStyle()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_NUMBER) &&
- (attr1.GetBulletNumber() != attr2.GetBulletNumber()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_TEXT) &&
- (attr1.GetBulletText() != attr2.GetBulletText()) &&
- (attr1.GetBulletFont() != attr2.GetBulletFont()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_NAME) &&
- (attr1.GetBulletName() != attr2.GetBulletName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_TABS) &&
- !wxRichTextTabsEq(attr1.GetTabs(), attr2.GetTabs()))
- return false;
-
- return true;
-}
-
-bool wxTextAttrEqPartial(const wxTextAttrEx& attr1, const wxRichTextAttr& attr2, int flags)
-{
- if ((flags & wxTEXT_ATTR_TEXT_COLOUR) && attr1.GetTextColour() != attr2.GetTextColour())
- return false;
-
- if ((flags & wxTEXT_ATTR_BACKGROUND_COLOUR) && attr1.GetBackgroundColour() != attr2.GetBackgroundColour())
- return false;
-
- if ((flags & (wxTEXT_ATTR_FONT)) && !attr1.GetFont().Ok())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_FACE) && attr1.GetFont().Ok() &&
- attr1.GetFont().GetFaceName() != attr2.GetFontFaceName())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_SIZE) && attr1.GetFont().Ok() &&
- attr1.GetFont().GetPointSize() != attr2.GetFontSize())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_WEIGHT) && attr1.GetFont().Ok() &&
- attr1.GetFont().GetWeight() != attr2.GetFontWeight())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_ITALIC) && attr1.GetFont().Ok() &&
- attr1.GetFont().GetStyle() != attr2.GetFontStyle())
- return false;
-
- if ((flags & wxTEXT_ATTR_FONT_UNDERLINE) && attr1.GetFont().Ok() &&
- attr1.GetFont().GetUnderlined() != attr2.GetFontUnderlined())
- return false;
-
- if ((flags & wxTEXT_ATTR_ALIGNMENT) && attr1.GetAlignment() != attr2.GetAlignment())
- return false;
-
- if ((flags & wxTEXT_ATTR_LEFT_INDENT) &&
- ((attr1.GetLeftIndent() != attr2.GetLeftIndent()) || (attr1.GetLeftSubIndent() != attr2.GetLeftSubIndent())))
- return false;
-
- if ((flags & wxTEXT_ATTR_RIGHT_INDENT) &&
- (attr1.GetRightIndent() != attr2.GetRightIndent()))
- return false;
-
- if ((flags & wxTEXT_ATTR_PARA_SPACING_AFTER) &&
- (attr1.GetParagraphSpacingAfter() != attr2.GetParagraphSpacingAfter()))
- return false;
-
- if ((flags & wxTEXT_ATTR_PARA_SPACING_BEFORE) &&
- (attr1.GetParagraphSpacingBefore() != attr2.GetParagraphSpacingBefore()))
- return false;
-
- if ((flags & wxTEXT_ATTR_LINE_SPACING) &&
- (attr1.GetLineSpacing() != attr2.GetLineSpacing()))
- return false;
-
- if ((flags & wxTEXT_ATTR_CHARACTER_STYLE_NAME) &&
- (attr1.GetCharacterStyleName() != attr2.GetCharacterStyleName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_PARAGRAPH_STYLE_NAME) &&
- (attr1.GetParagraphStyleName() != attr2.GetParagraphStyleName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_LIST_STYLE_NAME) &&
- (attr1.GetListStyleName() != attr2.GetListStyleName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_STYLE) &&
- (attr1.GetBulletStyle() != attr2.GetBulletStyle()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_NUMBER) &&
- (attr1.GetBulletNumber() != attr2.GetBulletNumber()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_TEXT) &&
- (attr1.GetBulletText() != attr2.GetBulletText()) &&
- (attr1.GetBulletFont() != attr2.GetBulletFont()))
- return false;
-
- if ((flags & wxTEXT_ATTR_BULLET_NAME) &&
- (attr1.GetBulletName() != attr2.GetBulletName()))
- return false;
-
- if ((flags & wxTEXT_ATTR_TABS) &&
- !wxRichTextTabsEq(attr1.GetTabs(), attr2.GetTabs()))
- return false;
-
- return true;
-}
-
-/// Compare tabs
-bool wxRichTextTabsEq(const wxArrayInt& tabs1, const wxArrayInt& tabs2)
-{
- if (tabs1.GetCount() != tabs2.GetCount())
- return false;
-
- size_t i;
- for (i = 0; i < tabs1.GetCount(); i++)
- {
- if (tabs1[i] != tabs2[i])
- return false;
- }
- return true;
-}
-
-
-/// Apply one style to another
-bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxTextAttrEx& style)
-{
- // Whole font
- if (style.GetFont().Ok() && ((style.GetFlags() & (wxTEXT_ATTR_FONT)) == (wxTEXT_ATTR_FONT)))
- destStyle.SetFont(style.GetFont());
- else if (style.GetFont().Ok())
- {
- wxFont font = destStyle.GetFont();
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_FACE)
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_FACE);
- font.SetFaceName(style.GetFont().GetFaceName());
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_SIZE)
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_SIZE);
- font.SetPointSize(style.GetFont().GetPointSize());
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_ITALIC)
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_ITALIC);
- font.SetStyle(style.GetFont().GetStyle());
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_WEIGHT)
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_WEIGHT);
- font.SetWeight(style.GetFont().GetWeight());
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_UNDERLINE)
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_UNDERLINE);
- font.SetUnderlined(style.GetFont().GetUnderlined());
- }
-
- if (font != destStyle.GetFont())
- {
- int oldFlags = destStyle.GetFlags();
-
- destStyle.SetFont(font);
-
- destStyle.SetFlags(oldFlags);
- }
- }
-
- if ( style.GetTextColour().Ok() && style.HasTextColour())
- destStyle.SetTextColour(style.GetTextColour());
-
- if ( style.GetBackgroundColour().Ok() && style.HasBackgroundColour())
- destStyle.SetBackgroundColour(style.GetBackgroundColour());
-
- if (style.HasAlignment())
- destStyle.SetAlignment(style.GetAlignment());
-
- if (style.HasTabs())
- destStyle.SetTabs(style.GetTabs());
-
- if (style.HasLeftIndent())
- destStyle.SetLeftIndent(style.GetLeftIndent(), style.GetLeftSubIndent());
-
- if (style.HasRightIndent())
- destStyle.SetRightIndent(style.GetRightIndent());
-
- if (style.HasParagraphSpacingAfter())
- destStyle.SetParagraphSpacingAfter(style.GetParagraphSpacingAfter());
-
- if (style.HasParagraphSpacingBefore())
- destStyle.SetParagraphSpacingBefore(style.GetParagraphSpacingBefore());
-
- if (style.HasLineSpacing())
- destStyle.SetLineSpacing(style.GetLineSpacing());
-
- if (style.HasCharacterStyleName())
- destStyle.SetCharacterStyleName(style.GetCharacterStyleName());
-
- if (style.HasParagraphStyleName())
- destStyle.SetParagraphStyleName(style.GetParagraphStyleName());
-
- if (style.HasListStyleName())
- destStyle.SetListStyleName(style.GetListStyleName());
-
- if (style.HasBulletStyle())
- destStyle.SetBulletStyle(style.GetBulletStyle());
-
- if (style.HasBulletText())
- {
- destStyle.SetBulletText(style.GetBulletText());
- destStyle.SetBulletFont(style.GetBulletFont());
- }
-
- if (style.HasBulletName())
- destStyle.SetBulletName(style.GetBulletName());
-
- if (style.HasBulletNumber())
- destStyle.SetBulletNumber(style.GetBulletNumber());
-
- if (style.HasURL())
- destStyle.SetURL(style.GetURL());
-
- return true;
-}
-
-bool wxRichTextApplyStyle(wxRichTextAttr& destStyle, const wxTextAttrEx& style)
-{
- wxTextAttrEx destStyle2;
- destStyle.CopyTo(destStyle2);
- wxRichTextApplyStyle(destStyle2, style);
- destStyle = destStyle2;
- return true;
-}
-
-bool wxRichTextApplyStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style, wxRichTextAttr* compareWith)
-{
- wxTextAttrEx attr(destStyle);
- wxRichTextApplyStyle(attr, style, compareWith);
- destStyle = attr;
- return true;
-}
-
-bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxRichTextAttr& style, wxRichTextAttr* compareWith)
-{
- // Whole font. Avoiding setting individual attributes if possible, since
- // it recreates the font each time.
- if (((style.GetFlags() & (wxTEXT_ATTR_FONT)) == (wxTEXT_ATTR_FONT)) && !compareWith)
- {
- destStyle.SetFont(wxFont(style.GetFontSize(), destStyle.GetFont().Ok() ? destStyle.GetFont().GetFamily() : wxDEFAULT,
- style.GetFontStyle(), style.GetFontWeight(), style.GetFontUnderlined(), style.GetFontFaceName()));
- }
- else if (style.GetFlags() & (wxTEXT_ATTR_FONT))
- {
- wxFont font = destStyle.GetFont();
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_FACE)
- {
- if (compareWith && compareWith->HasFaceName() && compareWith->GetFontFaceName() == style.GetFontFaceName())
- {
- // The same as currently displayed, so don't set
- }
- else
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_FACE);
- font.SetFaceName(style.GetFontFaceName());
- }
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_SIZE)
- {
- if (compareWith && compareWith->HasSize() && compareWith->GetFontSize() == style.GetFontSize())
- {
- // The same as currently displayed, so don't set
- }
- else
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_SIZE);
- font.SetPointSize(style.GetFontSize());
- }
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_ITALIC)
- {
- if (compareWith && compareWith->HasItalic() && compareWith->GetFontStyle() == style.GetFontStyle())
- {
- // The same as currently displayed, so don't set
- }
- else
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_ITALIC);
- font.SetStyle(style.GetFontStyle());
- }
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_WEIGHT)
- {
- if (compareWith && compareWith->HasWeight() && compareWith->GetFontWeight() == style.GetFontWeight())
- {
- // The same as currently displayed, so don't set
- }
- else
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_WEIGHT);
- font.SetWeight(style.GetFontWeight());
- }
- }
-
- if (style.GetFlags() & wxTEXT_ATTR_FONT_UNDERLINE)
- {
- if (compareWith && compareWith->HasUnderlined() && compareWith->GetFontUnderlined() == style.GetFontUnderlined())
- {
- // The same as currently displayed, so don't set
- }
- else
- {
- destStyle.SetFlags(destStyle.GetFlags() | wxTEXT_ATTR_FONT_UNDERLINE);
- font.SetUnderlined(style.GetFontUnderlined());
- }
- }
-
- if (font != destStyle.GetFont())
- {
- int oldFlags = destStyle.GetFlags();
-
- destStyle.SetFont(font);
-
- destStyle.SetFlags(oldFlags);
- }
- }
-
- if (style.GetTextColour().Ok() && style.HasTextColour())
- {
- if (!(compareWith && compareWith->HasTextColour() && compareWith->GetTextColour() == style.GetTextColour()))
- destStyle.SetTextColour(style.GetTextColour());
- }
-
- if (style.GetBackgroundColour().Ok() && style.HasBackgroundColour())
- {
- if (!(compareWith && compareWith->HasBackgroundColour() && compareWith->GetBackgroundColour() == style.GetBackgroundColour()))
- destStyle.SetBackgroundColour(style.GetBackgroundColour());
- }
-
- if (style.HasAlignment())
- {
- if (!(compareWith && compareWith->HasAlignment() && compareWith->GetAlignment() == style.GetAlignment()))
- destStyle.SetAlignment(style.GetAlignment());
- }
-
- if (style.HasTabs())
- {
- if (!(compareWith && compareWith->HasTabs() && wxRichTextTabsEq(compareWith->GetTabs(), style.GetTabs())))
- destStyle.SetTabs(style.GetTabs());
- }
-
- if (style.HasLeftIndent())
- {
- if (!(compareWith && compareWith->HasLeftIndent() && compareWith->GetLeftIndent() == style.GetLeftIndent()
- && compareWith->GetLeftSubIndent() == style.GetLeftSubIndent()))
- destStyle.SetLeftIndent(style.GetLeftIndent(), style.GetLeftSubIndent());
- }
-
- if (style.HasRightIndent())
- {
- if (!(compareWith && compareWith->HasRightIndent() && compareWith->GetRightIndent() == style.GetRightIndent()))
- destStyle.SetRightIndent(style.GetRightIndent());
- }
-
- if (style.HasParagraphSpacingAfter())
- {
- if (!(compareWith && compareWith->HasParagraphSpacingAfter() && compareWith->GetParagraphSpacingAfter() == style.GetParagraphSpacingAfter()))
- destStyle.SetParagraphSpacingAfter(style.GetParagraphSpacingAfter());
- }
-
- if (style.HasParagraphSpacingBefore())
- {
- if (!(compareWith && compareWith->HasParagraphSpacingBefore() && compareWith->GetParagraphSpacingBefore() == style.GetParagraphSpacingBefore()))
- destStyle.SetParagraphSpacingBefore(style.GetParagraphSpacingBefore());
- }
-
- if (style.HasLineSpacing())
- {
- if (!(compareWith && compareWith->HasLineSpacing() && compareWith->GetLineSpacing() == style.GetLineSpacing()))
- destStyle.SetLineSpacing(style.GetLineSpacing());
- }
-
- if (style.HasCharacterStyleName())
- {
- if (!(compareWith && compareWith->HasCharacterStyleName() && compareWith->GetCharacterStyleName() == style.GetCharacterStyleName()))
- destStyle.SetCharacterStyleName(style.GetCharacterStyleName());
- }
-
- if (style.HasParagraphStyleName())
- {
- if (!(compareWith && compareWith->HasParagraphStyleName() && compareWith->GetParagraphStyleName() == style.GetParagraphStyleName()))
- destStyle.SetParagraphStyleName(style.GetParagraphStyleName());
- }
-
- if (style.HasListStyleName())
- {
- if (!(compareWith && compareWith->HasListStyleName() && compareWith->GetListStyleName() == style.GetListStyleName()))
- destStyle.SetListStyleName(style.GetListStyleName());
- }
-
- if (style.HasBulletStyle())
- {
- if (!(compareWith && compareWith->HasBulletStyle() && compareWith->GetBulletStyle() == style.GetBulletStyle()))
- destStyle.SetBulletStyle(style.GetBulletStyle());
- }
-
- if (style.HasBulletText())
- {
- if (!(compareWith && compareWith->HasBulletText() && compareWith->GetBulletText() == style.GetBulletText()))
- {
- destStyle.SetBulletText(style.GetBulletText());
- destStyle.SetBulletFont(style.GetBulletFont());
- }
- }
-
- if (style.HasBulletNumber())
- {
- if (!(compareWith && compareWith->HasBulletNumber() && compareWith->GetBulletNumber() == style.GetBulletNumber()))
- destStyle.SetBulletNumber(style.GetBulletNumber());
- }
-
- if (style.HasBulletName())
- {
- if (!(compareWith && compareWith->HasBulletName() && compareWith->GetBulletName() == style.GetBulletName()))
- destStyle.SetBulletName(style.GetBulletName());
- }
-
- if (style.HasURL())
- {
- if (!(compareWith && compareWith->HasURL() && compareWith->GetURL() == style.GetURL()))
- destStyle.SetURL(style.GetURL());
- }
-
- return true;
-}
-
-void wxSetFontPreservingStyles(wxTextAttr& attr, const wxFont& font)
-{
- long flags = attr.GetFlags();
- attr.SetFont(font);
- attr.SetFlags(flags);
-}
-
-/// Convert a decimal to Roman numerals
-wxString wxRichTextDecimalToRoman(long n)
-{
- static wxArrayInt decimalNumbers;
- static wxArrayString romanNumbers;
-
- // Clean up arrays
- if (n == -1)
- {
- decimalNumbers.Clear();
- romanNumbers.Clear();
- return wxEmptyString;
- }
-
- if (decimalNumbers.GetCount() == 0)
- {
- #define wxRichTextAddDecRom(n, r) decimalNumbers.Add(n); romanNumbers.Add(r);
-
- wxRichTextAddDecRom(1000, wxT("M"));
- wxRichTextAddDecRom(900, wxT("CM"));
- wxRichTextAddDecRom(500, wxT("D"));
- wxRichTextAddDecRom(400, wxT("CD"));
- wxRichTextAddDecRom(100, wxT("C"));
- wxRichTextAddDecRom(90, wxT("XC"));
- wxRichTextAddDecRom(50, wxT("L"));
- wxRichTextAddDecRom(40, wxT("XL"));
- wxRichTextAddDecRom(10, wxT("X"));
- wxRichTextAddDecRom(9, wxT("IX"));
- wxRichTextAddDecRom(5, wxT("V"));
- wxRichTextAddDecRom(4, wxT("IV"));
- wxRichTextAddDecRom(1, wxT("I"));
- }
-
- int i = 0;
- wxString roman;
-
- while (n > 0 && i < 13)
- {
- if (n >= decimalNumbers[i])
- {
- n -= decimalNumbers[i];
- roman += romanNumbers[i];
- }
- else
- {
- i ++;
- }
- }
- if (roman.IsEmpty())
- roman = wxT("0");
- return roman;
-}
-
-/*!
- * wxRichTextAttr stores attributes without a wxFont object, so is a much more
- * efficient way to query styles.
- */
-
-// ctors
-wxRichTextAttr::wxRichTextAttr(const wxColour& colText,
- const wxColour& colBack,
- wxTextAttrAlignment alignment): m_textAlignment(alignment), m_colText(colText), m_colBack(colBack)
-{
- Init();
-
- if (m_colText.Ok()) m_flags |= wxTEXT_ATTR_TEXT_COLOUR;
- if (m_colBack.Ok()) m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR;
- if (alignment != wxTEXT_ALIGNMENT_DEFAULT)
- m_flags |= wxTEXT_ATTR_ALIGNMENT;
-}