1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <config_features.h>
21 
22 #include <sal/config.h>
23 #include <sal/log.hxx>
24 
25 #include <utility>
26 
27 #include <o3tl/any.hxx>
28 #include <sfx2/sfxbasecontroller.hxx>
29 #include "SwXDocumentSettings.hxx"
30 #include <comphelper/MasterPropertySetInfo.hxx>
31 #include <cppuhelper/queryinterface.hxx>
32 #include <cppuhelper/supportsservice.hxx>
33 #include <com/sun/star/beans/PropertyAttribute.hpp>
34 #include <com/sun/star/i18n/XForbiddenCharacters.hpp>
35 #include <com/sun/star/document/PrinterIndependentLayout.hpp>
36 #include <doc.hxx>
37 #include <IDocumentSettingAccess.hxx>
38 #include <IDocumentDeviceAccess.hxx>
39 #include <IDocumentRedlineAccess.hxx>
40 #include <docsh.hxx>
41 #include <fldupde.hxx>
42 #include <linkenum.hxx>
43 #include <sfx2/printer.hxx>
44 #include <editsh.hxx>
45 #include <drawdoc.hxx>
46 #include <svl/zforlist.hxx>
47 #include <unotxdoc.hxx>
48 #include <cmdid.h>
49 #include <sfx2/zoomitem.hxx>
50 #include <unomod.hxx>
51 #include <vcl/svapp.hxx>
52 #include <svl/asiancfg.hxx>
53 #include <tools/stream.hxx>
54 
55 #include <swmodule.hxx>
56 #include <cfgitems.hxx>
57 #include <prtopt.hxx>
58 #include <dbmgr.hxx>
59 
60 using namespace comphelper;
61 using namespace ::com::sun::star;
62 using namespace ::com::sun::star::uno;
63 using namespace ::com::sun::star::beans;
64 using namespace ::com::sun::star::lang;
65 using namespace ::com::sun::star::i18n;
66 
67 enum SwDocumentSettingsPropertyHandles
68 {
69     HANDLE_FORBIDDEN_CHARS,
70     HANDLE_LINK_UPDATE_MODE,
71     HANDLE_FIELD_AUTO_UPDATE,
72     HANDLE_CHART_AUTO_UPDATE,
73     HANDLE_ADD_PARA_TABLE_SPACING,
74     HANDLE_ADD_PARA_TABLE_SPACING_AT_START,
75     HANDLE_ALIGN_TAB_STOP_POSITION,
76     HANDLE_PRINTER_NAME,
77     HANDLE_PRINTER_SETUP,
78     HANDLE_PRINTER_PAPER,
79     HANDLE_IS_KERN_ASIAN_PUNCTUATION,
80     HANDLE_CHARACTER_COMPRESSION_TYPE,
81     HANDLE_APPLY_USER_DATA,
82     HANDLE_SAVE_THUMBNAIL,
83     HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS,
84     HANDLE_CURRENT_DATABASE_DATA_SOURCE,
85     HANDLE_CURRENT_DATABASE_COMMAND,
86     HANDLE_CURRENT_DATABASE_COMMAND_TYPE,
87     HANDLE_EMBEDDED_DATABASE_NAME,
88     HANDLE_SAVE_VERSION_ON_CLOSE,
89     HANDLE_UPDATE_FROM_TEMPLATE,
90     HANDLE_PRINTER_INDEPENDENT_LAYOUT,
91     HANDLE_IS_LABEL_DOC,
92     HANDLE_IS_ADD_FLY_OFFSET,
93     HANDLE_IS_ADD_VERTICAL_FLY_OFFSET,
94     HANDLE_IS_ADD_EXTERNAL_LEADING,
95     HANDLE_OLD_NUMBERING,
96     HANDLE_OUTLINELEVEL_YIELDS_NUMBERING,
97     /* Stampit It disable the print cancel button of the shown progress dialog. */
98     HANDLE_ALLOW_PRINTJOB_CANCEL,
99     HANDLE_USE_FORMER_LINE_SPACING,
100     HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS,
101     HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS,
102     HANDLE_USE_FORMER_OBJECT_POSITIONING,
103     HANDLE_USE_FORMER_TEXT_WRAPPING,
104     HANDLE_CHANGES_PASSWORD,
105     HANDLE_CONSIDER_WRAP_ON_OBJPOS,
106     HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,
107     HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,
108     HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,
109     HANDLE_TABLE_ROW_KEEP,
110     HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,
111     HANDLE_LOAD_READONLY,
112     HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE,
113     HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES,
114     HANDLE_UNIX_FORCE_ZERO_EXT_LEADING,
115     HANDLE_USE_OLD_PRINTER_METRICS,
116     HANDLE_PROTECT_FORM,
117     HANDLE_MS_WORD_COMP_TRAILING_BLANKS,
118     HANDLE_MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY,
119     HANDLE_TABS_RELATIVE_TO_INDENT,
120     HANDLE_RSID,
121     HANDLE_RSID_ROOT,
122     HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST,
123     HANDLE_MODIFYPASSWORDINFO,
124     HANDLE_MATH_BASELINE_ALIGNMENT,
125     HANDLE_INVERT_BORDER_SPACING,
126     HANDLE_COLLAPSE_EMPTY_CELL_PARA,
127     HANDLE_SMALL_CAPS_PERCENTAGE_66,
128     HANDLE_TAB_OVERFLOW,
129     HANDLE_UNBREAKABLE_NUMBERINGS,
130     HANDLE_STYLES_NODEFAULT,
131     HANDLE_FLOATTABLE_NOMARGINS,
132     HANDLE_CLIPPED_PICTURES,
133     HANDLE_BACKGROUND_PARA_OVER_DRAWINGS,
134     HANDLE_EMBED_FONTS,
135     HANDLE_EMBED_USED_FONTS,
136     HANDLE_EMBED_LATIN_SCRIPT_FONTS,
137     HANDLE_EMBED_ASIAN_SCRIPT_FONTS,
138     HANDLE_EMBED_COMPLEX_SCRIPT_FONTS,
139     HANDLE_EMBED_SYSTEM_FONTS,
140     HANDLE_TAB_OVER_MARGIN,
141     HANDLE_TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK,
142     HANDLE_SURROUND_TEXT_WRAP_SMALL,
143     HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING,
144     HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE,
145     HANDLE_SUBTRACT_FLYS,
146     HANDLE_DISABLE_OFF_PAGE_POSITIONING,
147     HANDLE_EMPTY_DB_FIELD_HIDES_PARA,
148     HANDLE_CONTINUOUS_ENDNOTES,
149     HANDLE_HEADER_SPACING_BELOW_LAST_PARA,
150 };
151 
lcl_createSettingsInfo()152 static MasterPropertySetInfo * lcl_createSettingsInfo()
153 {
154     static PropertyInfo const aWriterSettingsInfoMap[] =
155     {
156         { OUString("ForbiddenCharacters"),        HANDLE_FORBIDDEN_CHARS,                 cppu::UnoType<css::i18n::XForbiddenCharacters>::get(),      0},
157         { OUString("LinkUpdateMode"),             HANDLE_LINK_UPDATE_MODE,                cppu::UnoType<sal_Int16>::get(),             0},
158         { OUString("FieldAutoUpdate"),            HANDLE_FIELD_AUTO_UPDATE,               cppu::UnoType<bool>::get(),           0},
159         { OUString("ChartAutoUpdate"),            HANDLE_CHART_AUTO_UPDATE,               cppu::UnoType<bool>::get(),           0},
160         { OUString("AddParaTableSpacing"),        HANDLE_ADD_PARA_TABLE_SPACING,          cppu::UnoType<bool>::get(),           0},
161         { OUString("AddParaTableSpacingAtStart"), HANDLE_ADD_PARA_TABLE_SPACING_AT_START, cppu::UnoType<bool>::get(),           0},
162         { OUString("AlignTabStopPosition"),       HANDLE_ALIGN_TAB_STOP_POSITION,         cppu::UnoType<bool>::get(),           0},
163         { OUString("PrinterName"),                HANDLE_PRINTER_NAME,                    cppu::UnoType<OUString>::get(),          0},
164         { OUString("PrinterSetup"),               HANDLE_PRINTER_SETUP,                   cppu::UnoType< cppu::UnoSequenceType<sal_Int8> >::get(),           0},
165         { OUString("PrinterPaperFromSetup"),      HANDLE_PRINTER_PAPER,                   cppu::UnoType<bool>::get(),           0},
166         { OUString("IsKernAsianPunctuation"),     HANDLE_IS_KERN_ASIAN_PUNCTUATION,       cppu::UnoType<bool>::get(),           0},
167         { OUString("CharacterCompressionType"),   HANDLE_CHARACTER_COMPRESSION_TYPE,      cppu::UnoType<sal_Int16>::get(),             0},
168         { OUString("ApplyUserData"),              HANDLE_APPLY_USER_DATA,                 cppu::UnoType<bool>::get(),           0 },
169         { OUString("SaveThumbnail"),              HANDLE_SAVE_THUMBNAIL,                  cppu::UnoType<bool>::get(),           0 },
170         { OUString("SaveGlobalDocumentLinks"),    HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS,      cppu::UnoType<bool>::get(),           0},
171         { OUString("CurrentDatabaseDataSource"),  HANDLE_CURRENT_DATABASE_DATA_SOURCE,    cppu::UnoType<OUString>::get(),          0},
172         { OUString("CurrentDatabaseCommand"),     HANDLE_CURRENT_DATABASE_COMMAND,        cppu::UnoType<OUString>::get(),          0},
173         { OUString("CurrentDatabaseCommandType"), HANDLE_CURRENT_DATABASE_COMMAND_TYPE,   cppu::UnoType<sal_Int32>::get(),             0},
174         { OUString("EmbeddedDatabaseName"),       HANDLE_EMBEDDED_DATABASE_NAME,          cppu::UnoType<OUString>::get(),              0},
175         { OUString("SaveVersionOnClose"),         HANDLE_SAVE_VERSION_ON_CLOSE,           cppu::UnoType<bool>::get(),           0},
176         { OUString("UpdateFromTemplate"),         HANDLE_UPDATE_FROM_TEMPLATE,            cppu::UnoType<bool>::get(),           0},
177 
178         { OUString("PrinterIndependentLayout"),   HANDLE_PRINTER_INDEPENDENT_LAYOUT,      cppu::UnoType<sal_Int16>::get(),             0},
179         { OUString("IsLabelDocument"),            HANDLE_IS_LABEL_DOC,                    cppu::UnoType<bool>::get(),           0},
180         { OUString("AddFrameOffsets"),            HANDLE_IS_ADD_FLY_OFFSET,               cppu::UnoType<bool>::get(),           0},
181         { OUString("AddVerticalFrameOffsets"),    HANDLE_IS_ADD_VERTICAL_FLY_OFFSET,      cppu::UnoType<bool>::get(),           0},
182         { OUString("AddExternalLeading"),         HANDLE_IS_ADD_EXTERNAL_LEADING,         cppu::UnoType<bool>::get(),           0},
183         { OUString("UseOldNumbering"),            HANDLE_OLD_NUMBERING,                   cppu::UnoType<bool>::get(),           0},
184         { OUString("OutlineLevelYieldsNumbering"), HANDLE_OUTLINELEVEL_YIELDS_NUMBERING, cppu::UnoType<bool>::get(),           0},
185         /* Stampit It disable the print cancel button of the shown progress dialog. */
186         { OUString("AllowPrintJobCancel"),        HANDLE_ALLOW_PRINTJOB_CANCEL,           cppu::UnoType<bool>::get(),           0},
187         { OUString("UseFormerLineSpacing"),       HANDLE_USE_FORMER_LINE_SPACING,         cppu::UnoType<bool>::get(),           0},
188         { OUString("AddParaSpacingToTableCells"), HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS, cppu::UnoType<bool>::get(),           0},
189         { OUString("AddParaLineSpacingToTableCells"), HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS, cppu::UnoType<bool>::get(),           0},
190         { OUString("UseFormerObjectPositioning"), HANDLE_USE_FORMER_OBJECT_POSITIONING,   cppu::UnoType<bool>::get(),           0},
191         { OUString("UseFormerTextWrapping"),      HANDLE_USE_FORMER_TEXT_WRAPPING,        cppu::UnoType<bool>::get(),           0},
192         { OUString("RedlineProtectionKey"),       HANDLE_CHANGES_PASSWORD,                cppu::UnoType< cppu::UnoSequenceType<sal_Int8> >::get(),           0},
193         { OUString("ConsiderTextWrapOnObjPos"),   HANDLE_CONSIDER_WRAP_ON_OBJPOS,         cppu::UnoType<bool>::get(),           0},
194         { OUString("IgnoreFirstLineIndentInNumbering"),   HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,         cppu::UnoType<bool>::get(),           0},
195         { OUString("DoNotJustifyLinesWithManualBreak"),   HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,         cppu::UnoType<bool>::get(),           0},
196         { OUString("DoNotResetParaAttrsForNumFont"),   HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,         cppu::UnoType<bool>::get(),           0},
197         { OUString("TableRowKeep"),               HANDLE_TABLE_ROW_KEEP,         cppu::UnoType<bool>::get(),           0},
198         { OUString("IgnoreTabsAndBlanksForLineCalculation"),   HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,         cppu::UnoType<bool>::get(),           0},
199         { OUString("LoadReadonly"),               HANDLE_LOAD_READONLY,                   cppu::UnoType<bool>::get(),           0},
200         { OUString("DoNotCaptureDrawObjsOnPage"),   HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, cppu::UnoType<bool>::get(), 0},
201         { OUString("ClipAsCharacterAnchoredWriterFlyFrames"), HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES, cppu::UnoType<bool>::get(), 0},
202         { OUString("UnxForceZeroExtLeading"), HANDLE_UNIX_FORCE_ZERO_EXT_LEADING, cppu::UnoType<bool>::get(), 0},
203         { OUString("UseOldPrinterMetrics"), HANDLE_USE_OLD_PRINTER_METRICS, cppu::UnoType<bool>::get(), 0},
204         { OUString("TabsRelativeToIndent"), HANDLE_TABS_RELATIVE_TO_INDENT, cppu::UnoType<bool>::get(), 0},
205         { OUString("Rsid"), HANDLE_RSID, cppu::UnoType<sal_Int32>::get(), 0},
206         { OUString("RsidRoot"), HANDLE_RSID_ROOT, cppu::UnoType<sal_Int32>::get(), 0},
207         { OUString("ProtectForm"), HANDLE_PROTECT_FORM, cppu::UnoType<bool>::get(), 0},
208         { OUString("MsWordCompTrailingBlanks"), HANDLE_MS_WORD_COMP_TRAILING_BLANKS, cppu::UnoType<bool>::get(), 0 },
209         { OUString("MsWordCompMinLineHeightByFly"), HANDLE_MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY, cppu::UnoType<bool>::get(), 0 },
210         { OUString("TabAtLeftIndentForParagraphsInList"), HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST, cppu::UnoType<bool>::get(), 0},
211         { OUString("ModifyPasswordInfo"), HANDLE_MODIFYPASSWORDINFO, cppu::UnoType< cppu::UnoSequenceType<css::beans::PropertyValue> >::get(), 0},
212         { OUString("MathBaselineAlignment"), HANDLE_MATH_BASELINE_ALIGNMENT, cppu::UnoType<bool>::get(), 0},
213         { OUString("InvertBorderSpacing"), HANDLE_INVERT_BORDER_SPACING, cppu::UnoType<bool>::get(), 0},
214         { OUString("CollapseEmptyCellPara"), HANDLE_COLLAPSE_EMPTY_CELL_PARA, cppu::UnoType<bool>::get(), 0},
215         { OUString("SmallCapsPercentage66"), HANDLE_SMALL_CAPS_PERCENTAGE_66, cppu::UnoType<bool>::get(), 0},
216         { OUString("TabOverflow"), HANDLE_TAB_OVERFLOW, cppu::UnoType<bool>::get(), 0},
217         { OUString("UnbreakableNumberings"), HANDLE_UNBREAKABLE_NUMBERINGS, cppu::UnoType<bool>::get(), 0},
218         { OUString("StylesNoDefault"), HANDLE_STYLES_NODEFAULT, cppu::UnoType<bool>::get(), 0},
219         { OUString("FloattableNomargins"), HANDLE_FLOATTABLE_NOMARGINS, cppu::UnoType<bool>::get(), 0},
220         { OUString("ClippedPictures"), HANDLE_CLIPPED_PICTURES, cppu::UnoType<bool>::get(), 0},
221         { OUString("BackgroundParaOverDrawings"), HANDLE_BACKGROUND_PARA_OVER_DRAWINGS, cppu::UnoType<bool>::get(), 0},
222         { OUString("EmbedFonts"), HANDLE_EMBED_FONTS, cppu::UnoType<bool>::get(), 0},
223         { OUString("EmbedOnlyUsedFonts"), HANDLE_EMBED_USED_FONTS, cppu::UnoType<bool>::get(), 0},
224         { OUString("EmbedLatinScriptFonts"), HANDLE_EMBED_LATIN_SCRIPT_FONTS, cppu::UnoType<bool>::get(), 0},
225         { OUString("EmbedAsianScriptFonts"), HANDLE_EMBED_ASIAN_SCRIPT_FONTS, cppu::UnoType<bool>::get(), 0},
226         { OUString("EmbedComplexScriptFonts"), HANDLE_EMBED_COMPLEX_SCRIPT_FONTS, cppu::UnoType<bool>::get(), 0},
227         { OUString("EmbedSystemFonts"), HANDLE_EMBED_SYSTEM_FONTS, cppu::UnoType<bool>::get(), 0},
228         { OUString("TabOverMargin"), HANDLE_TAB_OVER_MARGIN, cppu::UnoType<bool>::get(), 0},
229         { OUString("TreatSingleColumnBreakAsPageBreak"), HANDLE_TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK, cppu::UnoType<bool>::get(), 0},
230         { OUString("SurroundTextWrapSmall"), HANDLE_SURROUND_TEXT_WRAP_SMALL, cppu::UnoType<bool>::get(), 0},
231         { OUString("ApplyParagraphMarkFormatToNumbering"), HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, cppu::UnoType<bool>::get(), 0},
232         { OUString("PropLineSpacingShrinksFirstLine"),       HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE,         cppu::UnoType<bool>::get(),           0},
233         { OUString("SubtractFlysAnchoredAtFlys"),       HANDLE_SUBTRACT_FLYS,         cppu::UnoType<bool>::get(),           0},
234         { OUString("DisableOffPagePositioning"),       HANDLE_DISABLE_OFF_PAGE_POSITIONING,         cppu::UnoType<bool>::get(),           0},
235         { OUString("EmptyDbFieldHidesPara"), HANDLE_EMPTY_DB_FIELD_HIDES_PARA, cppu::UnoType<bool>::get(), 0 },
236         { OUString("ContinuousEndnotes"), HANDLE_CONTINUOUS_ENDNOTES, cppu::UnoType<bool>::get(), 0 },
237         { OUString("HeaderSpacingBelowLastPara"), HANDLE_HEADER_SPACING_BELOW_LAST_PARA, cppu::UnoType<bool>::get(), 0 },
238 
239 /*
240  * As OS said, we don't have a view when we need to set this, so I have to
241  * find another solution before adding them to this property set - MTG
242         { OUString("IsGridVisible"),              HANDLE_IS_GRID_VISIBLE,                 cppu::UnoType<bool>::get(),           0,   0},
243         { OUString("IsSnapToGrid"),               HANDLE_IS_SNAP_TO_GRID,                 cppu::UnoType<bool>::get(),           0,   0},
244         { OUString("IsSynchroniseAxes"),          HANDLE_IS_SYNCHRONISE_AXES,             cppu::UnoType<bool>::get(),           0,   0},
245         { OUString("HorizontalGridResolution"),   HANDLE_HORIZONTAL_GRID_RESOLUTION,      cppu::UnoType<sal_Int32>::get(),             0,   0},
246         { OUString("HorizontalGridSubdivision"),  HANDLE_HORIZONTAL_GRID_SUBDIVISION,     cppu::UnoType<sal_Int16>::get(),             0,   0},
247         { OUString("VerticalGridResolution"),     HANDLE_VERTICAL_GRID_RESOLUTION,        cppu::UnoType<sal_Int32>::get(),             0,   0},
248         { OUString("VerticalGridSubdivision"),    HANDLE_VERTICAL_GRID_SUBDIVISION,       cppu::UnoType<sal_Int16>::get(),             0,   0},
249 
250         { OUString("ShowParagraphEnd"),           HANDLE_SHOW_PARAGRAPH_END,              cppu::UnoType<bool>::get(),           0,   0},
251         { OUString("ShowOptionalHyphens"),        HANDLE_SHOW_OPTIONAL_HYPHENS,           cppu::UnoType<bool>::get(),           0,   0},
252         { OUString("ShowSpaces"),                 HANDLE_SHOW_SPACES,                     cppu::UnoType<bool>::get(),           0,   0},
253         { OUString("ShowTabs"),                   HANDLE_SHOW_TABS,                       cppu::UnoType<bool>::get(),           0,   0},
254         { OUString("ShowBreaks"),                 HANDLE_SHOW_BREAKS,                     cppu::UnoType<bool>::get(),           0,   0},
255         { OUString("ShowHiddenText"),             HANDLE_SHOW_HIDDEN_TEXT,                cppu::UnoType<bool>::get(),           0,   0},
256         { OUString("ShowHiddenParagraphs"),       HANDLE_SHOW_HIDDEN_PARAGRAPHS,          cppu::UnoType<bool>::get(),           0,   0},
257 
258         { OUString("ShowTextLimitGuide"),         HANDLE_SHOW_TEXT_LIMIT_GUIDE,           cppu::UnoType<bool>::get(),           0,   0},
259         { OUString("ShowTableLimitGuide"),        HANDLE_SHOW_TABLE_LIMIT_GUIDE,          cppu::UnoType<bool>::get(),           0,   0},
260         { OUString("ShowSectionLimitGuide"),      HANDLE_SHOW_SECTION_LIMIT_GUIDE,        cppu::UnoType<bool>::get(),           0,   0},
261         { OUString("ShowGuidesWhileMoving"),      HANDLE_SHOW_GUIDES_WHILE_MOVING,        cppu::UnoType<bool>::get(),           0,   0},
262 */
263         { OUString(), 0, css::uno::Type(), 0}
264     };
265     return new MasterPropertySetInfo ( aWriterSettingsInfoMap );
266 }
267 
SwXDocumentSettings(SwXTextDocument * pModel)268 SwXDocumentSettings::SwXDocumentSettings ( SwXTextDocument * pModel )
269 : MasterPropertySet ( lcl_createSettingsInfo (),
270                       &Application::GetSolarMutex () )
271 , mpModel ( pModel )
272 , mpDocSh ( nullptr )
273 , mpDoc ( nullptr )
274 , mpPrinter( nullptr )
275 , mbPreferPrinterPapersize( false )
276 {
277     registerSlave ( new SwXPrintSettings ( SwXPrintSettingsType::Document, mpModel->GetDocShell()->GetDoc() ) );
278 }
279 
~SwXDocumentSettings()280 SwXDocumentSettings::~SwXDocumentSettings()
281     throw()
282 {
283 }
284 
queryInterface(const Type & rType)285 Any SAL_CALL SwXDocumentSettings::queryInterface( const Type& rType )
286 {
287         return ::cppu::queryInterface(rType,
288                                       // OWeakObject interfaces
289                                       &dynamic_cast<XInterface&>(dynamic_cast<OWeakObject&>(*this)),
290                                       &dynamic_cast<XWeak&>(*this),
291                                       // my own interfaces
292                                       &dynamic_cast<XPropertySet&>(*this),
293                                       &dynamic_cast<XPropertyState&>(*this),
294                                       &dynamic_cast<XMultiPropertySet&>(*this),
295                                       &dynamic_cast<XServiceInfo&>(*this),
296                                       &dynamic_cast<XTypeProvider&>(*this));
297 }
acquire()298 void SwXDocumentSettings::acquire ()
299     throw ()
300 {
301     OWeakObject::acquire();
302 }
release()303 void SwXDocumentSettings::release ()
304     throw ()
305 {
306     OWeakObject::release();
307 }
308 
getTypes()309 uno::Sequence< uno::Type > SAL_CALL SwXDocumentSettings::getTypes(  )
310 {
311     static const uno::Sequence< uno::Type > aTypes {
312         // from MasterPropertySet
313         cppu::UnoType<XPropertySet>::get(),
314         cppu::UnoType<XPropertyState>::get(),
315         cppu::UnoType<XMultiPropertySet>::get(),
316         cppu::UnoType<XServiceInfo>::get(),
317         cppu::UnoType<XTypeProvider>::get(),
318     };
319     return aTypes;
320 }
321 
getImplementationId()322 uno::Sequence< sal_Int8 > SAL_CALL SwXDocumentSettings::getImplementationId(  )
323 {
324     return css::uno::Sequence<sal_Int8>();
325 }
326 
_preSetValues()327 void SwXDocumentSettings::_preSetValues ()
328 {
329     mpDocSh = mpModel->GetDocShell();
330     if (nullptr == mpDocSh)
331         throw UnknownPropertyException();
332 
333     mpDoc = mpDocSh->GetDoc();
334     if (nullptr == mpDoc)
335         throw UnknownPropertyException();
336 }
337 
_setSingleValue(const comphelper::PropertyInfo & rInfo,const uno::Any & rValue)338 void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInfo, const uno::Any &rValue )
339 {
340     if (rInfo.mnAttributes & PropertyAttribute::READONLY)
341         throw PropertyVetoException ("Property is read-only: " + rInfo.maName, static_cast < cppu::OWeakObject * > ( nullptr ) );
342 
343     switch( rInfo.mnHandle )
344     {
345         case HANDLE_FORBIDDEN_CHARS:
346             break;
347         case HANDLE_LINK_UPDATE_MODE:
348         {
349             sal_Int16 nMode = 0;
350             rValue >>= nMode;
351             switch (nMode)
352             {
353                 case NEVER:
354                 case MANUAL:
355                 case AUTOMATIC:
356                 case GLOBALSETTING:
357                     break;
358                 default:
359                     throw IllegalArgumentException();
360             }
361             mpDoc->getIDocumentSettingAccess().setLinkUpdateMode(nMode);
362         }
363         break;
364         case HANDLE_FIELD_AUTO_UPDATE:
365         {
366             bool bUpdateField = *o3tl::doAccess<bool>(rValue);
367             SwFieldUpdateFlags nFlag = mpDoc->getIDocumentSettingAccess().getFieldUpdateFlags(true);
368             mpDoc->getIDocumentSettingAccess().setFieldUpdateFlags( bUpdateField ?
369                                         nFlag == AUTOUPD_FIELD_AND_CHARTS ?
370                                         AUTOUPD_FIELD_AND_CHARTS :
371                                         AUTOUPD_FIELD_ONLY :
372                                         AUTOUPD_OFF );
373         }
374         break;
375         case HANDLE_CHART_AUTO_UPDATE:
376         {
377             bool bUpdateChart = *o3tl::doAccess<bool>(rValue);
378             SwFieldUpdateFlags nFlag = mpDoc->getIDocumentSettingAccess().getFieldUpdateFlags(true);
379             mpDoc->getIDocumentSettingAccess().setFieldUpdateFlags( (nFlag == AUTOUPD_FIELD_ONLY || nFlag == AUTOUPD_FIELD_AND_CHARTS ) ?
380                                         bUpdateChart ?
381                                         AUTOUPD_FIELD_AND_CHARTS :
382                                         AUTOUPD_FIELD_ONLY :
383                                         AUTOUPD_OFF );
384         }
385         break;
386         case HANDLE_ADD_PARA_TABLE_SPACING:
387         {
388             bool bParaSpace = false;
389             rValue >>= bParaSpace;
390             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::PARA_SPACE_MAX, bParaSpace );
391         }
392         break;
393         case HANDLE_ADD_PARA_TABLE_SPACING_AT_START:
394         {
395             bool bParaSpacePage = false;
396             rValue >>= bParaSpacePage;
397             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::PARA_SPACE_MAX_AT_PAGES, bParaSpacePage );
398         }
399         break;
400         case HANDLE_ALIGN_TAB_STOP_POSITION:
401         {
402             bool bAlignTab = *o3tl::doAccess<bool>(rValue);
403             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::TAB_COMPAT, bAlignTab);
404         }
405         break;
406         case HANDLE_PRINTER_NAME:
407         {
408             //the printer must be created
409             OUString sPrinterName;
410             if( !(rValue >>= sPrinterName)  )
411                 throw IllegalArgumentException();
412 
413             if( !mpPrinter && !sPrinterName.isEmpty() && mpDocSh->GetCreateMode() != SfxObjectCreateMode::EMBEDDED )
414             {
415                 SfxPrinter* pPrinter = mpDoc->getIDocumentDeviceAccess().getPrinter( true );
416                 if ( pPrinter->GetName() != sPrinterName )
417                 {
418                     VclPtrInstance<SfxPrinter> pNewPrinter( pPrinter->GetOptions().Clone(), sPrinterName );
419                     assert (! pNewPrinter->isDisposed() );
420                     if( pNewPrinter->IsKnown() )
421                     {
422                         // set printer only once; in _postSetValues
423                         mpPrinter = pNewPrinter;
424                     }
425                     else
426                     {
427                         pNewPrinter.disposeAndClear();
428                     }
429                 }
430             }
431 
432         }
433         break;
434         case HANDLE_PRINTER_SETUP:
435         {
436             Sequence < sal_Int8 > aSequence;
437             if ( !(rValue >>= aSequence) )
438                 throw IllegalArgumentException();
439 
440             sal_uInt32 nSize = aSequence.getLength();
441             if( nSize > 0 )
442             {
443                 SvMemoryStream aStream (aSequence.getArray(), nSize,
444                                         StreamMode::READ );
445                 aStream.Seek ( STREAM_SEEK_TO_BEGIN );
446                 static sal_uInt16 const nRange[] =
447                 {
448                     FN_PARAM_ADDPRINTER, FN_PARAM_ADDPRINTER,
449                     SID_HTML_MODE,  SID_HTML_MODE,
450                     SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
451                     SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC,
452                     0
453                 };
454                 auto pItemSet = std::make_unique<SfxItemSet>( mpDoc->GetAttrPool(), nRange );
455                 VclPtr<SfxPrinter> pPrinter = SfxPrinter::Create ( aStream, std::move(pItemSet) );
456                 assert (! pPrinter->isDisposed() );
457                 // set printer only once; in _postSetValues
458                 mpPrinter.disposeAndClear();
459                 mpPrinter = pPrinter;
460             }
461 
462         }
463         break;
464         case HANDLE_PRINTER_PAPER:
465         {
466             bool bPreferPrinterPapersize;
467             if(!(rValue >>= bPreferPrinterPapersize))
468                 throw IllegalArgumentException();
469             mbPreferPrinterPapersize = bPreferPrinterPapersize;
470         }
471         break;
472         case HANDLE_IS_KERN_ASIAN_PUNCTUATION:
473         {
474             bool bIsKern = *o3tl::doAccess<bool>(rValue);
475             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::KERN_ASIAN_PUNCTUATION, bIsKern);
476             SwEditShell* pEditSh = mpDoc->GetEditShell();
477             if(pEditSh)
478                 pEditSh->ChgHyphenation();
479         }
480         break;
481         case HANDLE_CHARACTER_COMPRESSION_TYPE:
482         {
483             sal_Int16 nMode = 0;
484             rValue >>= nMode;
485             switch (static_cast<CharCompressType>(nMode))
486             {
487                 case CharCompressType::NONE:
488                 case CharCompressType::PunctuationOnly:
489                 case CharCompressType::PunctuationAndKana:
490                     break;
491                 default:
492                     throw IllegalArgumentException();
493             }
494             mpDoc->getIDocumentSettingAccess().setCharacterCompressionType(static_cast<CharCompressType>(nMode));
495         }
496         break;
497         case HANDLE_APPLY_USER_DATA:
498         {
499             mpDocSh->SetUseUserData(*o3tl::doAccess<bool>(rValue));
500         }
501         break;
502         case HANDLE_SAVE_THUMBNAIL:
503         {
504             mpDocSh->SetUseThumbnailSave(*o3tl::doAccess<bool>(rValue));
505         }
506         break;
507         case HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS:
508         {
509             bool bSaveGlobal = *o3tl::doAccess<bool>(rValue);
510             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::GLOBAL_DOCUMENT_SAVE_LINKS, bSaveGlobal );
511         }
512         break;
513         case HANDLE_CURRENT_DATABASE_DATA_SOURCE:
514         {
515             SwDBData aData = mpDoc->GetDBData();
516             if ( rValue >>= aData.sDataSource )
517                 mpDoc->ChgDBData( aData );
518         }
519         break;
520         case HANDLE_CURRENT_DATABASE_COMMAND:
521         {
522             SwDBData aData = mpDoc->GetDBData();
523 
524             if ( rValue >>= aData.sCommand )
525                 mpDoc->ChgDBData( aData );
526 
527             SAL_WARN_IF( aData.sDataSource.isEmpty() && !aData.sCommand.isEmpty(), "sw.uno",
528                 "\"CurrentDatabaseCommand\" property possibly set before \"CurrentDatabaseDataSource\"" );
529         }
530         break;
531         case HANDLE_CURRENT_DATABASE_COMMAND_TYPE:
532         {
533             SwDBData aData = mpDoc->GetDBData();
534             if ( rValue >>= aData.nCommandType )
535                 mpDoc->ChgDBData( aData );
536             SAL_WARN_IF( aData.nCommandType && aData.sDataSource.isEmpty(), "sw.uno",
537                 "\"CurrentDatabaseCommandType\" property possibly set before \"CurrentDatabaseDataSource\"" );
538             SAL_WARN_IF( aData.nCommandType && aData.sCommand.isEmpty(), "sw.uno",
539                 "\"CurrentDatabaseCommandType\" property possibly set before \"CurrentDatabaseCommand\"" );
540         }
541         break;
542         case HANDLE_EMBEDDED_DATABASE_NAME:
543         {
544 #if HAVE_FEATURE_DBCONNECTIVITY
545             OUString sEmbeddedName;
546             if (rValue >>= sEmbeddedName)
547                 mpDoc->GetDBManager()->setEmbeddedName(sEmbeddedName, *mpDocSh);
548 #endif
549         }
550         break;
551         case HANDLE_SAVE_VERSION_ON_CLOSE:
552         {
553             mpDocSh->SetSaveVersionOnClose( *o3tl::doAccess<bool>(rValue) );
554         }
555         break;
556         case HANDLE_UPDATE_FROM_TEMPLATE:
557         {
558             mpDocSh->SetQueryLoadTemplate( *o3tl::doAccess<bool>(rValue) );
559         }
560         break;
561         case HANDLE_PRINTER_INDEPENDENT_LAYOUT:
562         {
563             sal_Int16 nTmp = 0;
564             rValue >>= nTmp;
565 
566             bool bUseVirDev = true;
567             bool bHiResVirDev = true;
568             if( nTmp == document::PrinterIndependentLayout::DISABLED )
569                 bUseVirDev = false;
570             else if ( nTmp == document::PrinterIndependentLayout::LOW_RESOLUTION )
571                 bHiResVirDev = false;
572             else if ( nTmp != document::PrinterIndependentLayout::HIGH_RESOLUTION )
573                 throw IllegalArgumentException();
574 
575             mpDoc->getIDocumentDeviceAccess().setReferenceDeviceType( bUseVirDev, bHiResVirDev );
576         }
577         break;
578         case HANDLE_IS_LABEL_DOC :
579         {
580             bool bSet = false;
581             if(!(rValue >>= bSet))
582                 throw IllegalArgumentException();
583             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::LABEL_DOCUMENT, bSet);
584         }
585         break;
586         case HANDLE_IS_ADD_FLY_OFFSET:
587         {
588             bool bTmp = *o3tl::doAccess<bool>(rValue);
589             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::ADD_FLY_OFFSETS, bTmp);
590         }
591         break;
592         case HANDLE_IS_ADD_VERTICAL_FLY_OFFSET:
593         {
594             bool bTmp = *o3tl::doAccess<bool>(rValue);
595             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::ADD_VERTICAL_FLY_OFFSETS, bTmp);
596         }
597         break;
598         case HANDLE_IS_ADD_EXTERNAL_LEADING:
599         {
600             bool bTmp = *o3tl::doAccess<bool>(rValue);
601             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::ADD_EXT_LEADING, bTmp);
602         }
603         break;
604         case HANDLE_OLD_NUMBERING:
605         {
606             bool bTmp = *o3tl::doAccess<bool>(rValue);
607             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::OLD_NUMBERING, bTmp);
608         }
609         break;
610         case HANDLE_OUTLINELEVEL_YIELDS_NUMBERING:
611         {
612             // ignore - this is a dead property
613         }
614         break;
615         case HANDLE_ALLOW_PRINTJOB_CANCEL:
616         {
617             bool bState = false;
618             if (!(rValue >>= bState))
619                 throw IllegalArgumentException();
620             mpDocSh->Stamp_SetPrintCancelState(bState);
621         }
622         break;
623         case HANDLE_USE_FORMER_LINE_SPACING:
624         {
625             bool bTmp = *o3tl::doAccess<bool>(rValue);
626             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::OLD_LINE_SPACING, bTmp);
627         }
628         break;
629         case HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS:
630         {
631             bool bTmp = *o3tl::doAccess<bool>(rValue);
632             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS, bTmp);
633         }
634         break;
635         case HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS:
636         {
637             bool bTmp = *o3tl::doAccess<bool>(rValue);
638             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS, bTmp);
639         }
640         break;
641         case HANDLE_USE_FORMER_OBJECT_POSITIONING:
642         {
643             bool bTmp = *o3tl::doAccess<bool>(rValue);
644             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::USE_FORMER_OBJECT_POS, bTmp);
645         }
646         break;
647         case HANDLE_USE_FORMER_TEXT_WRAPPING:
648         {
649             bool bTmp = *o3tl::doAccess<bool>(rValue);
650             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::USE_FORMER_TEXT_WRAPPING, bTmp);
651         }
652         break;
653         case HANDLE_CHANGES_PASSWORD:
654         {
655             Sequence <sal_Int8> aNew;
656             if(rValue >>= aNew)
657             {
658                 mpDoc->getIDocumentRedlineAccess().SetRedlinePassword(aNew);
659                 if(aNew.hasElements())
660                 {
661                     RedlineFlags eMode = mpDoc->getIDocumentRedlineAccess().GetRedlineFlags();
662                     eMode |= RedlineFlags::On;
663                     mpDoc->getIDocumentRedlineAccess().SetRedlineFlags( eMode );
664                 }
665             }
666         }
667         break;
668         case HANDLE_CONSIDER_WRAP_ON_OBJPOS:
669         {
670             bool bTmp = *o3tl::doAccess<bool>(rValue);
671             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION, bTmp );
672         }
673         break;
674         case HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING:
675         {
676             bool bTmp = *o3tl::doAccess<bool>(rValue);
677             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING, bTmp);
678         }
679         break;
680         case HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK:
681         {
682             bool bTmp = *o3tl::doAccess<bool>(rValue);
683             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK, bTmp);
684         }
685         break;
686         case HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT:
687         {
688             bool bTmp = *o3tl::doAccess<bool>(rValue);
689             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT, bTmp);
690         }
691         break;
692         case HANDLE_TABLE_ROW_KEEP:
693         {
694             bool bTmp = *o3tl::doAccess<bool>(rValue);
695             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::TABLE_ROW_KEEP, bTmp);
696         }
697         break;
698         case HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION:
699         {
700             bool bTmp = *o3tl::doAccess<bool>(rValue);
701             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION, bTmp);
702         }
703         break;
704         case HANDLE_LOAD_READONLY:
705         {
706             mpDocSh->SetLoadReadonly( *o3tl::doAccess<bool>(rValue) );
707         }
708         break;
709         case HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE:
710         {
711             bool bTmp = *o3tl::doAccess<bool>(rValue);
712             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, bTmp);
713         }
714         break;
715         case HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES:
716         {
717             bool bTmp = *o3tl::doAccess<bool>(rValue);
718             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAME, bTmp);
719         }
720         break;
721         case HANDLE_UNIX_FORCE_ZERO_EXT_LEADING:
722         {
723             bool bTmp = *o3tl::doAccess<bool>(rValue);
724             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::UNIX_FORCE_ZERO_EXT_LEADING, bTmp);
725         }
726         break;
727         case HANDLE_USE_OLD_PRINTER_METRICS:
728             // ignore - this is a dead property
729         break;
730         case HANDLE_TABS_RELATIVE_TO_INDENT:
731         {
732             bool bTmp = *o3tl::doAccess<bool>(rValue);
733             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::TABS_RELATIVE_TO_INDENT, bTmp);
734         }
735         break;
736         case HANDLE_RSID:
737         {
738             sal_uInt32 nTmp = 0;
739             rValue >>= nTmp;
740             mpDoc->setRsid( nTmp );
741         }
742         break;
743         case HANDLE_RSID_ROOT:
744         {
745             sal_uInt32 nTmp = 0;
746             rValue >>= nTmp;
747             mpDoc->setRsidRoot( nTmp );
748         }
749         break;
750         case HANDLE_PROTECT_FORM:
751         {
752             bool bTmp = *o3tl::doAccess<bool>(rValue);
753             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::PROTECT_FORM, bTmp);
754         }
755         break;
756         case HANDLE_MS_WORD_COMP_TRAILING_BLANKS:
757         {
758             bool bTmp = *o3tl::doAccess<bool>(rValue);
759             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS, bTmp);
760         }
761         break;
762         case HANDLE_MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY:
763         {
764             bool bTmp = *o3tl::doAccess<bool>(rValue);
765             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY, bTmp);
766         }
767         break;
768         case HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST:
769         {
770             bool bTmp = *o3tl::doAccess<bool>(rValue);
771             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST, bTmp);
772         }
773         break;
774         case HANDLE_MODIFYPASSWORDINFO:
775         {
776             uno::Sequence< beans::PropertyValue > aInfo;
777             if ( !( rValue >>= aInfo ) )
778                 throw lang::IllegalArgumentException(
779                     "Value of type Sequence<PropertyValue> expected!",
780                     uno::Reference< uno::XInterface >(),
781                     2 );
782 
783             if ( !mpDocSh->SetModifyPasswordInfo( aInfo ) )
784                 throw beans::PropertyVetoException(
785                     "The hash is not allowed to be changed now!",
786                     uno::Reference< uno::XInterface >() );
787         }
788         break;
789         case HANDLE_MATH_BASELINE_ALIGNMENT:
790         {
791             bool bTmp = *o3tl::doAccess<bool>(rValue);
792             mpDoc->getIDocumentSettingAccess().set( DocumentSettingId::MATH_BASELINE_ALIGNMENT, bTmp );
793         }
794         break;
795         case HANDLE_INVERT_BORDER_SPACING:
796         {
797             bool bTmp = *o3tl::doAccess<bool>(rValue);
798             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::INVERT_BORDER_SPACING, bTmp);
799         }
800         break;
801         case HANDLE_COLLAPSE_EMPTY_CELL_PARA:
802         {
803             bool bTmp = *o3tl::doAccess<bool>(rValue);
804             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::COLLAPSE_EMPTY_CELL_PARA, bTmp);
805         }
806         break;
807         case HANDLE_SMALL_CAPS_PERCENTAGE_66:
808         {
809             bool bTmp = *o3tl::doAccess<bool>(rValue);
810             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::SMALL_CAPS_PERCENTAGE_66, bTmp);
811         }
812         break;
813         case HANDLE_TAB_OVERFLOW:
814         {
815             bool bTmp = *o3tl::doAccess<bool>(rValue);
816             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::TAB_OVERFLOW, bTmp);
817         }
818         break;
819         case HANDLE_UNBREAKABLE_NUMBERINGS:
820         {
821             bool bTmp = *o3tl::doAccess<bool>(rValue);
822             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::UNBREAKABLE_NUMBERINGS, bTmp);
823         }
824         break;
825         case HANDLE_STYLES_NODEFAULT:
826         {
827             bool bTmp = *o3tl::doAccess<bool>(rValue);
828             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::STYLES_NODEFAULT, bTmp);
829         }
830         break;
831         case HANDLE_FLOATTABLE_NOMARGINS:
832         {
833             bool bTmp = *o3tl::doAccess<bool>(rValue);
834             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::FLOATTABLE_NOMARGINS, bTmp);
835         }
836         break;
837         case HANDLE_CLIPPED_PICTURES:
838         {
839             bool bTmp = *o3tl::doAccess<bool>(rValue);
840             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::CLIPPED_PICTURES, bTmp);
841         }
842         break;
843         case HANDLE_BACKGROUND_PARA_OVER_DRAWINGS:
844         {
845             bool bTmp = *o3tl::doAccess<bool>(rValue);
846             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::BACKGROUND_PARA_OVER_DRAWINGS, bTmp);
847         }
848         break;
849         case HANDLE_EMBED_FONTS:
850         {
851             bool bTmp = *o3tl::doAccess<bool>(rValue);
852             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::EMBED_FONTS, bTmp);
853         }
854         break;
855         case HANDLE_EMBED_USED_FONTS:
856         {
857             bool bTmp = *o3tl::doAccess<bool>(rValue);
858             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::EMBED_USED_FONTS, bTmp);
859         }
860         break;
861         case HANDLE_EMBED_LATIN_SCRIPT_FONTS:
862         {
863             bool bTmp = *o3tl::doAccess<bool>(rValue);
864             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::EMBED_LATIN_SCRIPT_FONTS, bTmp);
865         }
866         break;
867         case HANDLE_EMBED_ASIAN_SCRIPT_FONTS:
868         {
869             bool bTmp = *o3tl::doAccess<bool>(rValue);
870             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::EMBED_ASIAN_SCRIPT_FONTS, bTmp);
871         }
872         break;
873         case HANDLE_EMBED_COMPLEX_SCRIPT_FONTS:
874         {
875             bool bTmp = *o3tl::doAccess<bool>(rValue);
876             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::EMBED_COMPLEX_SCRIPT_FONTS, bTmp);
877         }
878         break;
879         case HANDLE_EMBED_SYSTEM_FONTS:
880         {
881             bool bTmp = *o3tl::doAccess<bool>(rValue);
882             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::EMBED_SYSTEM_FONTS, bTmp);
883         }
884         break;
885         case HANDLE_TAB_OVER_MARGIN:
886         {
887             bool bTmp = *o3tl::doAccess<bool>(rValue);
888             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::TAB_OVER_MARGIN, bTmp);
889         }
890         break;
891         case HANDLE_TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK:
892         {
893             bool bTmp = *o3tl::doAccess<bool>(rValue);
894             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK, bTmp);
895         }
896         break;
897         case HANDLE_SURROUND_TEXT_WRAP_SMALL:
898         {
899             bool bTmp = *o3tl::doAccess<bool>(rValue);
900             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::SURROUND_TEXT_WRAP_SMALL, bTmp);
901         }
902         break;
903         case HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING:
904         {
905             bool bTmp = *o3tl::doAccess<bool>(rValue);
906             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING, bTmp);
907         }
908         break;
909         case HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE:
910         {
911             bool bTmp;
912             if (rValue >>= bTmp)
913             {
914                 mpDoc->getIDocumentSettingAccess().set(
915                     DocumentSettingId::PROP_LINE_SPACING_SHRINKS_FIRST_LINE, bTmp);
916             }
917         }
918         break;
919         case HANDLE_SUBTRACT_FLYS:
920         {
921             bool bTmp;
922             if (rValue >>= bTmp)
923             {
924                 mpDoc->getIDocumentSettingAccess().set(
925                     DocumentSettingId::SUBTRACT_FLYS, bTmp);
926             }
927         }
928         break;
929         case HANDLE_DISABLE_OFF_PAGE_POSITIONING:
930         {
931             bool bTmp;
932             if (rValue >>= bTmp)
933             {
934                 mpDoc->getIDocumentSettingAccess().set(
935                     DocumentSettingId::DISABLE_OFF_PAGE_POSITIONING, bTmp);
936             }
937         }
938         break;
939         case HANDLE_EMPTY_DB_FIELD_HIDES_PARA:
940         {
941             bool bTmp;
942             if (rValue >>= bTmp)
943             {
944                 mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::EMPTY_DB_FIELD_HIDES_PARA,
945                                                        bTmp);
946             }
947         }
948         break;
949         case HANDLE_CONTINUOUS_ENDNOTES:
950         {
951             bool bTmp;
952             if (rValue >>= bTmp)
953             {
954                 mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::CONTINUOUS_ENDNOTES,
955                                                        bTmp);
956             }
957         }
958         break;
959         case HANDLE_HEADER_SPACING_BELOW_LAST_PARA:
960         {
961             bool bTmp;
962             if (rValue >>= bTmp)
963             {
964                 mpDoc->getIDocumentSettingAccess().set(
965                     DocumentSettingId::HEADER_SPACING_BELOW_LAST_PARA, bTmp);
966             }
967         }
968         break;
969         default:
970             throw UnknownPropertyException(OUString::number(rInfo.mnHandle));
971     }
972 }
973 
_postSetValues()974 void SwXDocumentSettings::_postSetValues ()
975 {
976     // set printer only once, namely here!
977     if( mpPrinter != nullptr )
978     {
979         // #i86352# the printer is also used as container for options by sfx
980         // when setting a printer it should have decent default options
981         SfxItemSet aOptions( mpPrinter->GetOptions() );
982         SwPrintData aPrtData( mpDoc->getIDocumentDeviceAccess().getPrintData() );
983         SwAddPrinterItem aAddPrinterItem (aPrtData);
984         aOptions.Put(aAddPrinterItem);
985         mpPrinter->SetOptions( aOptions );
986         mpPrinter->SetPrinterSettingsPreferred( mbPreferPrinterPapersize );
987 
988         mpDoc->getIDocumentDeviceAccess().setPrinter( mpPrinter, true, true );
989     }
990 
991     mpPrinter = nullptr;
992     mpDocSh = nullptr;
993     mpDoc = nullptr;
994 }
995 
_preGetValues()996 void SwXDocumentSettings::_preGetValues ()
997 {
998     mpDocSh = mpModel->GetDocShell();
999     if (nullptr == mpDocSh)
1000         throw UnknownPropertyException();
1001     mpDoc = mpDocSh->GetDoc();
1002     if (nullptr == mpDoc)
1003         throw UnknownPropertyException();
1004 }
1005 
_getSingleValue(const comphelper::PropertyInfo & rInfo,uno::Any & rValue)1006 void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInfo, uno::Any & rValue )
1007 {
1008     switch( rInfo.mnHandle )
1009     {
1010         case HANDLE_FORBIDDEN_CHARS:
1011         {
1012             Reference<XForbiddenCharacters> xRet(*mpModel->GetPropertyHelper(), UNO_QUERY);
1013             rValue <<= xRet;
1014         }
1015         break;
1016         case HANDLE_LINK_UPDATE_MODE:
1017         {
1018             rValue <<= static_cast < sal_Int16 > ( mpDoc->getIDocumentSettingAccess().getLinkUpdateMode(true) );
1019         }
1020         break;
1021         case HANDLE_FIELD_AUTO_UPDATE:
1022         {
1023             SwFieldUpdateFlags nFlags = mpDoc->getIDocumentSettingAccess().getFieldUpdateFlags(true);
1024             rValue <<= nFlags == AUTOUPD_FIELD_ONLY || nFlags == AUTOUPD_FIELD_AND_CHARTS;
1025         }
1026         break;
1027         case HANDLE_CHART_AUTO_UPDATE:
1028         {
1029             SwFieldUpdateFlags nFlags = mpDoc->getIDocumentSettingAccess().getFieldUpdateFlags(true);
1030             rValue <<= nFlags == AUTOUPD_FIELD_AND_CHARTS;
1031         }
1032         break;
1033         case HANDLE_ADD_PARA_TABLE_SPACING:
1034         {
1035             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::PARA_SPACE_MAX);
1036         }
1037         break;
1038         case HANDLE_ADD_PARA_TABLE_SPACING_AT_START:
1039         {
1040             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::PARA_SPACE_MAX_AT_PAGES);
1041         }
1042         break;
1043         case HANDLE_ALIGN_TAB_STOP_POSITION:
1044         {
1045             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::TAB_COMPAT);
1046         }
1047         break;
1048         case HANDLE_PRINTER_NAME:
1049         {
1050             SfxPrinter *pPrinter = mpDoc->getIDocumentDeviceAccess().getPrinter( false );
1051             rValue <<= pPrinter ? pPrinter->GetName() : OUString();
1052         }
1053         break;
1054         case HANDLE_PRINTER_SETUP:
1055         {
1056             SfxPrinter *pPrinter = mpDoc->getIDocumentDeviceAccess().getPrinter( false );
1057             if (pPrinter)
1058             {
1059                 SvMemoryStream aStream;
1060                 pPrinter->Store( aStream );
1061                 sal_uInt32 nSize = aStream.TellEnd();
1062                 aStream.Seek ( STREAM_SEEK_TO_BEGIN );
1063                 Sequence < sal_Int8 > aSequence( nSize );
1064                 aStream.ReadBytes(aSequence.getArray(), nSize);
1065                 rValue <<= aSequence;
1066             }
1067             else
1068             {
1069                 Sequence < sal_Int8 > aSequence ( 0 );
1070                 rValue <<= aSequence;
1071             }
1072         }
1073         break;
1074         case HANDLE_PRINTER_PAPER:
1075         {
1076             SfxPrinter *pTempPrinter = mpDoc->getIDocumentDeviceAccess().getPrinter( false );
1077             rValue <<= pTempPrinter && pTempPrinter->GetPrinterSettingsPreferred();
1078         }
1079         break;
1080         case HANDLE_IS_KERN_ASIAN_PUNCTUATION:
1081         {
1082             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::KERN_ASIAN_PUNCTUATION);
1083         }
1084         break;
1085         case HANDLE_APPLY_USER_DATA:
1086         {
1087             rValue <<= mpDocSh->IsUseUserData();
1088         }
1089         break;
1090         case HANDLE_SAVE_THUMBNAIL:
1091         {
1092             rValue <<= mpDocSh->IsUseThumbnailSave();
1093         }
1094         break;
1095         case HANDLE_CHARACTER_COMPRESSION_TYPE:
1096         {
1097             rValue <<= static_cast < sal_Int16 > (mpDoc->getIDocumentSettingAccess().getCharacterCompressionType());
1098         }
1099         break;
1100         case HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS:
1101         {
1102             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::GLOBAL_DOCUMENT_SAVE_LINKS);
1103         }
1104         break;
1105         case HANDLE_CURRENT_DATABASE_DATA_SOURCE:
1106         {
1107             const SwDBData& rData = mpDoc->GetDBDesc();
1108             rValue <<= rData.sDataSource;
1109         }
1110         break;
1111         case HANDLE_CURRENT_DATABASE_COMMAND:
1112         {
1113             const SwDBData& rData = mpDoc->GetDBDesc();
1114             rValue <<= rData.sCommand;
1115         }
1116         break;
1117         case HANDLE_CURRENT_DATABASE_COMMAND_TYPE:
1118         {
1119             const SwDBData& rData = mpDoc->GetDBDesc();
1120             rValue <<= rData.nCommandType;
1121         }
1122         break;
1123         case HANDLE_EMBEDDED_DATABASE_NAME:
1124         {
1125 #if HAVE_FEATURE_DBCONNECTIVITY
1126             rValue <<= mpDoc->GetDBManager()->getEmbeddedName();
1127 #else
1128             rValue = uno::Any();
1129 #endif
1130         }
1131         break;
1132         case HANDLE_SAVE_VERSION_ON_CLOSE:
1133         {
1134             rValue <<= mpDocSh->IsSaveVersionOnClose();
1135         }
1136         break;
1137         case HANDLE_UPDATE_FROM_TEMPLATE:
1138         {
1139             rValue <<= mpDocSh->IsQueryLoadTemplate();
1140         }
1141         break;
1142         case HANDLE_PRINTER_INDEPENDENT_LAYOUT:
1143         {
1144             // returns short (see css.document.PrinterIndependentLayout)
1145             sal_Int16 nVirDevType = mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::USE_VIRTUAL_DEVICE) ?
1146                                     ( mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::USE_HIRES_VIRTUAL_DEVICE) ?
1147                                       document::PrinterIndependentLayout::HIGH_RESOLUTION :
1148                                       document::PrinterIndependentLayout::LOW_RESOLUTION ) :
1149                                     document::PrinterIndependentLayout::DISABLED;
1150             rValue <<= nVirDevType;
1151         }
1152         break;
1153         case HANDLE_IS_LABEL_DOC:
1154         {
1155             bool bLabel = mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::LABEL_DOCUMENT);
1156             rValue <<= bLabel;
1157         }
1158         break;
1159         case HANDLE_IS_ADD_FLY_OFFSET:
1160         {
1161             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::ADD_FLY_OFFSETS);
1162         }
1163         break;
1164         case HANDLE_IS_ADD_VERTICAL_FLY_OFFSET:
1165         {
1166             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::ADD_VERTICAL_FLY_OFFSETS);
1167         }
1168         break;
1169         case HANDLE_IS_ADD_EXTERNAL_LEADING:
1170         {
1171             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::ADD_EXT_LEADING);
1172         }
1173         break;
1174         case HANDLE_OLD_NUMBERING:
1175         {
1176             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::OLD_NUMBERING);
1177         }
1178         break;
1179         case HANDLE_OUTLINELEVEL_YIELDS_NUMBERING:
1180         {
1181             rValue <<= false;
1182         }
1183         break;
1184         case HANDLE_ALLOW_PRINTJOB_CANCEL:
1185         {
1186             rValue <<= mpDocSh->Stamp_GetPrintCancelState();
1187         }
1188         break;
1189         case HANDLE_USE_FORMER_LINE_SPACING:
1190         {
1191             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::OLD_LINE_SPACING);
1192         }
1193         break;
1194         case HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS:
1195         {
1196             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS);
1197         }
1198         break;
1199         case HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS:
1200         {
1201             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS);
1202         }
1203         break;
1204         case HANDLE_USE_FORMER_OBJECT_POSITIONING:
1205         {
1206             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::USE_FORMER_OBJECT_POS);
1207         }
1208         break;
1209         case HANDLE_USE_FORMER_TEXT_WRAPPING:
1210         {
1211             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::USE_FORMER_TEXT_WRAPPING);
1212         }
1213         break;
1214         case HANDLE_CHANGES_PASSWORD:
1215         {
1216             rValue <<= mpDoc->getIDocumentRedlineAccess().GetRedlinePassword();
1217         }
1218         break;
1219         case HANDLE_CONSIDER_WRAP_ON_OBJPOS:
1220         {
1221             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION);
1222         }
1223         break;
1224         case HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING:
1225         {
1226             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING);
1227         }
1228         break;
1229         case HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK:
1230         {
1231             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK);
1232         }
1233         break;
1234         case HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT:
1235         {
1236             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT);
1237         }
1238         break;
1239         case HANDLE_TABLE_ROW_KEEP :
1240         {
1241             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::TABLE_ROW_KEEP);
1242         }
1243         break;
1244         case HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION:
1245         {
1246             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION);
1247         }
1248         break;
1249         case HANDLE_LOAD_READONLY:
1250         {
1251             rValue <<= mpDocSh->IsLoadReadonly();
1252         }
1253         break;
1254         case HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE:
1255         {
1256             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE);
1257         }
1258         break;
1259         case HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES:
1260         {
1261             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAME);
1262         }
1263         break;
1264         case HANDLE_UNIX_FORCE_ZERO_EXT_LEADING:
1265         {
1266             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::UNIX_FORCE_ZERO_EXT_LEADING);
1267         }
1268         break;
1269         case HANDLE_USE_OLD_PRINTER_METRICS:
1270         {
1271             rValue <<= false;
1272         }
1273         break;
1274         case HANDLE_TABS_RELATIVE_TO_INDENT:
1275         {
1276             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::TABS_RELATIVE_TO_INDENT);
1277         }
1278         break;
1279         case HANDLE_RSID:
1280         {
1281             rValue <<= static_cast < sal_Int32 > ( mpDoc->getRsid() );
1282         }
1283         break;
1284         case HANDLE_RSID_ROOT:
1285         {
1286             rValue <<= static_cast < sal_Int32 > ( mpDoc->getRsidRoot() );
1287         }
1288         break;
1289         case HANDLE_PROTECT_FORM:
1290         {
1291             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_FORM);
1292         }
1293         break;
1294         case HANDLE_MS_WORD_COMP_TRAILING_BLANKS:
1295         {
1296             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::MS_WORD_COMP_TRAILING_BLANKS);
1297         }
1298         break;
1299         case HANDLE_MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY:
1300         {
1301             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY);
1302         }
1303         break;
1304         case HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST:
1305         {
1306             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST);
1307         }
1308         break;
1309         case HANDLE_MODIFYPASSWORDINFO:
1310         {
1311             rValue <<= mpDocSh->GetModifyPasswordInfo();
1312         }
1313         break;
1314         case HANDLE_MATH_BASELINE_ALIGNMENT:
1315         {
1316             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::MATH_BASELINE_ALIGNMENT );
1317         }
1318         break;
1319         case HANDLE_INVERT_BORDER_SPACING:
1320         {
1321             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::INVERT_BORDER_SPACING);
1322         }
1323         break;
1324         case HANDLE_COLLAPSE_EMPTY_CELL_PARA:
1325         {
1326             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::COLLAPSE_EMPTY_CELL_PARA );
1327         }
1328         break;
1329         case HANDLE_SMALL_CAPS_PERCENTAGE_66:
1330         {
1331             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::SMALL_CAPS_PERCENTAGE_66 );
1332         }
1333         break;
1334         case HANDLE_TAB_OVERFLOW:
1335         {
1336             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::TAB_OVERFLOW );
1337         }
1338         break;
1339         case HANDLE_UNBREAKABLE_NUMBERINGS:
1340         {
1341             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::UNBREAKABLE_NUMBERINGS );
1342         }
1343         break;
1344         case HANDLE_STYLES_NODEFAULT:
1345         {
1346             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::STYLES_NODEFAULT );
1347         }
1348         break;
1349         case HANDLE_FLOATTABLE_NOMARGINS:
1350         {
1351             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::FLOATTABLE_NOMARGINS );
1352         }
1353         break;
1354         case HANDLE_CLIPPED_PICTURES:
1355         {
1356             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::CLIPPED_PICTURES );
1357         }
1358         break;
1359         case HANDLE_BACKGROUND_PARA_OVER_DRAWINGS:
1360         {
1361             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::BACKGROUND_PARA_OVER_DRAWINGS );
1362         }
1363         break;
1364         case HANDLE_EMBED_FONTS:
1365         {
1366             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::EMBED_FONTS );
1367         }
1368         break;
1369         case HANDLE_EMBED_USED_FONTS:
1370         {
1371             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::EMBED_USED_FONTS );
1372         }
1373         break;
1374         case HANDLE_EMBED_LATIN_SCRIPT_FONTS:
1375         {
1376             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::EMBED_LATIN_SCRIPT_FONTS );
1377         }
1378         break;
1379         case HANDLE_EMBED_ASIAN_SCRIPT_FONTS:
1380         {
1381             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::EMBED_ASIAN_SCRIPT_FONTS );
1382         }
1383         break;
1384         case HANDLE_EMBED_COMPLEX_SCRIPT_FONTS:
1385         {
1386             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::EMBED_COMPLEX_SCRIPT_FONTS );
1387         }
1388         break;
1389         case HANDLE_EMBED_SYSTEM_FONTS:
1390         {
1391             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::EMBED_SYSTEM_FONTS );
1392         }
1393         break;
1394         case HANDLE_TAB_OVER_MARGIN:
1395         {
1396             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::TAB_OVER_MARGIN );
1397         }
1398         break;
1399         case HANDLE_TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK:
1400         {
1401             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK );
1402         }
1403         break;
1404         case HANDLE_SURROUND_TEXT_WRAP_SMALL:
1405         {
1406             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::SURROUND_TEXT_WRAP_SMALL );
1407         }
1408         break;
1409         case HANDLE_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING:
1410         {
1411             rValue <<= mpDoc->getIDocumentSettingAccess().get( DocumentSettingId::APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING );
1412         }
1413         break;
1414         case HANDLE_PROP_LINE_SPACING_SHRINKS_FIRST_LINE:
1415         {
1416             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::PROP_LINE_SPACING_SHRINKS_FIRST_LINE);
1417         }
1418         break;
1419         case HANDLE_SUBTRACT_FLYS:
1420         {
1421             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::SUBTRACT_FLYS);
1422         }
1423         break;
1424         case HANDLE_DISABLE_OFF_PAGE_POSITIONING:
1425         {
1426             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::DISABLE_OFF_PAGE_POSITIONING);
1427         }
1428         break;
1429         case HANDLE_EMPTY_DB_FIELD_HIDES_PARA:
1430         {
1431             rValue <<= mpDoc->getIDocumentSettingAccess().get(
1432                 DocumentSettingId::EMPTY_DB_FIELD_HIDES_PARA);
1433         }
1434         break;
1435         case HANDLE_CONTINUOUS_ENDNOTES:
1436         {
1437             rValue
1438                 <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::CONTINUOUS_ENDNOTES);
1439         }
1440         break;
1441         case HANDLE_HEADER_SPACING_BELOW_LAST_PARA:
1442         {
1443             rValue <<= mpDoc->getIDocumentSettingAccess().get(
1444                 DocumentSettingId::HEADER_SPACING_BELOW_LAST_PARA);
1445         }
1446         break;
1447         default:
1448             throw UnknownPropertyException(OUString::number(rInfo.mnHandle));
1449     }
1450 }
1451 
_postGetValues()1452 void SwXDocumentSettings::_postGetValues ()
1453 {
1454     mpDocSh = nullptr;
1455     mpDoc = nullptr;
1456 }
1457 
1458 // XServiceInfo
getImplementationName()1459 OUString SAL_CALL SwXDocumentSettings::getImplementationName(  )
1460 {
1461     return "SwXDocumentSettings";
1462 }
1463 
supportsService(const OUString & ServiceName)1464 sal_Bool SAL_CALL SwXDocumentSettings::supportsService( const OUString& ServiceName )
1465 {
1466     return cppu::supportsService(this, ServiceName);
1467 }
1468 
getSupportedServiceNames()1469 Sequence< OUString > SAL_CALL SwXDocumentSettings::getSupportedServiceNames(  )
1470 {
1471     return { "com.sun.star.document.Settings", "com.sun.star.text.DocumentSettings", "com.sun.star.text.PrintSettings" };
1472 }
1473 
1474 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
1475