|
[ source navigation ] [ diff markup ] [ identifier search ] [ general search ] |
|||||
|
||||||
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