xref: /trunk/main/sw/source/ui/uno/SwXDocumentSettings.cxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 #include <vos/mutex.hxx>
28 #include <sfx2/sfxbasecontroller.hxx>
29 #include <SwXDocumentSettings.hxx>
30 #include <comphelper/MasterPropertySetInfo.hxx>
31 #include <com/sun/star/beans/PropertyAttribute.hpp>
32 #include <com/sun/star/i18n/XForbiddenCharacters.hpp>
33 #include <com/sun/star/document/PrinterIndependentLayout.hpp>
34 #include <doc.hxx>
35 #include <docsh.hxx>
36 #include <fldupde.hxx>
37 #include <linkenum.hxx>
38 #include <sfx2/printer.hxx>
39 #include <editsh.hxx>
40 #include <drawdoc.hxx>
41 #include <svl/zforlist.hxx>
42 #include <unotxdoc.hxx>
43 #include <cmdid.h>
44 #include <svx/zoomitem.hxx>
45 #include <unomod.hxx>
46 #include <vcl/svapp.hxx>
47 
48 #include "swmodule.hxx"
49 #include "cfgitems.hxx"
50 #include "prtopt.hxx"
51 
52 
53 #include "swmodule.hxx"
54 #include "cfgitems.hxx"
55 #include "prtopt.hxx"
56 
57 using rtl::OUString;
58 
59 using namespace comphelper;
60 using namespace ::com::sun::star;
61 using namespace ::com::sun::star::uno;
62 using namespace ::com::sun::star::beans;
63 using namespace ::com::sun::star::lang;
64 using namespace ::com::sun::star::i18n;
65 
66 enum SwDocumentSettingsPropertyHandles
67 {
68     HANDLE_FORBIDDEN_CHARS,
69     HANDLE_LINK_UPDATE_MODE,
70     HANDLE_FIELD_AUTO_UPDATE,
71     HANDLE_CHART_AUTO_UPDATE,
72     HANDLE_ADD_PARA_TABLE_SPACING,
73     HANDLE_ADD_PARA_TABLE_SPACING_AT_START,
74     HANDLE_ALIGN_TAB_STOP_POSITION,
75     HANDLE_PRINTER_NAME,
76     HANDLE_PRINTER_SETUP,
77     HANDLE_IS_KERN_ASIAN_PUNCTUATION,
78     HANDLE_CHARACTER_COMPRESSION_TYPE,
79     HANDLE_APPLY_USER_DATA,
80     HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS,
81     HANDLE_CURRENT_DATABASE_DATA_SOURCE,
82     HANDLE_CURRENT_DATABASE_COMMAND,
83     HANDLE_CURRENT_DATABASE_COMMAND_TYPE,
84     HANDLE_SAVE_VERSION_ON_CLOSE,
85     HANDLE_IS_GRID_VISIBLE,
86     HANDLE_IS_SNAP_TO_GRID,
87     HANDLE_IS_SYNCHRONISE_AXES,
88     HANDLE_HORIZONTAL_GRID_RESOLUTION,
89     HANDLE_HORIZONTAL_GRID_SUBDIVISION,
90     HANDLE_VERTICAL_GRID_RESOLUTION,
91     HANDLE_VERTICAL_GRID_SUBDIVISION,
92     HANDLE_UPDATE_FROM_TEMPLATE,
93     HANDLE_PRINTER_INDEPENDENT_LAYOUT,
94     HANDLE_IS_LABEL_DOC,
95     HANDLE_IS_ADD_FLY_OFFSET,
96     HANDLE_IS_ADD_EXTERNAL_LEADING,
97     HANDLE_OLD_NUMBERING, // #111955#
98     HANDLE_OUTLINELEVEL_YIELDS_NUMBERING,
99     /* Stampit It disable the print cancel button of the shown progress dialog. */
100     HANDLE_ALLOW_PRINTJOB_CANCEL,
101     HANDLE_USE_FORMER_LINE_SPACING,
102     HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS,
103     HANDLE_USE_FORMER_OBJECT_POSITIONING,
104     HANDLE_USE_FORMER_TEXT_WRAPPING,
105     HANDLE_CHANGES_PASSWORD,
106     HANDLE_CONSIDER_WRAP_ON_OBJPOS,
107     HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,
108     HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,
109     HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,
110     HANDLE_TABLE_ROW_KEEP,
111     HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,
112     HANDLE_LOAD_READONLY,
113     HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE,
114     HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES,
115     HANDLE_UNIX_FORCE_ZERO_EXT_LEADING,
116     HANDLE_USE_OLD_PRINTER_METRICS,
117     HANDLE_PROTECT_FORM,
118     HANDLE_TABS_RELATIVE_TO_INDENT,
119     // --> OD 2008-06-05 #i89181#
120     HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST,
121     // <--
122     HANDLE_MODIFYPASSWORDINFO,
123     HANDLE_MATH_BASELINE_ALIGNMENT
124 };
125 
lcl_createSettingsInfo()126 MasterPropertySetInfo * lcl_createSettingsInfo()
127 {
128     static PropertyInfo aWriterSettingsInfoMap[] =
129     {
130         { RTL_CONSTASCII_STRINGPARAM("ForbiddenCharacters"),        HANDLE_FORBIDDEN_CHARS,                 CPPUTYPE_REFFORBCHARS,      0,   0},
131         { RTL_CONSTASCII_STRINGPARAM("LinkUpdateMode"),             HANDLE_LINK_UPDATE_MODE,                CPPUTYPE_INT16,             0,   0},
132         { RTL_CONSTASCII_STRINGPARAM("FieldAutoUpdate"),            HANDLE_FIELD_AUTO_UPDATE,               CPPUTYPE_BOOLEAN,           0,   0},
133         { RTL_CONSTASCII_STRINGPARAM("ChartAutoUpdate"),            HANDLE_CHART_AUTO_UPDATE,               CPPUTYPE_BOOLEAN,           0,   0},
134         { RTL_CONSTASCII_STRINGPARAM("AddParaTableSpacing"),        HANDLE_ADD_PARA_TABLE_SPACING,          CPPUTYPE_BOOLEAN,           0,   0},
135         { RTL_CONSTASCII_STRINGPARAM("AddParaTableSpacingAtStart"), HANDLE_ADD_PARA_TABLE_SPACING_AT_START, CPPUTYPE_BOOLEAN,           0,   0},
136         { RTL_CONSTASCII_STRINGPARAM("AlignTabStopPosition"),       HANDLE_ALIGN_TAB_STOP_POSITION,         CPPUTYPE_BOOLEAN,           0,   0},
137         { RTL_CONSTASCII_STRINGPARAM("PrinterName"),                HANDLE_PRINTER_NAME,                    CPPUTYPE_OUSTRING,          0,   0},
138         { RTL_CONSTASCII_STRINGPARAM("PrinterSetup"),               HANDLE_PRINTER_SETUP,                   CPPUTYPE_SEQINT8,           0,   0},
139         { RTL_CONSTASCII_STRINGPARAM("IsKernAsianPunctuation"),     HANDLE_IS_KERN_ASIAN_PUNCTUATION,       CPPUTYPE_BOOLEAN,           0,   0},
140         { RTL_CONSTASCII_STRINGPARAM("CharacterCompressionType"),   HANDLE_CHARACTER_COMPRESSION_TYPE,      CPPUTYPE_INT16,             0,   0},
141         { RTL_CONSTASCII_STRINGPARAM("ApplyUserData"),              HANDLE_APPLY_USER_DATA,                 CPPUTYPE_BOOLEAN,           0,   0},
142         { RTL_CONSTASCII_STRINGPARAM("SaveGlobalDocumentLinks"),    HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS,      CPPUTYPE_BOOLEAN,           0,   0},
143         { RTL_CONSTASCII_STRINGPARAM("CurrentDatabaseDataSource"),  HANDLE_CURRENT_DATABASE_DATA_SOURCE,    CPPUTYPE_OUSTRING,          0,   0},
144         { RTL_CONSTASCII_STRINGPARAM("CurrentDatabaseCommand"),     HANDLE_CURRENT_DATABASE_COMMAND,        CPPUTYPE_OUSTRING,          0,   0},
145         { RTL_CONSTASCII_STRINGPARAM("CurrentDatabaseCommandType"), HANDLE_CURRENT_DATABASE_COMMAND_TYPE,   CPPUTYPE_INT32,             0,   0},
146         { RTL_CONSTASCII_STRINGPARAM("SaveVersionOnClose"),         HANDLE_SAVE_VERSION_ON_CLOSE,           CPPUTYPE_BOOLEAN,           0,   0},
147         { RTL_CONSTASCII_STRINGPARAM("UpdateFromTemplate"),         HANDLE_UPDATE_FROM_TEMPLATE,            CPPUTYPE_BOOLEAN,           0,   0},
148 
149         { RTL_CONSTASCII_STRINGPARAM("PrinterIndependentLayout"),   HANDLE_PRINTER_INDEPENDENT_LAYOUT,      CPPUTYPE_INT16,             0,   0},
150         { RTL_CONSTASCII_STRINGPARAM("IsLabelDocument"),            HANDLE_IS_LABEL_DOC,                    CPPUTYPE_BOOLEAN,           0,   0},
151         { RTL_CONSTASCII_STRINGPARAM("AddFrameOffsets"),            HANDLE_IS_ADD_FLY_OFFSET,               CPPUTYPE_BOOLEAN,           0,   0},
152         { RTL_CONSTASCII_STRINGPARAM("AddExternalLeading"),         HANDLE_IS_ADD_EXTERNAL_LEADING,         CPPUTYPE_BOOLEAN,           0,   0},
153         { RTL_CONSTASCII_STRINGPARAM("UseOldNumbering"),            HANDLE_OLD_NUMBERING,                   CPPUTYPE_BOOLEAN,           0,   0}, // #111955#
154         { RTL_CONSTASCII_STRINGPARAM("OutlineLevelYieldsNumbering"), HANDLE_OUTLINELEVEL_YIELDS_NUMBERING, CPPUTYPE_BOOLEAN,           0,   0},
155         /* Stampit It disable the print cancel button of the shown progress dialog. */
156         { RTL_CONSTASCII_STRINGPARAM("AllowPrintJobCancel"),        HANDLE_ALLOW_PRINTJOB_CANCEL,           CPPUTYPE_BOOLEAN,           0,   0},
157         { RTL_CONSTASCII_STRINGPARAM("UseFormerLineSpacing"),       HANDLE_USE_FORMER_LINE_SPACING,         CPPUTYPE_BOOLEAN,           0,   0},
158         { RTL_CONSTASCII_STRINGPARAM("AddParaSpacingToTableCells"), HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS, CPPUTYPE_BOOLEAN,           0,   0},
159         { RTL_CONSTASCII_STRINGPARAM("UseFormerObjectPositioning"), HANDLE_USE_FORMER_OBJECT_POSITIONING,   CPPUTYPE_BOOLEAN,           0,   0},
160         { RTL_CONSTASCII_STRINGPARAM("UseFormerTextWrapping"),      HANDLE_USE_FORMER_TEXT_WRAPPING,        CPPUTYPE_BOOLEAN,           0,   0},
161         { RTL_CONSTASCII_STRINGPARAM("RedlineProtectionKey"),       HANDLE_CHANGES_PASSWORD,                CPPUTYPE_SEQINT8,           0,   0},
162         { RTL_CONSTASCII_STRINGPARAM("ConsiderTextWrapOnObjPos"),   HANDLE_CONSIDER_WRAP_ON_OBJPOS,         CPPUTYPE_BOOLEAN,           0,   0},
163         { RTL_CONSTASCII_STRINGPARAM("IgnoreFirstLineIndentInNumbering"),   HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,         CPPUTYPE_BOOLEAN,           0,   0},
164         { RTL_CONSTASCII_STRINGPARAM("DoNotJustifyLinesWithManualBreak"),   HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,         CPPUTYPE_BOOLEAN,           0,   0},
165         { RTL_CONSTASCII_STRINGPARAM("DoNotResetParaAttrsForNumFont"),   HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,         CPPUTYPE_BOOLEAN,           0,   0},
166         { RTL_CONSTASCII_STRINGPARAM("TableRowKeep"),               HANDLE_TABLE_ROW_KEEP,         CPPUTYPE_BOOLEAN,           0,   0},
167         { RTL_CONSTASCII_STRINGPARAM("IgnoreTabsAndBlanksForLineCalculation"),   HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,         CPPUTYPE_BOOLEAN,           0,   0},
168         { RTL_CONSTASCII_STRINGPARAM("LoadReadonly"),               HANDLE_LOAD_READONLY,                   CPPUTYPE_BOOLEAN,           0,   0},
169         { RTL_CONSTASCII_STRINGPARAM("DoNotCaptureDrawObjsOnPage"),   HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, CPPUTYPE_BOOLEAN, 0, 0},
170         { RTL_CONSTASCII_STRINGPARAM("ClipAsCharacterAnchoredWriterFlyFrames"), HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES, CPPUTYPE_BOOLEAN, 0, 0},
171         { RTL_CONSTASCII_STRINGPARAM("UnxForceZeroExtLeading"), HANDLE_UNIX_FORCE_ZERO_EXT_LEADING, CPPUTYPE_BOOLEAN, 0, 0},
172         { RTL_CONSTASCII_STRINGPARAM("UseOldPrinterMetrics"), HANDLE_USE_OLD_PRINTER_METRICS, CPPUTYPE_BOOLEAN, 0, 0},
173         { RTL_CONSTASCII_STRINGPARAM("TabsRelativeToIndent"), HANDLE_TABS_RELATIVE_TO_INDENT, CPPUTYPE_BOOLEAN, 0, 0},
174         { RTL_CONSTASCII_STRINGPARAM("ProtectForm"), HANDLE_PROTECT_FORM, CPPUTYPE_BOOLEAN, 0, 0},
175         // --> OD 2008-06-05 #i89181#
176         { RTL_CONSTASCII_STRINGPARAM("TabAtLeftIndentForParagraphsInList"), HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST, CPPUTYPE_BOOLEAN, 0, 0},
177         { RTL_CONSTASCII_STRINGPARAM("ModifyPasswordInfo"), HANDLE_MODIFYPASSWORDINFO, CPPUTYPE_PROPERTYVALUE, 0,   0},
178         { RTL_CONSTASCII_STRINGPARAM("MathBaselineAlignment"), HANDLE_MATH_BASELINE_ALIGNMENT, CPPUTYPE_BOOLEAN, 0, 0},
179 
180 /*
181  * As OS said, we don't have a view when we need to set this, so I have to
182  * find another solution before adding them to this property set - MTG
183         { RTL_CONSTASCII_STRINGPARAM("IsGridVisible"),              HANDLE_IS_GRID_VISIBLE,                 CPPUTYPE_BOOLEAN,           0,   0},
184         { RTL_CONSTASCII_STRINGPARAM("IsSnapToGrid"),               HANDLE_IS_SNAP_TO_GRID,                 CPPUTYPE_BOOLEAN,           0,   0},
185         { RTL_CONSTASCII_STRINGPARAM("IsSynchroniseAxes"),          HANDLE_IS_SYNCHRONISE_AXES,             CPPUTYPE_BOOLEAN,           0,   0},
186         { RTL_CONSTASCII_STRINGPARAM("HorizontalGridResolution"),   HANDLE_HORIZONTAL_GRID_RESOLUTION,      CPPUTYPE_INT32,             0,   0},
187         { RTL_CONSTASCII_STRINGPARAM("HorizontalGridSubdivision"),  HANDLE_HORIZONTAL_GRID_SUBDIVISION,     CPPUTYPE_INT16,             0,   0},
188         { RTL_CONSTASCII_STRINGPARAM("VerticalGridResolution"),     HANDLE_VERTICAL_GRID_RESOLUTION,        CPPUTYPE_INT32,             0,   0},
189         { RTL_CONSTASCII_STRINGPARAM("VerticalGridSubdivision"),    HANDLE_VERTICAL_GRID_SUBDIVISION,       CPPUTYPE_INT16,             0,   0},
190 
191         { RTL_CONSTASCII_STRINGPARAM("ShowParagraphEnd"),           HANDLE_SHOW_PARAGRAPH_END,              CPPUTYPE_BOOLEAN,           0,   0},
192         { RTL_CONSTASCII_STRINGPARAM("ShowOptionalHyphens"),        HANDLE_SHOW_OPTIONAL_HYPHENS,           CPPUTYPE_BOOLEAN,           0,   0},
193         { RTL_CONSTASCII_STRINGPARAM("ShowSpaces"),                 HANDLE_SHOW_SPACES,                     CPPUTYPE_BOOLEAN,           0,   0},
194         { RTL_CONSTASCII_STRINGPARAM("ShowTabs"),                   HANDLE_SHOW_TABS,                       CPPUTYPE_BOOLEAN,           0,   0},
195         { RTL_CONSTASCII_STRINGPARAM("ShowBreaks"),                 HANDLE_SHOW_BREAKS,                     CPPUTYPE_BOOLEAN,           0,   0},
196         { RTL_CONSTASCII_STRINGPARAM("ShowHiddenText"),             HANDLE_SHOW_HIDDEN_TEXT,                CPPUTYPE_BOOLEAN,           0,   0},
197         { RTL_CONSTASCII_STRINGPARAM("ShowHiddenParagraphs"),       HANDLE_SHOW_HIDDEN_PARAGRAPHS,          CPPUTYPE_BOOLEAN,           0,   0},
198 
199         { RTL_CONSTASCII_STRINGPARAM("ShowTextLimitGuide"),         HANDLE_SHOW_TEXT_LIMIT_GUIDE,           CPPUTYPE_BOOLEAN,           0,   0},
200         { RTL_CONSTASCII_STRINGPARAM("ShowTableLimitGuide"),        HANDLE_SHOW_TABLE_LIMIT_GUIDE,          CPPUTYPE_BOOLEAN,           0,   0},
201         { RTL_CONSTASCII_STRINGPARAM("ShowSectionLimitGuide"),      HANDLE_SHOW_SECTION_LIMIT_GUIDE,        CPPUTYPE_BOOLEAN,           0,   0},
202         { RTL_CONSTASCII_STRINGPARAM("ShowGuidesWhileMoving"),      HANDLE_SHOW_GUIDES_WHILE_MOVING,        CPPUTYPE_BOOLEAN,           0,   0},
203         { RTL_CONSTASCII_STRINGPARAM("ShowSimpleHandles"),          HANDLE_SHOW_SIMPLE_HANDLES,             CPPUTYPE_BOOLEAN,           0,   0},
204         { RTL_CONSTASCII_STRINGPARAM("ShowLargeHandles"),           HANDLE_SHOW_LARGE_HANDLES,              CPPUTYPE_BOOLEAN,           0,   0},
205 */
206         { NULL, 0, 0, CPPUTYPE_UNKNOWN, 0, 0 }
207     };
208     return new MasterPropertySetInfo ( aWriterSettingsInfoMap );
209 }
210 
SwXDocumentSettings(SwXTextDocument * pModel)211 SwXDocumentSettings::SwXDocumentSettings ( SwXTextDocument * pModel )
212 : MasterPropertySet ( lcl_createSettingsInfo (),
213                       &Application::GetSolarMutex () )
214 , mxModel ( pModel )
215 , mpModel ( pModel )
216 , mpDocSh ( NULL )
217 , mpDoc ( NULL )
218 , mpPrinter( NULL )
219 {
220     registerSlave ( new SwXPrintSettings ( PRINT_SETTINGS_DOCUMENT, mpModel->GetDocShell()->GetDoc() ) );
221 }
222 
~SwXDocumentSettings()223 SwXDocumentSettings::~SwXDocumentSettings()
224     throw()
225 {
226 }
227 
queryInterface(const Type & rType)228 Any SAL_CALL SwXDocumentSettings::queryInterface( const Type& rType )
229 {
230         return ::cppu::queryInterface ( rType,
231                                         // OWeakObject interfaces
232                                         dynamic_cast< XInterface* > ( dynamic_cast< OWeakObject*  >(this) ),
233                                         dynamic_cast< XWeak* > ( this ),
234                                         // my own interfaces
235                                         dynamic_cast< XPropertySet*  > ( this ),
236                                         dynamic_cast< XPropertyState* > ( this ),
237                                         dynamic_cast< XMultiPropertySet* > ( this ),
238                                         dynamic_cast< XServiceInfo* > ( this ),
239                                         dynamic_cast< XTypeProvider* > ( this ) );
240 }
acquire()241 void SwXDocumentSettings::acquire ()
242     throw ()
243 {
244     OWeakObject::acquire();
245 }
release()246 void SwXDocumentSettings::release ()
247     throw ()
248 {
249     OWeakObject::release();
250 }
251 
getTypes()252 uno::Sequence< uno::Type > SAL_CALL SwXDocumentSettings::getTypes(  )
253 {
254     vos::OGuard aGuard(Application::GetSolarMutex());
255 
256     uno::Sequence< uno::Type > aBaseTypes( 5 );
257     uno::Type* pBaseTypes = aBaseTypes.getArray();
258 
259     // from MasterPropertySet
260     pBaseTypes[0] = ::getCppuType((Reference< XPropertySet >*)0);
261     pBaseTypes[1] = ::getCppuType((Reference< XPropertyState >*)0);
262     pBaseTypes[2] = ::getCppuType((Reference< XMultiPropertySet >*)0);
263     //
264     pBaseTypes[3] = ::getCppuType((Reference< XServiceInfo >*)0);
265     pBaseTypes[4] = ::getCppuType((Reference< XTypeProvider >*)0);
266 
267     return aBaseTypes;
268 }
269 
getImplementationId()270 uno::Sequence< sal_Int8 > SAL_CALL SwXDocumentSettings::getImplementationId(  )
271 {
272     vos::OGuard aGuard(Application::GetSolarMutex());
273     static Sequence< sal_Int8 > aId( 16 );
274     static sal_Bool bInit = sal_False;
275     if(!bInit)
276     {
277         rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True );
278         bInit = sal_True;
279     }
280     return aId;
281 }
282 
_preSetValues()283 void SwXDocumentSettings::_preSetValues ()
284 {
285     mpDocSh = mpModel->GetDocShell();
286     mpDoc = mpDocSh->GetDoc();
287 
288     if( NULL == mpDoc || NULL == mpDocSh )
289         throw UnknownPropertyException();
290 }
291 
292 
_setSingleValue(const comphelper::PropertyInfo & rInfo,const uno::Any & rValue)293 void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInfo, const uno::Any &rValue )
294 {
295     if (rInfo.mnAttributes & PropertyAttribute::READONLY)
296         throw PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + C2U(rInfo.mpName), static_cast < cppu::OWeakObject * > ( 0 ) );
297 
298     switch( rInfo.mnHandle )
299     {
300         case HANDLE_FORBIDDEN_CHARS:
301             break;
302         case HANDLE_LINK_UPDATE_MODE:
303         {
304             sal_Int16 nMode = 0;
305             rValue >>= nMode;
306             switch (nMode)
307             {
308                 case NEVER:
309                 case MANUAL:
310                 case AUTOMATIC:
311                 case GLOBALSETTING:
312                     break;
313                 default:
314                     throw IllegalArgumentException();
315             }
316             mpDoc->setLinkUpdateMode(nMode);
317         }
318         break;
319         case HANDLE_FIELD_AUTO_UPDATE:
320         {
321             sal_Bool bUpdateField = *(sal_Bool*)rValue.getValue();
322             SwFldUpdateFlags nFlag = mpDoc->getFieldUpdateFlags(true);
323             mpDoc->setFieldUpdateFlags( bUpdateField ?
324                                         nFlag == AUTOUPD_FIELD_AND_CHARTS ?
325                                         AUTOUPD_FIELD_AND_CHARTS :
326                                         AUTOUPD_FIELD_ONLY :
327                                         AUTOUPD_OFF );
328         }
329         break;
330         case HANDLE_CHART_AUTO_UPDATE:
331         {
332             sal_Bool bUpdateChart = *(sal_Bool*)rValue.getValue();
333             SwFldUpdateFlags nFlag = mpDoc->getFieldUpdateFlags(true);
334             mpDoc->setFieldUpdateFlags( (nFlag == AUTOUPD_FIELD_ONLY || nFlag == AUTOUPD_FIELD_AND_CHARTS ) ?
335                                         bUpdateChart ?
336                                         AUTOUPD_FIELD_AND_CHARTS :
337                                         AUTOUPD_FIELD_ONLY :
338                                         AUTOUPD_OFF );
339         }
340         break;
341         case HANDLE_ADD_PARA_TABLE_SPACING:
342         {
343             sal_Bool bParaSpace = sal_False;
344             rValue >>= bParaSpace;
345             mpDoc->set(IDocumentSettingAccess::PARA_SPACE_MAX, bParaSpace );
346         }
347         break;
348         case HANDLE_ADD_PARA_TABLE_SPACING_AT_START:
349         {
350             sal_Bool bParaSpacePage = sal_False;
351             rValue >>= bParaSpacePage;
352             mpDoc->set(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES, bParaSpacePage );
353         }
354         break;
355         case HANDLE_ALIGN_TAB_STOP_POSITION:
356         {
357             sal_Bool bAlignTab = *(sal_Bool*)rValue.getValue();
358             mpDoc->set(IDocumentSettingAccess::TAB_COMPAT, bAlignTab);
359         }
360         break;
361         case HANDLE_PRINTER_NAME:
362         {
363             //the printer must be created
364             OUString sPrinterName;
365             if( rValue >>= sPrinterName  )
366             {
367                 if( !mpPrinter && sPrinterName.getLength() > 0 && mpDocSh->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED )
368                 {
369                     SfxPrinter* pPrinter = mpDoc->getPrinter( true );
370                     if ( OUString ( pPrinter->GetName()) != sPrinterName )
371                     {
372                         SfxPrinter *pNewPrinter = new SfxPrinter ( pPrinter->GetOptions().Clone(), sPrinterName );
373                         if( pNewPrinter->IsKnown() )
374                         {
375                             // set printer only once; in _postSetValues
376                             mpPrinter = pNewPrinter;
377                         }
378                         else
379                         {
380                             delete pNewPrinter;
381                         }
382                     }
383                 }
384             }
385             else
386                 throw IllegalArgumentException();
387         }
388         break;
389         case HANDLE_PRINTER_SETUP:
390         {
391             Sequence < sal_Int8 > aSequence;
392             if ( rValue >>= aSequence )
393             {
394                 sal_uInt32 nSize = aSequence.getLength();
395                 if( nSize > 0 )
396                 {
397                     SvMemoryStream aStream (aSequence.getArray(), nSize,
398                                             STREAM_READ );
399                     aStream.Seek ( STREAM_SEEK_TO_BEGIN );
400                     static sal_uInt16 __READONLY_DATA nRange[] =
401                     {
402                         FN_PARAM_ADDPRINTER, FN_PARAM_ADDPRINTER,
403                         SID_HTML_MODE,  SID_HTML_MODE,
404                         SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
405                         SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC,
406                         0
407                     };
408                     SfxItemSet *pItemSet = new SfxItemSet( mpDoc->GetAttrPool(), nRange );
409                     SfxPrinter *pPrinter = SfxPrinter::Create ( aStream, pItemSet );
410 
411                     // set printer only once; in _postSetValues
412                     delete mpPrinter;
413                     mpPrinter = pPrinter;
414                 }
415             }
416             else
417                 throw IllegalArgumentException();
418         }
419         break;
420         case HANDLE_IS_KERN_ASIAN_PUNCTUATION:
421         {
422             sal_Bool bIsKern = *(sal_Bool*)(rValue).getValue();
423             mpDoc->set(IDocumentSettingAccess::KERN_ASIAN_PUNCTUATION, bIsKern);
424             SwEditShell* pEditSh = mpDoc->GetEditShell();
425             if(pEditSh)
426                 pEditSh->ChgHyphenation();
427         }
428         break;
429         case HANDLE_CHARACTER_COMPRESSION_TYPE:
430         {
431             sal_Int16 nMode = 0;
432             rValue >>= nMode;
433             switch (nMode)
434             {
435                 case CHARCOMPRESS_NONE:
436                 case CHARCOMPRESS_PUNCTUATION:
437                 case CHARCOMPRESS_PUNCTUATION_KANA:
438                     break;
439                 default:
440                     throw IllegalArgumentException();
441             }
442             mpDoc->setCharacterCompressionType(static_cast < SwCharCompressType > (nMode) );
443         }
444         break;
445         case HANDLE_APPLY_USER_DATA:
446         {
447             mpDocSh->SetUseUserData( *(sal_Bool*)rValue.getValue() );
448         }
449         break;
450         case HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS:
451         {
452             sal_Bool bSaveGlobal = *(sal_Bool*)rValue.getValue();
453             mpDoc->set(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS, bSaveGlobal );
454         }
455         break;
456         case HANDLE_CURRENT_DATABASE_DATA_SOURCE:
457         {
458             SwDBData aData = mpDoc->GetDBData();
459             if ( rValue >>= aData.sDataSource )
460                 mpDoc->ChgDBData( aData );
461         }
462         break;
463         case HANDLE_CURRENT_DATABASE_COMMAND:
464         {
465             SwDBData aData = mpDoc->GetDBData();
466             if ( rValue >>= aData.sCommand )
467                 mpDoc->ChgDBData( aData );
468         }
469         break;
470         case HANDLE_CURRENT_DATABASE_COMMAND_TYPE:
471         {
472             SwDBData aData = mpDoc->GetDBData();
473             if ( rValue >>= aData.nCommandType )
474                 mpDoc->ChgDBData( aData );
475         }
476         break;
477         case HANDLE_SAVE_VERSION_ON_CLOSE:
478         {
479             mpDocSh->SetSaveVersionOnClose( *(sal_Bool*)rValue.getValue() );
480         }
481         break;
482         case HANDLE_UPDATE_FROM_TEMPLATE:
483         {
484             mpDocSh->SetQueryLoadTemplate( *(sal_Bool*)rValue.getValue() );
485         }
486         break;
487         case HANDLE_PRINTER_INDEPENDENT_LAYOUT:
488         {
489             sal_Int16 nTmp = 0;
490             rValue >>= nTmp;
491 
492             bool bUseVirDev = true;
493             bool bHiResVirDev = true;
494             if( nTmp == document::PrinterIndependentLayout::DISABLED )
495                 bUseVirDev = false;
496             else if ( nTmp == document::PrinterIndependentLayout::LOW_RESOLUTION )
497                 bHiResVirDev = false;
498             else if ( nTmp != document::PrinterIndependentLayout::HIGH_RESOLUTION )
499                 throw IllegalArgumentException();
500 
501             mpDoc->setReferenceDeviceType( bUseVirDev, bHiResVirDev );
502         }
503         break;
504         case HANDLE_IS_LABEL_DOC :
505         {
506             sal_Bool bSet = sal_False;
507             if(!(rValue >>= bSet))
508                 throw IllegalArgumentException();
509             mpDoc->set(IDocumentSettingAccess::LABEL_DOCUMENT, bSet);
510         }
511         break;
512         case HANDLE_IS_ADD_FLY_OFFSET:
513         {
514             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
515             mpDoc->set(IDocumentSettingAccess::ADD_FLY_OFFSETS, bTmp);
516         }
517         break;
518         case HANDLE_IS_ADD_EXTERNAL_LEADING:
519         {
520             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
521             mpDoc->set(IDocumentSettingAccess::ADD_EXT_LEADING, bTmp);
522         }
523         break;
524         case HANDLE_OLD_NUMBERING: // #111955#
525         {
526             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
527             mpDoc->set(IDocumentSettingAccess::OLD_NUMBERING, bTmp);
528         }
529         case HANDLE_OUTLINELEVEL_YIELDS_NUMBERING:
530         {
531             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
532             mpDoc->set(IDocumentSettingAccess::OUTLINE_LEVEL_YIELDS_OUTLINE_RULE, bTmp);
533         }
534         break;
535         case HANDLE_ALLOW_PRINTJOB_CANCEL:
536         {
537             sal_Bool bState = sal_False;
538             if (!(rValue >>= bState))
539                 throw IllegalArgumentException();
540             mpDocSh->Stamp_SetPrintCancelState(bState);
541         }
542         break;
543         case HANDLE_USE_FORMER_LINE_SPACING:
544         {
545             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
546             mpDoc->set(IDocumentSettingAccess::OLD_LINE_SPACING, bTmp);
547         }
548         break;
549         case HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS:
550         {
551             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
552             mpDoc->set(IDocumentSettingAccess::ADD_PARA_SPACING_TO_TABLE_CELLS, bTmp);
553         }
554         break;
555         case HANDLE_USE_FORMER_OBJECT_POSITIONING:
556         {
557             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
558             mpDoc->set(IDocumentSettingAccess::USE_FORMER_OBJECT_POS, bTmp);
559         }
560         break;
561         case HANDLE_USE_FORMER_TEXT_WRAPPING:
562         {
563             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
564             mpDoc->set(IDocumentSettingAccess::USE_FORMER_TEXT_WRAPPING, bTmp);
565         }
566         break;
567         case HANDLE_CHANGES_PASSWORD:
568         {
569             Sequence <sal_Int8> aNew;
570             if(rValue >>= aNew)
571             {
572                 mpDoc->SetRedlinePassword(aNew);
573                 if(aNew.getLength())
574                 {
575                     sal_uInt16 eMode = mpDoc->GetRedlineMode();
576                     eMode = eMode|nsRedlineMode_t::REDLINE_ON;
577                     mpDoc->SetRedlineMode((RedlineMode_t)( eMode ));
578                 }
579             }
580         }
581         break;
582         case HANDLE_CONSIDER_WRAP_ON_OBJPOS:
583         {
584             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
585             mpDoc->set(IDocumentSettingAccess::CONSIDER_WRAP_ON_OBJECT_POSITION, bTmp );
586         }
587         break;
588         case HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING:
589         {
590             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
591             mpDoc->set(IDocumentSettingAccess::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING, bTmp);
592         }
593         break;
594         case HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK:
595         {
596             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
597             mpDoc->set(IDocumentSettingAccess::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK, bTmp);
598         }
599         break;
600         case HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT:
601         {
602             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
603             mpDoc->set(IDocumentSettingAccess::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT, bTmp);
604         }
605         break;
606         case HANDLE_TABLE_ROW_KEEP:
607         {
608             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
609             mpDoc->set(IDocumentSettingAccess::TABLE_ROW_KEEP, bTmp);
610         }
611         break;
612         case HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION:
613         {
614             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
615             mpDoc->set(IDocumentSettingAccess::IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION, bTmp);
616         }
617         break;
618         case HANDLE_LOAD_READONLY:
619         {
620             mpDocSh->SetLoadReadonly( *(sal_Bool*)rValue.getValue() );
621         }
622         break;
623         case HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE:
624         {
625             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
626             mpDoc->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, bTmp);
627         }
628         break;
629         case HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES:
630         {
631             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
632             mpDoc->set(IDocumentSettingAccess::CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAME, bTmp);
633         }
634         break;
635         case HANDLE_UNIX_FORCE_ZERO_EXT_LEADING:
636         {
637             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
638             mpDoc->set(IDocumentSettingAccess::UNIX_FORCE_ZERO_EXT_LEADING, bTmp);
639         }
640         break;
641         case HANDLE_USE_OLD_PRINTER_METRICS:
642         {
643             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
644             mpDoc->set(IDocumentSettingAccess::USE_OLD_PRINTER_METRICS, bTmp);
645         }
646         break;
647         case HANDLE_TABS_RELATIVE_TO_INDENT:
648         {
649             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
650             mpDoc->set(IDocumentSettingAccess::TABS_RELATIVE_TO_INDENT, bTmp);
651         }
652         break;
653         case HANDLE_PROTECT_FORM:
654         {
655             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
656             mpDoc->set(IDocumentSettingAccess::PROTECT_FORM, bTmp);
657         }
658         break;
659         // --> OD 2008-06-05 #i89181#
660         case HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST:
661         {
662             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
663             mpDoc->set(IDocumentSettingAccess::TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST, bTmp);
664         }
665         break;
666         // <--
667         case HANDLE_MODIFYPASSWORDINFO:
668         {
669             uno::Sequence< beans::PropertyValue > aInfo;
670             if ( !( rValue >>= aInfo ) )
671                 throw lang::IllegalArgumentException(
672                     ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Value of type Sequence<PropertyValue> expected!" ) ),
673                     uno::Reference< uno::XInterface >(),
674                     2 );
675 
676             if ( !mpDocSh->SetModifyPasswordInfo( aInfo ) )
677                 throw beans::PropertyVetoException(
678                     ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "The hash is not allowed to be changed now!" ) ),
679                     uno::Reference< uno::XInterface >() );
680         }
681         break;
682         case HANDLE_MATH_BASELINE_ALIGNMENT:
683         {
684             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
685             mpDoc->set( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT, bTmp );
686         }
687         break;
688         default:
689             throw UnknownPropertyException();
690     }
691 }
692 
_postSetValues()693 void SwXDocumentSettings::_postSetValues ()
694 {
695     // set printer only once, namely here!
696     if( mpPrinter != NULL )
697     {
698         // #i86352# the printer is also used as container for options by sfx
699         // when setting a printer it should have decent default options
700         SfxItemSet aOptions( mpPrinter->GetOptions() );
701         SwPrintData aPrtData( mpDoc->getPrintData() );
702         SwAddPrinterItem aAddPrinterItem (FN_PARAM_ADDPRINTER, aPrtData);
703         aOptions.Put(aAddPrinterItem);
704         mpPrinter->SetOptions( aOptions );
705 
706         mpDoc->setPrinter( mpPrinter, true, true );
707     }
708 
709     mpPrinter = 0;
710     mpDocSh = 0;
711     mpDoc = 0;
712 }
713 
_preGetValues()714 void SwXDocumentSettings::_preGetValues ()
715 {
716     mpDocSh = mpModel->GetDocShell();
717     mpDoc = mpDocSh->GetDoc();
718     if( NULL == mpDoc || NULL == mpDocSh )
719         throw UnknownPropertyException();
720 }
721 
_getSingleValue(const comphelper::PropertyInfo & rInfo,uno::Any & rValue)722 void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInfo, uno::Any & rValue )
723 {
724     switch( rInfo.mnHandle )
725     {
726         case HANDLE_FORBIDDEN_CHARS:
727         {
728             Reference<XForbiddenCharacters> xRet(*mpModel->GetPropertyHelper(), UNO_QUERY);
729             rValue <<= xRet;
730         }
731         break;
732         case HANDLE_LINK_UPDATE_MODE:
733         {
734             rValue <<= static_cast < sal_Int16 > ( mpDoc->getLinkUpdateMode(true) );
735         }
736         break;
737         case HANDLE_FIELD_AUTO_UPDATE:
738         {
739             SwFldUpdateFlags nFlags = mpDoc->getFieldUpdateFlags(true);
740             sal_Bool bFieldUpd = (nFlags == AUTOUPD_FIELD_ONLY || nFlags == AUTOUPD_FIELD_AND_CHARTS );
741             rValue.setValue(&bFieldUpd, ::getBooleanCppuType());
742         }
743         break;
744         case HANDLE_CHART_AUTO_UPDATE:
745         {
746             SwFldUpdateFlags nFlags = mpDoc->getFieldUpdateFlags(true);
747             sal_Bool bChartUpd = nFlags == AUTOUPD_FIELD_AND_CHARTS;
748             rValue.setValue(&bChartUpd, ::getBooleanCppuType());
749         }
750         break;
751         case HANDLE_ADD_PARA_TABLE_SPACING:
752         {
753             sal_Bool bParaSpace = mpDoc->get(IDocumentSettingAccess::PARA_SPACE_MAX);
754             rValue.setValue(&bParaSpace, ::getBooleanCppuType());
755         }
756         break;
757         case HANDLE_ADD_PARA_TABLE_SPACING_AT_START:
758         {
759             sal_Bool bParaSpace = mpDoc->get(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES);
760             rValue.setValue(&bParaSpace, ::getBooleanCppuType());
761         }
762         break;
763         case HANDLE_ALIGN_TAB_STOP_POSITION:
764         {
765             sal_Bool bAlignTab = mpDoc->get(IDocumentSettingAccess::TAB_COMPAT);
766             rValue.setValue(&bAlignTab, ::getBooleanCppuType());
767         }
768         break;
769         case HANDLE_PRINTER_NAME:
770         {
771             SfxPrinter *pPrinter = mpDoc->getPrinter( sal_False );
772             rValue <<= pPrinter ? OUString ( pPrinter->GetName()) : OUString();
773         }
774         break;
775         case HANDLE_PRINTER_SETUP:
776         {
777             SfxPrinter *pPrinter = mpDocSh->GetDoc()->getPrinter( sal_False );
778             if (pPrinter)
779             {
780                 SvMemoryStream aStream;
781                 pPrinter->Store( aStream );
782                 aStream.Seek ( STREAM_SEEK_TO_END );
783                 sal_uInt32 nSize = aStream.Tell();
784                 aStream.Seek ( STREAM_SEEK_TO_BEGIN );
785                 Sequence < sal_Int8 > aSequence( nSize );
786                 aStream.Read ( aSequence.getArray(), nSize );
787                 rValue <<= aSequence;
788             }
789             else
790             {
791                 Sequence < sal_Int8 > aSequence ( 0 );
792                 rValue <<= aSequence;
793             }
794         }
795         break;
796         case HANDLE_IS_KERN_ASIAN_PUNCTUATION:
797         {
798             //sal_Bool bParaSpace = mpDoc->IsKernAsianPunctuation();
799             sal_Bool bParaSpace = mpDoc->get(IDocumentSettingAccess::KERN_ASIAN_PUNCTUATION);
800             rValue.setValue(&bParaSpace, ::getBooleanCppuType());
801         }
802         break;
803         case HANDLE_APPLY_USER_DATA:
804         {
805             rValue <<= mpDocSh->IsUseUserData();
806         }
807         break;
808         case HANDLE_CHARACTER_COMPRESSION_TYPE:
809         {
810             rValue <<= static_cast < sal_Int16 > (mpDoc->getCharacterCompressionType());
811         }
812         break;
813         case HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS:
814         {
815             sal_Bool bSaveGlobal = mpDoc->get(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS);
816             rValue.setValue(&bSaveGlobal, ::getBooleanCppuType());
817         }
818         break;
819         case HANDLE_CURRENT_DATABASE_DATA_SOURCE:
820         {
821             const SwDBData& rData = mpDoc->GetDBDesc();
822             rValue <<= rData.sDataSource;
823         }
824         break;
825         case HANDLE_CURRENT_DATABASE_COMMAND:
826         {
827             const SwDBData& rData = mpDoc->GetDBDesc();
828             rValue <<= rData.sCommand;
829         }
830         break;
831         case HANDLE_CURRENT_DATABASE_COMMAND_TYPE:
832         {
833             const SwDBData& rData = mpDoc->GetDBDesc();
834             rValue <<= rData.nCommandType;
835         }
836         break;
837         case HANDLE_SAVE_VERSION_ON_CLOSE:
838         {
839             rValue <<= mpDocSh->IsSaveVersionOnClose();
840         }
841         break;
842         case HANDLE_UPDATE_FROM_TEMPLATE:
843         {
844             rValue <<= mpDocSh->IsQueryLoadTemplate();
845         }
846         break;
847         case HANDLE_PRINTER_INDEPENDENT_LAYOUT:
848         {
849             // returns short (see css.document.PrinterIndependentLayout)
850             sal_Int16 nVirDevType = mpDoc->get(IDocumentSettingAccess::USE_VIRTUAL_DEVICE) ?
851                                     ( mpDoc->get(IDocumentSettingAccess::USE_HIRES_VIRTUAL_DEVICE) ?
852                                       document::PrinterIndependentLayout::HIGH_RESOLUTION :
853                                       document::PrinterIndependentLayout::LOW_RESOLUTION ) :
854                                     document::PrinterIndependentLayout::DISABLED;
855             rValue <<= nVirDevType;
856         }
857         break;
858         case HANDLE_IS_LABEL_DOC:
859         {
860             sal_Bool bLabel = mpDoc->get(IDocumentSettingAccess::LABEL_DOCUMENT);
861             rValue <<= bLabel;
862         }
863         break;
864         case HANDLE_IS_ADD_FLY_OFFSET:
865         {
866             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::ADD_FLY_OFFSETS);
867             rValue.setValue( &bTmp, ::getBooleanCppuType() );
868         }
869         break;
870         case HANDLE_IS_ADD_EXTERNAL_LEADING:
871         {
872             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::ADD_EXT_LEADING);
873             rValue.setValue( &bTmp, ::getBooleanCppuType() );
874         }
875         break;
876         case HANDLE_OLD_NUMBERING: // #111955#
877         {
878             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::OLD_NUMBERING);
879             rValue.setValue( &bTmp, ::getBooleanCppuType() );
880         }
881         break;
882         case HANDLE_OUTLINELEVEL_YIELDS_NUMBERING: // #111955#
883         {
884             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::OUTLINE_LEVEL_YIELDS_OUTLINE_RULE);
885             rValue.setValue( &bTmp, ::getBooleanCppuType() );
886         }
887         break;
888         case HANDLE_ALLOW_PRINTJOB_CANCEL:
889         {
890             sal_Bool bPrintCancelState = mpDocSh->Stamp_GetPrintCancelState();
891             rValue.setValue(&bPrintCancelState, ::getBooleanCppuType());
892         }
893         break;
894         case HANDLE_USE_FORMER_LINE_SPACING:
895         {
896             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::OLD_LINE_SPACING);
897             rValue.setValue( &bTmp, ::getBooleanCppuType() );
898         }
899         break;
900         case HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS:
901         {
902             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::ADD_PARA_SPACING_TO_TABLE_CELLS);
903             rValue.setValue( &bTmp, ::getBooleanCppuType() );
904         }
905         break;
906         case HANDLE_USE_FORMER_OBJECT_POSITIONING:
907         {
908             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::USE_FORMER_OBJECT_POS);
909             rValue.setValue( &bTmp, ::getBooleanCppuType() );
910         }
911         break;
912         case HANDLE_USE_FORMER_TEXT_WRAPPING:
913         {
914             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::USE_FORMER_TEXT_WRAPPING);
915             rValue.setValue( &bTmp, ::getBooleanCppuType() );
916         }
917         break;
918         case HANDLE_CHANGES_PASSWORD:
919         {
920             rValue <<= mpDoc->GetRedlinePassword();
921         }
922         break;
923         case HANDLE_CONSIDER_WRAP_ON_OBJPOS:
924         {
925             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::CONSIDER_WRAP_ON_OBJECT_POSITION);
926             rValue.setValue( &bTmp, ::getBooleanCppuType() );
927         }
928         break;
929         case HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING:
930         {
931             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING);
932             rValue.setValue( &bTmp, ::getBooleanCppuType() );
933         }
934         break;
935         case HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK:
936         {
937             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK);
938             rValue.setValue( &bTmp, ::getBooleanCppuType() );
939         }
940         break;
941         case HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT:
942         {
943             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT);
944             rValue.setValue( &bTmp, ::getBooleanCppuType() );
945         }
946         break;
947         case HANDLE_TABLE_ROW_KEEP :
948         {
949             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::TABLE_ROW_KEEP);
950             rValue.setValue( &bTmp, ::getBooleanCppuType() );
951         }
952         break;
953         case HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION:
954         {
955             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION);
956             rValue.setValue( &bTmp, ::getBooleanCppuType() );
957         }
958         break;
959         case HANDLE_LOAD_READONLY:
960         {
961             rValue <<= mpDocSh->IsLoadReadonly();
962         }
963         break;
964         case HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE:
965         {
966             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE);
967             rValue.setValue( &bTmp, ::getBooleanCppuType() );
968         }
969         break;
970         case HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES:
971         {
972             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAME);
973             rValue.setValue( &bTmp, ::getBooleanCppuType() );
974         }
975         break;
976         case HANDLE_UNIX_FORCE_ZERO_EXT_LEADING:
977         {
978             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::UNIX_FORCE_ZERO_EXT_LEADING);
979             rValue.setValue( &bTmp, ::getBooleanCppuType() );
980         }
981         break;
982         case HANDLE_USE_OLD_PRINTER_METRICS:
983         {
984             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::USE_OLD_PRINTER_METRICS);
985             rValue.setValue( &bTmp, ::getBooleanCppuType() );
986         }
987         break;
988         case HANDLE_TABS_RELATIVE_TO_INDENT:
989         {
990             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::TABS_RELATIVE_TO_INDENT);
991             rValue.setValue( &bTmp, ::getBooleanCppuType() );
992         }
993         break;
994         case HANDLE_PROTECT_FORM:
995         {
996             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::PROTECT_FORM);
997             rValue.setValue( &bTmp, ::getBooleanCppuType() );
998         }
999         break;
1000         // --> OD 2008-06-05 #i89181#
1001         case HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST:
1002         {
1003             sal_Bool bTmp = mpDoc->get(IDocumentSettingAccess::TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST);
1004             rValue.setValue( &bTmp, ::getBooleanCppuType() );
1005         }
1006         break;
1007         // <--
1008         case HANDLE_MODIFYPASSWORDINFO:
1009         {
1010             rValue <<= mpDocSh->GetModifyPasswordInfo();
1011         }
1012         break;
1013         case HANDLE_MATH_BASELINE_ALIGNMENT:
1014         {
1015             sal_Bool bTmp = mpDoc->get( IDocumentSettingAccess::MATH_BASELINE_ALIGNMENT );
1016             rValue.setValue( &bTmp, ::getBooleanCppuType() );
1017         }
1018         break;
1019 
1020         default:
1021             throw UnknownPropertyException();
1022     }
1023 }
1024 
_postGetValues()1025 void SwXDocumentSettings::_postGetValues ()
1026 {
1027     mpDocSh = 0;
1028     mpDoc = 0;
1029 }
1030 
1031 // XServiceInfo
getImplementationName()1032 OUString SAL_CALL SwXDocumentSettings::getImplementationName(  )
1033 {
1034     return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Writer.DocumentSettings"));
1035 }
1036 
supportsService(const OUString & ServiceName)1037 sal_Bool SAL_CALL SwXDocumentSettings::supportsService( const OUString& ServiceName )
1038 {
1039     const Sequence< OUString > aSeq( getSupportedServiceNames() );
1040     sal_Int32 nCount = aSeq.getLength();
1041     const OUString* pServices = aSeq.getConstArray();
1042     while( nCount-- )
1043     {
1044         if( *pServices++ == ServiceName )
1045             return sal_True;
1046     }
1047     return sal_True;
1048 }
1049 
getSupportedServiceNames()1050 Sequence< OUString > SAL_CALL SwXDocumentSettings::getSupportedServiceNames(  )
1051 {
1052     Sequence< OUString > aSeq( 4 );
1053     aSeq[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.Settings") );
1054     aSeq[1] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.DocumentSettings") );
1055     aSeq[2] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.PrintSettings") );
1056     aSeq[3] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.PrintPreviewSettings") );
1057     return aSeq;
1058 }
1059