summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Luth <justin_luth@sil.org>2017-09-28 18:22:08 +0300
committerJustin Luth <justin_luth@sil.org>2017-10-11 19:42:40 +0200
commite69473539a33da5450d3878999eba7f9bfb9e631 (patch)
tree35da212cc7e0fd1538b93b5e0a1fb09d01ed8b96
parentbb1a1e367e049d8f2ea30187b329d370bfd2c6ef (diff)
tdf#55528 ww8import: import table width percent
Change-Id: Ifab8fa2df13e16cbfbd70b62912ca2a6245e16cc Reviewed-on: https://gerrit.libreoffice.org/42918 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Justin Luth <justin_luth@sil.org>
-rwxr-xr-xsw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.docbin0 -> 24576 bytes
-rw-r--r--sw/qa/extras/ww8export/ww8export2.cxx11
-rw-r--r--sw/source/filter/ww8/ww8par2.cxx18
3 files changed, 27 insertions, 2 deletions
diff --git a/sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc b/sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc
new file mode 100755
index 000000000000..367f7873d75f
--- /dev/null
+++ b/sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc
Binary files differ
diff --git a/sw/qa/extras/ww8export/ww8export2.cxx b/sw/qa/extras/ww8export/ww8export2.cxx
index cc6e3f14c5c6..191d4b940e10 100644
--- a/sw/qa/extras/ww8export/ww8export2.cxx
+++ b/sw/qa/extras/ww8export/ww8export2.cxx
@@ -52,6 +52,17 @@ DECLARE_WW8EXPORT_TEST(testTdf41542_borderlessPadding, "tdf41542_borderlessPaddi
CPPUNIT_ASSERT_EQUAL( 3, getPages() );
}
+DECLARE_WW8EXPORT_TEST(testTdf55528_relativeTableWidth, "tdf55528_relativeTableWidth.doc")
+{
+
+ 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);
+
+if ( !mbExported )
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Table relative width percent", sal_Int16(98), getProperty<sal_Int16>(xTable, "RelativeWidth"));
+ }
+
DECLARE_WW8EXPORT_TEST(testTdf37153, "tdf37153_considerWrapOnObjPos.doc")
{
CPPUNIT_ASSERT_EQUAL(text::WrapTextMode_THROUGH, getProperty<text::WrapTextMode>(getShape(1), "Surround"));
diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx
index f30b6e9632c7..574db30c1200 100644
--- a/sw/source/filter/ww8/ww8par2.cxx
+++ b/sw/source/filter/ww8/ww8par2.cxx
@@ -169,6 +169,7 @@ class WW8TabDesc
short m_nMaxRight;
short m_nSwWidth;
short m_nPreferredWidth;
+ short m_nPercentWidth;
bool m_bOk;
bool m_bClaimLineFormat;
@@ -1847,6 +1848,7 @@ WW8TabDesc::WW8TabDesc(SwWW8ImplReader* pIoClass, WW8_CP nStartCp) :
m_nMaxRight(0),
m_nSwWidth(0),
m_nPreferredWidth(0),
+ m_nPercentWidth(0),
m_bOk(true),
m_bClaimLineFormat(false),
m_eOri(text::HoriOrientation::NONE),
@@ -1922,6 +1924,15 @@ WW8TabDesc::WW8TabDesc(SwWW8ImplReader* pIoClass, WW8_CP nStartCp) :
const sal_uInt8 b2 = pParams[2];
if (b0 == 3) // Twips
m_nPreferredWidth = b2 * 0x100 + b1;
+ else if (b0 == 2) // percent in fiftieths of a percent
+ {
+ m_nPercentWidth = (b2 * 0x100 + b1);
+ // MS documentation: non-negative, and 600% max
+ if ( m_nPercentWidth >= 0 && m_nPercentWidth <= 30000 )
+ m_nPercentWidth *= .02;
+ else
+ m_nPercentWidth = 100;
+ }
}
break;
case sprmTTextFlow:
@@ -2537,8 +2548,11 @@ void WW8TabDesc::CreateSwTable()
// total width of table
if( m_nMaxRight - m_nMinLeft > MINLAY * m_nDefaultSwCols )
{
- m_pTable->GetFrameFormat()->SetFormatAttr(SwFormatFrameSize(ATT_FIX_SIZE, m_nSwWidth));
- m_aItemSet.Put(SwFormatFrameSize(ATT_FIX_SIZE, m_nSwWidth));
+ SwFormatFrameSize aFrameSize(ATT_FIX_SIZE, m_nSwWidth);
+ if( m_nPercentWidth )
+ aFrameSize.SetWidthPercent(m_nPercentWidth);
+ m_pTable->GetFrameFormat()->SetFormatAttr(aFrameSize);
+ m_aItemSet.Put(aFrameSize);
}
SvxFrameDirectionItem aDirection(