tdf#101589 MS import: set 1-row table to don't split if row is set
Since .doc and .docx don't have an option to "don't split table", we emulated that. For this IMPORT case when there is only one row, consider the entire table to be unsplitable is the row is unsplitable. This will give the expected results if the user starts adding more rows to the table. Change-Id: I8a2d817ff714ba0df65b5a5e263b27df4264e848 Reviewed-on: https://gerrit.libreoffice.org/28357 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Justin Luth <justin_luth@sil.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>
This commit is contained in:
committed by
Michael Stahl
parent
7f95c479f7
commit
c06d77c5eb
@@ -936,6 +936,14 @@ DECLARE_OOXMLEXPORT_TEST(testDontSplitTable, "tdf101589_dontSplitTable.odt")
|
||||
{
|
||||
//single row tables need to prevent split by setting row to no split
|
||||
CPPUNIT_ASSERT_EQUAL( OUString("Row 1"), parseDump("/root/page[2]/body/tab[1]/row[1]/cell[1]/txt[1]") );
|
||||
|
||||
uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
|
||||
uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables(), uno::UNO_QUERY);
|
||||
uno::Reference<text::XTextTable> xTable (xTables->getByIndex(0), uno::UNO_QUERY);
|
||||
CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTable, "Split"));
|
||||
|
||||
uno::Reference<table::XTableRows> xTableRows(xTable->getRows(), uno::UNO_QUERY);
|
||||
CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xTableRows->getByIndex(0), "IsSplitAllowed"));
|
||||
}
|
||||
|
||||
DECLARE_OOXMLEXPORT_TEST(testExtraSectionBreak, "1_page.docx")
|
||||
|
@@ -3186,6 +3186,10 @@ void WW8TabDesc::AdjustNewBand()
|
||||
bool bSetCantSplit = pActBand->bCantSplit;
|
||||
pTabLine->GetFrameFormat()->SetFormatAttr(SwFormatRowSplit(!bSetCantSplit));
|
||||
|
||||
// if table is only a single row, and row is set as don't split, set the same value for the whole table.
|
||||
if( bSetCantSplit && pTabLines->size() == 1 )
|
||||
pTable->GetFrameFormat()->SetFormatAttr(SwFormatLayoutSplit( !bSetCantSplit ));
|
||||
|
||||
short i; // SW-Index
|
||||
short j; // WW-Index
|
||||
short nW; // Width
|
||||
|
@@ -576,6 +576,19 @@ TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo
|
||||
//fill default value - if not available
|
||||
m_aTableProperties->Insert( PROP_HEADER_ROW_COUNT, uno::makeAny( (sal_Int32)0), false);
|
||||
|
||||
// if table is only a single row, and row is set as don't split, set the same value for the whole table.
|
||||
if( m_aRowProperties.size() == 1 && m_aRowProperties[0].get() )
|
||||
{
|
||||
boost::optional<PropertyMap::Property> oSplitAllowed = m_aRowProperties[0]->getProperty(PROP_IS_SPLIT_ALLOWED);
|
||||
if( oSplitAllowed )
|
||||
{
|
||||
bool bRowCanSplit = true;
|
||||
oSplitAllowed->second >>= bRowCanSplit;
|
||||
if( !bRowCanSplit )
|
||||
m_aTableProperties->Insert( PROP_SPLIT, uno::makeAny(bRowCanSplit) );
|
||||
}
|
||||
}
|
||||
|
||||
rInfo.aTableProperties = m_aTableProperties->GetPropertyValues();
|
||||
|
||||
#ifdef DEBUG_WRITERFILTER
|
||||
|
@@ -238,6 +238,7 @@ OUString getPropertyName( PropertyIds eId )
|
||||
case PROP_CREATE_FROM_OUTLINE : sName = "CreateFromOutline"; break;
|
||||
case PROP_CREATE_FROM_MARKS : sName = "CreateFromMarks"; break;
|
||||
case PROP_STANDARD : sName = "Standard"; break;
|
||||
case PROP_SPLIT : sName = "Split"; break;
|
||||
case PROP_IS_SPLIT_ALLOWED : sName = "IsSplitAllowed"; break;
|
||||
case META_PROP_VERTICAL_BORDER : sName = "VerticalBorder"; break;
|
||||
case META_PROP_HORIZONTAL_BORDER : sName = "HorizontalBorder"; break;
|
||||
|
@@ -260,6 +260,7 @@ enum PropertyIds
|
||||
,PROP_SIZE_PROTECTED
|
||||
,PROP_SIZE_TYPE
|
||||
,PROP_SOURCE_NAME
|
||||
,PROP_SPLIT
|
||||
,PROP_STANDARD
|
||||
,PROP_START_AT
|
||||
,PROP_START_WITH
|
||||
|
Reference in New Issue
Block a user