diff options
author | Justin Luth <justin_luth@sil.org> | 2017-09-28 18:22:08 +0300 |
---|---|---|
committer | Justin Luth <justin_luth@sil.org> | 2017-10-11 19:42:40 +0200 |
commit | e69473539a33da5450d3878999eba7f9bfb9e631 (patch) | |
tree | 35da212cc7e0fd1538b93b5e0a1fb09d01ed8b96 | |
parent | bb1a1e367e049d8f2ea30187b329d370bfd2c6ef (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-x | sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc | bin | 0 -> 24576 bytes | |||
-rw-r--r-- | sw/qa/extras/ww8export/ww8export2.cxx | 11 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par2.cxx | 18 |
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 Binary files differnew file mode 100755 index 000000000000..367f7873d75f --- /dev/null +++ b/sw/qa/extras/ww8export/data/tdf55528_relativeTableWidth.doc 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( |