27#include <rtl/ustring.hxx>
29#include <com/sun/star/text/XDependentTextField.hpp>
30#include <com/sun/star/text/XTextFieldsSupplier.hpp>
31#include <com/sun/star/lang/XMultiServiceFactory.hpp>
32#include <com/sun/star/beans/XPropertySet.hpp>
33#include <com/sun/star/beans/XPropertyState.hpp>
34#include <com/sun/star/container/XNameContainer.hpp>
35#include <com/sun/star/style/XStyle.hpp>
36#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
50sal_Int16 lcl_GetZoomType(
Id nType)
54 case NS_ooxml::LN_Value_doc_ST_Zoom_fullPage:
55 return sal_Int16(SvxZoomType::WHOLEPAGE);
56 case NS_ooxml::LN_Value_doc_ST_Zoom_bestFit:
57 return sal_Int16(SvxZoomType::PAGEWIDTH);
58 case NS_ooxml::LN_Value_doc_ST_Zoom_textFit:
59 return sal_Int16(SvxZoomType::OPTIMAL);
62 return sal_Int16(SvxZoomType::PERCENT);
153 m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing =
true;
155 m_pImpl->m_bLongerSpaceSequence =
true;
156 m_pImpl->m_bDoNotBreakWrappedTables =
true;
158 m_pImpl->m_pDocumentProtection = std::make_shared<DocumentProtection>();
159 m_pImpl->m_pWriteProtection = std::make_shared<WriteProtection>();
168 int nIntValue = val.
getInt();
173 case NS_ooxml::LN_CT_Zoom_percent:
174 m_pImpl->m_nZoomFactor = nIntValue;
176 case NS_ooxml::LN_CT_Zoom_val:
177 m_pImpl->m_nZoomType = lcl_GetZoomType(nIntValue);
179 case NS_ooxml::LN_CT_Language_val:
180 m_pImpl->m_pThemeFontLangProps.getArray()[0]
183 case NS_ooxml::LN_CT_Language_eastAsia:
184 m_pImpl->m_pThemeFontLangProps.getArray()[1]
187 case NS_ooxml::LN_CT_Language_bidi:
188 m_pImpl->m_pThemeFontLangProps.getArray()[2]
191 case NS_ooxml::LN_CT_View_val:
194 case NS_ooxml::LN_CT_DocVar_name:
195 m_pImpl->m_aDocVars.back().first = sStringValue;
197 case NS_ooxml::LN_CT_DocVar_val:
198 m_pImpl->m_aDocVars.back().second = sStringValue;
200 case NS_ooxml::LN_CT_CompatSetting_name:
201 m_pImpl->m_pCurrentCompatSetting.getArray()[0]
204 case NS_ooxml::LN_CT_CompatSetting_uri:
205 m_pImpl->m_pCurrentCompatSetting.getArray()[1]
208 case NS_ooxml::LN_CT_CompatSetting_val:
209 m_pImpl->m_pCurrentCompatSetting.getArray()[2]
212 case NS_ooxml::LN_CT_TrackChangesView_insDel:
213 m_pImpl->m_bShowInsDelChanges = (nIntValue != 0);
215 case NS_ooxml::LN_CT_TrackChangesView_formatting:
216 m_pImpl->m_bShowFormattingChanges = (nIntValue != 0);
218 case NS_ooxml::LN_CT_TrackChangesView_markup:
219 m_pImpl->m_bShowMarkupChanges = (nIntValue != 0);
232 sal_uInt32 nSprmId = rSprm.
getId();
235 sal_Int32 nIntValue = pValue->getInt();
239 case NS_ooxml::LN_CT_Settings_zoom:
240 case NS_ooxml::LN_CT_Settings_proofState:
241 case NS_ooxml::LN_CT_Settings_attachedTemplate:
242 case NS_ooxml::LN_CT_Settings_hdrShapeDefaults:
243 case NS_ooxml::LN_CT_Settings_footnotePr:
244 case NS_ooxml::LN_CT_Settings_endnotePr:
245 case NS_ooxml::LN_CT_Settings_compat:
246 case NS_ooxml::LN_CT_Settings_themeFontLang:
247 case NS_ooxml::LN_CT_Settings_shapeDefaults:
248 case NS_ooxml::LN_CT_Settings_view:
254 case NS_ooxml::LN_CT_Settings_stylePaneFormatFilter:
256 case NS_ooxml::LN_CT_Settings_defaultTabStop:
257 m_pImpl->m_nDefaultTabStop = nIntValue;
259 case NS_ooxml::LN_CT_Settings_linkStyles:
260 m_pImpl->m_bLinkStyles = nIntValue;
262 case NS_ooxml::LN_CT_Settings_evenAndOddHeaders:
263 m_pImpl->m_bEvenAndOddHeaders = nIntValue;
265 case NS_ooxml::LN_CT_Settings_noPunctuationKerning:
267 case NS_ooxml::LN_CT_Settings_characterSpacingControl:
270 case NS_ooxml::LN_CT_Settings_doNotIncludeSubdocsInStats:
272 case NS_ooxml::LN_CT_Settings_decimalSymbol:
273 m_pImpl->m_sDecimalSymbol = pValue->getString();
275 case NS_ooxml::LN_CT_Settings_listSeparator:
276 m_pImpl->m_sListSeparator = pValue->getString();
278 case NS_ooxml::LN_CT_Settings_rsids:
280 case NS_ooxml::LN_CT_Settings_hyphenationZone:
281 m_pImpl->m_nHyphenationZone = nIntValue;
283 case NS_ooxml::LN_CT_Compat_useFELayout:
286 case NS_ooxml::LN_CT_Settings_trackRevisions:
291 case NS_ooxml::LN_CT_Settings_revisionView:
294 case NS_ooxml::LN_CT_Settings_documentProtection:
297 case NS_ooxml::LN_CT_Settings_writeProtection:
300 case NS_ooxml::LN_CT_Compat_usePrinterMetrics:
301 m_pImpl->m_bUsePrinterMetrics = nIntValue;
303 case NS_ooxml::LN_CT_Settings_embedTrueTypeFonts:
304 m_pImpl->embedTrueTypeFonts = nIntValue != 0;
306 case NS_ooxml::LN_CT_Settings_embedSystemFonts:
307 m_pImpl->embedSystemFonts = nIntValue != 0;
309 case NS_ooxml::LN_CT_Compat_doNotUseHTMLParagraphAutoSpacing:
310 m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing = nIntValue;
312 case NS_ooxml::LN_CT_Compat_splitPgBreakAndParaMark:
313 m_pImpl->m_bSplitPgBreakAndParaMark = nIntValue;
315 case NS_ooxml::LN_CT_Settings_mirrorMargins:
316 m_pImpl->m_bMirrorMargin = nIntValue;
318 case NS_ooxml::LN_CT_Settings_mailMerge:
322 pProperties->resolve(*
this);
325 case NS_ooxml::LN_CT_MailMerge_query:
328 OUString sVal = pValue->getString();
329 if ( sVal.endsWith(
"$") && sVal.indexOf(
".dbo.") > 0 )
331 sal_Int32 nSpace = sVal.lastIndexOf(
' ');
332 sal_Int32 nDbo = sVal.lastIndexOf(
".dbo.");
333 if ( nSpace > 0 && nSpace < nDbo - 1 )
335 m_pImpl->m_sCurrentDatabaseDataSource = OUString::Concat(sVal.subView(nSpace + 1, nDbo - nSpace - 1)) +
336 sVal.subView(nDbo + 4, sVal.getLength() - nDbo - 5);
341 case NS_ooxml::LN_CT_Compat_compatSetting:
346 pProperties->resolve(*
this);
348 beans::PropertyValue aValue;
349 aValue.Name =
"compatSetting";
350 aValue.Value <<=
m_pImpl->m_pCurrentCompatSetting;
351 m_pImpl->m_aCompatSettings.push_back(aValue);
355 case NS_ooxml::LN_CT_Settings_docVars:
360 pProperties->resolve(*
this);
364 case NS_ooxml::LN_CT_DocVar:
369 m_pImpl->m_aDocVars.push_back(std::make_pair(OUString(), OUString()));
370 pProperties->resolve(*
this);
374 case NS_ooxml::LN_CT_Compat_noColumnBalance:
375 m_pImpl->m_bNoColumnBalance = nIntValue;
377 case NS_ooxml::LN_CT_Settings_autoHyphenation:
378 m_pImpl->m_bAutoHyphenation = nIntValue;
380 case NS_ooxml::LN_CT_Settings_doNotHyphenateCaps:
381 m_pImpl->m_bNoHyphenateCaps = nIntValue;
383 case NS_ooxml::LN_CT_Settings_widowControl:
384 m_pImpl->m_bWidowControl = nIntValue;
386 case NS_ooxml::LN_CT_Settings_longerSpaceSequence:
387 m_pImpl->m_bLongerSpaceSequence = nIntValue;
389 case NS_ooxml::LN_CT_Compat_doNotExpandShiftReturn:
390 m_pImpl->m_bDoNotExpandShiftReturn =
true;
392 case NS_ooxml::LN_CT_Settings_displayBackgroundShape:
393 m_pImpl->m_bDisplayBackgroundShape = nIntValue;
395 case NS_ooxml::LN_CT_Compat_noLeading:
396 m_pImpl->m_bNoLeading = nIntValue != 0;
398 case NS_ooxml::LN_CT_Settings_gutterAtTop:
399 m_pImpl->m_bGutterAtTop = nIntValue != 0;
401 case NS_ooxml::LN_CT_Compat_doNotBreakWrappedTables:
402 m_pImpl->m_bDoNotBreakWrappedTables = nIntValue != 0;
443 return m_pImpl->m_bUsePrinterMetrics;
448 return m_pImpl->m_bEvenAndOddHeaders;
453 return m_pImpl->embedTrueTypeFonts;
458 return m_pImpl->embedSystemFonts;
463 return m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing;
468 return m_pImpl->m_bNoColumnBalance;
473 return m_pImpl->m_bSplitPgBreakAndParaMark;
478 return m_pImpl->m_bMirrorMargin;
483 return m_pImpl->m_bDisplayBackgroundShape;
488 return m_pImpl->m_bDoNotExpandShiftReturn;
493 return m_pImpl->m_pDocumentProtection->getProtectForm()
494 &&
m_pImpl->m_pDocumentProtection->getEnforcement();
499 return m_pImpl->m_pWriteProtection->getRecommended()
500 || (
m_pImpl->m_pDocumentProtection->getReadOnly()
501 &&
m_pImpl->m_pDocumentProtection->getEnforcement());
506 return m_pImpl->m_bNoHyphenateCaps;
511 return m_pImpl->m_nHyphenationZone;
516 return m_pImpl->m_sDecimalSymbol;
521 return m_pImpl->m_sListSeparator;
527 return m_pImpl->m_pThemeFontLangProps;
536 {
"name",
uno::Any(OUString(
"compatibilityMode")) },
537 {
"uri",
uno::Any(OUString(
"http://schemas.microsoft.com/office/word")) },
541 beans::PropertyValue aValue;
542 aValue.Name =
"compatSetting";
543 aValue.Value <<= aCompatSetting;
545 m_pImpl->m_aCompatSettings.push_back(aValue);
553 return m_pImpl->m_pDocumentProtection->toSequence();
558 return m_pImpl->m_pWriteProtection->toSequence();
563 return m_pImpl->m_sCurrentDatabaseDataSource;
568 return xPropertyState->getPropertyState(rPropertyName) == beans::PropertyState_DEFAULT_VALUE;
577 xDocumentSettings->setPropertyValue(
"TableRowKeep",
uno::Any(
true));
581 xDocumentSettings->setPropertyValue(
"MsWordCompMinLineHeightByFly",
uno::Any(
true));
582 xDocumentSettings->setPropertyValue(
"TabOverMargin",
uno::Any(
true));
588 bool bHideChanges = !
m_pImpl->m_bShowInsDelChanges || !
m_pImpl->m_bShowMarkupChanges;
589 xDocProps->setPropertyValue(
"ShowChanges",
uno::Any( !bHideChanges ||
m_pImpl->m_bShowFormattingChanges ) );
595 xDocProps->setPropertyValue(
"RecordChanges",
uno::Any(
m_pImpl->m_bRecordChanges ) );
597 if (
m_pImpl->m_bRecordChanges &&
m_pImpl->m_pDocumentProtection->getRedlineProtection()
598 &&
m_pImpl->m_pDocumentProtection->getEnforcement())
602 css::uno::Sequence<sal_Int8> aDummyKey { 1 };
603 xDocProps->setPropertyValue(
"RedlineProtectionKey",
uno::Any( aDummyKey ));
608 if (
m_pImpl->m_aDocVars.size())
612 for (
const auto& docVar :
m_pImpl->m_aDocVars)
615 OUString sFieldMasterService(
"com.sun.star.text.FieldMaster.User." + docVar.first);
618 if (xFieldMasterAccess->hasByName(sFieldMasterService))
620 xMaster.set(xFieldMasterAccess->getByName(sFieldMasterService), uno::UNO_QUERY_THROW);
624 xMaster.set(xTextFactory->createInstance(
"com.sun.star.text.FieldMaster.User"), uno::UNO_QUERY_THROW);
627 xTextFactory->createInstance(
"com.sun.star.text.TextField.User"),
629 xField->attachTextFieldMaster(xMaster);
636 if (
m_pImpl->m_bDoNotBreakWrappedTables)
639 xDocumentSettings->setPropertyValue(
"DoNotBreakWrappedTables",
uno::Any(
true));
648 if (!xStyleFamiliesSupplier.is())
658 xPropertySet->setPropertyValue(
"ParaIsHyphenation",
uno::Any(
true));
660 if (
m_pImpl->m_bNoHyphenateCaps)
663 xPropertySet->setPropertyValue(
"ParaHyphenationNoCaps",
uno::Any(
true));
665 if (
m_pImpl->m_nHyphenationZone)
674 xPropertySet->setPropertyValue(
"ParaWidows", aAny);
675 xPropertySet->setPropertyValue(
"ParaOrphans", aAny);
682 for (
const auto& rProp :
m_pImpl->m_aCompatSettings)
684 if (rProp.Name ==
"compatSetting")
686 css::uno::Sequence<css::beans::PropertyValue> aCurrentCompatSettings;
687 rProp.Value >>= aCurrentCompatSettings;
690 aCurrentCompatSettings[0].Value >>=
sName;
691 if (
sName != sCompatName )
695 aCurrentCompatSettings[1].Value >>= sUri;
696 if ( sUri !=
"http://schemas.microsoft.com/office/word" )
700 aCurrentCompatSettings[2].Value >>= sVal;
702 bRet = sVal.toBoolean();
712 if (
m_pImpl->m_nWordCompatibilityMode != -1 )
713 return m_pImpl->m_nWordCompatibilityMode;
715 for (
const auto& rProp :
m_pImpl->m_aCompatSettings)
717 if (rProp.Name ==
"compatSetting")
719 css::uno::Sequence<css::beans::PropertyValue> aCurrentCompatSettings;
720 rProp.Value >>= aCurrentCompatSettings;
723 aCurrentCompatSettings[0].Value >>=
sName;
724 if (
sName !=
"compatibilityMode" )
728 aCurrentCompatSettings[1].Value >>= sUri;
729 if ( sUri !=
"http://schemas.microsoft.com/office/word" )
733 aCurrentCompatSettings[2].Value >>= sVal;
734 const sal_Int32 nValidMode = sVal.toInt32();
736 if ( nValidMode > 10 && nValidMode >
m_pImpl->m_nWordCompatibilityMode )
737 m_pImpl->m_nWordCompatibilityMode = nValidMode;
741 return m_pImpl->m_nWordCompatibilityMode;
746 return m_pImpl->m_bLongerSpaceSequence;
An SPRM: Section, Paragraph and Run Modifier.
virtual sal_uInt32 getId() const =0
Returns id of the SPRM.
virtual writerfilter::Reference< Properties >::Pointer_t getProps()=0
Returns reference to properties contained in the SPRM.
virtual Value::Pointer_t getValue()=0
Returns value of the SPRM.
static TagLogger & getInstance()
void element(const std::string &name)
virtual int getInt() const =0
Returns integer representation of the value.
virtual OUString getString() const =0
Returns string representation of the value.
css::uno::Sequence< css::beans::PropertyValue > GetWriteProtectionSettings() const
bool GetDoNotUseHTMLParagraphAutoSpacing() const
SettingsTable(const DomainMapper &rDomainMapper)
bool GetUsePrinterMetrics() const
css::uno::Sequence< css::beans::PropertyValue > GetCompatSettings() const
virtual ~SettingsTable() override
bool GetProtectForm() const
const OUString & GetListSeparator() const
const OUString & GetCurrentDatabaseDataSource() const
sal_Int32 GetWordCompatibilityMode() const
bool GetEvenAndOddHeaders() const
sal_Int16 GetZoomType() const
Gets the type of the zoom.
bool GetDoNotExpandShiftReturn() const
void ApplyProperties(css::uno::Reference< css::text::XTextDocument > const &xDoc)
bool GetNoLeading() const
std::unique_ptr< SettingsTable_Impl > m_pImpl
bool GetEmbedSystemFonts() const
bool GetCompatSettingValue(std::u16string_view sCompatName) const
css::uno::Sequence< css::beans::PropertyValue > GetDocumentProtectionSettings() const
css::uno::Sequence< css::beans::PropertyValue > const & GetThemeFontLangProperties() const
bool GetDisplayBackgroundShape() const
int GetDefaultTabStop() const
sal_Int16 GetHyphenationZone() const
sal_Int16 GetZoomFactor() const
What's the zoom factor set in percents?
bool GetLinkStyles() const
Automatically update styles from document template?
bool GetNoColumnBalance() const
bool GetEmbedTrueTypeFonts() const
const OUString & GetDecimalSymbol() const
bool GetLongerSpaceSequence() const
virtual void lcl_sprm(Sprm &sprm) override
bool GetMirrorMarginSettings() const
virtual void lcl_entry(writerfilter::Reference< Properties >::Pointer_t ref) override
virtual void lcl_attribute(Id Name, Value &val) override
bool GetGutterAtTop() const
Id GetView() const
What's the requested view? E.g. "web".
bool GetNoHyphenateCaps() const
bool GetSplitPgBreakAndParaMark() const
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
css::uno::Sequence< css::beans::PropertyValue > InitPropertySequence(::std::initializer_list< ::std::pair< OUString, css::uno::Any > > vInit)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
sal_Int32 convertTwipToMM100(sal_Int32 _t)
OUString getPropertyName(PropertyIds eId)
static bool lcl_isDefault(const uno::Reference< beans::XPropertyState > &xPropertyState, const OUString &rPropertyName)
void resolveSprmProps(Properties &rHandler, Sprm &rSprm)
bool m_bDoNotBreakWrappedTables
bool m_bDisplayBackgroundShape
sal_Int16 m_nHyphenationZone
bool m_bShowMarkupChanges
bool m_bDoNotUseHTMLParagraphAutoSpacing
bool m_bLongerSpaceSequence
bool m_bSplitPgBreakAndParaMark
bool m_bEvenAndOddHeaders
uno::Sequence< beans::PropertyValue > m_pCurrentCompatSetting
bool m_bDoNotExpandShiftReturn
std::vector< beans::PropertyValue > m_aCompatSettings
bool m_bShowFormattingChanges
bool m_bShowInsDelChanges
uno::Sequence< beans::PropertyValue > m_pThemeFontLangProps
sal_Int32 m_nWordCompatibilityMode
std::shared_ptr< WriteProtection > m_pWriteProtection
std::shared_ptr< DocumentProtection > m_pDocumentProtection
OUString m_sCurrentDatabaseDataSource
OUString m_sListSeparator
OUString m_sDecimalSymbol
std::vector< std::pair< OUString, OUString > > m_aDocVars
bool m_bUsePrinterMetrics