Better, Faster, Freer

The LXR Cross Referencer

source navigation ]
diff markup ]
identifier search ]
general search ]
 
 
Architecture: i386 ]
Version: HEAD ]

001 /*************************************************************************
002  *
003  *  OpenOffice.org - a multi-platform office productivity suite
004  *
005  *  $RCSfile: SwXDocumentSettings.cxx,v $
006  *
007  *  $Revision: 1.57 $
008  *
009  *  last change: $Author: hr $ $Date: 2007/09/27 12:39:53 $
010  *
011  *  The Contents of this file are made available subject to
012  *  the terms of GNU Lesser General Public License Version 2.1.
013  *
014  *
015  *    GNU Lesser General Public License Version 2.1
016  *    =============================================
017  *    Copyright 2005 by Sun Microsystems, Inc.
018  *    901 San Antonio Road, Palo Alto, CA 94303, USA
019  *
020  *    This library is free software; you can redistribute it and/or
021  *    modify it under the terms of the GNU Lesser General Public
022  *    License version 2.1, as published by the Free Software Foundation.
023  *
024  *    This library is distributed in the hope that it will be useful,
025  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
026  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
027  *    Lesser General Public License for more details.
028  *
029  *    You should have received a copy of the GNU Lesser General Public
030  *    License along with this library; if not, write to the Free Software
031  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
032  *    MA  02111-1307  USA
033  *
034  ************************************************************************/
035 
036 // MARKER(update_precomp.py): autogen include statement, do not remove
037 #include "precompiled_sw.hxx"
038 #ifndef _VOS_MUTEX_HXX_
039 #include <vos/mutex.hxx>
040 #endif
041 #ifndef _SFX_SFXBASECONTROLLER_HXX_
042 #include <sfx2/sfxbasecontroller.hxx>
043 #endif
044 #ifndef _SW_XDOCUMENT_SETTINGS_HXX
045 #include <SwXDocumentSettings.hxx>
046 #endif
047 #ifndef _SW_XPRINTPREVIEWSETTINGS_HXX_
048 #include <SwXPrintPreviewSettings.hxx>
049 #endif
050 #ifndef _COMPHELPER_MASTERPROPERTSETINFO_HXX_
051 #include <comphelper/MasterPropertySetInfo.hxx>
052 #endif
053 #ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPPP_
054 #include <com/sun/star/beans/PropertyAttribute.hpp>
055 #endif
056 #ifndef _COM_SUN_STAR_I18N_XFORBIDDENCHARACTERS_HPP_
057 #include <com/sun/star/i18n/XForbiddenCharacters.hpp>
058 #endif
059 #ifndef _COM_SUN_STAR_DOCUMENT_PRINTERINDEPENDENTLAYOUT_HPP_
060 #include <com/sun/star/document/PrinterIndependentLayout.hpp>
061 #endif
062 #ifndef _DOC_HXX
063 #include <doc.hxx>
064 #endif
065 #ifndef _SWDOCSH_HXX
066 #include <docsh.hxx>
067 #endif
068 #ifndef _FLDUPDE_HXX
069 #include <fldupde.hxx>
070 #endif
071 #ifndef _LINKENUM_HXX
072 #include <linkenum.hxx>
073 #endif
074 #ifndef _SFX_PRINTER_HXX
075 #include <sfx2/printer.hxx>
076 #endif
077 #ifndef _EDITSH_HXX
078 #include <editsh.hxx>
079 #endif
080 #ifndef _DRAWDOC_HXX
081 #include <drawdoc.hxx>
082 #endif
083 #ifndef _ZFORLIST_HXX
084 #include <svtools/zforlist.hxx>
085 #endif
086 #ifndef _UNOOBJ_HXX
087 #include <unoobj.hxx>
088 #endif
089 #ifndef _UNOTXDOC_HXX
090 #include <unotxdoc.hxx>
091 #endif
092 #include <cmdid.h>
093 #ifndef _SVX_ZOOMITEM_HXX
094 #include <svx/zoomitem.hxx>
095 #endif
096 #ifndef _UNOMOD_HXX
097 #include <unomod.hxx>
098 #endif
099 #ifndef _SV_SVAPP_HXX
100 #include <vcl/svapp.hxx>
101 #endif
102 
103 
104 using namespace rtl;
105 using namespace comphelper;
106 using namespace ::com::sun::star;
107 using namespace ::com::sun::star::uno;
108 using namespace ::com::sun::star::beans;
109 using namespace ::com::sun::star::lang;
110 using namespace ::com::sun::star::i18n;
111 
112 enum SwDocumentSettingsPropertyHandles
113 {
114         HANDLE_FORBIDDEN_CHARS,
115         HANDLE_LINK_UPDATE_MODE,
116         HANDLE_FIELD_AUTO_UPDATE,
117         HANDLE_CHART_AUTO_UPDATE,
118         HANDLE_ADD_PARA_TABLE_SPACING,
119         HANDLE_ADD_PARA_TABLE_SPACING_AT_START,
120         HANDLE_ALIGN_TAB_STOP_POSITION,
121         HANDLE_PRINTER_NAME,
122         HANDLE_PRINTER_SETUP,
123         HANDLE_IS_KERN_ASIAN_PUNCTUATION,
124         HANDLE_CHARACTER_COMPRESSION_TYPE,
125         HANDLE_APPLY_USER_DATA,
126         HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS,
127         HANDLE_CURRENT_DATABASE_DATA_SOURCE,
128         HANDLE_CURRENT_DATABASE_COMMAND,
129         HANDLE_CURRENT_DATABASE_COMMAND_TYPE,
130         HANDLE_SAVE_VERSION_ON_CLOSE,
131         HANDLE_IS_GRID_VISIBLE,
132         HANDLE_IS_SNAP_TO_GRID,
133         HANDLE_IS_SYNCHRONISE_AXES,
134         HANDLE_HORIZONTAL_GRID_RESOLUTION,
135         HANDLE_HORIZONTAL_GRID_SUBDIVISION,
136         HANDLE_VERTICAL_GRID_RESOLUTION,
137     HANDLE_VERTICAL_GRID_SUBDIVISION,
138     HANDLE_UPDATE_FROM_TEMPLATE,
139     HANDLE_PRINTER_INDEPENDENT_LAYOUT,
140     HANDLE_IS_LABEL_DOC,
141     HANDLE_IS_ADD_FLY_OFFSET,
142     HANDLE_IS_ADD_EXTERNAL_LEADING,
143     HANDLE_OLD_NUMBERING, // #111955#
144     HANDLE_OUTLINELEVEL_YIELDS_NUMBERING,
145     /* Stampit It disable the print cancel button of the shown progress dialog. */
146     HANDLE_ALLOW_PRINTJOB_CANCEL,
147     HANDLE_USE_FORMER_LINE_SPACING,
148     HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS,
149     HANDLE_USE_FORMER_OBJECT_POSITIONING,
150     HANDLE_USE_FORMER_TEXT_WRAPPING,
151     HANDLE_CHANGES_PASSWORD,
152     HANDLE_CONSIDER_WRAP_ON_OBJPOS,
153     HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,
154     HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,
155     HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,
156     HANDLE_TABLE_ROW_KEEP,
157     HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,
158     HANDLE_LOAD_READONLY,
159     HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE,
160     HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES,
161     HANDLE_UNIX_FORCE_ZERO_EXT_LEADING,
162     HANDLE_USE_OLD_PRINTER_METRICS
163 };
164 
165 MasterPropertySetInfo * lcl_createSettingsInfo()
166 {
167         static PropertyInfo aWriterSettingsInfoMap[] =
168         {
169         { RTL_CONSTASCII_STRINGPARAM("ForbiddenCharacters"),        HANDLE_FORBIDDEN_CHARS,                 CPPUTYPE_REFFORBCHARS,      0,   0},
170                 { RTL_CONSTASCII_STRINGPARAM("LinkUpdateMode"),                         HANDLE_LINK_UPDATE_MODE,                                CPPUTYPE_INT16,                         0,   0},
171                 { RTL_CONSTASCII_STRINGPARAM("FieldAutoUpdate"),                        HANDLE_FIELD_AUTO_UPDATE,                               CPPUTYPE_BOOLEAN,                       0,   0},
172                 { RTL_CONSTASCII_STRINGPARAM("ChartAutoUpdate"),                        HANDLE_CHART_AUTO_UPDATE,                               CPPUTYPE_BOOLEAN,                       0,   0},
173                 { RTL_CONSTASCII_STRINGPARAM("AddParaTableSpacing"),            HANDLE_ADD_PARA_TABLE_SPACING,                  CPPUTYPE_BOOLEAN,                       0,   0},
174                 { RTL_CONSTASCII_STRINGPARAM("AddParaTableSpacingAtStart"), HANDLE_ADD_PARA_TABLE_SPACING_AT_START, CPPUTYPE_BOOLEAN,                   0,   0},
175                 { RTL_CONSTASCII_STRINGPARAM("AlignTabStopPosition"),           HANDLE_ALIGN_TAB_STOP_POSITION,                 CPPUTYPE_BOOLEAN,                       0,   0},
176                 { RTL_CONSTASCII_STRINGPARAM("PrinterName"),                            HANDLE_PRINTER_NAME,                                    CPPUTYPE_OUSTRING,                      0,   0},
177                 { RTL_CONSTASCII_STRINGPARAM("PrinterSetup"),                           HANDLE_PRINTER_SETUP,                                   CPPUTYPE_SEQINT8,                       0,   0},
178                 { RTL_CONSTASCII_STRINGPARAM("IsKernAsianPunctuation"),     HANDLE_IS_KERN_ASIAN_PUNCTUATION,           CPPUTYPE_BOOLEAN,                       0,   0},
179                 { RTL_CONSTASCII_STRINGPARAM("CharacterCompressionType"),       HANDLE_CHARACTER_COMPRESSION_TYPE,              CPPUTYPE_INT16,                         0,   0},
180                 { RTL_CONSTASCII_STRINGPARAM("ApplyUserData"),                      HANDLE_APPLY_USER_DATA,                             CPPUTYPE_BOOLEAN,                       0,   0},
181                 { RTL_CONSTASCII_STRINGPARAM("SaveGlobalDocumentLinks"),        HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS,              CPPUTYPE_BOOLEAN,                       0,   0},
182                 { RTL_CONSTASCII_STRINGPARAM("CurrentDatabaseDataSource"),  HANDLE_CURRENT_DATABASE_DATA_SOURCE,        CPPUTYPE_OUSTRING,                      0,   0},
183                 { RTL_CONSTASCII_STRINGPARAM("CurrentDatabaseCommand"),         HANDLE_CURRENT_DATABASE_COMMAND,                CPPUTYPE_OUSTRING,                      0,   0},
184         { RTL_CONSTASCII_STRINGPARAM("CurrentDatabaseCommandType"), HANDLE_CURRENT_DATABASE_COMMAND_TYPE,   CPPUTYPE_INT32,             0,   0},
185                 { RTL_CONSTASCII_STRINGPARAM("SaveVersionOnClose"),                 HANDLE_SAVE_VERSION_ON_CLOSE,                       CPPUTYPE_BOOLEAN,                       0,   0},
186         { RTL_CONSTASCII_STRINGPARAM("UpdateFromTemplate"),         HANDLE_UPDATE_FROM_TEMPLATE,            CPPUTYPE_BOOLEAN,           0,   0},
187 
188         { RTL_CONSTASCII_STRINGPARAM("PrinterIndependentLayout"),   HANDLE_PRINTER_INDEPENDENT_LAYOUT,          CPPUTYPE_INT16,                         0,       0},
189         { RTL_CONSTASCII_STRINGPARAM("IsLabelDocument"),            HANDLE_IS_LABEL_DOC,                    CPPUTYPE_BOOLEAN,           0,   0},
190         { RTL_CONSTASCII_STRINGPARAM("AddFrameOffsets"),            HANDLE_IS_ADD_FLY_OFFSET,               CPPUTYPE_BOOLEAN,           0,   0},
191         { RTL_CONSTASCII_STRINGPARAM("AddExternalLeading"),         HANDLE_IS_ADD_EXTERNAL_LEADING,         CPPUTYPE_BOOLEAN,           0,   0},
192         { RTL_CONSTASCII_STRINGPARAM("UseOldNumbering"),            HANDLE_OLD_NUMBERING,                   CPPUTYPE_BOOLEAN,           0,   0}, // #111955#
193         { RTL_CONSTASCII_STRINGPARAM("OutlineLevelYieldsNumbering"), HANDLE_OUTLINELEVEL_YIELDS_NUMBERING, CPPUTYPE_BOOLEAN,           0,   0},
194         /* Stampit It disable the print cancel button of the shown progress dialog. */
195         { RTL_CONSTASCII_STRINGPARAM("AllowPrintJobCancel"),        HANDLE_ALLOW_PRINTJOB_CANCEL,           CPPUTYPE_BOOLEAN,           0,   0},
196         { RTL_CONSTASCII_STRINGPARAM("UseFormerLineSpacing"),       HANDLE_USE_FORMER_LINE_SPACING,         CPPUTYPE_BOOLEAN,           0,   0},
197         { RTL_CONSTASCII_STRINGPARAM("AddParaSpacingToTableCells"), HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS, CPPUTYPE_BOOLEAN,           0,   0},
198         { RTL_CONSTASCII_STRINGPARAM("UseFormerObjectPositioning"), HANDLE_USE_FORMER_OBJECT_POSITIONING,   CPPUTYPE_BOOLEAN,           0,   0},
199         { RTL_CONSTASCII_STRINGPARAM("UseFormerTextWrapping"),      HANDLE_USE_FORMER_TEXT_WRAPPING,        CPPUTYPE_BOOLEAN,           0,   0},
200         { RTL_CONSTASCII_STRINGPARAM("RedlineProtectionKey"),       HANDLE_CHANGES_PASSWORD,                    CPPUTYPE_SEQINT8,           0,   0},
201         { RTL_CONSTASCII_STRINGPARAM("ConsiderTextWrapOnObjPos"),   HANDLE_CONSIDER_WRAP_ON_OBJPOS,         CPPUTYPE_BOOLEAN,           0,   0},
202         { RTL_CONSTASCII_STRINGPARAM("IgnoreFirstLineIndentInNumbering"),   HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,         CPPUTYPE_BOOLEAN,           0,   0},
203         { RTL_CONSTASCII_STRINGPARAM("DoNotJustifyLinesWithManualBreak"),   HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,         CPPUTYPE_BOOLEAN,           0,   0},
204         { RTL_CONSTASCII_STRINGPARAM("DoNotResetParaAttrsForNumFont"),   HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,         CPPUTYPE_BOOLEAN,           0,   0},
205         { RTL_CONSTASCII_STRINGPARAM("TableRowKeep"),               HANDLE_TABLE_ROW_KEEP,         CPPUTYPE_BOOLEAN,           0,   0},
206         { RTL_CONSTASCII_STRINGPARAM("IgnoreTabsAndBlanksForLineCalculation"),   HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,         CPPUTYPE_BOOLEAN,           0,   0},
207         { RTL_CONSTASCII_STRINGPARAM("LoadReadonly"),               HANDLE_LOAD_READONLY,                   CPPUTYPE_BOOLEAN,           0,   0},
208         { RTL_CONSTASCII_STRINGPARAM("DoNotCaptureDrawObjsOnPage"),   HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, CPPUTYPE_BOOLEAN, 0, 0},
209         { RTL_CONSTASCII_STRINGPARAM("ClipAsCharacterAnchoredWriterFlyFrames"), HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES, CPPUTYPE_BOOLEAN, 0, 0},
210         { RTL_CONSTASCII_STRINGPARAM("UnxForceZeroExtLeading"), HANDLE_UNIX_FORCE_ZERO_EXT_LEADING, CPPUTYPE_BOOLEAN, 0, 0},
211         { RTL_CONSTASCII_STRINGPARAM("UseOldPrinterMetrics"), HANDLE_USE_OLD_PRINTER_METRICS, CPPUTYPE_BOOLEAN, 0, 0},
212 
213 /*
214  * As OS said, we don't have a view when we need to set this, so I have to
215  * find another solution before adding them to this property set - MTG
216                 { RTL_CONSTASCII_STRINGPARAM("IsGridVisible"),                  HANDLE_IS_GRID_VISIBLE,                                 CPPUTYPE_BOOLEAN,                       0,   0},
217                 { RTL_CONSTASCII_STRINGPARAM("IsSnapToGrid"),                   HANDLE_IS_SNAP_TO_GRID,                                 CPPUTYPE_BOOLEAN,                       0,   0},
218                 { RTL_CONSTASCII_STRINGPARAM("IsSynchroniseAxes"),                      HANDLE_IS_SYNCHRONISE_AXES,                     CPPUTYPE_BOOLEAN,                       0,   0},
219                 { RTL_CONSTASCII_STRINGPARAM("HorizontalGridResolution"),       HANDLE_HORIZONTAL_GRID_RESOLUTION,              CPPUTYPE_INT32,                         0,   0},
220                 { RTL_CONSTASCII_STRINGPARAM("HorizontalGridSubdivision"),      HANDLE_HORIZONTAL_GRID_SUBDIVISION,             CPPUTYPE_INT16,                         0,   0},
221                 { RTL_CONSTASCII_STRINGPARAM("VerticalGridResolution"),     HANDLE_VERTICAL_GRID_RESOLUTION,            CPPUTYPE_INT32,                         0,   0},
222                 { RTL_CONSTASCII_STRINGPARAM("VerticalGridSubdivision"),        HANDLE_VERTICAL_GRID_SUBDIVISION,               CPPUTYPE_INT16,                         0,   0},
223 
224                 { RTL_CONSTASCII_STRINGPARAM("ShowParagraphEnd"),                       HANDLE_SHOW_PARAGRAPH_END,                              CPPUTYPE_BOOLEAN,                       0,   0},
225                 { RTL_CONSTASCII_STRINGPARAM("ShowOptionalHyphens"),            HANDLE_SHOW_OPTIONAL_HYPHENS,                   CPPUTYPE_BOOLEAN,                       0,   0},
226                 { RTL_CONSTASCII_STRINGPARAM("ShowSpaces"),                             HANDLE_SHOW_SPACES,                                     CPPUTYPE_BOOLEAN,                       0,   0},
227                 { RTL_CONSTASCII_STRINGPARAM("ShowTabs"),                                       HANDLE_SHOW_TABS,                                               CPPUTYPE_BOOLEAN,                       0,   0},
228                 { RTL_CONSTASCII_STRINGPARAM("ShowBreaks"),                                     HANDLE_SHOW_BREAKS,                                     CPPUTYPE_BOOLEAN,                       0,   0},
229                 { RTL_CONSTASCII_STRINGPARAM("ShowHiddenText"),                         HANDLE_SHOW_HIDDEN_TEXT,                                CPPUTYPE_BOOLEAN,                       0,   0},
230                 { RTL_CONSTASCII_STRINGPARAM("ShowHiddenParagraphs"),           HANDLE_SHOW_HIDDEN_PARAGRAPHS,                  CPPUTYPE_BOOLEAN,                       0,   0},
231 
232                 { RTL_CONSTASCII_STRINGPARAM("ShowTextLimitGuide"),                     HANDLE_SHOW_TEXT_LIMIT_GUIDE,                   CPPUTYPE_BOOLEAN,                       0,   0},
233                 { RTL_CONSTASCII_STRINGPARAM("ShowTableLimitGuide"),            HANDLE_SHOW_TABLE_LIMIT_GUIDE,                  CPPUTYPE_BOOLEAN,                       0,   0},
234                 { RTL_CONSTASCII_STRINGPARAM("ShowSectionLimitGuide"),          HANDLE_SHOW_SECTION_LIMIT_GUIDE,                CPPUTYPE_BOOLEAN,                       0,   0},
235                 { RTL_CONSTASCII_STRINGPARAM("ShowGuidesWhileMoving"),          HANDLE_SHOW_GUIDES_WHILE_MOVING,                CPPUTYPE_BOOLEAN,                       0,   0},
236                 { RTL_CONSTASCII_STRINGPARAM("ShowSimpleHandles"),                      HANDLE_SHOW_SIMPLE_HANDLES,                     CPPUTYPE_BOOLEAN,                       0,   0},
237                 { RTL_CONSTASCII_STRINGPARAM("ShowLargeHandles"),                       HANDLE_SHOW_LARGE_HANDLES,                              CPPUTYPE_BOOLEAN,                       0,   0},
238 */
239                 { NULL, 0, 0, CPPUTYPE_UNKNOWN, 0, 0 }
240         };
241         return new MasterPropertySetInfo ( aWriterSettingsInfoMap );
242 }
243 
244 SwXDocumentSettings::SwXDocumentSettings ( SwXTextDocument * pModel )
245 : MasterPropertySet ( lcl_createSettingsInfo (),
246                       &Application::GetSolarMutex () )
247 , mxModel ( pModel )
248 , mpModel ( pModel )
249 , mpDocSh ( NULL )
250 , mpDoc ( NULL )
251 , mpPrinter( NULL )
252 {
253         registerSlave ( new SwXPrintSettings ( PRINT_SETTINGS_DOCUMENT, mpModel->GetDocShell()->GetDoc() ) );
254         registerSlave ( new SwXPrintPreviewSettings ( mpModel->GetDocShell()->GetDoc() ) );
255 }
256 
257 SwXDocumentSettings::~SwXDocumentSettings()
258         throw()
259 {
260 }
261 
262 Any SAL_CALL SwXDocumentSettings::queryInterface( const Type& rType )
263         throw(RuntimeException)
264 {
265         return ::cppu::queryInterface ( rType,
266                                                                                 // OWeakObject interfaces
267                                         dynamic_cast< XInterface* > ( dynamic_cast< OWeakObject*  >(this) ),
268                                         dynamic_cast< XWeak* > ( this ),
269                                                                                 // my own interfaces
270                                         dynamic_cast< XPropertySet*  > ( this ),
271                                         dynamic_cast< XPropertyState* > ( this ),
272                                         dynamic_cast< XMultiPropertySet* > ( this ),
273                                         dynamic_cast< XServiceInfo* > ( this ),
274                                         dynamic_cast< XTypeProvider* > ( this ) );
275 }
276 void SwXDocumentSettings::acquire ()
277         throw ()
278 {
279         OWeakObject::acquire();
280 }
281 void SwXDocumentSettings::release ()
282         throw ()
283 {
284         OWeakObject::release();
285 }
286 
287 uno::Sequence< uno::Type > SAL_CALL SwXDocumentSettings::getTypes(  )
288     throw (RuntimeException)
289 {
290     vos::OGuard aGuard(Application::GetSolarMutex());
291 
292     uno::Sequence< uno::Type > aBaseTypes( 5 );
293     uno::Type* pBaseTypes = aBaseTypes.getArray();
294 
295     // from MasterPropertySet
296     pBaseTypes[0] = ::getCppuType((Reference< XPropertySet >*)0);
297     pBaseTypes[1] = ::getCppuType((Reference< XPropertyState >*)0);
298     pBaseTypes[2] = ::getCppuType((Reference< XMultiPropertySet >*)0);
299     //
300     pBaseTypes[3] = ::getCppuType((Reference< XServiceInfo >*)0);
301     pBaseTypes[4] = ::getCppuType((Reference< XTypeProvider >*)0);
302 
303     return aBaseTypes;
304 }
305 
306 uno::Sequence< sal_Int8 > SAL_CALL SwXDocumentSettings::getImplementationId(  )
307     throw (RuntimeException)
308 {
309     vos::OGuard aGuard(Application::GetSolarMutex());
310     static Sequence< sal_Int8 > aId( 16 );
311     static sal_Bool bInit = sal_False;
312     if(!bInit)
313     {
314         rtl_createUuid( (sal_uInt8 *)(aId.getArray() ), 0, sal_True );
315         bInit = sal_True;
316     }
317     return aId;
318 }
319 
320 void SwXDocumentSettings::_preSetValues ()
321         throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException )
322 {
323         mpDocSh = mpModel->GetDocShell();
324         mpDoc = mpDocSh->GetDoc();
325 
326         if( NULL == mpDoc || NULL == mpDocSh )
327                 throw UnknownPropertyException();
328 }
329 
330 
331 void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInfo, const uno::Any &rValue )
332         throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException )
333 {
334         if (rInfo.mnAttributes & PropertyAttribute::READONLY)
335                 throw PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + C2U(rInfo.mpName), static_cast < cppu::OWeakObject * > ( 0 ) );
336 
337         switch( rInfo.mnHandle )
338         {
339                 case HANDLE_FORBIDDEN_CHARS:
340                         break;
341                 case HANDLE_LINK_UPDATE_MODE:
342                 {
343                         sal_Int16 nMode;
344                         rValue >>= nMode;
345                         switch (nMode)
346                         {
347                                 case NEVER:
348                                 case MANUAL:
349                                 case AUTOMATIC:
350                                 case GLOBALSETTING:
351                                         break;
352                                 default:
353                                         throw IllegalArgumentException();
354                         }
355             mpDoc->setLinkUpdateMode(nMode);
356                 }
357                 break;
358                 case HANDLE_FIELD_AUTO_UPDATE:
359                 {
360                         sal_Bool bUpdateField = *(sal_Bool*)rValue.getValue();
361             SwFldUpdateFlags nFlag = mpDoc->getFieldUpdateFlags(true);
362             mpDoc->setFieldUpdateFlags( bUpdateField ?
363                                         nFlag == AUTOUPD_FIELD_AND_CHARTS ?
364                                         AUTOUPD_FIELD_AND_CHARTS :
365                                         AUTOUPD_FIELD_ONLY :
366                                         AUTOUPD_OFF );
367                 }
368                 break;
369                 case HANDLE_CHART_AUTO_UPDATE:
370                 {
371                         sal_Bool bUpdateChart = *(sal_Bool*)rValue.getValue();
372             SwFldUpdateFlags nFlag = mpDoc->getFieldUpdateFlags(true);
373             mpDoc->setFieldUpdateFlags( (nFlag == AUTOUPD_FIELD_ONLY || nFlag == AUTOUPD_FIELD_AND_CHARTS ) ?
374                                         bUpdateChart ?
375                                         AUTOUPD_FIELD_AND_CHARTS :
376                                         AUTOUPD_FIELD_ONLY :
377                                         AUTOUPD_OFF );
378                 }
379                 break;
380                 case HANDLE_ADD_PARA_TABLE_SPACING:
381                 {
382                         sal_Bool bParaSpace;
383                         rValue >>= bParaSpace;
384             mpDoc->set(IDocumentSettingAccess::PARA_SPACE_MAX, bParaSpace );
385                 }
386                 break;
387                 case HANDLE_ADD_PARA_TABLE_SPACING_AT_START:
388                 {
389                         sal_Bool bParaSpacePage;
390                         rValue >>= bParaSpacePage;
391             mpDoc->set(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES, bParaSpacePage );
392         }
393                 break;
394                 case HANDLE_ALIGN_TAB_STOP_POSITION:
395                 {
396                         sal_Bool bAlignTab = *(sal_Bool*)rValue.getValue();
397                         mpDoc->set(IDocumentSettingAccess::TAB_COMPAT, bAlignTab);
398                 }
399                 break;
400                 case HANDLE_PRINTER_NAME:
401                 {
402             //the printer must be created
403             OUString sPrinterName;
404             if( rValue >>= sPrinterName  )
405             {
406                                 if( !mpPrinter && sPrinterName.getLength() > 0 )
407                                 {
408                     SfxPrinter* pPrinter = mpDoc->getPrinter( true );
409                                         if ( OUString ( pPrinter->GetName()) != sPrinterName )
410                                         {
411                                                 SfxPrinter *pNewPrinter = new SfxPrinter ( pPrinter->GetOptions().Clone(), sPrinterName );
412                                                 if( pNewPrinter->IsKnown() )
413                                                 {
414                             // set printer only once; in _postSetValues
415                             mpPrinter = pNewPrinter;
416                                                 }
417                                                 else
418                                                 {
419                                                         delete pNewPrinter;
420                                                 }
421                                         }
422                                 }
423             }
424             else
425                 throw IllegalArgumentException();
426                 }
427                 break;
428                 case HANDLE_PRINTER_SETUP:
429                 {
430                         Sequence < sal_Int8 > aSequence;
431                         if ( rValue >>= aSequence )
432                         {
433                                 sal_uInt32 nSize = aSequence.getLength();
434                                 if( nSize > 0 )
435                                 {
436                                         SvMemoryStream aStream (aSequence.getArray(), nSize,
437                                                                                         STREAM_READ );
438                                         aStream.Seek ( STREAM_SEEK_TO_BEGIN );
439                                         static sal_uInt16 __READONLY_DATA nRange[] =
440                                         {
441                                                 FN_PARAM_ADDPRINTER, FN_PARAM_ADDPRINTER,
442                                                 SID_HTML_MODE,  SID_HTML_MODE,
443                                                 SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
444                                                 SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC,
445                                                 0
446                                         };
447                                         SfxItemSet *pItemSet = new SfxItemSet( mpDoc->GetAttrPool(), nRange );
448                                         SfxPrinter *pPrinter = SfxPrinter::Create ( aStream, pItemSet );
449 
450                     // set printer only once; in _postSetValues
451                     delete mpPrinter;
452                     mpPrinter = pPrinter;
453                                 }
454                         }
455                         else
456                                 throw IllegalArgumentException();
457                 }
458                 break;
459                 case HANDLE_IS_KERN_ASIAN_PUNCTUATION:
460                 {
461                         sal_Bool bIsKern = *(sal_Bool*)(rValue).getValue();
462                         mpDoc->set(IDocumentSettingAccess::KERN_ASIAN_PUNCTUATION, bIsKern);
463                         SwEditShell* pEditSh = mpDoc->GetEditShell();
464                         if(pEditSh)
465                                 pEditSh->ChgHyphenation();
466                 }
467                 break;
468                 case HANDLE_CHARACTER_COMPRESSION_TYPE:
469                 {
470                         sal_Int16 nMode;
471                         rValue >>= nMode;
472                         switch (nMode)
473                         {
474                                 case CHARCOMPRESS_NONE:
475                                 case CHARCOMPRESS_PUNCTUATION:
476                                 case CHARCOMPRESS_PUNCTUATION_KANA:
477                                         break;
478                                 default:
479                                         throw IllegalArgumentException();
480                         }
481             mpDoc->setCharacterCompressionType(static_cast < SwCharCompressType > (nMode) );
482                 }
483                 break;
484                 case HANDLE_APPLY_USER_DATA:
485                 {
486                         mpDocSh->SetUseUserData( *(sal_Bool*)rValue.getValue() );
487                 }
488                 break;
489                 case HANDLE_SAVE_GLOBAL_DOCUMENT_LINKS:
490                 {
491                         sal_Bool bSaveGlobal = *(sal_Bool*)rValue.getValue();
492                         mpDoc->set(IDocumentSettingAccess::GLOBAL_DOCUMENT_SAVE_LINKS, bSaveGlobal );
493                 }
494                 break;
495                 case HANDLE_CURRENT_DATABASE_DATA_SOURCE:
496                 {
497                         SwDBData aData = mpDoc->GetDBData();
498                         if ( rValue >>= aData.sDataSource )
499                                 mpDoc->ChgDBData( aData );
500                 }
501                 break;
502                 case HANDLE_CURRENT_DATABASE_COMMAND:
503                 {
504                         SwDBData aData = mpDoc->GetDBData();
505                         if ( rValue >>= aData.sCommand )
506                                 mpDoc->ChgDBData( aData );
507                 }
508                 break;
509                 case HANDLE_CURRENT_DATABASE_COMMAND_TYPE:
510                 {
511                         SwDBData aData = mpDoc->GetDBData();
512                         if ( rValue >>= aData.nCommandType )
513                                 mpDoc->ChgDBData( aData );
514                 }
515                 break;
516                 case HANDLE_SAVE_VERSION_ON_CLOSE:
517                 {
518                         mpDocSh->SetSaveVersionOnClose( *(sal_Bool*)rValue.getValue() );
519                 }
520                 break;
521         case HANDLE_UPDATE_FROM_TEMPLATE:
522         {
523             mpDocSh->SetQueryLoadTemplate( *(sal_Bool*)rValue.getValue() );
524         }
525         break;
526         case HANDLE_PRINTER_INDEPENDENT_LAYOUT:
527         {
528             sal_Int16 nTmp;
529             rValue >>= nTmp;
530 
531             bool bUseVirDev = true;
532             bool bHiResVirDev = true;
533             if( nTmp == document::PrinterIndependentLayout::DISABLED )
534                 bUseVirDev = false;
535             else if ( nTmp == document::PrinterIndependentLayout::LOW_RESOLUTION )
536                 bHiResVirDev = false;
537             else if ( nTmp != document::PrinterIndependentLayout::HIGH_RESOLUTION )
538                 throw IllegalArgumentException();
539 
540             mpDoc->setReferenceDeviceType( bUseVirDev, bHiResVirDev );
541         }
542         break;
543         case HANDLE_IS_LABEL_DOC :
544         {
545             sal_Bool bSet;
546             if(!(rValue >>= bSet))
547                 throw IllegalArgumentException();
548             mpDoc->set(IDocumentSettingAccess::LABEL_DOCUMENT, bSet);
549         }
550         break;
551         case HANDLE_IS_ADD_FLY_OFFSET:
552         {
553             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
554             mpDoc->set(IDocumentSettingAccess::ADD_FLY_OFFSETS, bTmp);
555         }
556         break;
557         case HANDLE_IS_ADD_EXTERNAL_LEADING:
558         {
559             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
560             mpDoc->set(IDocumentSettingAccess::ADD_EXT_LEADING, bTmp);
561         }
562         break;
563         case HANDLE_OLD_NUMBERING: // #111955#
564         {
565             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
566             mpDoc->set(IDocumentSettingAccess::OLD_NUMBERING, bTmp);
567         }
568         case HANDLE_OUTLINELEVEL_YIELDS_NUMBERING:
569         {
570             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
571             mpDoc->set(IDocumentSettingAccess::OUTLINE_LEVEL_YIELDS_OUTLINE_RULE, bTmp);
572         }
573         break;
574         case HANDLE_ALLOW_PRINTJOB_CANCEL:
575         {
576             sal_Bool bState;
577             if (!(rValue >>= bState))
578                 throw IllegalArgumentException();
579             mpDocSh->Stamp_SetPrintCancelState(bState);
580         }
581         break;
582         case HANDLE_USE_FORMER_LINE_SPACING:
583         {
584             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
585             mpDoc->set(IDocumentSettingAccess::OLD_LINE_SPACING, bTmp);
586         }
587         break;
588         case HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS:
589         {
590             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
591             mpDoc->set(IDocumentSettingAccess::ADD_PARA_SPACING_TO_TABLE_CELLS, bTmp);
592         }
593         break;
594         case HANDLE_USE_FORMER_OBJECT_POSITIONING:
595         {
596             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
597             mpDoc->set(IDocumentSettingAccess::USE_FORMER_OBJECT_POS, bTmp);
598         }
599         break;
600         case HANDLE_USE_FORMER_TEXT_WRAPPING:
601         {
602             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
603             mpDoc->set(IDocumentSettingAccess::USE_FORMER_TEXT_WRAPPING, bTmp);
604         }
605         break;
606         case HANDLE_CHANGES_PASSWORD:
607         {
608             Sequence <sal_Int8> aNew;
609             if(rValue >>= aNew)
610             {
611                 mpDoc->SetRedlinePassword(aNew);
612                 if(aNew.getLength())
613                 {
614                     sal_uInt16 eMode = mpDoc->GetRedlineMode();
615                     eMode = eMode|nsRedlineMode_t::REDLINE_ON;
616                     mpDoc->SetRedlineMode((RedlineMode_t)( eMode ));
617                 }
618             }
619         }
620         break;
621         case HANDLE_CONSIDER_WRAP_ON_OBJPOS:
622         {
623             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
624             mpDoc->set(IDocumentSettingAccess::CONSIDER_WRAP_ON_OBJECT_POSITION, bTmp );
625         }
626         break;
627         case HANDLE_IGNORE_FIRST_LINE_INDENT_IN_NUMBERING:
628         {
629             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
630             mpDoc->set(IDocumentSettingAccess::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING, bTmp);
631         }
632         break;
633         case HANDLE_DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK:
634         {
635             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
636             mpDoc->set(IDocumentSettingAccess::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK, bTmp);
637         }
638         break;
639         case HANDLE_DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT:
640         {
641             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
642             mpDoc->set(IDocumentSettingAccess::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT, bTmp);
643         }
644         break;
645         case HANDLE_TABLE_ROW_KEEP:
646         {
647             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
648             mpDoc->set(IDocumentSettingAccess::TABLE_ROW_KEEP, bTmp);
649         }
650         break;
651         case HANDLE_IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION:
652         {
653             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
654             mpDoc->set(IDocumentSettingAccess::IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION, bTmp);
655         }
656         break;
657         case HANDLE_LOAD_READONLY:
658         {
659             mpDocSh->SetLoadReadonly( *(sal_Bool*)rValue.getValue() );
660         }
661         break;
662         case HANDLE_DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE:
663         {
664             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
665             mpDoc->set(IDocumentSettingAccess::DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE, bTmp);
666         }
667         break;
668         case HANDLE_CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAMES:
669         {
670             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
671             mpDoc->set(IDocumentSettingAccess::CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAME, bTmp);
672         }
673         break;
674         case HANDLE_UNIX_FORCE_ZERO_EXT_LEADING:
675         {
676             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
677             mpDoc->set(IDocumentSettingAccess::UNIX_FORCE_ZERO_EXT_LEADING, bTmp);
678         }
679         break;
680         case HANDLE_USE_OLD_PRINTER_METRICS:
681         {
682             sal_Bool bTmp = *(sal_Bool*)rValue.getValue();
683             mpDoc->set(IDocumentSettingAccess::USE_OLD_PRINTER_METRICS, bTmp);
684         }
685         break;
686 
687         default:
688                         throw UnknownPropertyException();
689         }
690 }
691 
692 void SwXDocumentSettings::_postSetValues ()
693         throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException )
694 {
695     // set printer only once, namely here!
696     if( mpPrinter != NULL )
697         mpDoc->setPrinter( mpPrinter, true, true );
698 
699         mpPrinter = 0;
700         mpDocSh = 0;
701         mpDoc = 0;
702 }
703 
704 void SwXDocumentSettings::_preGetValues ()
705         throw(beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException )
706 {
707         mpDocSh = mpModel->GetDocShell();
708         mpDoc = mpDocSh->GetDoc();
709         if( NULL == mpDoc || NULL == mpDocSh )
710                 throw UnknownPropertyException();
711 }
712 
713 void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInfo, uno::Any & rValue )
714         throw(beans::UnknownPropertyException, lang::WrappedTargetException )
715 {
716         switch( rInfo.mnHandle )
717         {
718                 case HANDLE_FORBIDDEN_CHARS:
719                 {
720                         Reference<XForbiddenCharacters> xRet(*mpModel->GetPropertyHelper(), UNO_QUERY);
721                         rValue <<= xRet;
722                 }
723                 break;
724                 case HANDLE_LINK_UPDATE_MODE:
725                 {
726             rValue <<= static_cast < sal_Int16 > ( mpDoc->getLinkUpdateMode(true) );
727                 }
728                 break;
729                 case HANDLE_FIELD_AUTO_UPDATE:
730                 {
731             SwFldUpdateFlags nFlags = mpDoc->getFieldUpdateFlags(true);
732             BOOL bFieldUpd = (nFlags == AUTOUPD_FIELD_ONLY || nFlags == AUTOUPD_FIELD_AND_CHARTS );
733                         rValue.setValue(&bFieldUpd, ::getBooleanCppuType());
734                 }
735                 break;
736                 case HANDLE_CHART_AUTO_UPDATE:
737                 {
738             SwFldUpdateFlags nFlags = mpDoc->getFieldUpdateFlags(true);
739             BOOL bChartUpd = nFlags == AUTOUPD_FIELD_AND_CHARTS;
740                         rValue.setValue(&bChartUpd, ::getBooleanCppuType());
741                 }
742                 break;
743                 case HANDLE_ADD_PARA_TABLE_SPACING:
744                 {
745                         sal_Bool bParaSpace = mpDoc->get(IDocumentSettingAccess::PARA_SPACE_MAX);
746                         rValue.setValue(&bParaSpace, ::getBooleanCppuType());
747                 }
748                 break;
749                 case HANDLE_ADD_PARA_TABLE_SPACING_AT_START:
750                 {
751                         sal_Bool bParaSpace = mpDoc->get(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES);
752                         rValue.setValue(&bParaSpace, ::getBooleanCppuType());
753                 }
754                 break;
755                 case HANDLE_ALIGN_TAB_STOP_POSITION:
756                 {
757                         sal_Bool bAlignTab = mpDoc->get(IDocumentSettingAccess::TAB_COMPAT);
758                         rValue.setValue(&bAlignTab, ::getBooleanCppuType());
759                 }
760                 break;
761                 case HANDLE_PRINTER_NAME:
762                 {
763             SfxPrinter *pPrinter = mpDoc->getPrinter( sal_False );
764                         rValue <<= pPrinter ? OUString ( pPrinter->GetName()) : OUString();
765                 }
766                 break;
767                 case HANDLE_PRINTER_SETUP:
768                 {
769             SfxPrinter *pPrinter = mpDocSh->GetDoc()->getPrinter( sal_False );
770                         if (pPrinter)
771                         {
772                                 SvMemoryStream aStream;
773                                 pPrinter->Store( aStream );
774                                 aStream.Seek ( STREAM_SEEK_TO_END );
775                                 sal_uInt32 nSize = aStream.Tell();
776                                 aStream.Seek ( STREAM_SEEK_TO_BEGIN );
777                                 Sequence < sal_Int8 > aSequence( nSize );
778                                 aStream.Read ( aSequence.getArray(), nSize );
779                                 rValue <<= aSequence;
780                         }
781                         else
782                         {
783                                 Sequence < sal_Int8 > aSequence ( 0 );
784                                 rValue <<= aSequence;
785                         }
786                 }
787                 break;
788                 case HANDLE_IS_KERN_ASIAN_PUNCTUATION:
789                 {
790                         //sal_Bool bParaSpace = mpDoc->IsKernAsianPunctuation();
791             sal_Bool bParaSpace = mpDoc->get(IDocumentSettingAccess::KERN_ASIAN_PUNCTUATION);
792                         rValue.setValue(&bParaSpace, ::getBooleanCppuType());
793                 }
794                 break;
795