summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaskaran Singh <jvsg1303@gmail.com>2016-07-28 14:00:46 +0530
committerJaskaran Singh <jvsg1303@gmail.com>2016-07-28 14:15:30 +0530
commitc1f241e85a03048055dc66cc0193a7edba895198 (patch)
tree1eeeab4d5daf5fdedfd372400e2f2ea952b5789b
parent358c327846ccc44bc7f1df0e396e8afad16af310 (diff)
Add odf strikeout to orcus interface
Change-Id: Ibf8d1e7b0272fe4112fda0249eafef1aa5438d9a
-rw-r--r--sc/source/filter/inc/orcusinterface.hxx7
-rw-r--r--sc/source/filter/orcus/interface.cxx88
2 files changed, 85 insertions, 10 deletions
diff --git a/sc/source/filter/inc/orcusinterface.hxx b/sc/source/filter/inc/orcusinterface.hxx
index 7f469e4f3bb2..5a34ed81ffd6 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);
+ virtual void set_strikethrough_type(orcus::spreadsheet::strikethrough_type_t s);
+ virtual void set_strikethrough_width(orcus::spreadsheet::strikethrough_width_t s);
+ virtual void set_strikethrough_text(orcus::spreadsheet::strikethrough_text_t s);
virtual size_t commit_font() override;
// fill
diff --git a/sc/source/filter/orcus/interface.cxx b/sc/source/filter/orcus/interface.cxx
index d59b2fac8b83..0bfa9c84122b 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())
@@ -1142,6 +1150,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");