summaryrefslogtreecommitdiff
path: root/oox/source/drawingml/table/tableproperties.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'oox/source/drawingml/table/tableproperties.cxx')
-rw-r--r--oox/source/drawingml/table/tableproperties.cxx48
1 files changed, 48 insertions, 0 deletions
diff --git a/oox/source/drawingml/table/tableproperties.cxx b/oox/source/drawingml/table/tableproperties.cxx
index 527b65829d17..8f8993ad0035 100644
--- a/oox/source/drawingml/table/tableproperties.cxx
+++ b/oox/source/drawingml/table/tableproperties.cxx
@@ -19,6 +19,8 @@
#include <drawingml/table/tableproperties.hxx>
#include <drawingml/table/tablestylelist.hxx>
+#include <drawingml/textbody.hxx>
+#include <drawingml/textparagraph.hxx>
#include <oox/drawingml/drawingmltypes.hxx>
#include <com/sun/star/table/XTable.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
@@ -311,6 +313,52 @@ void TableProperties::pushToPropSet( const ::oox::core::XmlFilterBase& rFilterBa
delete pTableStyleToDelete;
}
+void TableProperties::pullFromTextBody(oox::drawingml::TextBodyPtr pTextBody, sal_Int32 nShapeWidth)
+{
+ // Create table grid and a single row.
+ sal_Int32 nNumCol = pTextBody->getTextProperties().mnNumCol;
+ std::vector<sal_Int32>& rTableGrid(getTableGrid());
+ sal_Int32 nColWidth = nShapeWidth / nNumCol;
+ for (sal_Int32 nCol = 0; nCol < nNumCol; ++nCol)
+ rTableGrid.push_back(nColWidth);
+ std::vector<drawingml::table::TableRow>& rTableRows(getTableRows());
+ rTableRows.emplace_back();
+ oox::drawingml::table::TableRow& rTableRow = rTableRows.back();
+ std::vector<oox::drawingml::table::TableCell>& rTableCells = rTableRow.getTableCells();
+
+ // Create the cells and distribute the paragraphs from pTextBody.
+ sal_Int32 nNumPara = pTextBody->getParagraphs().size();
+ sal_Int32 nParaPerCol = std::ceil(double(nNumPara) / nNumCol);
+ // Font scale of text body will be applied at a text run level.
+ sal_Int32 nFontScale = pTextBody->getTextProperties().mnFontScale;
+ size_t nPara = 0;
+ for (sal_Int32 nCol = 0; nCol < nNumCol; ++nCol)
+ {
+ rTableCells.emplace_back();
+ oox::drawingml::table::TableCell& rTableCell = rTableCells.back();
+ TextBodyPtr pCellTextBody(new TextBody);
+ rTableCell.setTextBody(pCellTextBody);
+
+ // Copy properties provided by <a:lstStyle>.
+ pCellTextBody->getTextListStyle() = pTextBody->getTextListStyle();
+
+ for (sal_Int32 nParaInCol = 0; nParaInCol < nParaPerCol; ++nParaInCol)
+ {
+ if (nPara < pTextBody->getParagraphs().size())
+ {
+ std::shared_ptr<oox::drawingml::TextParagraph> pParagraph
+ = pTextBody->getParagraphs()[nPara];
+ if (nFontScale != 100000)
+ {
+ for (auto& pRun : pParagraph->getRuns())
+ pRun->getTextCharacterProperties().moFontScale = nFontScale;
+ }
+ pCellTextBody->appendParagraph(pParagraph);
+ }
+ ++nPara;
+ }
+ }
+}
} } }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */