Kaydet (Commit) 233a634a authored tarafından Miklos Vajna's avatar Miklos Vajna

tdf#86374 DOCX import: fix btLr text table direction without <w:cantSplit/>

Commit 0208ead7 (DOCX import: improve
btLr table cell support, 2013-02-22) made any table row that has at
least one btLr cell fixed height. This causes problems in case a table
has a minimal height with lots of content, where the fixed height gives
wrong layout, but the minimal height is correct.

Fix the problem by only making the row fixed height if <w:cantSplit/> is
set (as seen in the old bugdoc), and revert to setting the height type
to minimal in any other case.

Change-Id: Ibaf91f542e64e5caa7904df97eb6eb52618e0023
üst 90e8ad7a
......@@ -2748,6 +2748,16 @@ DECLARE_OOXMLIMPORT_TEST(testTdf89702, "tdf89702.docx")
CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty<OUString>(xStyle, "CharFontName"));
}
DECLARE_OOXMLIMPORT_TEST(testTdf86374, "tdf86374.docx")
{
uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), uno::UNO_QUERY);
uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY);
uno::Reference<table::XTableRows> xTableRows(xTable->getRows(), uno::UNO_QUERY);
// btLr text direction was imported as FIX, it should be MIN to have enough space for the additionally entered paragraphs.
CPPUNIT_ASSERT_EQUAL(text::SizeType::MIN, getProperty<sal_Int16>(xTableRows->getByIndex(0), "SizeType"));
}
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -241,6 +241,7 @@ protected:
mState.resetCellProps();
}
public:
TablePropertyMapPtr getRowProps()
{
return mState.getRowProps();
......@@ -256,6 +257,7 @@ protected:
mState.resetRowProps();
}
protected:
void setInCell(bool bInCell)
{
mState.setInCell(bInCell);
......
......@@ -90,8 +90,14 @@ namespace dmapper {
const int MINLAY = 23; // sw/inc/swtypes.hxx, minimal possible size of frames.
if (!pManager || !pManager->HasBtlrCell() || pMeasureHandler->getMeasureValue() > ConversionHelper::convertTwipToMM100(MINLAY))
{
// In case a cell already wanted fixed size, we should not overwrite it here.
if (!pManager || !pManager->IsRowSizeTypeInserted())
bool bCantSplit = false;
if (pManager && pManager->getRowProps())
{
boost::optional<PropertyMap::Property> oIsSplitAllowed = pManager->getRowProps()->getProperty(PROP_IS_SPLIT_ALLOWED);
bCantSplit = oIsSplitAllowed && !oIsSplitAllowed->second.get<bool>();
}
// In case a cell already wanted fixed size and the row has <w:cantSplit/>, we should not overwrite it here.
if (!pManager || !pManager->IsRowSizeTypeInserted() || !bCantSplit)
pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false);
else
pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny(text::SizeType::FIX), false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment