diff options
author | Michael Stahl <mstahl@redhat.com> | 2014-10-30 15:12:33 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2014-10-30 15:56:07 +0100 |
commit | 9605763e3dc8c85137787c77c31e8639553a35ed (patch) | |
tree | f5ce0b7562906170ba76fade41204dfc7392b985 | |
parent | 4e223fab04279c3583689e69fa1342966e81de36 (diff) |
fdo#79602: sw: add new compatibiltiy flag PropLineSpacingShrinksFirstLine
This is enabled by default, to get the new formatting where the first
line of a paragraph is shrunk if a proportional line spacing < 100% is
applied; existing OOo documents get the previous (before LO 3.3)
formatting. Since the formatting in LO releases is broken anyway, it
does not matter much which way documents written by old LO get
formatted.
Change-Id: I0952f568a933c137bd03070759989cac3517d8b9
-rw-r--r-- | sw/inc/IDocumentSettingAccess.hxx | 3 | ||||
-rw-r--r-- | sw/source/core/doc/DocumentSettingManager.cxx | 6 | ||||
-rw-r--r-- | sw/source/core/inc/DocumentSettingManager.hxx | 1 | ||||
-rw-r--r-- | sw/source/core/text/itrform2.cxx | 3 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par.cxx | 1 | ||||
-rw-r--r-- | sw/source/filter/xml/xmlimp.cxx | 10 | ||||
-rw-r--r-- | sw/source/uibase/uno/SwXDocumentSettings.cxx | 21 | ||||
-rw-r--r-- | writerfilter/source/filter/ImportFilter.cxx | 1 |
8 files changed, 43 insertions, 3 deletions
diff --git a/sw/inc/IDocumentSettingAccess.hxx b/sw/inc/IDocumentSettingAccess.hxx index a5445499353b..f0e941e8a3a1 100644 --- a/sw/inc/IDocumentSettingAccess.hxx +++ b/sw/inc/IDocumentSettingAccess.hxx @@ -79,6 +79,7 @@ namespace com { namespace sun { namespace star { namespace i18n { struct Forbidd TAB_OVER_MARGIN, // MS Word still wraps text around objects with less space than LO would. SURROUND_TEXT_WRAP_SMALL, + PROP_LINE_SPACING_SHRINKS_FIRST_LINE, // COMPATIBILITY FLAGS END BROWSE_MODE, @@ -93,7 +94,7 @@ namespace com { namespace sun { namespace star { namespace i18n { struct Forbidd FLOATTABLE_NOMARGINS, EMBED_FONTS, EMBED_SYSTEM_FONTS, - APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING + APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, }; public: diff --git a/sw/source/core/doc/DocumentSettingManager.cxx b/sw/source/core/doc/DocumentSettingManager.cxx index f192f722bf26..95dca59c2992 100644 --- a/sw/source/core/doc/DocumentSettingManager.cxx +++ b/sw/source/core/doc/DocumentSettingManager.cxx @@ -80,6 +80,7 @@ sw::DocumentSettingManager::DocumentSettingManager(SwDoc &rDoc) mbBackgroundParaOverDrawings(false), mbTabOverMargin(false), mbSurroundTextWrapSmall(false), + mbPropLineSpacingShrinksFirstLine(true), mApplyParagraphMarkFormatToNumbering(false), mbLastBrowseMode( false ) @@ -154,6 +155,7 @@ bool sw::DocumentSettingManager::get(/*[in]*/ DocumentSettingId id) const case BACKGROUND_PARA_OVER_DRAWINGS: return mbBackgroundParaOverDrawings; case TAB_OVER_MARGIN: return mbTabOverMargin; case SURROUND_TEXT_WRAP_SMALL: return mbSurroundTextWrapSmall; + case PROP_LINE_SPACING_SHRINKS_FIRST_LINE: return mbPropLineSpacingShrinksFirstLine; case BROWSE_MODE: return mbLastBrowseMode; // Attention: normally the SwViewShell has to be asked! case HTML_MODE: return mbHTMLMode; @@ -316,6 +318,10 @@ void sw::DocumentSettingManager::set(/*[in]*/ DocumentSettingId id, /*[in]*/ boo mbSurroundTextWrapSmall = value; break; + case PROP_LINE_SPACING_SHRINKS_FIRST_LINE: + mbPropLineSpacingShrinksFirstLine = value; + break; + // COMPATIBILITY FLAGS END case BROWSE_MODE: //can be used temporary (load/save) when no SwViewShell is available diff --git a/sw/source/core/inc/DocumentSettingManager.hxx b/sw/source/core/inc/DocumentSettingManager.hxx index 66cc76cc899c..6dc27ca2ddc8 100644 --- a/sw/source/core/inc/DocumentSettingManager.hxx +++ b/sw/source/core/inc/DocumentSettingManager.hxx @@ -147,6 +147,7 @@ class DocumentSettingManager : bool mbBackgroundParaOverDrawings; bool mbTabOverMargin; bool mbSurroundTextWrapSmall; + bool mbPropLineSpacingShrinksFirstLine; // fdo#79602 bool mApplyParagraphMarkFormatToNumbering; bool mbLastBrowseMode : 1; diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx index 233aaabfc960..c65021419c46 100644 --- a/sw/source/core/text/itrform2.cxx +++ b/sw/source/core/text/itrform2.cxx @@ -1744,7 +1744,8 @@ void SwTxtFormatter::CalcRealHeight( bool bNewLine ) case SVX_LINE_SPACE_AUTO: // shrink first line of paragraph too on spacing < 100% if (IsParaLine() && - pSpace->GetInterLineSpaceRule() == SVX_INTER_LINE_SPACE_PROP) + pSpace->GetInterLineSpaceRule() == SVX_INTER_LINE_SPACE_PROP + && GetTxtFrm()->GetTxtNode()->getIDocumentSettingAccess()->get(IDocumentSettingAccess::PROP_LINE_SPACING_SHRINKS_FIRST_LINE)) { long nTmp = pSpace->GetPropLineSpace(); // Word will render < 50% too but it's just not readable diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx index f3f921ec78f2..8104530e84f7 100644 --- a/sw/source/filter/ww8/ww8par.cxx +++ b/sw/source/filter/ww8/ww8par.cxx @@ -1945,6 +1945,7 @@ void SwWW8ImplReader::ImportDop() rDoc.getIDocumentSettingAccess().set(IDocumentSettingAccess::CLIPPED_PICTURES, true); rDoc.getIDocumentSettingAccess().set(IDocumentSettingAccess::TAB_OVER_MARGIN, true); rDoc.getIDocumentSettingAccess().set(IDocumentSettingAccess::SURROUND_TEXT_WRAP_SMALL, true); + rDoc.getIDocumentSettingAccess().set(IDocumentSettingAccess::PROP_LINE_SPACING_SHRINKS_FIRST_LINE, true); // COMPATIBILITY FLAGS END diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx index ab2e6431968b..f45ebf0a2805 100644 --- a/sw/source/filter/xml/xmlimp.cxx +++ b/sw/source/filter/xml/xmlimp.cxx @@ -1064,6 +1064,9 @@ void SwXMLImport::SetViewSettings(const Sequence < PropertyValue > & aViewProps) GetTextImport()->SetShowChanges( bShowRedlineChanges ); } +// Note: this will be called only if there are OOo elements in settings.xml. +// So if a setting is missing there we can assume that it was written +// by an OOo/LO version that is older than the introduction of the setting! void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aConfigProps) { // this method will modify the document directly -> lock SolarMutex @@ -1113,6 +1116,7 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC aSet.insert("ClippedPictures"); aSet.insert("BackgroundParaOverDrawings"); aSet.insert("TabOverMargin"); + aSet.insert("PropLineSpacingShrinksFirstLine"); sal_Int32 nCount = aConfigProps.getLength(); const PropertyValue* pValues = aConfigProps.getConstArray(); @@ -1147,6 +1151,7 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC bool bClippedPictures = false; bool bBackgroundParaOverDrawings = false; bool bTabOverMargin = false; + bool bPropLineSpacingShrinksFirstLine = false; const PropertyValue* currentDatabaseDataSource = NULL; const PropertyValue* currentDatabaseCommand = NULL; @@ -1234,6 +1239,8 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC bBackgroundParaOverDrawings = true; else if ( pValues->Name == "TabOverMargin" ) bTabOverMargin = true; + else if ( pValues->Name == "PropLineSpacingShrinksFirstLine" ) + bPropLineSpacingShrinksFirstLine = true; } catch( Exception& ) { @@ -1409,6 +1416,9 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC if ( !bTabOverMargin ) xProps->setPropertyValue("TabOverMargin", makeAny( false ) ); + if (!bPropLineSpacingShrinksFirstLine) + xProps->setPropertyValue("PropLineSpacingShrinksFirstLine", makeAny(false)); + SwDoc *pDoc = getDoc(); SfxPrinter *pPrinter = pDoc->getIDocumentDeviceAccess().getPrinter( false ); if( pPrinter ) diff --git a/sw/source/uibase/uno/SwXDocumentSettings.cxx b/sw/source/uibase/uno/SwXDocumentSettings.cxx index c8494ac4a1fe..ec71f6dd85e7 100644 --- a/sw/source/uibase/uno/SwXDocumentSettings.cxx +++ b/sw/source/uibase/uno/SwXDocumentSettings.cxx @@ -126,7 +126,8 @@ enum SwDocumentSettingsPropertyHandles HANDLE_EMBED_SYSTEM_FONTS, HANDLE_TAB_OVER_MARGIN, HANDLE_SURROUND_TEXT_WRAP_SMALL, - HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING + HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, + HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE, }; static MasterPropertySetInfo * lcl_createSettingsInfo() @@ -198,6 +199,7 @@ static MasterPropertySetInfo * lcl_createSettingsInfo() { OUString("TabOverMargin"), HANDLE_TAB_OVER_MARGIN, cppu::UnoType<bool>::get(), 0, 0}, { OUString("SurroundTextWrapSmall"), HANDLE_SURROUND_TEXT_WRAP_SMALL, cppu::UnoType<bool>::get(), 0, 0}, { OUString("ApplyParagraphMarkFormatToNumbering"), HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, cppu::UnoType<bool>::get(), 0, 0}, + { OUString("PropLineSpacingShrinksFirstLine"), HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE, cppu::UnoType<bool>::get(), 0, 0}, /* * As OS said, we don't have a view when we need to set this, so I have to * find another solution before adding them to this property set - MTG @@ -805,6 +807,16 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf mpDoc->getIDocumentSettingAccess().set(IDocumentSettingAccess::APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, bTmp); } break; + case HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE: + { + bool bTmp; + if (rValue >>= bTmp) + { + mpDoc->getIDocumentSettingAccess().set( + IDocumentSettingAccess::PROP_LINE_SPACING_SHRINKS_FIRST_LINE, bTmp); + } + } + break; default: throw UnknownPropertyException(); } @@ -1234,6 +1246,13 @@ void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInf rValue.setValue( &bTmp, ::getBooleanCppuType() ); } break; + case HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE: + { + sal_Bool const bTmp(mpDoc->getIDocumentSettingAccess().get( + IDocumentSettingAccess::PROP_LINE_SPACING_SHRINKS_FIRST_LINE)); + rValue <<= bTmp; + } + break; default: throw UnknownPropertyException(); } diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx index bc705a4f4de2..eb8801fabbd9 100644 --- a/writerfilter/source/filter/ImportFilter.cxx +++ b/writerfilter/source/filter/ImportFilter.cxx @@ -209,6 +209,7 @@ void WriterFilter::setTargetDocument( const uno::Reference< lang::XComponent >& xSettings->setPropertyValue( "ClippedPictures", uno::makeAny( sal_True ) ); xSettings->setPropertyValue( "BackgroundParaOverDrawings", uno::makeAny( sal_True ) ); xSettings->setPropertyValue( "TabOverMargin", uno::makeAny( sal_True ) ); + xSettings->setPropertyValue("PropLineSpacingShrinksFirstLine", uno::makeAny(sal_True)); } void WriterFilter::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc ) |