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_svtools.hxx" 30 31 //_________________________________________________________________________________________________________________ 32 // includes 33 //_________________________________________________________________________________________________________________ 34 35 #include <svtools/printoptions.hxx> 36 #include <unotools/configmgr.hxx> 37 #include <unotools/configitem.hxx> 38 #include <tools/debug.hxx> 39 #include <vcl/print.hxx> 40 #include <com/sun/star/uno/Any.hxx> 41 #include <com/sun/star/uno/Sequence.hxx> 42 43 #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ 44 #include <com/sun/star/beans/XPropertySet.hpp> 45 #endif 46 47 #ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_ 48 #include <com/sun/star/container/XNameAccess.hpp> 49 #endif 50 51 #ifndef _COM_SUN_STAR_CONTAINER_XNAMECONTAINER_HPP_ 52 #include <com/sun/star/container/XNameContainer.hpp> 53 #endif 54 55 #ifndef _COM_SUN_STAR_LANG_XSINGLESERVICEFACTORY_HPP_ 56 #include <com/sun/star/lang/XSingleServiceFactory.hpp> 57 #endif 58 59 #ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_ 60 #include <comphelper/configurationhelper.hxx> 61 #endif 62 63 #ifndef _UNOTOOLS_PROCESSFACTORY_HXX_ 64 #include <unotools/processfactory.hxx> 65 #endif 66 67 #ifndef _SVT_LOGHELPER_HXX 68 #include <unotools/loghelper.hxx> 69 #endif 70 71 #include <itemholder2.hxx> 72 73 74 // ----------- 75 // - statics - 76 // ----------- 77 78 static sal_uInt16 aDPIArray[] = { 72, 96, 150, 200, 300, 600 }; 79 80 #define DPI_COUNT (sizeof(aDPIArray)/sizeof(aDPIArray[0 ])) 81 82 // ----------- 83 // - Defines - 84 // ----------- 85 86 #define ROOTNODE_START OUString(RTL_CONSTASCII_USTRINGPARAM("Office.Common/Print/Option")) 87 #define ROOTNODE_PRINTOPTION OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Common/Print/Option")) 88 89 #define PROPERTYNAME_REDUCETRANSPARENCY OUString(RTL_CONSTASCII_USTRINGPARAM("ReduceTransparency")) 90 #define PROPERTYNAME_REDUCEDTRANSPARENCYMODE OUString(RTL_CONSTASCII_USTRINGPARAM("ReducedTransparencyMode")) 91 #define PROPERTYNAME_REDUCEGRADIENTS OUString(RTL_CONSTASCII_USTRINGPARAM("ReduceGradients")) 92 #define PROPERTYNAME_REDUCEDGRADIENTMODE OUString(RTL_CONSTASCII_USTRINGPARAM("ReducedGradientMode")) 93 #define PROPERTYNAME_REDUCEDGRADIENTSTEPCOUNT OUString(RTL_CONSTASCII_USTRINGPARAM("ReducedGradientStepCount")) 94 #define PROPERTYNAME_REDUCEBITMAPS OUString(RTL_CONSTASCII_USTRINGPARAM("ReduceBitmaps")) 95 #define PROPERTYNAME_REDUCEDBITMAPMODE OUString(RTL_CONSTASCII_USTRINGPARAM("ReducedBitmapMode")) 96 #define PROPERTYNAME_REDUCEDBITMAPRESOLUTION OUString(RTL_CONSTASCII_USTRINGPARAM("ReducedBitmapResolution")) 97 #define PROPERTYNAME_REDUCEDBITMAPINCLUDESTRANSPARENCY OUString(RTL_CONSTASCII_USTRINGPARAM("ReducedBitmapIncludesTransparency")) 98 #define PROPERTYNAME_CONVERTTOGREYSCALES OUString(RTL_CONSTASCII_USTRINGPARAM("ConvertToGreyscales")) 99 100 // -------------- 101 // - Namespaces - 102 // -------------- 103 104 using namespace ::utl; 105 using namespace ::rtl; 106 using namespace ::osl; 107 using namespace ::com::sun::star::uno; 108 namespace css = com::sun::star; 109 110 // ----------- 111 // - statics - 112 // ----------- 113 114 static SvtPrintOptions_Impl* pPrinterOptionsDataContainer = NULL; 115 static SvtPrintOptions_Impl* pPrintFileOptionsDataContainer = NULL; 116 117 SvtPrintOptions_Impl* SvtPrinterOptions::m_pStaticDataContainer = NULL; 118 sal_Int32 SvtPrinterOptions::m_nRefCount = 0; 119 120 SvtPrintOptions_Impl* SvtPrintFileOptions::m_pStaticDataContainer = NULL; 121 sal_Int32 SvtPrintFileOptions::m_nRefCount = 0; 122 123 // ------------------------ 124 // - SvtPrintOptions_Impl - 125 // ------------------------ 126 127 class SvtPrintOptions_Impl 128 { 129 public: 130 131 //--------------------------------------------------------------------------------------------------------- 132 // constructor / destructor 133 //--------------------------------------------------------------------------------------------------------- 134 135 SvtPrintOptions_Impl( const OUString& rConfigRoot ); 136 ~SvtPrintOptions_Impl(); 137 138 //--------------------------------------------------------------------------------------------------------- 139 // public interface 140 //--------------------------------------------------------------------------------------------------------- 141 142 sal_Bool IsReduceTransparency() const ; 143 sal_Int16 GetReducedTransparencyMode() const ; 144 sal_Bool IsReduceGradients() const ; 145 sal_Int16 GetReducedGradientMode() const ; 146 sal_Int16 GetReducedGradientStepCount() const ; 147 sal_Bool IsReduceBitmaps() const ; 148 sal_Int16 GetReducedBitmapMode() const ; 149 sal_Int16 GetReducedBitmapResolution() const ; 150 sal_Bool IsReducedBitmapIncludesTransparency() const ; 151 sal_Bool IsConvertToGreyscales() const; 152 153 void SetReduceTransparency( sal_Bool bState ) ; 154 void SetReducedTransparencyMode( sal_Int16 nMode ) ; 155 void SetReduceGradients( sal_Bool bState ) ; 156 void SetReducedGradientMode( sal_Int16 nMode ) ; 157 void SetReducedGradientStepCount( sal_Int16 nStepCount ) ; 158 void SetReduceBitmaps( sal_Bool bState ) ; 159 void SetReducedBitmapMode( sal_Int16 nMode ) ; 160 void SetReducedBitmapResolution( sal_Int16 nResolution ) ; 161 void SetReducedBitmapIncludesTransparency( sal_Bool bState ) ; 162 void SetConvertToGreyscales( sal_Bool bState ) ; 163 164 //------------------------------------------------------------------------------------------------------------- 165 // private API 166 //------------------------------------------------------------------------------------------------------------- 167 168 private: 169 void impl_setValue (const ::rtl::OUString& sProp, 170 ::sal_Bool bNew ); 171 void impl_setValue (const ::rtl::OUString& sProp, 172 ::sal_Int16 nNew ); 173 174 //------------------------------------------------------------------------------------------------------------- 175 // private member 176 //------------------------------------------------------------------------------------------------------------- 177 178 private: 179 css::uno::Reference< css::container::XNameAccess > m_xCfg; 180 css::uno::Reference< css::container::XNameAccess > m_xNode; 181 }; 182 183 SvtPrintOptions_Impl::SvtPrintOptions_Impl(const OUString& rConfigRoot) 184 { 185 try 186 { 187 m_xCfg = css::uno::Reference< css::container::XNameAccess >( 188 ::comphelper::ConfigurationHelper::openConfig( 189 utl::getProcessServiceFactory(), 190 ROOTNODE_PRINTOPTION, 191 ::comphelper::ConfigurationHelper::E_STANDARD), 192 css::uno::UNO_QUERY); 193 194 if (m_xCfg.is()) 195 { 196 UniString sTmp = UniString(rConfigRoot); 197 xub_StrLen nTokenCount = sTmp.GetTokenCount('/'); 198 sTmp = sTmp.GetToken(nTokenCount - 1, '/'); 199 m_xCfg->getByName(OUString(sTmp.GetBuffer())) >>= m_xNode; 200 } 201 } 202 catch (const css::uno::Exception& ex) 203 { 204 m_xNode.clear(); 205 m_xCfg.clear(); 206 LogHelper::logIt(ex); 207 } 208 } 209 210 sal_Bool SvtPrintOptions_Impl::IsReduceTransparency() const 211 { 212 sal_Bool bRet = sal_False; 213 try 214 { 215 if (m_xNode.is()) 216 { 217 css::uno::Reference< css::beans::XPropertySet > xSet(m_xNode, css::uno::UNO_QUERY); 218 if (xSet.is()) 219 xSet->getPropertyValue(PROPERTYNAME_REDUCETRANSPARENCY) >>= bRet; 220 } 221 } 222 catch (const css::uno::Exception& ex) 223 { 224 LogHelper::logIt(ex); 225 } 226 227 return bRet; 228 } 229 230 sal_Int16 SvtPrintOptions_Impl::GetReducedTransparencyMode() const 231 { 232 sal_Int16 nRet = 0; 233 try 234 { 235 if (m_xNode.is()) 236 { 237 css::uno::Reference< css::beans::XPropertySet > xSet(m_xNode, css::uno::UNO_QUERY); 238 if (xSet.is()) 239 xSet->getPropertyValue(PROPERTYNAME_REDUCEDTRANSPARENCYMODE) >>= nRet; 240 } 241 } 242 catch (const css::uno::Exception& ex) 243 { 244 LogHelper::logIt(ex); 245 } 246 247 return nRet; 248 } 249 250 sal_Bool SvtPrintOptions_Impl::IsReduceGradients() const 251 { 252 sal_Bool bRet = sal_False; 253 try 254 { 255 if (m_xNode.is()) 256 { 257 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 258 if (xSet.is()) 259 { 260 xSet->getPropertyValue(PROPERTYNAME_REDUCEGRADIENTS) >>= bRet; 261 } 262 } 263 } 264 catch (const css::uno::Exception& ex) 265 { 266 LogHelper::logIt(ex); 267 } 268 269 return bRet; 270 } 271 272 sal_Int16 SvtPrintOptions_Impl::GetReducedGradientMode() const 273 { 274 sal_Int16 nRet = 0; 275 try 276 { 277 if (m_xNode.is()) 278 { 279 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 280 if (xSet.is()) 281 { 282 xSet->getPropertyValue(PROPERTYNAME_REDUCEDGRADIENTMODE) >>= nRet; 283 } 284 } 285 } 286 catch (const css::uno::Exception& ex) 287 { 288 LogHelper::logIt(ex); 289 } 290 291 return nRet; 292 } 293 294 sal_Int16 SvtPrintOptions_Impl::GetReducedGradientStepCount() const 295 { 296 sal_Int16 nRet = 64; 297 try 298 { 299 if (m_xNode.is()) 300 { 301 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 302 if (xSet.is()) 303 { 304 xSet->getPropertyValue(PROPERTYNAME_REDUCEDGRADIENTSTEPCOUNT) >>= nRet; 305 } 306 } 307 } 308 catch (const css::uno::Exception& ex) 309 { 310 LogHelper::logIt(ex); 311 } 312 313 return nRet; 314 } 315 316 sal_Bool SvtPrintOptions_Impl::IsReduceBitmaps() const 317 { 318 sal_Bool bRet = sal_False; 319 try 320 { 321 if (m_xNode.is()) 322 { 323 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 324 if (xSet.is()) 325 { 326 xSet->getPropertyValue(PROPERTYNAME_REDUCEBITMAPS) >>= bRet; 327 } 328 } 329 } 330 catch (const css::uno::Exception& ex) 331 { 332 LogHelper::logIt(ex); 333 } 334 335 return bRet; 336 } 337 338 sal_Int16 SvtPrintOptions_Impl::GetReducedBitmapMode() const 339 { 340 sal_Int16 nRet = 1; 341 try 342 { 343 if (m_xNode.is()) 344 { 345 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 346 if (xSet.is()) 347 { 348 xSet->getPropertyValue(PROPERTYNAME_REDUCEDBITMAPMODE) >>= nRet; 349 } 350 } 351 } 352 catch (const css::uno::Exception& ex) 353 { 354 LogHelper::logIt(ex); 355 } 356 357 return nRet; 358 } 359 360 sal_Int16 SvtPrintOptions_Impl::GetReducedBitmapResolution() const 361 { 362 sal_Int16 nRet = 3; 363 try 364 { 365 if (m_xNode.is()) 366 { 367 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 368 if (xSet.is()) 369 { 370 xSet->getPropertyValue(PROPERTYNAME_REDUCEDBITMAPRESOLUTION) >>= nRet; 371 } 372 } 373 } 374 catch (const css::uno::Exception& ex) 375 { 376 LogHelper::logIt(ex); 377 } 378 379 return nRet; 380 } 381 382 sal_Bool SvtPrintOptions_Impl::IsReducedBitmapIncludesTransparency() const 383 { 384 sal_Bool bRet = sal_True; 385 try 386 { 387 if (m_xNode.is()) 388 { 389 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 390 if (xSet.is()) 391 { 392 xSet->getPropertyValue(PROPERTYNAME_REDUCEDBITMAPINCLUDESTRANSPARENCY) >>= bRet; 393 } 394 } 395 } 396 catch (const css::uno::Exception& ex) 397 { 398 LogHelper::logIt(ex); 399 } 400 401 return bRet; 402 } 403 404 sal_Bool SvtPrintOptions_Impl::IsConvertToGreyscales() const 405 { 406 sal_Bool bRet = sal_False; 407 try 408 { 409 if (m_xNode.is()) 410 { 411 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 412 if (xSet.is()) 413 { 414 xSet->getPropertyValue(PROPERTYNAME_CONVERTTOGREYSCALES) >>= bRet; 415 } 416 } 417 } 418 catch (const css::uno::Exception& ex) 419 { 420 LogHelper::logIt(ex); 421 } 422 423 return bRet; 424 425 } 426 427 void SvtPrintOptions_Impl::SetReduceTransparency(sal_Bool bState) 428 { 429 impl_setValue(PROPERTYNAME_REDUCETRANSPARENCY, bState); 430 } 431 432 void SvtPrintOptions_Impl::SetReducedTransparencyMode(sal_Int16 nMode) 433 { 434 impl_setValue(PROPERTYNAME_REDUCEDTRANSPARENCYMODE, nMode); 435 } 436 437 void SvtPrintOptions_Impl::SetReduceGradients(sal_Bool bState) 438 { 439 impl_setValue(PROPERTYNAME_REDUCEGRADIENTS, bState); 440 } 441 442 void SvtPrintOptions_Impl::SetReducedGradientMode(sal_Int16 nMode) 443 { 444 impl_setValue(PROPERTYNAME_REDUCEDGRADIENTMODE, nMode); 445 } 446 447 void SvtPrintOptions_Impl::SetReducedGradientStepCount(sal_Int16 nStepCount ) 448 { 449 impl_setValue(PROPERTYNAME_REDUCEDGRADIENTSTEPCOUNT, nStepCount); 450 } 451 452 void SvtPrintOptions_Impl::SetReduceBitmaps(sal_Bool bState ) 453 { 454 impl_setValue(PROPERTYNAME_REDUCEBITMAPS, bState); 455 } 456 457 void SvtPrintOptions_Impl::SetReducedBitmapMode(sal_Int16 nMode ) 458 { 459 impl_setValue(PROPERTYNAME_REDUCEDBITMAPMODE, nMode); 460 } 461 462 void SvtPrintOptions_Impl::SetReducedBitmapResolution(sal_Int16 nResolution ) 463 { 464 impl_setValue(PROPERTYNAME_REDUCEDBITMAPRESOLUTION, nResolution); 465 } 466 467 void SvtPrintOptions_Impl::SetReducedBitmapIncludesTransparency(sal_Bool bState ) 468 { 469 impl_setValue(PROPERTYNAME_REDUCEDBITMAPINCLUDESTRANSPARENCY, bState); 470 } 471 472 void SvtPrintOptions_Impl::SetConvertToGreyscales(sal_Bool bState) 473 { 474 impl_setValue(PROPERTYNAME_CONVERTTOGREYSCALES, bState); 475 } 476 477 SvtPrintOptions_Impl::~SvtPrintOptions_Impl() 478 { 479 m_xNode.clear(); 480 m_xCfg.clear(); 481 } 482 483 void SvtPrintOptions_Impl::impl_setValue (const ::rtl::OUString& sProp, 484 ::sal_Bool bNew ) 485 { 486 try 487 { 488 if ( ! m_xNode.is()) 489 return; 490 491 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 492 if ( ! xSet.is()) 493 return; 494 495 ::sal_Bool bOld = ! bNew; 496 if ( ! (xSet->getPropertyValue(sProp) >>= bOld)) 497 return; 498 499 if (bOld != bNew) 500 { 501 xSet->setPropertyValue(sProp, css::uno::makeAny(bNew)); 502 ::comphelper::ConfigurationHelper::flush(m_xCfg); 503 } 504 } 505 catch(const css::uno::Exception& ex) 506 { 507 LogHelper::logIt(ex); 508 } 509 } 510 511 void SvtPrintOptions_Impl::impl_setValue (const ::rtl::OUString& sProp, 512 ::sal_Int16 nNew ) 513 { 514 try 515 { 516 if ( ! m_xNode.is()) 517 return; 518 519 css::uno::Reference<css::beans::XPropertySet> xSet(m_xNode, css::uno::UNO_QUERY); 520 if ( ! xSet.is()) 521 return; 522 523 ::sal_Int16 nOld = nNew+1; 524 if ( ! (xSet->getPropertyValue(sProp) >>= nOld)) 525 return; 526 527 if (nOld != nNew) 528 { 529 xSet->setPropertyValue(sProp, css::uno::makeAny(nNew)); 530 ::comphelper::ConfigurationHelper::flush(m_xCfg); 531 } 532 } 533 catch(const css::uno::Exception& ex) 534 { 535 LogHelper::logIt(ex); 536 } 537 } 538 539 // ----------------------------------------------------------------------------- 540 541 542 // ----------------------- 543 // - SvtBasePrintOptions - 544 // ----------------------- 545 546 SvtBasePrintOptions::SvtBasePrintOptions() 547 { 548 } 549 550 // ----------------------------------------------------------------------------- 551 552 SvtBasePrintOptions::~SvtBasePrintOptions() 553 { 554 } 555 556 // ----------------------------------------------------------------------------- 557 558 Mutex& SvtBasePrintOptions::GetOwnStaticMutex() 559 { 560 // Initialize static mutex only for one time! 561 static Mutex* pMutex = NULL; 562 // If these method first called (Mutex not already exist!) ... 563 if( pMutex == NULL ) 564 { 565 // ... we must create a new one. Protect follow code with the global mutex - 566 // It must be - we create a static variable! 567 MutexGuard aGuard( Mutex::getGlobalMutex() ); 568 // We must check our pointer again - because it can be that another instance of ouer class will be fastr then these! 569 if( pMutex == NULL ) 570 { 571 // Create the new mutex and set it for return on static variable. 572 static Mutex aMutex; 573 pMutex = &aMutex; 574 } 575 } 576 // Return new created or already existing mutex object. 577 return *pMutex; 578 } 579 580 // ----------------------------------------------------------------------------- 581 582 sal_Bool SvtBasePrintOptions::IsReduceTransparency() const 583 { 584 MutexGuard aGuard( GetOwnStaticMutex() ); 585 return m_pDataContainer->IsReduceTransparency(); 586 } 587 588 // ----------------------------------------------------------------------------- 589 590 sal_Int16 SvtBasePrintOptions::GetReducedTransparencyMode() const 591 { 592 MutexGuard aGuard( GetOwnStaticMutex() ); 593 return m_pDataContainer->GetReducedTransparencyMode(); 594 } 595 596 // ----------------------------------------------------------------------------- 597 598 sal_Bool SvtBasePrintOptions::IsReduceGradients() const 599 { 600 MutexGuard aGuard( GetOwnStaticMutex() ); 601 return m_pDataContainer->IsReduceGradients(); 602 } 603 604 // ----------------------------------------------------------------------------- 605 606 sal_Int16 SvtBasePrintOptions::GetReducedGradientMode() const 607 { 608 MutexGuard aGuard( GetOwnStaticMutex() ); 609 return m_pDataContainer->GetReducedGradientMode(); 610 } 611 612 // ----------------------------------------------------------------------------- 613 614 sal_Int16 SvtBasePrintOptions::GetReducedGradientStepCount() const 615 { 616 MutexGuard aGuard( GetOwnStaticMutex() ); 617 return m_pDataContainer->GetReducedGradientStepCount(); 618 } 619 620 // ----------------------------------------------------------------------------- 621 622 sal_Bool SvtBasePrintOptions::IsReduceBitmaps() const 623 { 624 MutexGuard aGuard( GetOwnStaticMutex() ); 625 return m_pDataContainer->IsReduceBitmaps(); 626 } 627 628 // ----------------------------------------------------------------------------- 629 630 sal_Int16 SvtBasePrintOptions::GetReducedBitmapMode() const 631 { 632 MutexGuard aGuard( GetOwnStaticMutex() ); 633 return m_pDataContainer->GetReducedBitmapMode(); 634 } 635 636 // ----------------------------------------------------------------------------- 637 638 sal_Int16 SvtBasePrintOptions::GetReducedBitmapResolution() const 639 { 640 MutexGuard aGuard( GetOwnStaticMutex() ); 641 return m_pDataContainer->GetReducedBitmapResolution(); 642 } 643 644 // ----------------------------------------------------------------------------- 645 646 sal_Bool SvtBasePrintOptions::IsReducedBitmapIncludesTransparency() const 647 { 648 MutexGuard aGuard( GetOwnStaticMutex() ); 649 return m_pDataContainer->IsReducedBitmapIncludesTransparency(); 650 } 651 652 // ----------------------------------------------------------------------------- 653 654 sal_Bool SvtBasePrintOptions::IsConvertToGreyscales() const 655 { 656 MutexGuard aGuard( GetOwnStaticMutex() ); 657 return m_pDataContainer->IsConvertToGreyscales(); 658 } 659 660 // ----------------------------------------------------------------------------- 661 662 void SvtBasePrintOptions::SetReduceTransparency( sal_Bool bState ) 663 { 664 MutexGuard aGuard( GetOwnStaticMutex() ); 665 m_pDataContainer->SetReduceTransparency( bState ) ; 666 } 667 668 // ----------------------------------------------------------------------------- 669 670 void SvtBasePrintOptions::SetReducedTransparencyMode( sal_Int16 nMode ) 671 { 672 MutexGuard aGuard( GetOwnStaticMutex() ); 673 m_pDataContainer->SetReducedTransparencyMode( nMode ); 674 } 675 676 // ----------------------------------------------------------------------------- 677 678 void SvtBasePrintOptions::SetReduceGradients( sal_Bool bState ) 679 { 680 MutexGuard aGuard( GetOwnStaticMutex() ); 681 m_pDataContainer->SetReduceGradients( bState ); 682 } 683 684 // ----------------------------------------------------------------------------- 685 686 void SvtBasePrintOptions::SetReducedGradientMode( sal_Int16 nMode ) 687 { 688 MutexGuard aGuard( GetOwnStaticMutex() ); 689 m_pDataContainer->SetReducedGradientMode( nMode ); 690 } 691 692 // ----------------------------------------------------------------------------- 693 694 void SvtBasePrintOptions::SetReducedGradientStepCount( sal_Int16 nStepCount ) 695 { 696 MutexGuard aGuard( GetOwnStaticMutex() ); 697 m_pDataContainer->SetReducedGradientStepCount( nStepCount ); 698 } 699 700 // ----------------------------------------------------------------------------- 701 702 void SvtBasePrintOptions::SetReduceBitmaps( sal_Bool bState ) 703 { 704 MutexGuard aGuard( GetOwnStaticMutex() ); 705 m_pDataContainer->SetReduceBitmaps( bState ); 706 } 707 708 // ----------------------------------------------------------------------------- 709 710 void SvtBasePrintOptions::SetReducedBitmapMode( sal_Int16 nMode ) 711 { 712 MutexGuard aGuard( GetOwnStaticMutex() ); 713 m_pDataContainer->SetReducedBitmapMode( nMode ); 714 } 715 716 // ----------------------------------------------------------------------------- 717 718 void SvtBasePrintOptions::SetReducedBitmapResolution( sal_Int16 nResolution ) 719 { 720 MutexGuard aGuard( GetOwnStaticMutex() ); 721 m_pDataContainer->SetReducedBitmapResolution( nResolution ); 722 } 723 724 // ----------------------------------------------------------------------------- 725 726 void SvtBasePrintOptions::SetReducedBitmapIncludesTransparency( sal_Bool bState ) 727 { 728 MutexGuard aGuard( GetOwnStaticMutex() ); 729 m_pDataContainer->SetReducedBitmapIncludesTransparency( bState ); 730 } 731 732 // ----------------------------------------------------------------------------- 733 734 void SvtBasePrintOptions::SetConvertToGreyscales( sal_Bool bState ) 735 { 736 MutexGuard aGuard( GetOwnStaticMutex() ); 737 m_pDataContainer->SetConvertToGreyscales( bState ); 738 } 739 740 // ----------------------------------------------------------------------------- 741 742 void SvtBasePrintOptions::GetPrinterOptions( PrinterOptions& rOptions ) const 743 { 744 rOptions.SetReduceTransparency( IsReduceTransparency() ); 745 rOptions.SetReducedTransparencyMode( (PrinterTransparencyMode) GetReducedTransparencyMode() ); 746 rOptions.SetReduceGradients( IsReduceGradients() ); 747 rOptions.SetReducedGradientMode( (PrinterGradientMode) GetReducedGradientMode() ); 748 rOptions.SetReducedGradientStepCount( GetReducedGradientStepCount() ); 749 rOptions.SetReduceBitmaps( IsReduceBitmaps() ); 750 rOptions.SetReducedBitmapMode( (PrinterBitmapMode) GetReducedBitmapMode() ); 751 rOptions.SetReducedBitmapResolution( aDPIArray[ Min( (sal_uInt16) GetReducedBitmapResolution(), (sal_uInt16)( DPI_COUNT - 1 ) ) ] ); 752 rOptions.SetReducedBitmapIncludesTransparency( IsReducedBitmapIncludesTransparency() ); 753 rOptions.SetConvertToGreyscales( IsConvertToGreyscales() ); 754 } 755 756 // ----------------------------------------------------------------------------- 757 758 void SvtBasePrintOptions::SetPrinterOptions( const PrinterOptions& rOptions ) 759 { 760 SetReduceTransparency( rOptions.IsReduceTransparency() ); 761 SetReducedTransparencyMode( 762 sal::static_int_cast< sal_Int16 >( 763 rOptions.GetReducedTransparencyMode()) ); 764 SetReduceGradients( rOptions.IsReduceGradients() ); 765 SetReducedGradientMode( 766 sal::static_int_cast< sal_Int16 >(rOptions.GetReducedGradientMode()) ); 767 SetReducedGradientStepCount( rOptions.GetReducedGradientStepCount() ); 768 SetReduceBitmaps( rOptions.IsReduceBitmaps() ); 769 SetReducedBitmapMode( 770 sal::static_int_cast< sal_Int16 >(rOptions.GetReducedBitmapMode()) ); 771 SetReducedBitmapIncludesTransparency( rOptions.IsReducedBitmapIncludesTransparency() ); 772 SetConvertToGreyscales( rOptions.IsConvertToGreyscales() ); 773 774 const sal_uInt16 nDPI = rOptions.GetReducedBitmapResolution(); 775 776 if( nDPI < aDPIArray[ 0 ] ) 777 SetReducedBitmapResolution( 0 ); 778 else 779 { 780 for( long i = ( DPI_COUNT - 1 ); i >= 0; i-- ) 781 { 782 if( nDPI >= aDPIArray[ i ] ) 783 { 784 SetReducedBitmapResolution( (sal_Int16) i ); 785 i = -1; 786 } 787 } 788 } 789 } 790 791 // --------------------- 792 // - SvtPrinterOptions - 793 // --------------------- 794 795 SvtPrinterOptions::SvtPrinterOptions() 796 { 797 // Global access, must be guarded (multithreading!). 798 MutexGuard aGuard( GetOwnStaticMutex() ); 799 // Increase ouer refcount ... 800 ++m_nRefCount; 801 // ... and initialize ouer data container only if it not already! 802 if( m_pStaticDataContainer == NULL ) 803 { 804 OUString aRootPath( ROOTNODE_START ); 805 m_pStaticDataContainer = new SvtPrintOptions_Impl( aRootPath += OUString( RTL_CONSTASCII_USTRINGPARAM( "/Printer" ) ) ); 806 pPrinterOptionsDataContainer = m_pStaticDataContainer; 807 ItemHolder2::holdConfigItem(E_PRINTOPTIONS); 808 } 809 810 SetDataContainer( m_pStaticDataContainer ); 811 } 812 813 // ----------------------------------------------------------------------------- 814 815 SvtPrinterOptions::~SvtPrinterOptions() 816 { 817 // Global access, must be guarded (multithreading!) 818 MutexGuard aGuard( GetOwnStaticMutex() ); 819 // Decrease ouer refcount. 820 --m_nRefCount; 821 // If last instance was deleted ... 822 // we must destroy ouer static data container! 823 if( m_nRefCount <= 0 ) 824 { 825 delete m_pStaticDataContainer; 826 m_pStaticDataContainer = NULL; 827 pPrinterOptionsDataContainer = NULL; 828 } 829 } 830 831 // --------------------- 832 // - SvtPrintFileOptions - 833 // --------------------- 834 835 SvtPrintFileOptions::SvtPrintFileOptions() 836 { 837 // Global access, must be guarded (multithreading!). 838 MutexGuard aGuard( GetOwnStaticMutex() ); 839 // Increase ouer refcount ... 840 ++m_nRefCount; 841 // ... and initialize ouer data container only if it not already! 842 if( m_pStaticDataContainer == NULL ) 843 { 844 OUString aRootPath( ROOTNODE_START ); 845 m_pStaticDataContainer = new SvtPrintOptions_Impl( aRootPath += OUString( RTL_CONSTASCII_USTRINGPARAM( "/File" ) ) ); 846 pPrintFileOptionsDataContainer = m_pStaticDataContainer; 847 848 ItemHolder2::holdConfigItem(E_PRINTFILEOPTIONS); 849 } 850 851 SetDataContainer( m_pStaticDataContainer ); 852 } 853 854 // ----------------------------------------------------------------------------- 855 856 SvtPrintFileOptions::~SvtPrintFileOptions() 857 { 858 // Global access, must be guarded (multithreading!) 859 MutexGuard aGuard( GetOwnStaticMutex() ); 860 // Decrease ouer refcount. 861 --m_nRefCount; 862 // If last instance was deleted ... 863 // we must destroy ouer static data container! 864 if( m_nRefCount <= 0 ) 865 { 866 delete m_pStaticDataContainer; 867 m_pStaticDataContainer = NULL; 868 pPrintFileOptionsDataContainer = NULL; 869 } 870 } 871