sw/qa/extras/ooxmlimport/data/tdf98882.docx |binary sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 8 ++ writerfilter/source/dmapper/StyleSheetTable.cxx | 72 +++++++++++++++--------- 3 files changed, 53 insertions(+), 27 deletions(-)
New commits: commit 226af96743f8ce5f00f34ee726a1218c2274e3a2 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Tue Mar 29 14:03:00 2016 +0200 tdf#98882 DOCX import: set default para properties on the Standard para style That's what the DOC import does, and that's the reason e.g. the strange unwanted crop of the as-char anchored picture doesn't happen there. This also needs the "reset all existing style properties back to default" logic to be adapted: the Standard style has to be reset before the default are set, and later it should be left alone, otherwise the defaults are lost. Conflicts: sw/qa/extras/ooxmlimport/ooxmlimport.cxx (cherry picked from commit eae2331f83bd58bacccd898d60f6c5f54856c036) Change-Id: Ie422a0b64b80a826fa4f469145a26283fb32d734 Reviewed-on: https://gerrit.libreoffice.org/23597 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/sw/qa/extras/ooxmlimport/data/tdf98882.docx b/sw/qa/extras/ooxmlimport/data/tdf98882.docx new file mode 100644 index 0000000..53c1098 Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf98882.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index fec79d3..a634825 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -3079,6 +3079,14 @@ DECLARE_OOXMLIMPORT_TEST(testTdf97371, "tdf97371.docx") CPPUNIT_ASSERT(nDiff < 10); } +DECLARE_OOXMLIMPORT_TEST(testTdf98882, "tdf98882.docx") +{ + sal_Int32 nFlyHeight = parseDump("//fly/infos/bounds", "height").toInt32(); + sal_Int32 nContentHeight = parseDump("//notxt/infos/bounds", "height").toInt32(); + // The content height was 600, not 360, so the frame and the content height did not match. + CPPUNIT_ASSERT_EQUAL(nFlyHeight, nContentHeight); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx index 8389e8b..4476b89 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.cxx +++ b/writerfilter/source/dmapper/StyleSheetTable.cxx @@ -298,6 +298,8 @@ struct StyleSheetTable_Impl /// Appends the given key-value pair to the list of latent style properties of the current entry. void AppendLatentStyleProperty(const OUString& aName, Value& rValue); + /// Sets all properties of xStyle back to default. + void SetPropertiesToDefault(const uno::Reference<style::XStyle>& xStyle); }; @@ -372,6 +374,35 @@ void StyleSheetTable_Impl::AppendLatentStyleProperty(const OUString& aName, Valu m_pCurrentEntry->aLatentStyles.push_back(aValue); } +void StyleSheetTable_Impl::SetPropertiesToDefault(const uno::Reference<style::XStyle>& xStyle) +{ + // See if the existing style has any non-default properties. If so, reset them back to default. + uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY); + uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo(); + uno::Sequence<beans::Property> aProperties = xPropertySetInfo->getProperties(); + std::vector<OUString> aPropertyNames; + for (sal_Int32 i = 0; i < aProperties.getLength(); ++i) + { + aPropertyNames.push_back(aProperties[i].Name); + } + + uno::Reference<beans::XPropertyState> xPropertyState(xStyle, uno::UNO_QUERY); + uno::Sequence<beans::PropertyState> aStates = xPropertyState->getPropertyStates(comphelper::containerToSequence(aPropertyNames)); + for (sal_Int32 i = 0; i < aStates.getLength(); ++i) + { + if (aStates[i] == beans::PropertyState_DIRECT_VALUE) + { + try + { + xPropertyState->setPropertyToDefault(aPropertyNames[i]); + } + catch(const uno::Exception& rException) + { + SAL_INFO("writerfilter", "setPropertyToDefault(" << aPropertyNames[i] << ") failed: " << rException.Message); + } + } + } +} StyleSheetTable::StyleSheetTable(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> const& xTextDocument, @@ -932,32 +963,9 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable ) } xStyles->getByName( sConvertedStyleName ) >>= xStyle; - // See if the existing style has any non-default properties. If so, reset them back to default. - uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY); - uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo(); - uno::Sequence<beans::Property> aProperties = xPropertySetInfo->getProperties(); - std::vector<OUString> aPropertyNames; - for (sal_Int32 i = 0; i < aProperties.getLength(); ++i) - { - aPropertyNames.push_back(aProperties[i].Name); - } - - uno::Reference<beans::XPropertyState> xPropertyState(xStyle, uno::UNO_QUERY); - uno::Sequence<beans::PropertyState> aStates = xPropertyState->getPropertyStates(comphelper::containerToSequence(aPropertyNames)); - for (sal_Int32 i = 0; i < aStates.getLength(); ++i) - { - if (aStates[i] == beans::PropertyState_DIRECT_VALUE) - { - try - { - xPropertyState->setPropertyToDefault(aPropertyNames[i]); - } - catch(const uno::Exception& rException) - { - SAL_INFO("writerfilter", "setPropertyToDefault(" << aPropertyNames[i] << ") failed: " << rException.Message); - } - } - } + // Standard is handled already in applyDefaults(). + if (sConvertedStyleName != "Standard") + m_pImpl->SetPropertiesToDefault(xStyle); } else { @@ -1485,12 +1493,22 @@ void StyleSheetTable::applyDefaults(bool bParaProperties) } if( bParaProperties && m_pImpl->m_pDefaultParaProps.get()) { + uno::Reference<style::XStyleFamiliesSupplier> xStylesSupplier(m_pImpl->m_xTextDocument, uno::UNO_QUERY); + uno::Reference<container::XNameAccess> xStyleFamilies = xStylesSupplier->getStyleFamilies(); + uno::Reference<container::XNameAccess> xParagraphStyles; + xStyleFamilies->getByName("ParagraphStyles") >>= xParagraphStyles; + uno::Reference<beans::XPropertySet> xStandard; + xParagraphStyles->getByName("Standard") >>= xStandard; + + uno::Reference<style::XStyle> xStyle(xStandard, uno::UNO_QUERY); + m_pImpl->SetPropertiesToDefault(xStyle); + uno::Sequence< beans::PropertyValue > aPropValues = m_pImpl->m_pDefaultParaProps->GetPropertyValues(); for( sal_Int32 i = 0; i < aPropValues.getLength(); ++i ) { try { - m_pImpl->m_xTextDefaults->setPropertyValue( aPropValues[i].Name, aPropValues[i].Value ); + xStandard->setPropertyValue(aPropValues[i].Name, aPropValues[i].Value); } catch( const uno::Exception& ) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits