1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sd.hxx" 30 31 #include <vector> 32 #include <com/sun/star/lang/XServiceInfo.hpp> 33 #include <com/sun/star/beans/XPropertySet.hpp> 34 #include <com/sun/star/beans/XMultiPropertySet.hpp> 35 #include <com/sun/star/i18n/XForbiddenCharacters.hpp> 36 #include <cppuhelper/implbase3.hxx> 37 #include <comphelper/propertysethelper.hxx> 38 #include <comphelper/propertysetinfo.hxx> 39 #include <tools/urlobj.hxx> 40 #include <svx/xtable.hxx> 41 #include <osl/diagnose.h> 42 #include <osl/mutex.hxx> 43 #include <vos/mutex.hxx> 44 #include <vcl/svapp.hxx> 45 46 #include "drawdoc.hxx" 47 #ifndef SVX_LIGHT 48 #ifndef SD_DRAW_DOC_SHELL_HXX 49 #include "DrawDocShell.hxx" 50 #endif 51 #endif 52 #include "unomodel.hxx" 53 54 #ifndef SVX_LIGHT 55 #ifndef _SD_OPTSITEM_HXX 56 #include "optsitem.hxx" 57 #endif 58 #include <sfx2/printer.hxx> 59 #include "sdattr.hxx" 60 #endif 61 #include "../inc/ViewShell.hxx" 62 #include "../inc/FrameView.hxx" 63 #ifndef SVX_LIGHT 64 #ifndef SD_OUTLINER_HXX 65 #include "Outliner.hxx" 66 #endif 67 #else 68 #include <svx/svdoutl.hxx> 69 #endif 70 #include <editeng/editstat.hxx> 71 #include <svx/unoapi.hxx> 72 73 #define MAP_LEN(x) x, sizeof(x)-1 74 75 using namespace ::comphelper; 76 using namespace ::osl; 77 using ::rtl::OUString; 78 using namespace ::cppu; 79 using namespace ::vos; 80 using namespace ::com::sun::star; 81 using namespace ::com::sun::star::uno; 82 using namespace ::com::sun::star::util; 83 using namespace ::com::sun::star::container; 84 using namespace ::com::sun::star::drawing; 85 using namespace ::com::sun::star::lang; 86 using namespace ::com::sun::star::document; 87 using namespace ::com::sun::star::frame; 88 using namespace ::com::sun::star::beans; 89 using namespace ::com::sun::star::i18n; 90 91 namespace sd 92 { 93 class DocumentSettings : public WeakImplHelper3< XPropertySet, XMultiPropertySet, XServiceInfo >, 94 public comphelper::PropertySetHelper 95 { 96 public: 97 DocumentSettings( SdXImpressDocument* pModel ); 98 virtual ~DocumentSettings() throw(); 99 100 // XInterface 101 virtual Any SAL_CALL queryInterface( const Type& aType ) throw (RuntimeException); 102 virtual void SAL_CALL acquire( ) throw (); 103 virtual void SAL_CALL release( ) throw (); 104 105 // XPropertySet 106 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); 107 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 108 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 109 virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 110 virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 111 virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 112 virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 113 114 // XMultiPropertySet 115 // virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); 116 virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 117 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL getPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ) throw(::com::sun::star::uno::RuntimeException); 118 virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 119 virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 120 virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); 121 122 // XServiceInfo 123 virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException); 124 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException); 125 virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException); 126 127 protected: 128 virtual void _setPropertyValues( const comphelper::PropertyMapEntry** ppEntries, const ::com::sun::star::uno::Any* pValues ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ); 129 virtual void _getPropertyValues( const comphelper::PropertyMapEntry** ppEntries, ::com::sun::star::uno::Any* pValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException ); 130 131 private: 132 Reference< XModel > mxModel; 133 SdXImpressDocument* mpModel; 134 }; 135 136 Reference< XInterface > SAL_CALL DocumentSettings_createInstance( SdXImpressDocument* pModel ) 137 throw( Exception ) 138 { 139 DBG_ASSERT( pModel, "I need a model for the DocumentSettings!" ); 140 return (XWeak*)new DocumentSettings( pModel ); 141 } 142 143 enum SdDocumentSettingsPropertyHandles 144 { 145 HANDLE_PRINTDRAWING, HANDLE_PRINTNOTES, HANDLE_PRINTHANDOUT, HANDLE_PRINTOUTLINE, HANDLE_MEASUREUNIT, HANDLE_SCALE_NUM, 146 HANDLE_SCALE_DOM, HANDLE_TABSTOP, HANDLE_PRINTPAGENAME, HANDLE_PRINTDATE, HANDLE_PRINTTIME, 147 HANDLE_PRINTHIDENPAGES, HANDLE_PRINTFITPAGE, HANDLE_PRINTTILEPAGE, HANDLE_PRINTBOOKLET, HANDLE_PRINTBOOKLETFRONT, 148 HANDLE_PRINTBOOKLETBACK, HANDLE_PRINTQUALITY, HANDLE_COLORTABLEURL, HANDLE_DASHTABLEURL, HANDLE_LINEENDTABLEURL, HANDLE_HATCHTABLEURL, 149 HANDLE_GRADIENTTABLEURL, HANDLE_BITMAPTABLEURL, HANDLE_FORBIDDENCHARS, HANDLE_APPLYUSERDATA, HANDLE_PAGENUMFMT, 150 HANDLE_PRINTERNAME, HANDLE_PRINTERJOB, HANDLE_PARAGRAPHSUMMATION, HANDLE_CHARCOMPRESS, HANDLE_ASIANPUNCT, HANDLE_UPDATEFROMTEMPLATE, 151 HANDLE_PRINTER_INDEPENDENT_LAYOUT 152 // --> PB 2004-08-23 #i33095# 153 ,HANDLE_LOAD_READONLY, HANDLE_SAVE_VERSION 154 // <-- 155 ,HANDLE_SLIDESPERHANDOUT, HANDLE_HANDOUTHORIZONTAL 156 }; 157 158 #define MID_PRINTER 1 159 160 PropertySetInfo* createSettingsInfoImpl( sal_Bool bIsDraw ) 161 { 162 static PropertyMapEntry aImpressSettingsInfoMap[] = 163 { 164 { MAP_LEN("IsPrintDrawing"), HANDLE_PRINTDRAWING, &::getBooleanCppuType(), 0, MID_PRINTER }, 165 { MAP_LEN("IsPrintNotes"), HANDLE_PRINTNOTES, &::getBooleanCppuType(), 0, MID_PRINTER }, 166 { MAP_LEN("IsPrintHandout"), HANDLE_PRINTHANDOUT, &::getBooleanCppuType(), 0, MID_PRINTER }, 167 { MAP_LEN("IsPrintOutline"), HANDLE_PRINTOUTLINE, &::getBooleanCppuType(), 0, MID_PRINTER }, 168 { MAP_LEN("SlidesPerHandout"), HANDLE_SLIDESPERHANDOUT, &::getCppuType((const sal_Int16*)0), 0, MID_PRINTER }, 169 { MAP_LEN("HandoutsHorizontal"), HANDLE_HANDOUTHORIZONTAL, &::getBooleanCppuType(), 0, MID_PRINTER }, 170 { NULL, 0, 0, NULL, 0, 0 } 171 }; 172 173 static PropertyMapEntry aDrawSettingsInfoMap[] = 174 { 175 { MAP_LEN("MeasureUnit"), HANDLE_MEASUREUNIT, &::getCppuType((const sal_Int16*)0), 0, 0 }, 176 { MAP_LEN("ScaleNumerator"), HANDLE_SCALE_NUM, &::getCppuType((const sal_Int32*)0), 0, 0 }, 177 { MAP_LEN("ScaleDenominator"), HANDLE_SCALE_DOM, &::getCppuType((const sal_Int32*)0), 0, 0 }, 178 { NULL, 0, 0, NULL, 0, 0 } 179 }; 180 181 static PropertyMapEntry aCommonSettingsInfoMap[] = 182 { 183 { MAP_LEN("DefaultTabStop"), HANDLE_TABSTOP, &::getCppuType((const sal_Int32*)0), 0, 0 }, 184 { MAP_LEN("PrinterName"), HANDLE_PRINTERNAME, &::getCppuType((const OUString*)0), 0, 0 }, 185 { MAP_LEN("PrinterSetup"), HANDLE_PRINTERJOB, &::getCppuType((const uno::Sequence < sal_Int8 > *)0), 0, MID_PRINTER }, 186 #ifndef SVX_LIGHT 187 188 { MAP_LEN("IsPrintPageName"), HANDLE_PRINTPAGENAME, &::getBooleanCppuType(), 0, MID_PRINTER }, 189 { MAP_LEN("IsPrintDate"), HANDLE_PRINTDATE, &::getBooleanCppuType(), 0, MID_PRINTER }, 190 { MAP_LEN("IsPrintTime"), HANDLE_PRINTTIME, &::getBooleanCppuType(), 0, MID_PRINTER }, 191 { MAP_LEN("IsPrintHiddenPages"), HANDLE_PRINTHIDENPAGES, &::getBooleanCppuType(), 0, MID_PRINTER }, 192 { MAP_LEN("IsPrintFitPage"), HANDLE_PRINTFITPAGE, &::getBooleanCppuType(), 0, MID_PRINTER }, 193 { MAP_LEN("IsPrintTilePage"), HANDLE_PRINTTILEPAGE, &::getBooleanCppuType(), 0, MID_PRINTER }, 194 { MAP_LEN("IsPrintBooklet"), HANDLE_PRINTBOOKLET, &::getBooleanCppuType(), 0, MID_PRINTER }, 195 { MAP_LEN("IsPrintBookletFront"), HANDLE_PRINTBOOKLETFRONT, &::getBooleanCppuType(), 0, MID_PRINTER }, 196 { MAP_LEN("IsPrintBookletBack"), HANDLE_PRINTBOOKLETBACK, &::getBooleanCppuType(), 0, MID_PRINTER }, 197 { MAP_LEN("PrintQuality"), HANDLE_PRINTQUALITY, &::getCppuType((const sal_Int32*)0), 0, MID_PRINTER }, 198 #endif 199 { MAP_LEN("ColorTableURL"), HANDLE_COLORTABLEURL, &::getCppuType((const OUString*)0), 0, 0 }, 200 { MAP_LEN("DashTableURL"), HANDLE_DASHTABLEURL, &::getCppuType((const OUString*)0), 0, 0 }, 201 { MAP_LEN("LineEndTableURL"), HANDLE_LINEENDTABLEURL, &::getCppuType((const OUString*)0), 0, 0 }, 202 { MAP_LEN("HatchTableURL"), HANDLE_HATCHTABLEURL, &::getCppuType((const OUString*)0), 0, 0 }, 203 { MAP_LEN("GradientTableURL"), HANDLE_GRADIENTTABLEURL, &::getCppuType((const OUString*)0), 0, 0 }, 204 { MAP_LEN("BitmapTableURL"), HANDLE_BITMAPTABLEURL, &::getCppuType((const OUString*)0), 0, 0 }, 205 206 { MAP_LEN("ForbiddenCharacters"), HANDLE_FORBIDDENCHARS, &::getCppuType((const Reference< XForbiddenCharacters >*)0), 0, 0 }, 207 { MAP_LEN("ApplyUserData"), HANDLE_APPLYUSERDATA, &::getBooleanCppuType(), 0, 0 }, 208 209 { MAP_LEN("PageNumberFormat"), HANDLE_PAGENUMFMT, &::getCppuType((const sal_Int32*)0), 0, 0 }, 210 { MAP_LEN("ParagraphSummation"), HANDLE_PARAGRAPHSUMMATION, &::getBooleanCppuType(), 0, 0 }, 211 { MAP_LEN("CharacterCompressionType"),HANDLE_CHARCOMPRESS, &::getCppuType((sal_Int16*)0), 0, 0 }, 212 { MAP_LEN("IsKernAsianPunctuation"),HANDLE_ASIANPUNCT, &::getBooleanCppuType(), 0, 0 }, 213 { MAP_LEN("UpdateFromTemplate"), HANDLE_UPDATEFROMTEMPLATE, &::getBooleanCppuType(), 0, 0 }, 214 { MAP_LEN("PrinterIndependentLayout"),HANDLE_PRINTER_INDEPENDENT_LAYOUT,&::getCppuType((const sal_Int16*)0), 0, 0 }, 215 // --> PB 2004-08-23 #i33095# 216 { MAP_LEN("LoadReadonly"), HANDLE_LOAD_READONLY, &::getBooleanCppuType(), 0, 0 }, 217 { MAP_LEN("SaveVersionOnClose"), HANDLE_SAVE_VERSION, &::getBooleanCppuType(), 0, 0 }, 218 // <-- 219 { NULL, 0, 0, NULL, 0, 0 } 220 }; 221 222 PropertySetInfo* pInfo = new PropertySetInfo( aCommonSettingsInfoMap ); 223 pInfo->add( bIsDraw ? aDrawSettingsInfoMap : aImpressSettingsInfoMap ); 224 225 return pInfo; 226 } 227 } 228 229 using namespace ::sd; 230 231 DocumentSettings::DocumentSettings( SdXImpressDocument* pModel ) 232 : PropertySetHelper( createSettingsInfoImpl( !pModel->IsImpressDocument() ) ), 233 mxModel( pModel ), 234 mpModel( pModel ) 235 { 236 } 237 238 DocumentSettings::~DocumentSettings() throw() 239 { 240 } 241 242 void DocumentSettings::_setPropertyValues( const PropertyMapEntry** ppEntries, const Any* pValues ) throw(UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException ) 243 { 244 OGuard aGuard( Application::GetSolarMutex() ); 245 246 SdDrawDocument* pDoc = mpModel->GetDoc(); 247 ::sd::DrawDocShell* pDocSh = mpModel->GetDocShell(); 248 if( NULL == pDoc || NULL == pDocSh ) 249 throw UnknownPropertyException(); 250 251 sal_Bool bOk, bChanged = sal_False, bValue = sal_False, bOptionsChanged = false; 252 253 SdOptionsPrintItem aOptionsPrintItem( ATTR_OPTIONS_PRINT ); 254 255 SfxPrinter* pPrinter = pDocSh->GetPrinter( sal_False ); 256 if( pPrinter ) 257 { 258 SdOptionsPrintItem* pPrinterOptions = NULL; 259 if(pPrinter->GetOptions().GetItemState( ATTR_OPTIONS_PRINT, sal_False, (const SfxPoolItem**) &pPrinterOptions) == SFX_ITEM_SET) 260 aOptionsPrintItem.GetOptionsPrint() = pPrinterOptions->GetOptionsPrint(); 261 } 262 else 263 { 264 aOptionsPrintItem.SetOptions( SD_MOD()->GetSdOptions(pDoc->GetDocumentType()) ); 265 } 266 SdOptionsPrint& aPrintOpts = aOptionsPrintItem.GetOptionsPrint(); 267 268 for( ; *ppEntries; ppEntries++, pValues++ ) 269 { 270 bOk = sal_False; 271 272 switch( (*ppEntries)->mnHandle ) 273 { 274 case HANDLE_COLORTABLEURL: 275 { 276 OUString aURLString; 277 if( *pValues >>= aURLString ) 278 { 279 INetURLObject aURL( aURLString ); 280 INetURLObject aPathURL( aURL ); 281 282 aPathURL.removeSegment(); 283 aPathURL.removeFinalSlash(); 284 285 XColorTable* pColTab = new XColorTable( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); 286 pColTab->SetName( aURL.getName() ); 287 if( pColTab->Load() ) 288 { 289 pDoc->SetColorTable( pColTab ); 290 bOk = sal_True; 291 bChanged = sal_True; 292 } 293 } 294 } 295 break; 296 case HANDLE_DASHTABLEURL: 297 { 298 OUString aURLString; 299 if( *pValues >>= aURLString ) 300 { 301 INetURLObject aURL( aURLString ); 302 INetURLObject aPathURL( aURL ); 303 304 aPathURL.removeSegment(); 305 aPathURL.removeFinalSlash(); 306 307 XDashList* pDashTab = new XDashList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); 308 pDashTab->SetName( aURL.getName() ); 309 if( pDashTab->Load() ) 310 { 311 pDoc->SetDashList( pDashTab ); 312 bOk = sal_True; 313 bChanged = sal_True; 314 } 315 } 316 } 317 break; 318 case HANDLE_LINEENDTABLEURL: 319 { 320 OUString aURLString; 321 if( *pValues >>= aURLString ) 322 { 323 INetURLObject aURL( aURLString ); 324 INetURLObject aPathURL( aURL ); 325 326 aPathURL.removeSegment(); 327 aPathURL.removeFinalSlash(); 328 329 XLineEndList* pTab = new XLineEndList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); 330 pTab->SetName( aURL.getName() ); 331 if( pTab->Load() ) 332 { 333 pDoc->SetLineEndList( pTab ); 334 bOk = sal_True; 335 bChanged = sal_True; 336 } 337 } 338 } 339 break; 340 case HANDLE_HATCHTABLEURL: 341 { 342 OUString aURLString; 343 if( *pValues >>= aURLString ) 344 { 345 INetURLObject aURL( aURLString ); 346 INetURLObject aPathURL( aURL ); 347 348 aPathURL.removeSegment(); 349 aPathURL.removeFinalSlash(); 350 351 XHatchList* pTab = new XHatchList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); 352 pTab->SetName( aURL.getName() ); 353 if( pTab->Load() ) 354 { 355 pDoc->SetHatchList( pTab ); 356 bOk = sal_True; 357 bChanged = sal_True; 358 } 359 } 360 } 361 break; 362 case HANDLE_GRADIENTTABLEURL: 363 { 364 OUString aURLString; 365 if( *pValues >>= aURLString ) 366 { 367 INetURLObject aURL( aURLString ); 368 INetURLObject aPathURL( aURL ); 369 370 aPathURL.removeSegment(); 371 aPathURL.removeFinalSlash(); 372 373 XGradientList* pTab = new XGradientList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); 374 pTab->SetName( aURL.getName() ); 375 if( pTab->Load() ) 376 { 377 pDoc->SetGradientList( pTab ); 378 bOk = sal_True; 379 bChanged = sal_True; 380 } 381 } 382 } 383 break; 384 case HANDLE_BITMAPTABLEURL: 385 { 386 OUString aURLString; 387 if( *pValues >>= aURLString ) 388 { 389 INetURLObject aURL( aURLString ); 390 INetURLObject aPathURL( aURL ); 391 392 aPathURL.removeSegment(); 393 aPathURL.removeFinalSlash(); 394 395 XBitmapList* pTab = new XBitmapList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), (XOutdevItemPool*)&pDoc->GetPool() ); 396 pTab->SetName( aURL.getName() ); 397 if( pTab->Load() ) 398 { 399 pDoc->SetBitmapList( pTab ); 400 bOk = sal_True; 401 bChanged = sal_True; 402 } 403 } 404 } 405 break; 406 case HANDLE_FORBIDDENCHARS: 407 { 408 bOk = sal_True; 409 } 410 break; 411 case HANDLE_APPLYUSERDATA: 412 { 413 sal_Bool bApplyUserData = sal_False; 414 if( *pValues >>= bApplyUserData ) 415 { 416 bChanged = ( bApplyUserData != pDocSh->IsUseUserData() ); 417 pDocSh->SetUseUserData( bApplyUserData ); 418 bOk = sal_True; 419 } 420 } 421 break; 422 case HANDLE_PRINTDRAWING: 423 if( *pValues >>= bValue ) 424 { 425 if( aPrintOpts.IsDraw() != bValue ) 426 { 427 aPrintOpts.SetDraw( bValue ); 428 bOptionsChanged = true; 429 } 430 431 bOk = sal_True; 432 } 433 break; 434 case HANDLE_PRINTNOTES: 435 if( *pValues >>= bValue ) 436 { 437 if( aPrintOpts.IsNotes() != bValue ) 438 { 439 aPrintOpts.SetNotes( bValue ); 440 bOptionsChanged = true; 441 } 442 443 bOk = sal_True; 444 } 445 break; 446 case HANDLE_PRINTHANDOUT: 447 if( *pValues >>= bValue ) 448 { 449 if( aPrintOpts.IsHandout() != bValue) 450 { 451 aPrintOpts.SetHandout( bValue ); 452 bOptionsChanged = true; 453 } 454 455 bOk = sal_True; 456 } 457 break; 458 case HANDLE_PRINTOUTLINE: 459 if( *pValues >>= bValue ) 460 { 461 if( aPrintOpts.IsOutline() != bValue) 462 { 463 aPrintOpts.SetOutline( bValue ); 464 bOptionsChanged = true; 465 } 466 bOk = sal_True; 467 } 468 break; 469 case HANDLE_SLIDESPERHANDOUT: 470 { 471 sal_Int16 nValue = 0; 472 if( (*pValues >>= nValue) && (nValue >= 1) && (nValue <= 9) ) 473 { 474 if( static_cast<sal_Int16>( aPrintOpts.GetHandoutPages() ) != nValue ) 475 { 476 aPrintOpts.SetHandoutPages( static_cast< sal_uInt16 >( nValue ) ); 477 bOptionsChanged = true; 478 } 479 bOk = sal_True; 480 } 481 } 482 break; 483 case HANDLE_HANDOUTHORIZONTAL: 484 if( *pValues >>= bValue ) 485 { 486 if( aPrintOpts.IsHandoutHorizontal() != bValue ) 487 { 488 aPrintOpts.SetHandoutHorizontal( bValue ); 489 bOptionsChanged = true; 490 } 491 bOk = sal_True; 492 } 493 break; 494 495 case HANDLE_PRINTPAGENAME: 496 if( *pValues >>= bValue ) 497 { 498 if( aPrintOpts.IsPagename() != bValue) 499 { 500 aPrintOpts.SetPagename( bValue ); 501 bOptionsChanged = true; 502 } 503 bOk = sal_True; 504 } 505 break; 506 case HANDLE_PRINTDATE: 507 if( *pValues >>= bValue ) 508 { 509 if( aPrintOpts.IsDate() != bValue) 510 { 511 aPrintOpts.SetDate( bValue ); 512 bOptionsChanged = true; 513 } 514 bOk = sal_True; 515 } 516 break; 517 case HANDLE_PRINTTIME: 518 if( *pValues >>= bValue ) 519 { 520 if( aPrintOpts.IsDate() != bValue) 521 { 522 aPrintOpts.SetTime( bValue ); 523 bOptionsChanged = true; 524 } 525 bOk = sal_True; 526 } 527 break; 528 case HANDLE_PRINTHIDENPAGES: 529 if( *pValues >>= bValue ) 530 { 531 if( aPrintOpts.IsHiddenPages() != bValue) 532 { 533 aPrintOpts.SetHiddenPages( bValue ); 534 bOptionsChanged = true; 535 } 536 bOk = sal_True; 537 } 538 break; 539 case HANDLE_PRINTFITPAGE: 540 if( *pValues >>= bValue ) 541 { 542 if( aPrintOpts.IsPagesize() != bValue) 543 { 544 aPrintOpts.SetPagesize( bValue ); 545 bOptionsChanged = true; 546 } 547 bOk = sal_True; 548 } 549 break; 550 case HANDLE_PRINTTILEPAGE: 551 if( *pValues >>= bValue ) 552 { 553 if( aPrintOpts.IsPagetile() != bValue) 554 { 555 aPrintOpts.SetPagetile( bValue ); 556 bOptionsChanged = true; 557 } 558 bOk = sal_True; 559 } 560 break; 561 case HANDLE_PRINTBOOKLET: 562 if( *pValues >>= bValue ) 563 { 564 if( aPrintOpts.IsBooklet() != bValue) 565 { 566 aPrintOpts.SetBooklet( bValue ); 567 bOptionsChanged = true; 568 } 569 bOk = sal_True; 570 } 571 break; 572 case HANDLE_PRINTBOOKLETFRONT: 573 if( *pValues >>= bValue ) 574 { 575 if( aPrintOpts.IsFrontPage() != bValue) 576 { 577 aPrintOpts.SetFrontPage( bValue ); 578 bOptionsChanged = true; 579 } 580 bOk = sal_True; 581 } 582 break; 583 case HANDLE_PRINTBOOKLETBACK: 584 if( *pValues >>= bValue ) 585 { 586 if( aPrintOpts.IsBackPage() != bValue) 587 { 588 aPrintOpts.SetBackPage( bValue ); 589 bOptionsChanged = true; 590 } 591 bOk = sal_True; 592 } 593 break; 594 case HANDLE_PRINTQUALITY: 595 { 596 sal_Int32 nValue = 0; 597 if( *pValues >>= nValue ) 598 { 599 if( aPrintOpts.GetOutputQuality() != nValue) 600 { 601 aPrintOpts.SetOutputQuality( (sal_uInt16)nValue ); 602 bOptionsChanged = true; 603 } 604 bOk = sal_True; 605 } 606 } 607 break; 608 case HANDLE_MEASUREUNIT: 609 { 610 sal_Int16 nValue = 0; 611 if( *pValues >>= nValue ) 612 { 613 short nFieldUnit; 614 if( SvxMeasureUnitToFieldUnit( nValue, nFieldUnit ) ) 615 { 616 pDoc->SetUIUnit((FieldUnit)nFieldUnit ); 617 bOk = sal_True; 618 } 619 } 620 } 621 break; 622 case HANDLE_SCALE_NUM: 623 { 624 sal_Int32 nValue = 0; 625 if( *pValues >>= nValue ) 626 { 627 Fraction aFract( nValue, pDoc->GetUIScale().GetDenominator() ); 628 pDoc->SetUIScale( aFract ); 629 bOk = sal_True; 630 bChanged = sal_True; 631 } 632 } 633 break; 634 case HANDLE_SCALE_DOM: 635 { 636 sal_Int32 nValue = 0; 637 if( *pValues >>= nValue ) 638 { 639 Fraction aFract( pDoc->GetUIScale().GetNumerator(), nValue ); 640 pDoc->SetUIScale( aFract ); 641 bOk = sal_True; 642 bChanged = sal_True; 643 } 644 } 645 break; 646 647 case HANDLE_TABSTOP: 648 { 649 sal_Int32 nValue = 0; 650 if( (*pValues >>= nValue) && (nValue >= 0) ) 651 { 652 pDoc->SetDefaultTabulator((sal_uInt16)nValue); 653 bOk = sal_True; 654 bChanged = sal_True; 655 } 656 } 657 break; 658 case HANDLE_PAGENUMFMT: 659 { 660 sal_Int32 nValue = 0; 661 if( (*pValues >>= nValue ) && (nValue >= SVX_CHARS_UPPER_LETTER ) && (nValue <= SVX_PAGEDESC) ) 662 { 663 pDoc->SetPageNumType((SvxNumType)nValue); 664 bOk = sal_True; 665 bChanged = sal_True; 666 } 667 } 668 break; 669 case HANDLE_PRINTERNAME: 670 { 671 OUString aPrinterName; 672 if( *pValues >>= aPrinterName ) 673 { 674 bOk = sal_True; 675 if( aPrinterName.getLength() && pDocSh->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) 676 { 677 SfxPrinter *pTempPrinter = pDocSh->GetPrinter( sal_True ); 678 if (pTempPrinter) 679 { 680 SfxPrinter *pNewPrinter = new SfxPrinter( pTempPrinter->GetOptions().Clone(), aPrinterName ); 681 pDocSh->SetPrinter( pNewPrinter ); 682 } 683 } 684 } 685 } 686 break; 687 case HANDLE_PRINTERJOB: 688 { 689 Sequence < sal_Int8 > aSequence; 690 if ( *pValues >>= aSequence ) 691 { 692 bOk = sal_True; 693 sal_uInt32 nSize = aSequence.getLength(); 694 if( nSize ) 695 { 696 SvMemoryStream aStream (aSequence.getArray(), nSize, STREAM_READ ); 697 aStream.Seek ( STREAM_SEEK_TO_BEGIN ); 698 SfxItemSet* pItemSet; 699 700 if( pPrinter ) 701 { 702 pItemSet = pPrinter->GetOptions().Clone(); 703 } 704 else 705 { 706 pItemSet = new SfxItemSet(pDoc->GetPool(), 707 SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN, 708 SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC, 709 ATTR_OPTIONS_PRINT, ATTR_OPTIONS_PRINT, 710 0 ); 711 } 712 713 pPrinter = SfxPrinter::Create ( aStream, pItemSet ); 714 715 MapMode aMM (pPrinter->GetMapMode()); 716 aMM.SetMapUnit(MAP_100TH_MM); 717 pPrinter->SetMapMode(aMM); 718 719 pDocSh->SetPrinter( pPrinter ); 720 721 pPrinter = NULL; 722 } 723 } 724 } 725 break; 726 727 case HANDLE_PARAGRAPHSUMMATION : 728 { 729 sal_Bool bIsSummationOfParagraphs = sal_False; 730 if ( *pValues >>= bIsSummationOfParagraphs ) 731 { 732 bOk = sal_True; 733 bChanged = sal_True; 734 if ( pDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS ) 735 { 736 sal_uInt32 nSum = bIsSummationOfParagraphs ? EE_CNTRL_ULSPACESUMMATION : 0; 737 sal_uInt32 nCntrl; 738 739 pDoc->SetSummationOfParagraphs( bIsSummationOfParagraphs ); 740 SdDrawDocument* pDocument = pDocSh->GetDoc(); 741 SdrOutliner& rOutl = pDocument->GetDrawOutliner( sal_False ); 742 nCntrl = rOutl.GetControlWord() &~ EE_CNTRL_ULSPACESUMMATION; 743 rOutl.SetControlWord( nCntrl | nSum ); 744 ::sd::Outliner* pOutl = pDocument->GetOutliner( sal_False ); 745 if( pOutl ) 746 { 747 nCntrl = pOutl->GetControlWord() &~ EE_CNTRL_ULSPACESUMMATION; 748 pOutl->SetControlWord( nCntrl | nSum ); 749 } 750 pOutl = pDocument->GetInternalOutliner( sal_False ); 751 if( pOutl ) 752 { 753 nCntrl = pOutl->GetControlWord() &~ EE_CNTRL_ULSPACESUMMATION; 754 pOutl->SetControlWord( nCntrl | nSum ); 755 } 756 } 757 } 758 } 759 break; 760 761 case HANDLE_CHARCOMPRESS: 762 { 763 sal_Int16 nCharCompressType = 0; 764 if( *pValues >>= nCharCompressType ) 765 { 766 bOk = sal_True; 767 768 pDoc->SetCharCompressType( (sal_uInt16)nCharCompressType ); 769 SdDrawDocument* pDocument = pDocSh->GetDoc(); 770 SdrOutliner& rOutl = pDocument->GetDrawOutliner( sal_False ); 771 rOutl.SetAsianCompressionMode( (sal_uInt16)nCharCompressType ); 772 ::sd::Outliner* pOutl = pDocument->GetOutliner( sal_False ); 773 if( pOutl ) 774 { 775 pOutl->SetAsianCompressionMode( (sal_uInt16)nCharCompressType ); 776 } 777 pOutl = pDocument->GetInternalOutliner( sal_False ); 778 if( pOutl ) 779 { 780 pOutl->SetAsianCompressionMode( (sal_uInt16)nCharCompressType ); 781 } 782 } 783 break; 784 785 } 786 case HANDLE_ASIANPUNCT: 787 { 788 sal_Bool bAsianPunct = sal_False; 789 if( *pValues >>= bAsianPunct ) 790 { 791 bOk = sal_True; 792 793 pDoc->SetKernAsianPunctuation( bAsianPunct ); 794 SdDrawDocument* pDocument = pDocSh->GetDoc(); 795 SdrOutliner& rOutl = pDocument->GetDrawOutliner( sal_False ); 796 rOutl.SetKernAsianPunctuation( bAsianPunct ); 797 ::sd::Outliner* pOutl = pDocument->GetOutliner( sal_False ); 798 if( pOutl ) 799 { 800 pOutl->SetKernAsianPunctuation( bAsianPunct ); 801 } 802 pOutl = pDocument->GetInternalOutliner( sal_False ); 803 if( pOutl ) 804 { 805 pOutl->SetKernAsianPunctuation( bAsianPunct ); 806 } 807 } 808 break; 809 810 } 811 case HANDLE_UPDATEFROMTEMPLATE: 812 { 813 sal_Bool value = sal_False; 814 if( *pValues >>= value ) 815 { 816 bChanged = ( value != pDocSh->IsQueryLoadTemplate() ); 817 pDocSh->SetQueryLoadTemplate( value ); 818 bOk = sal_True; 819 } 820 } 821 break; 822 823 case HANDLE_PRINTER_INDEPENDENT_LAYOUT: 824 { 825 // Just propagate the new printer independent layout mode to 826 // the document and determine it really differs from the old 827 // one. 828 sal_Int16 nOldValue = 829 (sal_Int16)pDoc->GetPrinterIndependentLayout (); 830 sal_Int16 nValue = 0; 831 if (*pValues >>= nValue) 832 { 833 pDoc->SetPrinterIndependentLayout (nValue); 834 bChanged = (nValue != nOldValue); 835 bOk = sal_True; 836 } 837 } 838 break; 839 840 // --> PB 2004-08-23 #i33095# 841 case HANDLE_LOAD_READONLY: 842 { 843 sal_Bool bNewValue = sal_False; 844 if ( *pValues >>= bNewValue ) 845 { 846 bChanged = ( pDocSh->IsLoadReadonly() != bNewValue ); 847 pDocSh->SetLoadReadonly( bNewValue ); 848 bOk = sal_True; 849 } 850 } 851 break; 852 // <-- 853 854 case HANDLE_SAVE_VERSION: 855 { 856 sal_Bool bNewValue = sal_False; 857 if ( *pValues >>= bNewValue ) 858 { 859 bChanged = ( pDocSh->IsSaveVersionOnClose() != bNewValue ); 860 pDocSh->SetSaveVersionOnClose( bNewValue ); 861 bOk = sal_True; 862 } 863 } 864 break; 865 866 default: 867 throw UnknownPropertyException(); 868 } 869 870 if( !bOk ) 871 throw IllegalArgumentException(); 872 } 873 874 if( bOptionsChanged ) 875 { 876 if( !pPrinter ) 877 pPrinter = pDocSh->GetPrinter( sal_True ); 878 SfxItemSet aNewOptions( pPrinter->GetOptions() ); 879 aNewOptions.Put( aOptionsPrintItem ); 880 pPrinter->SetOptions( aNewOptions ); 881 } 882 883 if( bChanged || bOptionsChanged ) 884 mpModel->SetModified( sal_True ); 885 } 886 887 void DocumentSettings::_getPropertyValues( const PropertyMapEntry** ppEntries, Any* pValue ) throw(UnknownPropertyException, WrappedTargetException ) 888 { 889 OGuard aGuard( Application::GetSolarMutex() ); 890 891 SdDrawDocument* pDoc = mpModel->GetDoc(); 892 ::sd::DrawDocShell* pDocSh = mpModel->GetDocShell(); 893 if( NULL == pDoc || NULL == pDocSh ) 894 throw UnknownPropertyException(); 895 896 SdOptionsPrintItem aOptionsPrintItem( ATTR_OPTIONS_PRINT ); 897 898 SfxPrinter* pPrinter = pDocSh->GetPrinter( sal_False ); 899 if( pPrinter ) 900 { 901 SdOptionsPrintItem* pPrinterOptions = NULL; 902 if(pPrinter->GetOptions().GetItemState( ATTR_OPTIONS_PRINT, sal_False, (const SfxPoolItem**) &pPrinterOptions) == SFX_ITEM_SET) 903 aOptionsPrintItem.GetOptionsPrint() = pPrinterOptions->GetOptionsPrint(); 904 } 905 else 906 { 907 aOptionsPrintItem.SetOptions( SD_MOD()->GetSdOptions(pDoc->GetDocumentType()) ); 908 } 909 SdOptionsPrint& aPrintOpts = aOptionsPrintItem.GetOptionsPrint(); 910 911 for( ; *ppEntries; ppEntries++, pValue++ ) 912 { 913 switch( (*ppEntries)->mnHandle ) 914 { 915 case HANDLE_COLORTABLEURL: 916 { 917 INetURLObject aPathURL( pDoc->GetColorTable()->GetPath() ); 918 aPathURL.insertName( pDoc->GetColorTable()->GetName() ); 919 String aExt( RTL_CONSTASCII_USTRINGPARAM("soc") ); 920 aPathURL.setExtension( aExt ); 921 OUString aPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); 922 *pValue <<= aPath; 923 } 924 break; 925 case HANDLE_DASHTABLEURL: 926 { 927 INetURLObject aPathURL( pDoc->GetDashList()->GetPath() ); 928 aPathURL.insertName( pDoc->GetDashList()->GetName() ); 929 String aExt( RTL_CONSTASCII_USTRINGPARAM("sod") ); 930 aPathURL.setExtension( aExt ); 931 OUString aPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); 932 *pValue <<= aPath; 933 } 934 break; 935 case HANDLE_LINEENDTABLEURL: 936 { 937 INetURLObject aPathURL( pDoc->GetLineEndList()->GetPath() ); 938 aPathURL.insertName( pDoc->GetLineEndList()->GetName() ); 939 String aExt( RTL_CONSTASCII_USTRINGPARAM("soe") ); 940 aPathURL.setExtension( aExt ); 941 OUString aPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); 942 *pValue <<= aPath; 943 } 944 break; 945 case HANDLE_HATCHTABLEURL: 946 { 947 INetURLObject aPathURL( pDoc->GetHatchList()->GetPath() ); 948 aPathURL.insertName( pDoc->GetHatchList()->GetName() ); 949 String aExt( RTL_CONSTASCII_USTRINGPARAM("soh") ); 950 aPathURL.setExtension( aExt ); 951 OUString aPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); 952 *pValue <<= aPath; 953 } 954 break; 955 case HANDLE_GRADIENTTABLEURL: 956 { 957 INetURLObject aPathURL( pDoc->GetGradientList()->GetPath() ); 958 aPathURL.insertName( pDoc->GetGradientList()->GetName() ); 959 String aExt( RTL_CONSTASCII_USTRINGPARAM("sog") ); 960 aPathURL.setExtension( aExt ); 961 OUString aPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); 962 *pValue <<= aPath; 963 } 964 break; 965 case HANDLE_BITMAPTABLEURL: 966 { 967 INetURLObject aPathURL( pDoc->GetBitmapList()->GetPath() ); 968 aPathURL.insertName( pDoc->GetBitmapList()->GetName() ); 969 String aExt( RTL_CONSTASCII_USTRINGPARAM("sob") ); 970 aPathURL.setExtension( aExt ); 971 OUString aPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); 972 *pValue <<= aPath; 973 } 974 break; 975 case HANDLE_FORBIDDENCHARS: 976 *pValue <<= mpModel->getForbiddenCharsTable(); 977 break; 978 979 case HANDLE_APPLYUSERDATA: 980 *pValue <<= pDocSh->IsUseUserData(); 981 break; 982 983 case HANDLE_PRINTDRAWING: 984 *pValue <<= (sal_Bool)aPrintOpts.IsDraw(); 985 break; 986 case HANDLE_PRINTNOTES: 987 *pValue <<= (sal_Bool)aPrintOpts.IsNotes(); 988 break; 989 case HANDLE_PRINTHANDOUT: 990 *pValue <<= (sal_Bool)aPrintOpts.IsHandout(); 991 break; 992 case HANDLE_PRINTOUTLINE: 993 *pValue <<= (sal_Bool)aPrintOpts.IsOutline(); 994 break; 995 case HANDLE_SLIDESPERHANDOUT: 996 *pValue <<= (sal_Int16)aPrintOpts.GetHandoutPages(); 997 break; 998 case HANDLE_HANDOUTHORIZONTAL: 999 *pValue <<= (sal_Bool)aPrintOpts.IsHandoutHorizontal(); 1000 break; 1001 case HANDLE_PRINTPAGENAME: 1002 *pValue <<= (sal_Bool)aPrintOpts.IsPagename(); 1003 break; 1004 case HANDLE_PRINTDATE: 1005 *pValue <<= (sal_Bool)aPrintOpts.IsDate(); 1006 break; 1007 case HANDLE_PRINTTIME: 1008 *pValue <<= (sal_Bool)aPrintOpts.IsTime(); 1009 break; 1010 case HANDLE_PRINTHIDENPAGES: 1011 *pValue <<= (sal_Bool)aPrintOpts.IsHiddenPages(); 1012 break; 1013 case HANDLE_PRINTFITPAGE: 1014 *pValue <<= (sal_Bool)aPrintOpts.IsPagesize(); 1015 break; 1016 case HANDLE_PRINTTILEPAGE: 1017 *pValue <<= (sal_Bool)aPrintOpts.IsPagetile(); 1018 break; 1019 case HANDLE_PRINTBOOKLET: 1020 *pValue <<= (sal_Bool)aPrintOpts.IsBooklet(); 1021 break; 1022 case HANDLE_PRINTBOOKLETFRONT: 1023 *pValue <<= (sal_Bool)aPrintOpts.IsFrontPage(); 1024 break; 1025 case HANDLE_PRINTBOOKLETBACK: 1026 *pValue <<= (sal_Bool)aPrintOpts.IsBackPage(); 1027 break; 1028 case HANDLE_PRINTQUALITY: 1029 *pValue <<= (sal_Int32)aPrintOpts.GetOutputQuality(); 1030 break; 1031 case HANDLE_MEASUREUNIT: 1032 { 1033 short nMeasure; 1034 SvxFieldUnitToMeasureUnit( (const short)pDoc->GetUIUnit(), nMeasure ); 1035 *pValue <<= (sal_Int16)nMeasure; 1036 } 1037 break; 1038 case HANDLE_SCALE_NUM: 1039 *pValue <<= (sal_Int32)pDoc->GetUIScale().GetNumerator(); 1040 break; 1041 case HANDLE_SCALE_DOM: 1042 *pValue <<= (sal_Int32)pDoc->GetUIScale().GetDenominator(); 1043 break; 1044 case HANDLE_TABSTOP: 1045 *pValue <<= (sal_Int32)pDoc->GetDefaultTabulator(); 1046 break; 1047 case HANDLE_PAGENUMFMT: 1048 *pValue <<= (sal_Int32)pDoc->GetPageNumType(); 1049 break; 1050 case HANDLE_PRINTERNAME: 1051 { 1052 SfxPrinter *pTempPrinter = pDocSh->GetPrinter( sal_False ); 1053 *pValue <<= pTempPrinter ? OUString ( pTempPrinter->GetName()) : OUString(); 1054 } 1055 break; 1056 case HANDLE_PRINTERJOB: 1057 { 1058 SfxPrinter *pTempPrinter = pDocSh->GetPrinter( sal_False ); 1059 if (pTempPrinter) 1060 { 1061 SvMemoryStream aStream; 1062 pTempPrinter->Store( aStream ); 1063 aStream.Seek ( STREAM_SEEK_TO_END ); 1064 sal_uInt32 nSize = aStream.Tell(); 1065 aStream.Seek ( STREAM_SEEK_TO_BEGIN ); 1066 Sequence < sal_Int8 > aSequence ( nSize ); 1067 memcpy ( aSequence.getArray(), aStream.GetData(), nSize ); 1068 *pValue <<= aSequence; 1069 } 1070 else 1071 { 1072 Sequence < sal_Int8 > aSequence; 1073 *pValue <<= aSequence; 1074 } 1075 } 1076 break; 1077 1078 case HANDLE_PARAGRAPHSUMMATION : 1079 { 1080 sal_Bool bIsSummationOfParagraphs = pDoc->IsSummationOfParagraphs(); 1081 *pValue <<= bIsSummationOfParagraphs; 1082 } 1083 break; 1084 1085 case HANDLE_CHARCOMPRESS: 1086 { 1087 *pValue <<= (sal_Int16)pDoc->GetCharCompressType(); 1088 break; 1089 } 1090 1091 case HANDLE_ASIANPUNCT: 1092 { 1093 *pValue <<= (sal_Bool)pDoc->IsKernAsianPunctuation(); 1094 break; 1095 } 1096 1097 case HANDLE_UPDATEFROMTEMPLATE: 1098 { 1099 *pValue <<= pDocSh->IsQueryLoadTemplate(); 1100 } 1101 break; 1102 1103 case HANDLE_PRINTER_INDEPENDENT_LAYOUT: 1104 { 1105 sal_Int16 nPrinterIndependentLayout = 1106 (sal_Int16)pDoc->GetPrinterIndependentLayout(); 1107 *pValue <<= nPrinterIndependentLayout; 1108 } 1109 break; 1110 1111 // --> PB 2004-08-23 #i33095# 1112 case HANDLE_LOAD_READONLY: 1113 { 1114 *pValue <<= pDocSh->IsLoadReadonly(); 1115 } 1116 break; 1117 // <-- 1118 1119 case HANDLE_SAVE_VERSION: 1120 { 1121 *pValue <<= pDocSh->IsSaveVersionOnClose(); 1122 } 1123 break; 1124 1125 default: 1126 throw UnknownPropertyException(); 1127 } 1128 } 1129 } 1130 1131 // XInterface 1132 Any SAL_CALL DocumentSettings::queryInterface( const Type& aType ) throw (RuntimeException) 1133 { 1134 return WeakImplHelper3< XPropertySet, XMultiPropertySet, XServiceInfo >::queryInterface( aType ); 1135 } 1136 1137 void SAL_CALL DocumentSettings::acquire( ) throw () 1138 { 1139 WeakImplHelper3< XPropertySet, XMultiPropertySet, XServiceInfo >::acquire(); 1140 } 1141 1142 void SAL_CALL DocumentSettings::release( ) throw () 1143 { 1144 WeakImplHelper3< XPropertySet, XMultiPropertySet, XServiceInfo >::release(); 1145 } 1146 1147 1148 // XPropertySet 1149 Reference< XPropertySetInfo > SAL_CALL DocumentSettings::getPropertySetInfo( ) throw(RuntimeException) 1150 { 1151 return PropertySetHelper::getPropertySetInfo(); 1152 } 1153 1154 void SAL_CALL DocumentSettings::setPropertyValue( const OUString& aPropertyName, const Any& aValue ) throw(UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) 1155 { 1156 PropertySetHelper::setPropertyValue( aPropertyName, aValue ); 1157 } 1158 1159 Any SAL_CALL DocumentSettings::getPropertyValue( const OUString& PropertyName ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 1160 { 1161 return PropertySetHelper::getPropertyValue( PropertyName ); 1162 } 1163 1164 void SAL_CALL DocumentSettings::addPropertyChangeListener( const OUString& aPropertyName, const Reference< XPropertyChangeListener >& xListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 1165 { 1166 PropertySetHelper::addPropertyChangeListener( aPropertyName, xListener ); 1167 } 1168 1169 void SAL_CALL DocumentSettings::removePropertyChangeListener( const OUString& aPropertyName, const Reference< XPropertyChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 1170 { 1171 PropertySetHelper::removePropertyChangeListener( aPropertyName, aListener ); 1172 } 1173 1174 void SAL_CALL DocumentSettings::addVetoableChangeListener( const OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 1175 { 1176 PropertySetHelper::addVetoableChangeListener( PropertyName, aListener ); 1177 } 1178 1179 void SAL_CALL DocumentSettings::removeVetoableChangeListener( const OUString& PropertyName, const Reference< XVetoableChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException) 1180 { 1181 PropertySetHelper::removeVetoableChangeListener( PropertyName, aListener ); 1182 } 1183 1184 // XMultiPropertySet 1185 void SAL_CALL DocumentSettings::setPropertyValues( const Sequence< OUString >& aPropertyNames, const Sequence< Any >& aValues ) throw(PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) 1186 { 1187 PropertySetHelper::setPropertyValues( aPropertyNames, aValues ); 1188 } 1189 1190 Sequence< Any > SAL_CALL DocumentSettings::getPropertyValues( const Sequence< OUString >& aPropertyNames ) throw(RuntimeException) 1191 { 1192 return PropertySetHelper::getPropertyValues( aPropertyNames ); 1193 } 1194 1195 void SAL_CALL DocumentSettings::addPropertiesChangeListener( const Sequence< OUString >& aPropertyNames, const Reference< XPropertiesChangeListener >& xListener ) throw(RuntimeException) 1196 { 1197 PropertySetHelper::addPropertiesChangeListener( aPropertyNames, xListener ); 1198 } 1199 1200 void SAL_CALL DocumentSettings::removePropertiesChangeListener( const Reference< XPropertiesChangeListener >& xListener ) throw(RuntimeException) 1201 { 1202 PropertySetHelper::removePropertiesChangeListener( xListener ); 1203 } 1204 1205 void SAL_CALL DocumentSettings::firePropertiesChangeEvent( const Sequence< OUString >& aPropertyNames, const Reference< XPropertiesChangeListener >& xListener ) throw(RuntimeException) 1206 { 1207 PropertySetHelper::firePropertiesChangeEvent( aPropertyNames, xListener ); 1208 } 1209 1210 // XServiceInfo 1211 OUString SAL_CALL DocumentSettings::getImplementationName( ) 1212 throw(RuntimeException) 1213 { 1214 return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Draw.DocumentSettings")); 1215 } 1216 1217 sal_Bool SAL_CALL DocumentSettings::supportsService( const OUString& ServiceName ) 1218 throw(RuntimeException) 1219 { 1220 const Sequence< OUString > aSeq( getSupportedServiceNames() ); 1221 sal_Int32 nCount = aSeq.getLength(); 1222 const OUString* pServices = aSeq.getConstArray(); 1223 while( nCount-- ) 1224 { 1225 if( *pServices++ == ServiceName ) 1226 return sal_True; 1227 } 1228 1229 return sal_True; 1230 } 1231 1232 Sequence< OUString > SAL_CALL DocumentSettings::getSupportedServiceNames( ) 1233 throw(RuntimeException) 1234 { 1235 Sequence< OUString > aSeq( 2 ); 1236 aSeq[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.Settings") ); 1237 if( mpModel->IsImpressDocument() ) 1238 { 1239 aSeq[1] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.DocumentSettings") ); 1240 } 1241 else 1242 { 1243 aSeq[1] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.DocumentSettings") ); 1244 } 1245 1246 return aSeq; 1247 } 1248 1249