diff options
author | Zhe Wang <wangzcdl@apache.org> | 2012-09-07 03:49:09 +0000 |
---|---|---|
committer | Zhe Wang <wangzcdl@apache.org> | 2012-09-07 03:49:09 +0000 |
commit | 74b1435a4d39eac71e36fb1c387b24af4b353fa0 (patch) | |
tree | 91f2c7dc2a98a5949f19fb5d5ec9fb4248d92e96 | |
parent | 4545d293b1cf5009b075cdc82d43916909b77347 (diff) |
Fix issue #i120723#: Table style is lost when import PPTX by AOO
* subversion/main/oox/inc/oox/drawingml/table/tableproperties.hxx
* subversion/main/oox/source/drawingml/table/tableproperties.cxx
[]if the imported table in pptx just have tableStyleId, should fill the tablestyle's content.
Patch by: Ma Bingbing <jiazema@gmail.com>
Suggested by: Wang Zhe <kingwisemmx@gmail.com>
Found by:Ma Bingbing <jiazema@gmail.com>
Review by: Wang Zhe <kingwisemmx@gmail.com>
Notes
Notes:
merged as: f39f7ba614749d99362a2059919521eee6bdb6fc
-rw-r--r-- | oox/inc/oox/drawingml/table/tableproperties.hxx | 2 | ||||
-rw-r--r-- | oox/source/drawingml/table/tableproperties.cxx | 148 |
2 files changed, 147 insertions, 3 deletions
diff --git a/oox/inc/oox/drawingml/table/tableproperties.hxx b/oox/inc/oox/drawingml/table/tableproperties.hxx index 545198560146..76224be477f0 100644 --- a/oox/inc/oox/drawingml/table/tableproperties.hxx +++ b/oox/inc/oox/drawingml/table/tableproperties.hxx @@ -62,7 +62,7 @@ public: private: - const TableStyle& getUsedTableStyle( const ::oox::core::XmlFilterBase& rFilterBase ); + const TableStyle& getUsedTableStyle( const ::oox::core::XmlFilterBase& rFilterBase, sal_Bool &isCreateTabStyle); rtl::OUString maStyleId; // either StyleId is available boost::shared_ptr< TableStyle > mpTableStyle; // or the complete TableStyle diff --git a/oox/source/drawingml/table/tableproperties.cxx b/oox/source/drawingml/table/tableproperties.cxx index 5596b7dc6f06..4e0ed748dc12 100644 --- a/oox/source/drawingml/table/tableproperties.cxx +++ b/oox/source/drawingml/table/tableproperties.cxx @@ -32,6 +32,7 @@ #include "oox/core/xmlfilterbase.hxx" #include "oox/helper/propertyset.hxx" + using rtl::OUString; using namespace ::oox::core; using namespace ::com::sun::star; @@ -104,7 +105,133 @@ void MergeCells( const uno::Reference< XTable >& xTable, sal_Int32 nCol, sal_Int static TableStyle* pDefaultTableStyle = new TableStyle(); -const TableStyle& TableProperties::getUsedTableStyle( const ::oox::core::XmlFilterBase& rFilterBase ) +//for pptx just has table style id +static void SetTableStyleProperties(TableStyle* &pTableStyle , const sal_Int32& tblFillClr,const sal_Int32& tblTextClr, const sal_Int32& lineBdrClr) +{ + //whole table fill style and color + oox::drawingml::FillPropertiesPtr pWholeTabFillProperties( new oox::drawingml::FillProperties ); + pWholeTabFillProperties->moFillType.set(XML_solidFill); + pWholeTabFillProperties->maFillColor.setSchemeClr(tblFillClr); + pWholeTabFillProperties->maFillColor.addTransformation(XML_tint,20000); + pTableStyle->getWholeTbl().getFillProperties() = pWholeTabFillProperties; + //whole table text color + ::oox::drawingml::Color tableTextColor; + tableTextColor.setSchemeClr(tblTextClr); + pTableStyle->getWholeTbl().getTextColor() = tableTextColor; + //whole table line border + oox::drawingml::LinePropertiesPtr pLeftBorder( new oox::drawingml::LineProperties); + pLeftBorder->moLineWidth = 12700; + pLeftBorder->moPresetDash = XML_sng; + pLeftBorder->maLineFill.moFillType.set(XML_solidFill); + pLeftBorder->maLineFill.maFillColor.setSchemeClr(lineBdrClr); + pTableStyle->getWholeTbl().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_left,pLeftBorder)); + pTableStyle->getWholeTbl().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_right,pLeftBorder)); + pTableStyle->getWholeTbl().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_top,pLeftBorder)); + pTableStyle->getWholeTbl().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_bottom,pLeftBorder)); + pTableStyle->getWholeTbl().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_insideH,pLeftBorder)); + pTableStyle->getWholeTbl().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_insideV,pLeftBorder)); + + //Band1H style + oox::drawingml::FillPropertiesPtr pBand1HFillProperties( new oox::drawingml::FillProperties ); + pBand1HFillProperties->moFillType.set(XML_solidFill); + pBand1HFillProperties->maFillColor.setSchemeClr(tblFillClr); + pBand1HFillProperties->maFillColor.addTransformation(XML_tint,40000); + pTableStyle->getBand1H().getFillProperties() = pBand1HFillProperties; + + //Band1V style + pTableStyle->getBand1V().getFillProperties() = pBand1HFillProperties; + + //tet bold for 1st row/last row/column + ::boost::optional< sal_Bool > textBoldStyle(sal_True); + pTableStyle->getFirstRow().getTextBoldStyle() = textBoldStyle; + pTableStyle->getLastRow().getTextBoldStyle() = textBoldStyle; + pTableStyle->getFirstCol().getTextBoldStyle() = textBoldStyle; + pTableStyle->getLastCol().getTextBoldStyle() = textBoldStyle; +} + + sal_Bool CreateTableStyle(TableStyle* &pTableStyle , const OUString& styleId) +{ + sal_Bool createdTblStyle = sal_False; + if(!styleId.compareToAscii("{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}")){ //Medium Style 2 Accenat 1 + pTableStyle = new TableStyle(); + createdTblStyle = sal_True; + //first row style + //fill color and type + oox::drawingml::FillPropertiesPtr pFstRowFillProperties( new oox::drawingml::FillProperties ); + pFstRowFillProperties->moFillType.set(XML_solidFill); + pFstRowFillProperties->maFillColor.setSchemeClr(XML_accent1); + pTableStyle->getFirstRow().getFillProperties() = pFstRowFillProperties; + //text color + ::oox::drawingml::Color fstRowTextColor; + fstRowTextColor.setSchemeClr(XML_lt1); + pTableStyle->getFirstRow().getTextColor() = fstRowTextColor; + //bottom line border + oox::drawingml::LinePropertiesPtr pFstBottomBorder( new oox::drawingml::LineProperties); + pFstBottomBorder->moLineWidth = 38100; + pFstBottomBorder->moPresetDash = XML_sng; + pFstBottomBorder->maLineFill.moFillType.set(XML_solidFill); + pFstBottomBorder->maLineFill.maFillColor.setSchemeClr(XML_lt1); + pTableStyle->getFirstRow().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_bottom,pFstBottomBorder)); + + //last row style + pTableStyle->getLastRow().getFillProperties() = pFstRowFillProperties; + pTableStyle->getLastRow().getTextColor() = fstRowTextColor; + pTableStyle->getLastRow().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_top,pFstBottomBorder)); + + //first column style + pTableStyle->getFirstRow().getFillProperties() = pFstRowFillProperties; + pTableStyle->getFirstRow().getTextColor() = fstRowTextColor; + + //last column style + pTableStyle->getLastCol().getFillProperties() = pFstRowFillProperties; + pTableStyle->getLastCol().getTextColor() = fstRowTextColor; + + SetTableStyleProperties(pTableStyle, XML_accent1, XML_dk1, XML_lt1); + } + else if (!styleId.compareToAscii("{21E4AEA4-8DFA-4A89-87EB-49C32662AFE0}")) //Medium Style 2 Accent 2 + { + pTableStyle = new TableStyle(); + createdTblStyle = sal_True; + oox::drawingml::FillPropertiesPtr pFstRowFillProperties( new oox::drawingml::FillProperties ); + pFstRowFillProperties->moFillType.set(XML_solidFill); + pFstRowFillProperties->maFillColor.setSchemeClr(XML_accent2); + pTableStyle->getFirstRow().getFillProperties() = pFstRowFillProperties; + + ::oox::drawingml::Color fstRowTextColor; + fstRowTextColor.setSchemeClr(XML_lt1); + pTableStyle->getFirstRow().getTextColor() = fstRowTextColor; + + oox::drawingml::LinePropertiesPtr pFstBottomBorder( new oox::drawingml::LineProperties); + pFstBottomBorder->moLineWidth = 38100; + pFstBottomBorder->moPresetDash = XML_sng; + pFstBottomBorder->maLineFill.moFillType.set(XML_solidFill); + pFstBottomBorder->maLineFill.maFillColor.setSchemeClr(XML_lt1); + pTableStyle->getFirstRow().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_bottom,pFstBottomBorder)); + + pTableStyle->getLastRow().getFillProperties() = pFstRowFillProperties; + pTableStyle->getLastRow().getTextColor() = fstRowTextColor; + pTableStyle->getLastRow().getLineBorders().insert(std::pair<sal_Int32, ::oox::drawingml::LinePropertiesPtr>(XML_top,pFstBottomBorder)); + + pTableStyle->getFirstCol().getFillProperties() = pFstRowFillProperties; + pTableStyle->getFirstCol().getTextColor() = fstRowTextColor; + + pTableStyle->getLastCol().getFillProperties() = pFstRowFillProperties; + pTableStyle->getLastCol().getTextColor() = fstRowTextColor; + + SetTableStyleProperties(pTableStyle, XML_accent2, XML_dk1, XML_lt1); + } + else if (!styleId.compareToAscii("{C4B1156A-380E-4F78-BDF5-A606A8083BF9}")) //Medium Style 4 Accent 4 + { + pTableStyle = new TableStyle(); + createdTblStyle = sal_True; + SetTableStyleProperties(pTableStyle, XML_accent4, XML_dk1, XML_accent4); + } + + return createdTblStyle; +} +//end + +const TableStyle& TableProperties::getUsedTableStyle( const ::oox::core::XmlFilterBase& rFilterBase, sal_Bool &isCreateTabStyle ) { ::oox::core::XmlFilterBase& rBase( const_cast< ::oox::core::XmlFilterBase& >( rFilterBase ) ); @@ -125,6 +252,11 @@ const TableStyle& TableProperties::getUsedTableStyle( const ::oox::core::XmlFilt } aIter++; } + //if the pptx just has table style id, but no table style content, we will create the table style ourselves + if ( !pTableStyle ) + { + isCreateTabStyle = CreateTableStyle(pTableStyle , aStyleId); + } } if ( !pTableStyle ) pTableStyle = pDefaultTableStyle; @@ -143,7 +275,8 @@ void TableProperties::pushToPropSet( const ::oox::core::XmlFilterBase& rFilterBa CreateTableColumns( xColumnRowRange->getColumns(), mvTableGrid ); CreateTableRows( xColumnRowRange->getRows(), mvTableRows ); - const TableStyle& rTableStyle( getUsedTableStyle( rFilterBase ) ); + sal_Bool mbOwnTblStyle = sal_False; + const TableStyle& rTableStyle( getUsedTableStyle( rFilterBase, mbOwnTblStyle ) ); sal_Int32 nRow = 0; std::vector< TableRow >::iterator aTableRowIter( mvTableRows.begin() ); while( aTableRowIter != mvTableRows.end() ) @@ -169,6 +302,17 @@ void TableProperties::pushToPropSet( const ::oox::core::XmlFilterBase& rFilterBa nRow++; aTableRowIter++; } + + if(mbOwnTblStyle == sal_True) + { + TableStyle* pTableStyle = (TableStyle*)&rTableStyle; + if(pTableStyle != NULL) + { + delete pTableStyle; + pTableStyle = NULL; + } + mbOwnTblStyle = sal_False; + } } } } } |