xref: /AOO41X/main/svtools/source/config/printoptions.cxx (revision 5900e8ec128faec89519683efce668ccd8cc6084)
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 
SvtPrintOptions_Impl(const OUString & rConfigRoot)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 
IsReduceTransparency() const206 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 
GetReducedTransparencyMode() const226 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 
IsReduceGradients() const246 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 
GetReducedGradientMode() const268 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 
GetReducedGradientStepCount() const290 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 
IsReduceBitmaps() const312 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 
GetReducedBitmapMode() const334 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 
GetReducedBitmapResolution() const356 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 
IsReducedBitmapIncludesTransparency() const378 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 
IsConvertToGreyscales() const400 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 
SetReduceTransparency(sal_Bool bState)423 void SvtPrintOptions_Impl::SetReduceTransparency(sal_Bool bState)
424 {
425     impl_setValue(PROPERTYNAME_REDUCETRANSPARENCY, bState);
426 }
427 
SetReducedTransparencyMode(sal_Int16 nMode)428 void SvtPrintOptions_Impl::SetReducedTransparencyMode(sal_Int16 nMode)
429 {
430     impl_setValue(PROPERTYNAME_REDUCEDTRANSPARENCYMODE, nMode);
431 }
432 
SetReduceGradients(sal_Bool bState)433 void SvtPrintOptions_Impl::SetReduceGradients(sal_Bool bState)
434 {
435     impl_setValue(PROPERTYNAME_REDUCEGRADIENTS, bState);
436 }
437 
SetReducedGradientMode(sal_Int16 nMode)438 void SvtPrintOptions_Impl::SetReducedGradientMode(sal_Int16 nMode)
439 {
440     impl_setValue(PROPERTYNAME_REDUCEDGRADIENTMODE, nMode);
441 }
442 
SetReducedGradientStepCount(sal_Int16 nStepCount)443 void SvtPrintOptions_Impl::SetReducedGradientStepCount(sal_Int16 nStepCount )
444 {
445     impl_setValue(PROPERTYNAME_REDUCEDGRADIENTSTEPCOUNT, nStepCount);
446 }
447 
SetReduceBitmaps(sal_Bool bState)448 void SvtPrintOptions_Impl::SetReduceBitmaps(sal_Bool bState )
449 {
450     impl_setValue(PROPERTYNAME_REDUCEBITMAPS, bState);
451 }
452 
SetReducedBitmapMode(sal_Int16 nMode)453 void SvtPrintOptions_Impl::SetReducedBitmapMode(sal_Int16 nMode )
454 {
455     impl_setValue(PROPERTYNAME_REDUCEDBITMAPMODE, nMode);
456 }
457 
SetReducedBitmapResolution(sal_Int16 nResolution)458 void SvtPrintOptions_Impl::SetReducedBitmapResolution(sal_Int16 nResolution )
459 {
460     impl_setValue(PROPERTYNAME_REDUCEDBITMAPRESOLUTION, nResolution);
461 }
462 
SetReducedBitmapIncludesTransparency(sal_Bool bState)463 void SvtPrintOptions_Impl::SetReducedBitmapIncludesTransparency(sal_Bool bState )
464 {
465     impl_setValue(PROPERTYNAME_REDUCEDBITMAPINCLUDESTRANSPARENCY, bState);
466 }
467 
SetConvertToGreyscales(sal_Bool bState)468 void SvtPrintOptions_Impl::SetConvertToGreyscales(sal_Bool bState)
469 {
470     impl_setValue(PROPERTYNAME_CONVERTTOGREYSCALES, bState);
471 }
472 
~SvtPrintOptions_Impl()473 SvtPrintOptions_Impl::~SvtPrintOptions_Impl()
474 {
475     m_xNode.clear();
476     m_xCfg.clear();
477 }
478 
impl_setValue(const::rtl::OUString & sProp,::sal_Bool bNew)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 
impl_setValue(const::rtl::OUString & sProp,::sal_Int16 nNew)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 
SvtBasePrintOptions()542 SvtBasePrintOptions::SvtBasePrintOptions()
543 {
544 }
545 
546 // -----------------------------------------------------------------------------
547 
~SvtBasePrintOptions()548 SvtBasePrintOptions::~SvtBasePrintOptions()
549 {
550 }
551 
552 // -----------------------------------------------------------------------------
553 
GetOwnStaticMutex()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 
IsReduceTransparency() const578 sal_Bool SvtBasePrintOptions::IsReduceTransparency() const
579 {
580     MutexGuard aGuard( GetOwnStaticMutex() );
581     return m_pDataContainer->IsReduceTransparency();
582 }
583 
584 // -----------------------------------------------------------------------------
585 
GetReducedTransparencyMode() const586 sal_Int16 SvtBasePrintOptions::GetReducedTransparencyMode() const
587 {
588     MutexGuard aGuard( GetOwnStaticMutex() );
589     return m_pDataContainer->GetReducedTransparencyMode();
590 }
591 
592 // -----------------------------------------------------------------------------
593 
IsReduceGradients() const594 sal_Bool SvtBasePrintOptions::IsReduceGradients() const
595 {
596     MutexGuard aGuard( GetOwnStaticMutex() );
597     return m_pDataContainer->IsReduceGradients();
598 }
599 
600 // -----------------------------------------------------------------------------
601 
GetReducedGradientMode() const602 sal_Int16 SvtBasePrintOptions::GetReducedGradientMode() const
603 {
604     MutexGuard aGuard( GetOwnStaticMutex() );
605     return m_pDataContainer->GetReducedGradientMode();
606 }
607 
608 // -----------------------------------------------------------------------------
609 
GetReducedGradientStepCount() const610 sal_Int16 SvtBasePrintOptions::GetReducedGradientStepCount() const
611 {
612     MutexGuard aGuard( GetOwnStaticMutex() );
613     return m_pDataContainer->GetReducedGradientStepCount();
614 }
615 
616 // -----------------------------------------------------------------------------
617 
IsReduceBitmaps() const618 sal_Bool SvtBasePrintOptions::IsReduceBitmaps() const
619 {
620     MutexGuard aGuard( GetOwnStaticMutex() );
621     return m_pDataContainer->IsReduceBitmaps();
622 }
623 
624 // -----------------------------------------------------------------------------
625 
GetReducedBitmapMode() const626 sal_Int16 SvtBasePrintOptions::GetReducedBitmapMode() const
627 {
628     MutexGuard aGuard( GetOwnStaticMutex() );
629     return m_pDataContainer->GetReducedBitmapMode();
630 }
631 
632 // -----------------------------------------------------------------------------
633 
GetReducedBitmapResolution() const634 sal_Int16 SvtBasePrintOptions::GetReducedBitmapResolution() const
635 {
636     MutexGuard aGuard( GetOwnStaticMutex() );
637     return m_pDataContainer->GetReducedBitmapResolution();
638 }
639 
640 // -----------------------------------------------------------------------------
641 
IsReducedBitmapIncludesTransparency() const642 sal_Bool SvtBasePrintOptions::IsReducedBitmapIncludesTransparency() const
643 {
644     MutexGuard aGuard( GetOwnStaticMutex() );
645     return m_pDataContainer->IsReducedBitmapIncludesTransparency();
646 }
647 
648 // -----------------------------------------------------------------------------
649 
IsConvertToGreyscales() const650 sal_Bool SvtBasePrintOptions::IsConvertToGreyscales() const
651 {
652     MutexGuard aGuard( GetOwnStaticMutex() );
653     return m_pDataContainer->IsConvertToGreyscales();
654 }
655 
656 // -----------------------------------------------------------------------------
657 
SetReduceTransparency(sal_Bool bState)658 void SvtBasePrintOptions::SetReduceTransparency( sal_Bool bState )
659 {
660     MutexGuard aGuard( GetOwnStaticMutex() );
661     m_pDataContainer->SetReduceTransparency( bState ) ;
662 }
663 
664 // -----------------------------------------------------------------------------
665 
SetReducedTransparencyMode(sal_Int16 nMode)666 void SvtBasePrintOptions::SetReducedTransparencyMode( sal_Int16 nMode )
667 {
668     MutexGuard aGuard( GetOwnStaticMutex() );
669     m_pDataContainer->SetReducedTransparencyMode( nMode );
670 }
671 
672 // -----------------------------------------------------------------------------
673 
SetReduceGradients(sal_Bool bState)674 void SvtBasePrintOptions::SetReduceGradients( sal_Bool bState )
675 {
676     MutexGuard aGuard( GetOwnStaticMutex() );
677     m_pDataContainer->SetReduceGradients( bState );
678 }
679 
680 // -----------------------------------------------------------------------------
681 
SetReducedGradientMode(sal_Int16 nMode)682 void SvtBasePrintOptions::SetReducedGradientMode( sal_Int16 nMode )
683 {
684     MutexGuard aGuard( GetOwnStaticMutex() );
685     m_pDataContainer->SetReducedGradientMode( nMode );
686 }
687 
688 // -----------------------------------------------------------------------------
689 
SetReducedGradientStepCount(sal_Int16 nStepCount)690 void SvtBasePrintOptions::SetReducedGradientStepCount( sal_Int16 nStepCount )
691 {
692     MutexGuard aGuard( GetOwnStaticMutex() );
693     m_pDataContainer->SetReducedGradientStepCount( nStepCount );
694 }
695 
696 // -----------------------------------------------------------------------------
697 
SetReduceBitmaps(sal_Bool bState)698 void SvtBasePrintOptions::SetReduceBitmaps( sal_Bool bState )
699 {
700     MutexGuard aGuard( GetOwnStaticMutex() );
701     m_pDataContainer->SetReduceBitmaps( bState );
702 }
703 
704 // -----------------------------------------------------------------------------
705 
SetReducedBitmapMode(sal_Int16 nMode)706 void SvtBasePrintOptions::SetReducedBitmapMode( sal_Int16 nMode )
707 {
708     MutexGuard aGuard( GetOwnStaticMutex() );
709     m_pDataContainer->SetReducedBitmapMode( nMode );
710 }
711 
712 // -----------------------------------------------------------------------------
713 
SetReducedBitmapResolution(sal_Int16 nResolution)714 void SvtBasePrintOptions::SetReducedBitmapResolution( sal_Int16 nResolution )
715 {
716     MutexGuard aGuard( GetOwnStaticMutex() );
717     m_pDataContainer->SetReducedBitmapResolution( nResolution );
718 }
719 
720 // -----------------------------------------------------------------------------
721 
SetReducedBitmapIncludesTransparency(sal_Bool bState)722 void SvtBasePrintOptions::SetReducedBitmapIncludesTransparency( sal_Bool bState )
723 {
724     MutexGuard aGuard( GetOwnStaticMutex() );
725     m_pDataContainer->SetReducedBitmapIncludesTransparency( bState );
726 }
727 
728 // -----------------------------------------------------------------------------
729 
SetConvertToGreyscales(sal_Bool bState)730 void SvtBasePrintOptions::SetConvertToGreyscales( sal_Bool bState )
731 {
732     MutexGuard aGuard( GetOwnStaticMutex() );
733     m_pDataContainer->SetConvertToGreyscales( bState );
734 }
735 
736 // -----------------------------------------------------------------------------
737 
GetPrinterOptions(PrinterOptions & rOptions) const738 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 
SetPrinterOptions(const PrinterOptions & rOptions)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 
SvtPrinterOptions()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 
~SvtPrinterOptions()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 
SvtPrintFileOptions()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 
~SvtPrintFileOptions()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