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