[Libreoffice-commits] .: Branch 'libreoffice-3-6' - sc/source

Kohei Yoshida kohei at kemper.freedesktop.org
Wed Aug 15 11:38:24 PDT 2012


 sc/source/filter/excel/xestyle.cxx |   48 ++++++++++++++++++++++++++++---------
 sc/source/filter/inc/xestyle.hxx   |   13 ++++++++--
 2 files changed, 48 insertions(+), 13 deletions(-)

New commits:
commit ad9f60fc4ccc17b99bd104e4dc1a64bbd7b73132
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue Aug 14 22:13:50 2012 +0200

    correctly export background colors of cond formats to xlsx
    
    Change-Id: I6d4b596ba3d611c8b795d48ca59378c4f4136611
    Signed-off-by: Kohei Yoshida <kohei.yoshida at gmail.com>

diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index 0a5de22..13b7d40 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -1885,6 +1885,33 @@ void XclExpCellArea::SaveXml( XclExpXmlStream& rStrm ) const
     rStyleSheet->endElement( XML_fill );
 }
 
+
+bool XclExpColor::FillFromItemSet( const SfxItemSet& rItemSet )
+{
+    if( !ScfTools::CheckItem( rItemSet, ATTR_BACKGROUND, true ) )
+        return false;
+
+    const SvxBrushItem& rBrushItem = GETITEM( rItemSet, SvxBrushItem, ATTR_BACKGROUND );
+    maColor = rBrushItem.GetColor();
+
+    return true;
+}
+
+void XclExpColor::SaveXml( XclExpXmlStream& rStrm ) const
+{
+    sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
+    rStyleSheet->startElement( XML_fill,
+            FSEND );
+    rStyleSheet->startElement( XML_patternFill,
+            FSEND );
+    rStyleSheet->singleElement( XML_bgColor,
+            XML_rgb, XclXmlUtils::ToOString(maColor).getStr(),
+            FSEND );
+
+    rStyleSheet->endElement( XML_patternFill );
+    rStyleSheet->endElement( XML_fill );
+}
+
 // ----------------------------------------------------------------------------
 
 XclExpXFId::XclExpXFId() :
@@ -2902,11 +2929,11 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
                             pCellProt = NULL;
                         }
 
-                        XclExpCellArea* pCellArea = new XclExpCellArea;
-                        if(!pCellArea->FillFromItemSet( rSet, GetPalette(), GetBiff() ))
+                        XclExpColor* pColor = new XclExpColor();
+                        if(!pColor->FillFromItemSet( rSet ))
                         {
-                            delete pCellArea;
-                            pCellArea = NULL;
+                            delete pColor;
+                            pColor = NULL;
                         }
 
                         XclExpFont* pFont = NULL;
@@ -2927,7 +2954,7 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
                             ++nNumFmtIndex;
                         }
 
-                        maDxf.push_back(new XclExpDxf( rRoot, pAlign, pBorder, pFont, pNumFormat, pCellProt, pCellArea ));
+                        maDxf.push_back(new XclExpDxf( rRoot, pAlign, pBorder, pFont, pNumFormat, pCellProt, pColor ));
                         ++nIndex;
                     }
 
@@ -2966,16 +2993,15 @@ void XclExpDxfs::SaveXml( XclExpXmlStream& rStrm )
 // ============================================================================
 
 XclExpDxf::XclExpDxf( const XclExpRoot& rRoot, XclExpCellAlign* pAlign, XclExpCellBorder* pBorder,
-            XclExpFont* pFont, XclExpNumFmt* pNumberFmt, XclExpCellProt* pProt, XclExpCellArea* pCellArea)
+            XclExpFont* pFont, XclExpNumFmt* pNumberFmt, XclExpCellProt* pProt, XclExpColor* pColor)
     : XclExpRoot( rRoot ),
     mpAlign(pAlign),
     mpBorder(pBorder),
     mpFont(pFont),
     mpNumberFmt(pNumberFmt),
     mpProt(pProt),
-    mpCellArea(pCellArea)
+    mpColor(pColor)
 {
-
 }
 
 XclExpDxf::~XclExpDxf()
@@ -2985,7 +3011,7 @@ XclExpDxf::~XclExpDxf()
     delete mpFont;
     delete mpNumberFmt;
     delete mpProt;
-    delete mpCellArea;
+    delete mpColor;
 }
 
 void XclExpDxf::SaveXml( XclExpXmlStream& rStrm )
@@ -3003,8 +3029,8 @@ void XclExpDxf::SaveXml( XclExpXmlStream& rStrm )
         mpNumberFmt->SaveXml(rStrm);
     if (mpProt)
         mpProt->SaveXml(rStrm);
-    if (mpCellArea)
-        mpCellArea->SaveXml(rStrm);
+    if (mpColor)
+        mpColor->SaveXml(rStrm);
     rStyleSheet->endElement( XML_dxf );
 }
 
diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx
index ba7dc67..a255b98 100644
--- a/sc/source/filter/inc/xestyle.hxx
+++ b/sc/source/filter/inc/xestyle.hxx
@@ -427,6 +427,15 @@ struct XclExpCellArea : public XclCellArea
     void                SaveXml( XclExpXmlStream& rStrm ) const;
 };
 
+struct XclExpColor
+{
+    Color maColor;
+
+    bool FillFromItemSet( const SfxItemSet& rItemSet );
+
+    void SaveXml( XclExpXmlStream& rStrm ) const;
+};
+
 // ----------------------------------------------------------------------------
 
 /** A combination of unique XF identifier with real Excel XF index. */
@@ -733,7 +742,7 @@ class XclExpDxf : public XclExpRecordBase, protected XclExpRoot
 {
 public:
     XclExpDxf( const XclExpRoot& rRoot, XclExpCellAlign* pAlign, XclExpCellBorder* pBorder,
-            XclExpFont* pFont, XclExpNumFmt* pNumberFmt, XclExpCellProt* pProt, XclExpCellArea* pCellArea);
+            XclExpFont* pFont, XclExpNumFmt* pNumberFmt, XclExpCellProt* pProt, XclExpColor* pColor);
     virtual ~XclExpDxf();
 
     virtual void SaveXml( XclExpXmlStream& rStrm );
@@ -744,7 +753,7 @@ private:
     XclExpFont* mpFont;
     XclExpNumFmt* mpNumberFmt;
     XclExpCellProt* mpProt;
-    XclExpCellArea* mpCellArea;
+    XclExpColor* mpColor;
 };
 
 class XclExpDxfs : public XclExpRecordBase, protected XclExpRoot


More information about the Libreoffice-commits mailing list