diff options
author | Jaskaran Singh <jvsg1303@gmail.com> | 2016-07-28 14:00:46 +0530 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2016-09-18 00:15:15 +0200 |
commit | 872c5e0c807ae248387ee425615e4c8080d01221 (patch) | |
tree | 87fa1db2275c903afc3853beca5140da8041ea4c /sc | |
parent | 7c48d3d49463eae8afb4738b9b79f8024f773074 (diff) |
Add odf strikeout to orcus interface
Change-Id: Ibf8d1e7b0272fe4112fda0249eafef1aa5438d9a
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/filter/inc/orcusinterface.hxx | 7 | ||||
-rw-r--r-- | sc/source/filter/orcus/interface.cxx | 88 |
2 files changed, 85 insertions, 10 deletions
diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx index 9754ea4e6b99..9afc218e4cc3 100644 --- a/sc/source/filter/inc/orcusinterface.hxx +++ b/sc/source/filter/inc/orcusinterface.hxx @@ -260,10 +260,13 @@ private: bool mbHasFontAttr; bool mbHasUnderlineAttr; + bool mbHasStrikeout; FontLineStyle meUnderline; Color maUnderlineColor; + FontStrikeout meStrikeout; + font(); void applyToItemSet(SfxItemSet& rSet) const; @@ -390,6 +393,10 @@ public: orcus::spreadsheet::color_elem_t red, orcus::spreadsheet::color_elem_t green, orcus::spreadsheet::color_elem_t blue) override; + virtual void set_strikethrough_style(orcus::spreadsheet::strikethrough_style_t s) override; + virtual void set_strikethrough_type(orcus::spreadsheet::strikethrough_type_t s) override; + virtual void set_strikethrough_width(orcus::spreadsheet::strikethrough_width_t s) override; + virtual void set_strikethrough_text(orcus::spreadsheet::strikethrough_text_t s) override; virtual size_t commit_font() override; // fill diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx index 1be812620efa..5f3012048ad2 100644 --- a/sc/source/filter/orcus/interface.cxx +++ b/sc/source/filter/orcus/interface.cxx @@ -38,6 +38,7 @@ #include <editeng/fontitem.hxx> #include <editeng/fhgtitem.hxx> #include <editeng/lineitem.hxx> +#include <editeng/crossedoutitem.hxx> #include <formula/token.hxx> #include <tools/datetime.hxx> @@ -758,8 +759,10 @@ ScOrcusStyles::font::font(): maColor(COL_WHITE), mbHasFontAttr(false), mbHasUnderlineAttr(false), + mbHasStrikeout(false), meUnderline(LINESTYLE_NONE), - maUnderlineColor(COL_WHITE) + maUnderlineColor(COL_WHITE), + meStrikeout(STRIKEOUT_NONE) { } @@ -791,11 +794,18 @@ std::ostream& operator<<(std::ostream& rStrm, const Color& rColor) void ScOrcusStyles::font::applyToItemSet(SfxItemSet& rSet) const { - FontItalic eItalic = mbItalic ? ITALIC_NORMAL : ITALIC_NONE; - rSet.Put(SvxPostureItem(eItalic, ATTR_FONT_POSTURE)); + if (mbHasFontAttr) + { + FontItalic eItalic = mbItalic ? ITALIC_NORMAL : ITALIC_NONE; + rSet.Put(SvxPostureItem(eItalic, ATTR_FONT_POSTURE)); + + FontWeight eWeight = mbBold ? WEIGHT_BOLD : WEIGHT_NORMAL; + rSet.Put(SvxWeightItem(eWeight, ATTR_FONT_WEIGHT)); - FontWeight eWeight = mbBold ? WEIGHT_BOLD : WEIGHT_NORMAL; - rSet.Put(SvxWeightItem(eWeight, ATTR_FONT_WEIGHT)); + rSet.Put( SvxColorItem(maColor, ATTR_FONT_COLOR)); + rSet.Put( SvxFontItem( FAMILY_DONTKNOW, maName, maName, PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_FONT )); + rSet.Put( SvxFontHeightItem (translateToInternal(mnSize, orcus::length_unit_t::point), 100, ATTR_FONT_HEIGHT)); + } if (mbHasUnderlineAttr) { @@ -804,9 +814,8 @@ void ScOrcusStyles::font::applyToItemSet(SfxItemSet& rSet) const rSet.Put(aUnderline); } - rSet.Put( SvxColorItem(maColor, ATTR_FONT_COLOR)); - rSet.Put( SvxFontItem( FAMILY_DONTKNOW, maName, maName, PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW, ATTR_FONT )); - rSet.Put( SvxFontHeightItem (translateToInternal(mnSize, orcus::length_unit_t::point), 100, ATTR_FONT_HEIGHT)); + if (mbHasStrikeout) + rSet.Put(SvxCrossedOutItem(meStrikeout, ATTR_FONT_CROSSEDOUT)); } void ScOrcusStyles::fill::applyToItemSet(SfxItemSet& rSet) const @@ -941,8 +950,7 @@ void ScOrcusStyles::applyXfToItemSet(SfxItemSet& rSet, const xf& rXf) } const font& rFont = maFonts[nFontId]; - if (rFont.mbHasFontAttr) - rFont.applyToItemSet(rSet); + rFont.applyToItemSet(rSet); size_t nFillId = rXf.mnFillId; if (nFillId >= maFills.size()) @@ -1141,6 +1149,66 @@ void ScOrcusStyles::set_font_color(orcus::spreadsheet::color_elem_t alpha, maCurrentFont.maColor = Color(alpha, red, green, blue); } +void ScOrcusStyles::set_strikethrough_style(orcus::spreadsheet::strikethrough_style_t /*s*/) +{ +} + +void ScOrcusStyles::set_strikethrough_type(orcus::spreadsheet::strikethrough_type_t s) +{ + if (maCurrentFont.meStrikeout != STRIKEOUT_BOLD && + maCurrentFont.meStrikeout != STRIKEOUT_SLASH && + maCurrentFont.meStrikeout != STRIKEOUT_X) + { + switch (s) + { + case os::strikethrough_type_t::unknown: + maCurrentFont.meStrikeout = STRIKEOUT_DONTKNOW; + break; + case os::strikethrough_type_t::none: + maCurrentFont.meStrikeout = STRIKEOUT_NONE; + break; + case os::strikethrough_type_t::single: + maCurrentFont.meStrikeout = STRIKEOUT_SINGLE; + break; + case os::strikethrough_type_t::double_type: + maCurrentFont.meStrikeout = STRIKEOUT_DOUBLE; + break; + default: + ; + } + } + maCurrentFont.mbHasStrikeout = true; +} + +void ScOrcusStyles::set_strikethrough_width(orcus::spreadsheet::strikethrough_width_t s) +{ + switch (s) + { + case os::strikethrough_width_t::bold: + maCurrentFont.meStrikeout = STRIKEOUT_BOLD; + break; + default: + ; + } + maCurrentFont.mbHasStrikeout = true; +} + +void ScOrcusStyles::set_strikethrough_text(orcus::spreadsheet::strikethrough_text_t s) +{ + switch (s) + { + case os::strikethrough_text_t::slash: + maCurrentFont.meStrikeout = STRIKEOUT_SLASH; + break; + case os::strikethrough_text_t::cross: + maCurrentFont.meStrikeout = STRIKEOUT_X; + break; + default: + ; + } + maCurrentFont.mbHasStrikeout = true; +} + size_t ScOrcusStyles::commit_font() { SAL_INFO("sc.orcus.style", "commit font"); |