xref: /AOO41X/main/unotools/source/config/printwarningoptions.cxx (revision b5088357f810cb81479bbbd0e021cd3c9835ca0d)
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_unotools.hxx"
26 #ifndef GCC
27 #endif
28 
29 //_________________________________________________________________________________________________________________
30 //  includes
31 //_________________________________________________________________________________________________________________
32 
33 #include <unotools/printwarningoptions.hxx>
34 #include <unotools/configmgr.hxx>
35 #include <unotools/configitem.hxx>
36 #include <tools/debug.hxx>
37 #include <com/sun/star/uno/Any.hxx>
38 #include <com/sun/star/uno/Sequence.hxx>
39 
40 #include <itemholder1.hxx>
41 
42 //_________________________________________________________________________________________________________________
43 //  namespaces
44 //_________________________________________________________________________________________________________________
45 
46 using namespace ::utl                   ;
47 using namespace ::rtl                   ;
48 using namespace ::osl                   ;
49 using namespace ::com::sun::star::uno   ;
50 
51 //_________________________________________________________________________________________________________________
52 //  const
53 //_________________________________________________________________________________________________________________
54 
55 #define ROOTNODE_START                  OUString(RTL_CONSTASCII_USTRINGPARAM("Office.Common/Print"))
56 
57 #define PROPERTYNAME_PAPERSIZE          OUString(RTL_CONSTASCII_USTRINGPARAM("Warning/PaperSize"))
58 #define PROPERTYNAME_PAPERORIENTATION   OUString(RTL_CONSTASCII_USTRINGPARAM("Warning/PaperOrientation"))
59 #define PROPERTYNAME_NOTFOUND           OUString(RTL_CONSTASCII_USTRINGPARAM("Warning/NotFound"))
60 #define PROPERTYNAME_TRANSPARENCY       OUString(RTL_CONSTASCII_USTRINGPARAM("Warning/Transparency"))
61 #define PROPERTYNAME_PRINTINGMODIFIESDOCUMENT  OUString(RTL_CONSTASCII_USTRINGPARAM("PrintingModifiesDocument"))
62 
63 #define PROPERTYHANDLE_PAPERSIZE        0
64 #define PROPERTYHANDLE_PAPERORIENTATION 1
65 #define PROPERTYHANDLE_NOTFOUND         2
66 #define PROPERTYHANDLE_TRANSPARENCY     3
67 #define PROPERTYHDL_PRINTINGMODIFIESDOCUMENT            4
68 
69 #define PROPERTYCOUNT                   5
70 
71 class SvtPrintWarningOptions_Impl : public ConfigItem
72 {
73 public:
74 
75 //---------------------------------------------------------------------------------------------------------
76 //  constructor / destructor
77 //---------------------------------------------------------------------------------------------------------
78 
79      SvtPrintWarningOptions_Impl();
80     ~SvtPrintWarningOptions_Impl();
81 
82 //---------------------------------------------------------------------------------------------------------
83 //  overloaded methods of baseclass
84 //---------------------------------------------------------------------------------------------------------
85 
86     virtual void Commit();
87     virtual void    Notify( const com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
88 
89 //---------------------------------------------------------------------------------------------------------
90 //  public interface
91 //---------------------------------------------------------------------------------------------------------
92 
IsPaperSize() const93     sal_Bool    IsPaperSize() const { return m_bPaperSize; }
IsPaperOrientation() const94     sal_Bool    IsPaperOrientation() const { return m_bPaperOrientation; }
IsNotFound() const95     sal_Bool    IsNotFound() const { return m_bNotFound; }
IsTransparency() const96     sal_Bool    IsTransparency() const { return m_bTransparency; }
IsModifyDocumentOnPrintingAllowed() const97     sal_Bool    IsModifyDocumentOnPrintingAllowed() const { return m_bModifyDocumentOnPrintingAllowed; }
98 
SetPaperSize(sal_Bool bState)99     void        SetPaperSize( sal_Bool bState ) { m_bPaperSize = bState; SetModified(); }
SetPaperOrientation(sal_Bool bState)100     void        SetPaperOrientation( sal_Bool bState ) { m_bPaperOrientation = bState; SetModified(); }
SetNotFound(sal_Bool bState)101     void        SetNotFound( sal_Bool bState ) { m_bNotFound = bState; SetModified(); }
SetTransparency(sal_Bool bState)102     void        SetTransparency( sal_Bool bState ) { m_bTransparency = bState; SetModified(); }
SetModifyDocumentOnPrintingAllowed(sal_Bool bState)103     void        SetModifyDocumentOnPrintingAllowed( sal_Bool bState ) { m_bModifyDocumentOnPrintingAllowed = bState; SetModified(); }
104 
105 //-------------------------------------------------------------------------------------------------------------
106 //  private methods
107 //-------------------------------------------------------------------------------------------------------------
108 
109 private:
110 
111     static Sequence< OUString > impl_GetPropertyNames();
112 
113 //-------------------------------------------------------------------------------------------------------------
114 //  private member
115 //-------------------------------------------------------------------------------------------------------------
116 
117 private:
118 
119     sal_Bool    m_bPaperSize;
120     sal_Bool    m_bPaperOrientation;
121     sal_Bool    m_bNotFound;
122     sal_Bool    m_bTransparency;
123     sal_Bool    m_bModifyDocumentOnPrintingAllowed;
124 };
125 
126 //_________________________________________________________________________________________________________________
127 //  definitions
128 //_________________________________________________________________________________________________________________
129 
130 //*****************************************************************************************************************
131 //  constructor
132 //*****************************************************************************************************************
SvtPrintWarningOptions_Impl()133 SvtPrintWarningOptions_Impl::SvtPrintWarningOptions_Impl() :
134     ConfigItem( ROOTNODE_START  ),
135     m_bPaperSize( sal_False ),
136     m_bPaperOrientation( sal_False ),
137     m_bNotFound( sal_False ),
138     m_bTransparency( sal_True ),
139     m_bModifyDocumentOnPrintingAllowed( sal_True )
140 {
141     Sequence< OUString >    seqNames( impl_GetPropertyNames() );
142     Sequence< Any >         seqValues( GetProperties( seqNames ) );
143 
144     DBG_ASSERT( !(seqNames.getLength()!=seqValues.getLength()), "SvtPrintWarningOptions_Impl::SvtPrintWarningOptions_Impl()\nI miss some values of configuration keys!\n" );
145 
146     // Copy values from list in right order to our internal member.
147     sal_Int32 nPropertyCount = seqValues.getLength();
148     sal_Int32 nProperty = 0;
149 
150     for( nProperty=0; nProperty<nPropertyCount; ++nProperty )
151     {
152         DBG_ASSERT( !(seqValues[nProperty].hasValue()==sal_False), "SvtPrintWarningOptions_Impl::SvtPrintWarningOptions_Impl()\nInvalid property value for property detected!\n" );
153 
154         switch( nProperty )
155         {
156             case PROPERTYHANDLE_PAPERSIZE:
157             {
158                 DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "Invalid type" );
159                 seqValues[nProperty] >>= m_bPaperSize;
160             }
161             break;
162 
163             case PROPERTYHANDLE_PAPERORIENTATION:
164             {
165                 DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "Invalid type" );
166                 seqValues[nProperty] >>= m_bPaperOrientation;
167             }
168             break;
169 
170             case PROPERTYHANDLE_NOTFOUND:
171             {
172                 DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "Invalid type" );
173                 seqValues[nProperty] >>= m_bNotFound;
174             }
175             break;
176 
177             case PROPERTYHANDLE_TRANSPARENCY:
178             {
179                 DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "Invalid type" );
180                 seqValues[nProperty] >>= m_bTransparency;
181             }
182             break;
183             case PROPERTYHDL_PRINTINGMODIFIESDOCUMENT:
184             {
185                 DBG_ASSERT(!(seqValues[nProperty].getValueTypeClass()!=TypeClass_BOOLEAN), "Invalid type" );
186                 seqValues[nProperty] >>= m_bModifyDocumentOnPrintingAllowed;
187             }
188             break;
189 
190         }
191     }
192 }
193 
194 //*****************************************************************************************************************
195 //  destructor
196 //*****************************************************************************************************************
~SvtPrintWarningOptions_Impl()197 SvtPrintWarningOptions_Impl::~SvtPrintWarningOptions_Impl()
198 {
199     if( IsModified() )
200         Commit();
201 }
202 
203 //*****************************************************************************************************************
204 //  Commit
205 //*****************************************************************************************************************
Commit()206 void SvtPrintWarningOptions_Impl::Commit()
207 {
208     Sequence< OUString >    aSeqNames( impl_GetPropertyNames() );
209     Sequence< Any >         aSeqValues( aSeqNames.getLength() );
210 
211     for( sal_Int32 nProperty = 0, nCount = aSeqNames.getLength(); nProperty < nCount; ++nProperty )
212     {
213         switch( nProperty )
214         {
215             case PROPERTYHANDLE_PAPERSIZE:
216                 aSeqValues[nProperty] <<= m_bPaperSize;
217             break;
218 
219             case PROPERTYHANDLE_PAPERORIENTATION:
220                 aSeqValues[nProperty] <<= m_bPaperOrientation;
221             break;
222 
223             case PROPERTYHANDLE_NOTFOUND:
224                 aSeqValues[nProperty] <<= m_bNotFound;
225             break;
226 
227             case PROPERTYHANDLE_TRANSPARENCY:
228                 aSeqValues[nProperty] <<= m_bTransparency;
229             break;
230             case PROPERTYHDL_PRINTINGMODIFIESDOCUMENT:
231                 aSeqValues[nProperty] <<= m_bModifyDocumentOnPrintingAllowed;
232             break;
233         }
234     }
235 
236     PutProperties( aSeqNames, aSeqValues );
237 }
238 
Notify(const Sequence<rtl::OUString> &)239 void SvtPrintWarningOptions_Impl::Notify( const Sequence< rtl::OUString >&  )
240 {
241 }
242 
243 //*****************************************************************************************************************
244 //  private method
245 //*****************************************************************************************************************
impl_GetPropertyNames()246 Sequence< OUString > SvtPrintWarningOptions_Impl::impl_GetPropertyNames()
247 {
248     // Build static list of configuration key names.
249     static const OUString pProperties[] =
250     {
251         PROPERTYNAME_PAPERSIZE,
252         PROPERTYNAME_PAPERORIENTATION,
253         PROPERTYNAME_NOTFOUND,
254         PROPERTYNAME_TRANSPARENCY,
255         PROPERTYNAME_PRINTINGMODIFIESDOCUMENT
256     };
257 
258     // Initialize return sequence with these list ...
259     static const Sequence< OUString > seqPropertyNames( pProperties, PROPERTYCOUNT );
260 
261     return seqPropertyNames;
262 }
263 
264 //*****************************************************************************************************************
265 //  initialize static member
266 //  DON'T DO IT IN YOUR HEADER!
267 //  see definition for further informations
268 //*****************************************************************************************************************
269 SvtPrintWarningOptions_Impl*    SvtPrintWarningOptions::m_pDataContainer = NULL;
270 sal_Int32                       SvtPrintWarningOptions::m_nRefCount = 0;
271 
272 //*****************************************************************************************************************
273 //  constructor
274 //*****************************************************************************************************************
SvtPrintWarningOptions()275 SvtPrintWarningOptions::SvtPrintWarningOptions()
276 {
277     // Global access, must be guarded (multithreading!).
278     MutexGuard aGuard( GetOwnStaticMutex() );
279     // Increase ouer refcount ...
280     ++m_nRefCount;
281     // ... and initialize ouer data container only if it not already!
282     if( m_pDataContainer == NULL )
283     {
284         m_pDataContainer = new SvtPrintWarningOptions_Impl();
285         ItemHolder1::holdConfigItem(E_PRINTWARNINGOPTIONS);
286     }
287 }
288 
289 //*****************************************************************************************************************
290 //  destructor
291 //*****************************************************************************************************************
~SvtPrintWarningOptions()292 SvtPrintWarningOptions::~SvtPrintWarningOptions()
293 {
294     // Global access, must be guarded (multithreading!)
295     MutexGuard aGuard( GetOwnStaticMutex() );
296     // Decrease ouer refcount.
297     --m_nRefCount;
298     // If last instance was deleted ...
299     // we must destroy ouer static data container!
300     if( m_nRefCount <= 0 )
301     {
302         delete m_pDataContainer;
303         m_pDataContainer = NULL;
304     }
305 }
306 
307 //*****************************************************************************************************************
308 //  public method
309 //*****************************************************************************************************************
IsPaperSize() const310 sal_Bool SvtPrintWarningOptions::IsPaperSize() const
311 {
312     MutexGuard aGuard( GetOwnStaticMutex() );
313     return m_pDataContainer->IsPaperSize();
314 }
315 
316 //*****************************************************************************************************************
317 //  public method
318 //*****************************************************************************************************************
IsPaperOrientation() const319 sal_Bool SvtPrintWarningOptions::IsPaperOrientation() const
320 {
321     MutexGuard aGuard( GetOwnStaticMutex() );
322     return m_pDataContainer->IsPaperOrientation();
323 }
324 
325 //*****************************************************************************************************************
326 //  public method
327 //*****************************************************************************************************************
IsNotFound() const328 sal_Bool SvtPrintWarningOptions::IsNotFound() const
329 {
330     MutexGuard aGuard( GetOwnStaticMutex() );
331     return m_pDataContainer->IsNotFound();
332 }
333 
334 //*****************************************************************************************************************
335 //  public method
336 //*****************************************************************************************************************
IsTransparency() const337 sal_Bool SvtPrintWarningOptions::IsTransparency() const
338 {
339     MutexGuard aGuard( GetOwnStaticMutex() );
340     return m_pDataContainer->IsTransparency();
341 }
342 
343 //*****************************************************************************************************************
344 //  public method
345 //*****************************************************************************************************************
SetPaperSize(sal_Bool bState)346 void SvtPrintWarningOptions::SetPaperSize( sal_Bool bState )
347 {
348     MutexGuard aGuard( GetOwnStaticMutex() );
349     m_pDataContainer->SetPaperSize( bState );
350 }
351 
352 //*****************************************************************************************************************
353 //  public method
354 //*****************************************************************************************************************
SetPaperOrientation(sal_Bool bState)355 void SvtPrintWarningOptions::SetPaperOrientation( sal_Bool bState )
356 {
357     MutexGuard aGuard( GetOwnStaticMutex() );
358     m_pDataContainer->SetPaperOrientation( bState );
359 }
360 
361 //*****************************************************************************************************************
362 //  public method
363 //*****************************************************************************************************************
SetNotFound(sal_Bool bState)364 void SvtPrintWarningOptions::SetNotFound( sal_Bool bState )
365 {
366     MutexGuard aGuard( GetOwnStaticMutex() );
367     m_pDataContainer->SetNotFound( bState );
368 }
369 
370 //*****************************************************************************************************************
371 //  public method
372 //*****************************************************************************************************************
SetTransparency(sal_Bool bState)373 void SvtPrintWarningOptions::SetTransparency( sal_Bool bState )
374 {
375     MutexGuard aGuard( GetOwnStaticMutex() );
376     m_pDataContainer->SetTransparency( bState );
377 }
378 // -----------------------------------------------------------------------------
379 
IsModifyDocumentOnPrintingAllowed() const380 sal_Bool SvtPrintWarningOptions::IsModifyDocumentOnPrintingAllowed() const
381 {
382     MutexGuard aGuard( GetOwnStaticMutex() );
383     return m_pDataContainer->IsModifyDocumentOnPrintingAllowed();
384 }
385 
386 // -----------------------------------------------------------------------------
387 
SetModifyDocumentOnPrintingAllowed(sal_Bool bState)388 void SvtPrintWarningOptions::SetModifyDocumentOnPrintingAllowed( sal_Bool bState )
389 {
390     MutexGuard aGuard( GetOwnStaticMutex() );
391     m_pDataContainer->SetModifyDocumentOnPrintingAllowed( bState ) ;
392 }
393 
394 //*****************************************************************************************************************
395 //  private method
396 //*****************************************************************************************************************
GetOwnStaticMutex()397 Mutex& SvtPrintWarningOptions::GetOwnStaticMutex()
398 {
399     // Initialize static mutex only for one time!
400     static Mutex* pMutex = NULL;
401     // If these method first called (Mutex not already exist!) ...
402     if( pMutex == NULL )
403     {
404         // ... we must create a new one. Protect follow code with the global mutex -
405         // It must be - we create a static variable!
406         MutexGuard aGuard( Mutex::getGlobalMutex() );
407         // We must check our pointer again - because it can be that another instance of ouer class will be fastr then these!
408         if( pMutex == NULL )
409         {
410             // Create the new mutex and set it for return on static variable.
411             static Mutex aMutex;
412             pMutex = &aMutex;
413         }
414     }
415     // Return new created or already existing mutex object.
416     return *pMutex;
417 }
418