xref: /trunk/main/unotools/source/config/saveopt.cxx (revision d666495c4f609ab94ddded8b0141831070b22d11)
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 
27 #ifndef GCC
28 #endif
29 
30 #include <unotools/saveopt.hxx>
31 #include "rtl/instance.hxx"
32 #include <unotools/configmgr.hxx>
33 #include <unotools/configitem.hxx>
34 #include <tools/debug.hxx>
35 #include <com/sun/star/uno/Any.hxx>
36 #include <com/sun/star/uno/Sequence.hxx>
37 
38 #include <osl/mutex.hxx>
39 #include <comphelper/configurationhelper.hxx>
40 #include <unotools/processfactory.hxx>
41 #include <rtl/logfile.hxx>
42 #include "itemholder1.hxx"
43 
44 using namespace utl;
45 using namespace rtl;
46 using namespace com::sun::star::uno;
47 namespace css = ::com::sun::star;
48 
49 class SvtSaveOptions_Impl;
50 class SvtLoadOptions_Impl;
51 
52 #define CFG_READONLY_DEFAULT    sal_False
53 
54 struct SvtLoadSaveOptions_Impl
55 {
56     SvtSaveOptions_Impl* pSaveOpt;
57     SvtLoadOptions_Impl* pLoadOpt;
58 };
59 
60 static SvtLoadSaveOptions_Impl* pOptions = NULL;
61 static sal_Int32           nRefCount = 0;
62 
63 class SvtSaveOptions_Impl : public utl::ConfigItem
64 {
65     sal_Int32                           nAutoSaveTime;
66     sal_Bool                            bUseUserData,
67                                         bBackup,
68                                         bAutoSave,
69                                         bAutoSavePrompt,
70                                         bDocInfSave,
71                                         bSaveWorkingSet,
72                                         bSaveDocView,
73                                         bSaveRelINet,
74                                         bSaveRelFSys,
75                                         bSaveUnpacked,
76                                         bDoPrettyPrinting,
77                                         bWarnAlienFormat,
78                                         bLoadDocPrinter,
79                                         bUseSHA1InODF12,
80                                         bUseBlowfishInODF12;
81 
82     SvtSaveOptions::ODFDefaultVersion   eODFDefaultVersion;
83 
84     sal_Bool                            bROAutoSaveTime,
85                                         bROUseUserData,
86                                         bROBackup,
87                                         bROAutoSave,
88                                         bROAutoSavePrompt,
89                                         bRODocInfSave,
90                                         bROSaveWorkingSet,
91                                         bROSaveDocView,
92                                         bROSaveRelINet,
93                                         bROSaveRelFSys,
94                                         bROSaveUnpacked,
95                                         bROWarnAlienFormat,
96                                         bRODoPrettyPrinting,
97                                         bROLoadDocPrinter,
98                                         bROODFDefaultVersion,
99                                         bROUseSHA1InODF12,
100                                         bROUseBlowfishInODF12;
101 
102 public:
103                             SvtSaveOptions_Impl();
104                             ~SvtSaveOptions_Impl();
105 
106     virtual void            Notify( const com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
107     virtual void            Commit();
108 
GetAutoSaveTime() const109     sal_Int32               GetAutoSaveTime() const             { return nAutoSaveTime; }
IsUseUserData() const110     sal_Bool                    IsUseUserData() const               { return bUseUserData; }
IsBackup() const111     sal_Bool                    IsBackup() const                    { return bBackup; }
IsAutoSave() const112     sal_Bool                    IsAutoSave() const                  { return bAutoSave; }
IsAutoSavePrompt() const113     sal_Bool                    IsAutoSavePrompt() const            { return bAutoSavePrompt; }
IsDocInfoSave() const114     sal_Bool                    IsDocInfoSave() const               { return bDocInfSave; }
IsSaveWorkingSet() const115     sal_Bool                    IsSaveWorkingSet() const            { return bSaveWorkingSet;         }
IsSaveDocView() const116     sal_Bool                    IsSaveDocView() const               { return bSaveDocView; }
IsSaveRelINet() const117     sal_Bool                    IsSaveRelINet() const               { return bSaveRelINet; }
IsSaveRelFSys() const118     sal_Bool                    IsSaveRelFSys() const               { return bSaveRelFSys; }
IsSaveUnpacked() const119     sal_Bool                    IsSaveUnpacked() const              { return bSaveUnpacked; }
IsPrettyPrintingEnabled() const120     sal_Bool                IsPrettyPrintingEnabled( ) const    { return bDoPrettyPrinting; }
IsWarnAlienFormat() const121     sal_Bool                IsWarnAlienFormat() const           { return bWarnAlienFormat; }
IsLoadDocPrinter() const122     sal_Bool                IsLoadDocPrinter() const            { return bLoadDocPrinter; }
IsUseSHA1InODF12() const123     sal_Bool                IsUseSHA1InODF12() const            { return bUseSHA1InODF12; }
IsUseBlowfishInODF12() const124     sal_Bool                IsUseBlowfishInODF12() const        { return bUseBlowfishInODF12; }
125 
126     SvtSaveOptions::ODFDefaultVersion
GetODFDefaultVersion() const127                             GetODFDefaultVersion() const        { return eODFDefaultVersion; }
128 
129     void                    SetAutoSaveTime( sal_Int32 n );
130     void                    SetUseUserData( sal_Bool b );
131     void                    SetBackup( sal_Bool b );
132     void                    SetAutoSave( sal_Bool b );
133     void                    SetAutoSavePrompt( sal_Bool b );
134     void                    SetDocInfoSave( sal_Bool b );
135     void                    SetSaveWorkingSet( sal_Bool b );
136     void                    SetSaveDocView( sal_Bool b );
137     void                    SetSaveRelINet( sal_Bool b );
138     void                    SetSaveRelFSys( sal_Bool b );
139     void                    SetSaveUnpacked( sal_Bool b );
140     void                    EnablePrettyPrinting( sal_Bool _bDoPP );
141     void                    SetWarnAlienFormat( sal_Bool _bDoPP );
142     void                    SetLoadDocPrinter( sal_Bool bNew );
143     void                    SetUseSHA1InODF12( sal_Bool bUse );
144     void                    SetUseBlowfishInODF12( sal_Bool bUse );
145     void                    SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion eNew );
146 
147     sal_Bool                IsReadOnly( SvtSaveOptions::EOption eOption ) const;
148 };
149 
SetAutoSaveTime(sal_Int32 n)150 void SvtSaveOptions_Impl::SetAutoSaveTime( sal_Int32 n )
151 {
152     if (!bROAutoSaveTime && nAutoSaveTime!=n)
153     {
154         nAutoSaveTime = n;
155         SetModified();
156         Commit();
157     }
158 }
159 
SetUseUserData(sal_Bool b)160 void SvtSaveOptions_Impl::SetUseUserData( sal_Bool b )
161 {
162     if (!bROUseUserData && bUseUserData!=b)
163     {
164         bUseUserData = b;
165         SetModified();
166     }
167 }
168 
SetBackup(sal_Bool b)169 void SvtSaveOptions_Impl::SetBackup( sal_Bool b )
170 {
171     if (!bROBackup && bBackup!=b)
172     {
173         bBackup = b;
174         SetModified();
175     }
176 }
177 
SetAutoSave(sal_Bool b)178 void SvtSaveOptions_Impl::SetAutoSave( sal_Bool b )
179 {
180     if (!bROAutoSave && bAutoSave!=b)
181     {
182         bAutoSave = b;
183         SetModified();
184         Commit();
185     }
186 }
187 
SetAutoSavePrompt(sal_Bool b)188 void SvtSaveOptions_Impl::SetAutoSavePrompt( sal_Bool b )
189 {
190     if (!bROAutoSavePrompt && bAutoSavePrompt!=b)
191     {
192         bAutoSavePrompt = b;
193         SetModified();
194     }
195 }
196 
SetDocInfoSave(sal_Bool b)197 void SvtSaveOptions_Impl::SetDocInfoSave(sal_Bool b)
198 {
199     if (!bRODocInfSave && bDocInfSave!=b)
200     {
201         bDocInfSave = b;
202         SetModified();
203     }
204 }
205 
SetSaveWorkingSet(sal_Bool b)206 void SvtSaveOptions_Impl::SetSaveWorkingSet( sal_Bool b )
207 {
208     if (!bROSaveWorkingSet && bSaveWorkingSet!=b)
209     {
210         bSaveWorkingSet = b;
211         SetModified();
212     }
213 }
214 
SetSaveDocView(sal_Bool b)215 void SvtSaveOptions_Impl::SetSaveDocView( sal_Bool b )
216 {
217     if (!bROSaveDocView && bSaveDocView!=b)
218     {
219         bSaveDocView = b;
220         SetModified();
221     }
222 }
223 
SetSaveRelINet(sal_Bool b)224 void SvtSaveOptions_Impl::SetSaveRelINet( sal_Bool b )
225 {
226     if (!bROSaveRelINet && bSaveRelINet!=b)
227     {
228         bSaveRelINet = b;
229         SetModified();
230     }
231 }
232 
SetSaveRelFSys(sal_Bool b)233 void SvtSaveOptions_Impl::SetSaveRelFSys( sal_Bool b )
234 {
235     if (!bROSaveRelFSys && bSaveRelFSys!=b)
236     {
237         bSaveRelFSys = b;
238         SetModified();
239     }
240 }
241 
SetSaveUnpacked(sal_Bool b)242 void SvtSaveOptions_Impl::SetSaveUnpacked( sal_Bool b )
243 {
244     if (!bROSaveUnpacked && bSaveUnpacked!=b)
245     {
246         bSaveUnpacked = b;
247         SetModified();
248     }
249 }
250 
EnablePrettyPrinting(sal_Bool _bDoPP)251 void SvtSaveOptions_Impl::EnablePrettyPrinting( sal_Bool _bDoPP )
252 {
253     if (!bRODoPrettyPrinting && bDoPrettyPrinting!=_bDoPP)
254     {
255         bDoPrettyPrinting = _bDoPP;
256         SetModified();
257     }
258 }
259 
SetWarnAlienFormat(sal_Bool _bDoPP)260 void SvtSaveOptions_Impl::SetWarnAlienFormat( sal_Bool _bDoPP )
261 {
262     if (!bROWarnAlienFormat && bWarnAlienFormat!=_bDoPP)
263     {
264         bWarnAlienFormat = _bDoPP;
265         SetModified();
266     }
267 }
268 
SetLoadDocPrinter(sal_Bool bNew)269 void SvtSaveOptions_Impl::SetLoadDocPrinter( sal_Bool bNew )
270 {
271     if ( !bROLoadDocPrinter && bLoadDocPrinter != bNew )
272     {
273         bLoadDocPrinter = bNew;
274         SetModified();
275     }
276 }
277 
SetODFDefaultVersion(SvtSaveOptions::ODFDefaultVersion eNew)278 void SvtSaveOptions_Impl::SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion eNew )
279 {
280     if ( !bROODFDefaultVersion && eODFDefaultVersion != eNew )
281     {
282         eODFDefaultVersion = eNew;
283         SetModified();
284     }
285 }
286 
SetUseSHA1InODF12(sal_Bool bUse)287 void SvtSaveOptions_Impl::SetUseSHA1InODF12( sal_Bool bUse )
288 {
289     if ( !bROUseSHA1InODF12 && bUseSHA1InODF12 != bUse )
290     {
291         bUseSHA1InODF12 = bUse;
292         SetModified();
293     }
294 }
295 
SetUseBlowfishInODF12(sal_Bool bUse)296 void SvtSaveOptions_Impl::SetUseBlowfishInODF12( sal_Bool bUse )
297 {
298     if ( !bROUseBlowfishInODF12 && bUseBlowfishInODF12 != bUse )
299     {
300         bUseBlowfishInODF12 = bUse;
301         SetModified();
302     }
303 }
304 
IsReadOnly(SvtSaveOptions::EOption eOption) const305 sal_Bool SvtSaveOptions_Impl::IsReadOnly( SvtSaveOptions::EOption eOption ) const
306 {
307     sal_Bool bReadOnly = CFG_READONLY_DEFAULT;
308     switch(eOption)
309     {
310         case SvtSaveOptions::E_AUTOSAVETIME :
311             bReadOnly = bROAutoSaveTime;
312             break;
313         case SvtSaveOptions::E_USEUSERDATA :
314             bReadOnly = bROUseUserData;
315             break;
316         case SvtSaveOptions::E_BACKUP :
317             bReadOnly = bROBackup;
318             break;
319         case SvtSaveOptions::E_AUTOSAVE :
320             bReadOnly = bROAutoSave;
321             break;
322         case SvtSaveOptions::E_AUTOSAVEPROMPT :
323             bReadOnly = bROAutoSavePrompt;
324             break;
325         case SvtSaveOptions::E_DOCINFSAVE :
326             bReadOnly = bRODocInfSave;
327             break;
328         case SvtSaveOptions::E_SAVEWORKINGSET :
329             bReadOnly = bROSaveWorkingSet;
330             break;
331         case SvtSaveOptions::E_SAVEDOCVIEW :
332             bReadOnly = bROSaveDocView;
333             break;
334         case SvtSaveOptions::E_SAVERELINET :
335             bReadOnly = bROSaveRelINet;
336             break;
337         case SvtSaveOptions::E_SAVERELFSYS :
338             bReadOnly = bROSaveRelFSys;
339             break;
340         case SvtSaveOptions::E_SAVEUNPACKED :
341             bReadOnly = bROSaveUnpacked;
342             break;
343         case SvtSaveOptions::E_DOPRETTYPRINTING :
344             bReadOnly = bRODoPrettyPrinting;
345             break;
346         case SvtSaveOptions::E_WARNALIENFORMAT :
347             bReadOnly = bROWarnAlienFormat;
348             break;
349         case SvtSaveOptions::E_LOADDOCPRINTER :
350             bReadOnly = bROLoadDocPrinter;
351             break;
352         case SvtSaveOptions::E_ODFDEFAULTVERSION :
353             bReadOnly = bROLoadDocPrinter;
354             break;
355         case SvtSaveOptions::E_USESHA1INODF12:
356             bReadOnly = bROUseSHA1InODF12;
357             break;
358         case SvtSaveOptions::E_USEBLOWFISHINODF12:
359             bReadOnly = bROUseBlowfishInODF12;
360             break;
361     }
362     return bReadOnly;
363 }
364 
365 #define FORMAT              0
366 #define TIMEINTERVALL       1
367 #define USEUSERDATA         2
368 #define CREATEBACKUP        3
369 #define AUTOSAVE            4
370 #define PROMPT              5
371 #define EDITPROPERTY        6
372 #define SAVEVIEWINFO        7
373 #define UNPACKED            8
374 #define PRETTYPRINTING      9
375 #define WARNALIENFORMAT     10
376 #define LOADDOCPRINTER      11
377 #define FILESYSTEM          12
378 #define INTERNET            13
379 #define SAVEWORKINGSET      14
380 #define ODFDEFAULTVERSION   15
381 #define USESHA1INODF12      16
382 #define USEBLOWFISHINODF12  17
383 
GetPropertyNames()384 Sequence< OUString > GetPropertyNames()
385 {
386     static const char* aPropNames[] =
387     {
388         "Graphic/Format",
389         "Document/AutoSaveTimeIntervall",
390         "Document/UseUserData",
391         "Document/CreateBackup",
392         "Document/AutoSave",
393         "Document/AutoSavePrompt",
394         "Document/EditProperty",
395         "Document/ViewInfo",
396         "Document/Unpacked",
397         "Document/PrettyPrinting",
398         "Document/WarnAlienFormat",
399         "Document/LoadPrinter",
400         "URL/FileSystem",
401         "URL/Internet",
402         "WorkingSet",
403         "ODF/DefaultVersion",
404         "ODF/UseSHA1InODF12",
405         "ODF/UseBlowfishInODF12"
406     };
407 
408     const int nCount = sizeof( aPropNames ) / sizeof( const char* );
409     Sequence< OUString > aNames( nCount );
410     OUString* pNames = aNames.getArray();
411     for ( int i = 0; i < nCount; i++ )
412         pNames[i] = OUString::createFromAscii( aPropNames[i] );
413 
414     return aNames;
415 }
416 
417 // -----------------------------------------------------------------------
418 
SvtSaveOptions_Impl()419 SvtSaveOptions_Impl::SvtSaveOptions_Impl()
420     : ConfigItem( OUString::createFromAscii("Office.Common/Save") )
421     , nAutoSaveTime( 0 )
422     , bUseUserData( sal_False )
423     , bBackup( sal_False )
424     , bAutoSave( sal_False )
425     , bAutoSavePrompt( sal_False )
426     , bDocInfSave( sal_False )
427     , bSaveWorkingSet( sal_False )
428     , bSaveDocView( sal_False )
429     , bSaveRelINet( sal_False )
430     , bSaveRelFSys( sal_False )
431     , bSaveUnpacked( sal_False )
432     , bDoPrettyPrinting( sal_False )
433     , bWarnAlienFormat( sal_True )
434     , bLoadDocPrinter( sal_True )
435     , bUseSHA1InODF12( sal_False )
436     , bUseBlowfishInODF12( sal_False )
437     , eODFDefaultVersion( SvtSaveOptions::ODFVER_012_EXT )
438     , bROAutoSaveTime( CFG_READONLY_DEFAULT )
439     , bROUseUserData( CFG_READONLY_DEFAULT )
440     , bROBackup( CFG_READONLY_DEFAULT )
441     , bROAutoSave( CFG_READONLY_DEFAULT )
442     , bROAutoSavePrompt( CFG_READONLY_DEFAULT )
443     , bRODocInfSave( CFG_READONLY_DEFAULT )
444     , bROSaveWorkingSet( CFG_READONLY_DEFAULT )
445     , bROSaveDocView( CFG_READONLY_DEFAULT )
446     , bROSaveRelINet( CFG_READONLY_DEFAULT )
447     , bROSaveRelFSys( CFG_READONLY_DEFAULT )
448     , bROSaveUnpacked( CFG_READONLY_DEFAULT )
449     , bROWarnAlienFormat( CFG_READONLY_DEFAULT )
450     , bRODoPrettyPrinting( CFG_READONLY_DEFAULT )
451     , bROLoadDocPrinter( CFG_READONLY_DEFAULT )
452     , bROODFDefaultVersion( CFG_READONLY_DEFAULT )
453     , bROUseSHA1InODF12( CFG_READONLY_DEFAULT )
454     , bROUseBlowfishInODF12( CFG_READONLY_DEFAULT )
455 {
456     Sequence< OUString > aNames = GetPropertyNames();
457     Sequence< Any > aValues = GetProperties( aNames );
458     Sequence< sal_Bool > aROStates = GetReadOnlyStates( aNames );
459     EnableNotification( aNames );
460     const Any* pValues = aValues.getConstArray();
461     const sal_Bool* pROStates = aROStates.getConstArray();
462     DBG_ASSERT( aValues.getLength() == aNames.getLength(), "GetProperties failed" );
463     DBG_ASSERT( aROStates.getLength() == aNames.getLength(), "GetReadOnlyStates failed" );
464     if ( aValues.getLength() == aNames.getLength() && aROStates.getLength() == aNames.getLength() )
465     {
466         for ( int nProp = 0; nProp < aNames.getLength(); nProp++ )
467         {
468             DBG_ASSERT( pValues[nProp].hasValue(), "property value missing" );
469             if ( pValues[nProp].hasValue() )
470             {
471                 sal_Int32 nTemp = 0;
472                 switch ( nProp )
473                 {
474                     case FORMAT:
475                         // not supported anymore
476                         break;
477 
478                     case TIMEINTERVALL :
479                         if ( pValues[nProp] >>= nTemp )
480                             nAutoSaveTime = nTemp;
481                         else {
482                             DBG_ERROR( "Wrong Type!" );
483                         };
484                         bROAutoSaveTime = pROStates[nProp];
485                         break;
486 
487                     case ODFDEFAULTVERSION :
488                     {
489                         sal_Int16 nTmp = 0;
490                         if ( pValues[nProp] >>= nTmp )
491                         {
492                             if( nTmp == 3 )
493                                 eODFDefaultVersion = SvtSaveOptions::ODFVER_012_EXT;
494                             else if( nTmp == 5 )
495                                 eODFDefaultVersion = SvtSaveOptions::ODFVER_013;
496                             else if( nTmp == 6 )
497                                 eODFDefaultVersion = SvtSaveOptions::ODFVER_013_EXT;
498                             else if( nTmp >= 0 && nTmp <= 4 )
499                                 eODFDefaultVersion = SvtSaveOptions::ODFDefaultVersion( nTmp );
500                         }
501                         else {
502                             DBG_ERRORFILE( "SvtSaveOptions_Impl::SvtSaveOptions_Impl(): Wrong Type!" );
503                         };
504                         bROODFDefaultVersion = pROStates[nProp];
505                         break;
506                     }
507 
508                     default:
509                     {
510                         sal_Bool bTemp = sal_Bool();
511                         if ( pValues[nProp] >>= bTemp )
512                         {
513                             switch ( nProp )
514                             {
515                                 case USEUSERDATA :
516                                     bUseUserData = bTemp;
517                                     bROUseUserData = pROStates[nProp];
518                                     break;
519                                 case CREATEBACKUP :
520                                     bBackup = bTemp;
521                                     bROBackup = pROStates[nProp];
522                                     break;
523                                 case AUTOSAVE :
524                                     bAutoSave = bTemp;
525                                     bROAutoSave = pROStates[nProp];
526                                     break;
527                                 case PROMPT :
528                                     bAutoSavePrompt = bTemp;
529                                     bROAutoSavePrompt = pROStates[nProp];
530                                     break;
531                                 case EDITPROPERTY :
532                                     bDocInfSave = bTemp;
533                                     bRODocInfSave = pROStates[nProp];
534                                     break;
535                                 case SAVEWORKINGSET :
536                                     bSaveWorkingSet = bTemp;
537                                     bROSaveWorkingSet = pROStates[nProp];
538                                     break;
539                                 case SAVEVIEWINFO :
540                                     bSaveDocView = bTemp;
541                                     bROSaveDocView = pROStates[nProp];
542                                     break;
543                                 case FILESYSTEM :
544                                     bSaveRelFSys = bTemp;
545                                     bROSaveRelFSys = pROStates[nProp];
546                                     break;
547                                 case INTERNET :
548                                     bSaveRelINet = bTemp;
549                                     bROSaveRelINet = pROStates[nProp];
550                                     break;
551                                 case UNPACKED :
552                                     bSaveUnpacked = bTemp;
553                                     bROSaveUnpacked = pROStates[nProp];
554                                     break;
555 
556                                 case PRETTYPRINTING:
557                                     bDoPrettyPrinting = bTemp;
558                                     bRODoPrettyPrinting = pROStates[nProp];
559                                     break;
560 
561                                 case WARNALIENFORMAT:
562                                     bWarnAlienFormat = bTemp;
563                                     bROWarnAlienFormat = pROStates[nProp];
564                                     break;
565 
566                                 case LOADDOCPRINTER:
567                                     bLoadDocPrinter = bTemp;
568                                     bROLoadDocPrinter = pROStates[nProp];
569                                     break;
570 
571                                 case USESHA1INODF12:
572                                     bUseSHA1InODF12 = bTemp;
573                                     bROUseSHA1InODF12 = pROStates[nProp];
574                                     break;
575 
576                                 case USEBLOWFISHINODF12:
577                                     bUseBlowfishInODF12 = bTemp;
578                                     bROUseBlowfishInODF12 = pROStates[nProp];
579                                     break;
580 
581                                 default :
582                                     DBG_ERRORFILE( "invalid index to load a path" );
583                             }
584                         }
585                         else
586                         {
587                             DBG_ERROR( "Wrong Type!" );
588                         }
589                     }
590                 }
591             }
592         }
593     }
594 
595     try
596     {
597     css::uno::Reference< css::uno::XInterface > xCFG = ::comphelper::ConfigurationHelper::openConfig(
598         ::utl::getProcessServiceFactory(),
599         ::rtl::OUString::createFromAscii("org.openoffice.Office.Recovery"),
600         ::comphelper::ConfigurationHelper::E_READONLY);
601 
602     ::comphelper::ConfigurationHelper::readRelativeKey(
603         xCFG,
604         ::rtl::OUString::createFromAscii("AutoSave"),
605         ::rtl::OUString::createFromAscii("Enabled")) >>= bAutoSave;
606 
607     ::comphelper::ConfigurationHelper::readRelativeKey(
608         xCFG,
609         ::rtl::OUString::createFromAscii("AutoSave"),
610         ::rtl::OUString::createFromAscii("TimeIntervall")) >>= nAutoSaveTime;
611     }
612     catch(const css::uno::Exception&)
613         { DBG_ERROR("Could not find needed informations for AutoSave feature."); }
614 }
615 
~SvtSaveOptions_Impl()616 SvtSaveOptions_Impl::~SvtSaveOptions_Impl()
617 {}
618 
Commit()619 void SvtSaveOptions_Impl::Commit()
620 {
621     Sequence< OUString > aOrgNames = GetPropertyNames();
622     OUString* pOrgNames = aOrgNames.getArray();
623     sal_Int32 nOrgCount = aOrgNames.getLength();
624 
625     Sequence< OUString > aNames( nOrgCount );
626     Sequence< Any > aValues( nOrgCount );
627     OUString* pNames = aNames.getArray();
628     Any* pValues = aValues.getArray();
629     sal_Int32 nRealCount = 0;
630 
631     for (sal_Int32 i=0; i<nOrgCount; ++i)
632     {
633         switch (i)
634         {
635             case FORMAT:
636                 // not supported anymore
637                 break;
638             case TIMEINTERVALL :
639                 if (!bROAutoSaveTime)
640                 {
641                     pValues[nRealCount] <<= nAutoSaveTime;
642                     pNames[nRealCount] = pOrgNames[i];
643                     ++nRealCount;
644                 }
645                 break;
646             case USEUSERDATA :
647                 if (!bROUseUserData)
648                 {
649                     pValues[nRealCount] <<= bUseUserData;
650                     pNames[nRealCount] = pOrgNames[i];
651                     ++nRealCount;
652                 }
653                 break;
654             case CREATEBACKUP :
655                 if (!bROBackup)
656                 {
657                     pValues[nRealCount] <<= bBackup;
658                     pNames[nRealCount] = pOrgNames[i];
659                     ++nRealCount;
660                 }
661                 break;
662             case AUTOSAVE :
663                 if (!bROAutoSave)
664                 {
665                     pValues[nRealCount] <<= bAutoSave;
666                     pNames[nRealCount] = pOrgNames[i];
667                     ++nRealCount;
668                 }
669                 break;
670             case PROMPT :
671                 if (!bROAutoSavePrompt)
672                 {
673                     pValues[nRealCount] <<= bAutoSavePrompt;
674                     pNames[nRealCount] = pOrgNames[i];
675                     ++nRealCount;
676                 }
677                 break;
678             case EDITPROPERTY :
679                 if (!bRODocInfSave)
680                 {
681                     pValues[nRealCount] <<= bDocInfSave;
682                     pNames[nRealCount] = pOrgNames[i];
683                     ++nRealCount;
684                 }
685                 break;
686             case SAVEWORKINGSET :
687                 if (!bROSaveWorkingSet)
688                 {
689                     pValues[nRealCount] <<= bSaveWorkingSet;
690                     pNames[nRealCount] = pOrgNames[i];
691                     ++nRealCount;
692                 }
693                 break;
694             case SAVEVIEWINFO :
695                 if (!bROSaveDocView)
696                 {
697                     pValues[nRealCount] <<= bSaveDocView;
698                     pNames[nRealCount] = pOrgNames[i];
699                     ++nRealCount;
700                 }
701                 break;
702             case FILESYSTEM :
703                 if (!bROSaveRelFSys)
704                 {
705                     pValues[nRealCount] <<= bSaveRelFSys;
706                     pNames[nRealCount] = pOrgNames[i];
707                     ++nRealCount;
708                 }
709                 break;
710             case INTERNET :
711                 if (!bROSaveRelINet)
712                 {
713                     pValues[nRealCount] <<= bSaveRelINet;
714                     pNames[nRealCount] = pOrgNames[i];
715                     ++nRealCount;
716                 }
717                 break;
718             case UNPACKED :
719                 if (!bROSaveUnpacked)
720                 {
721                     pValues[nRealCount] <<= bSaveUnpacked;
722                     pNames[nRealCount] = pOrgNames[i];
723                     ++nRealCount;
724                 }
725                 break;
726             case PRETTYPRINTING:
727                 if (!bRODoPrettyPrinting)
728                 {
729                     pValues[nRealCount] <<= bDoPrettyPrinting;
730                     pNames[nRealCount] = pOrgNames[i];
731                     ++nRealCount;
732                 }
733                 break;
734             case WARNALIENFORMAT:
735                 if (!bROWarnAlienFormat)
736                 {
737                     pValues[nRealCount] <<= bWarnAlienFormat;
738                     pNames[nRealCount] = pOrgNames[i];
739                     ++nRealCount;
740                 }
741                 break;
742             case LOADDOCPRINTER:
743                 if (!bROLoadDocPrinter)
744                 {
745                     pValues[nRealCount] <<= bLoadDocPrinter;
746                     pNames[nRealCount] = pOrgNames[i];
747                     ++nRealCount;
748                 }
749                 break;
750             case ODFDEFAULTVERSION:
751                 if (!bROODFDefaultVersion)
752                 {
753                     sal_Int16 nODFVersion = sal_Int16( eODFDefaultVersion );
754                     if( eODFDefaultVersion == SvtSaveOptions::ODFVER_012_EXT )
755                         nODFVersion = 3;
756                     else if( eODFDefaultVersion == SvtSaveOptions::ODFVER_013 )
757                         nODFVersion = 5;
758                     else if( eODFDefaultVersion == SvtSaveOptions::ODFVER_013_EXT )
759                         nODFVersion = 6;
760                     pValues[nRealCount] <<= nODFVersion;
761                     pNames[nRealCount] = pOrgNames[i];
762                     ++nRealCount;
763                 }
764                 break;
765             case USESHA1INODF12:
766                 if (!bROUseSHA1InODF12)
767                 {
768                     pValues[nRealCount] <<= bUseSHA1InODF12;
769                     pNames[nRealCount] = pOrgNames[i];
770                     ++nRealCount;
771                 }
772                 break;
773             case USEBLOWFISHINODF12:
774                 if (!bROUseBlowfishInODF12)
775                 {
776                     pValues[nRealCount] <<= bUseBlowfishInODF12;
777                     pNames[nRealCount] = pOrgNames[i];
778                     ++nRealCount;
779                 }
780                 break;
781 
782             default:
783                 DBG_ERRORFILE( "invalid index to save a path" );
784         }
785     }
786 
787     aNames.realloc(nRealCount);
788     aValues.realloc(nRealCount);
789     PutProperties( aNames, aValues );
790 
791     css::uno::Reference< css::uno::XInterface > xCFG = ::comphelper::ConfigurationHelper::openConfig(
792         ::utl::getProcessServiceFactory(),
793         ::rtl::OUString::createFromAscii("org.openoffice.Office.Recovery"),
794         ::comphelper::ConfigurationHelper::E_STANDARD);
795 
796     ::comphelper::ConfigurationHelper::writeRelativeKey(
797         xCFG,
798         ::rtl::OUString::createFromAscii("AutoSave"),
799         ::rtl::OUString::createFromAscii("TimeIntervall"),
800         css::uno::makeAny(nAutoSaveTime));
801 
802     ::comphelper::ConfigurationHelper::writeRelativeKey(
803         xCFG,
804         ::rtl::OUString::createFromAscii("AutoSave"),
805         ::rtl::OUString::createFromAscii("Enabled"),
806         css::uno::makeAny(bAutoSave));
807 
808     ::comphelper::ConfigurationHelper::flush(xCFG);
809 }
810 
811 // -----------------------------------------------------------------------
812 
Notify(const Sequence<rtl::OUString> &)813 void SvtSaveOptions_Impl::Notify( const Sequence<rtl::OUString>& )
814 {
815 }
816 
817 
818 class SvtLoadOptions_Impl : public utl::ConfigItem
819 {
820 
821     sal_Bool                            bLoadUserDefinedSettings;
822 
823 public:
824                             SvtLoadOptions_Impl();
825                             ~SvtLoadOptions_Impl();
826 
827     virtual void            Notify( const com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
828     virtual void            Commit();
829 
SetLoadUserSettings(sal_Bool b)830     void                    SetLoadUserSettings(sal_Bool b){bLoadUserDefinedSettings = b; SetModified();}
IsLoadUserSettings() const831     sal_Bool                IsLoadUserSettings() const {return bLoadUserDefinedSettings;}
832 };
833 // -----------------------------------------------------------------------
834 const sal_Char cUserDefinedSettings[] = "UserDefinedSettings";
835 
SvtLoadOptions_Impl()836 SvtLoadOptions_Impl::SvtLoadOptions_Impl()
837     : ConfigItem( OUString::createFromAscii("Office.Common/Load") )
838     , bLoadUserDefinedSettings( sal_False )
839 {
840     Sequence< OUString > aNames(1);
841     aNames[0] = OUString::createFromAscii(cUserDefinedSettings);
842     Sequence< Any > aValues = GetProperties( aNames );
843     EnableNotification( aNames );
844     const Any* pValues = aValues.getConstArray();
845     DBG_ASSERT( aValues.getLength() == aNames.getLength(), "GetProperties failed" );
846     if (pValues[0].getValueTypeClass() == ::com::sun::star::uno::TypeClass_BOOLEAN)
847          bLoadUserDefinedSettings = *(sal_Bool *)pValues[0].getValue();
848 }
849 // -----------------------------------------------------------------------
~SvtLoadOptions_Impl()850 SvtLoadOptions_Impl::~SvtLoadOptions_Impl()
851 {
852 }
853 // -----------------------------------------------------------------------
Commit()854 void SvtLoadOptions_Impl::Commit()
855 {
856     Sequence< OUString > aNames(1);
857     aNames[0] = OUString::createFromAscii(cUserDefinedSettings);
858     Sequence< Any > aValues( 1 );
859     aValues[0].setValue(&bLoadUserDefinedSettings, ::getBooleanCppuType());
860     PutProperties( aNames, aValues );
861 }
862 // -----------------------------------------------------------------------
Notify(const Sequence<rtl::OUString> &)863 void SvtLoadOptions_Impl::Notify( const Sequence<rtl::OUString>& )
864 {
865     DBG_ERRORFILE( "properties have been changed" );
866 }
867 // -----------------------------------------------------------------------
868 
869 namespace
870 {
871     class LocalSingleton : public rtl::Static< osl::Mutex, LocalSingleton >
872     {
873     };
874 }
875 
876 // -----------------------------------------------------------------------
SvtSaveOptions()877 SvtSaveOptions::SvtSaveOptions()
878 {
879     // Global access, must be guarded (multithreading)
880     ::osl::MutexGuard aGuard( LocalSingleton::get() );
881     if ( !pOptions )
882     {
883         RTL_LOGFILE_CONTEXT(aLog, "unotools ( ??? ) ::SvtSaveOptions_Impl::ctor()");
884         pOptions = new SvtLoadSaveOptions_Impl;
885         pOptions->pSaveOpt = new SvtSaveOptions_Impl;
886         pOptions->pLoadOpt = new SvtLoadOptions_Impl;
887 
888         ItemHolder1::holdConfigItem(E_SAVEOPTIONS);
889    }
890    ++nRefCount;
891     pImp = pOptions;
892 }
893 
894 // -----------------------------------------------------------------------
895 
~SvtSaveOptions()896 SvtSaveOptions::~SvtSaveOptions()
897 {
898     // Global access, must be guarded (multithreading)
899     ::osl::MutexGuard aGuard( LocalSingleton::get() );
900     if ( !--nRefCount )
901     {
902         if ( pOptions->pSaveOpt->IsModified() )
903             pOptions->pSaveOpt->Commit();
904         if ( pOptions->pLoadOpt->IsModified() )
905             pOptions->pLoadOpt->Commit();
906 
907         DELETEZ( pOptions->pLoadOpt );
908         DELETEZ( pOptions->pSaveOpt );
909         DELETEZ( pOptions );
910     }
911 }
912 
SetAutoSaveTime(sal_Int32 n)913 void SvtSaveOptions::SetAutoSaveTime( sal_Int32 n )
914 {
915     pImp->pSaveOpt->SetAutoSaveTime( n );
916 }
917 
GetAutoSaveTime() const918 sal_Int32 SvtSaveOptions::GetAutoSaveTime() const
919 {
920     return pImp->pSaveOpt->GetAutoSaveTime();
921 }
922 
SetUseUserData(sal_Bool b)923 void SvtSaveOptions::SetUseUserData( sal_Bool b )
924 {
925     pImp->pSaveOpt->SetUseUserData( b );
926 }
927 
IsUseUserData() const928 sal_Bool SvtSaveOptions::IsUseUserData() const
929 {
930     return pImp->pSaveOpt->IsUseUserData();
931 }
932 
SetBackup(sal_Bool b)933 void SvtSaveOptions::SetBackup( sal_Bool b )
934 {
935     pImp->pSaveOpt->SetBackup( b );
936 }
937 
IsBackup() const938 sal_Bool SvtSaveOptions::IsBackup() const
939 {
940     return pImp->pSaveOpt->IsBackup();
941 }
942 
SetAutoSave(sal_Bool b)943 void SvtSaveOptions::SetAutoSave( sal_Bool b )
944 {
945     pImp->pSaveOpt->SetAutoSave( b );
946 }
947 
IsAutoSave() const948 sal_Bool SvtSaveOptions::IsAutoSave() const
949 {
950     return pImp->pSaveOpt->IsAutoSave();
951 }
952 
SetAutoSavePrompt(sal_Bool b)953 void SvtSaveOptions::SetAutoSavePrompt( sal_Bool b )
954 {
955     pImp->pSaveOpt->SetAutoSavePrompt( b );
956 }
957 
IsAutoSavePrompt() const958 sal_Bool SvtSaveOptions::IsAutoSavePrompt() const
959 {
960     return pImp->pSaveOpt->IsAutoSavePrompt();
961 }
962 
SetDocInfoSave(sal_Bool b)963 void SvtSaveOptions::SetDocInfoSave(sal_Bool b)
964 {
965     pImp->pSaveOpt->SetDocInfoSave( b );
966 }
967 
IsDocInfoSave() const968 sal_Bool SvtSaveOptions::IsDocInfoSave() const
969 {
970     return pImp->pSaveOpt->IsDocInfoSave();
971 }
972 
SetSaveWorkingSet(sal_Bool b)973 void SvtSaveOptions::SetSaveWorkingSet( sal_Bool b )
974 {
975     pImp->pSaveOpt->SetSaveWorkingSet( b );
976 }
977 
IsSaveWorkingSet() const978 sal_Bool SvtSaveOptions::IsSaveWorkingSet() const
979 {
980     return pImp->pSaveOpt->IsSaveWorkingSet();
981 }
982 
SetSaveDocView(sal_Bool b)983 void SvtSaveOptions::SetSaveDocView( sal_Bool b )
984 {
985     pImp->pSaveOpt->SetSaveDocView( b );
986 }
987 
IsSaveDocView() const988 sal_Bool SvtSaveOptions::IsSaveDocView() const
989 {
990     return pImp->pSaveOpt->IsSaveDocView();
991 }
992 
SetSaveRelINet(sal_Bool b)993 void SvtSaveOptions::SetSaveRelINet( sal_Bool b )
994 {
995     pImp->pSaveOpt->SetSaveRelINet( b );
996 }
997 
IsSaveRelINet() const998 sal_Bool SvtSaveOptions::IsSaveRelINet() const
999 {
1000     return pImp->pSaveOpt->IsSaveRelINet();
1001 }
1002 
SetSaveRelFSys(sal_Bool b)1003 void SvtSaveOptions::SetSaveRelFSys( sal_Bool b )
1004 {
1005     pImp->pSaveOpt->SetSaveRelFSys( b );
1006 }
1007 
IsSaveRelFSys() const1008 sal_Bool SvtSaveOptions::IsSaveRelFSys() const
1009 {
1010     return pImp->pSaveOpt->IsSaveRelFSys();
1011 }
1012 
SetSaveUnpacked(sal_Bool b)1013 void SvtSaveOptions::SetSaveUnpacked( sal_Bool b )
1014 {
1015     pImp->pSaveOpt->SetSaveUnpacked( b );
1016 }
1017 
IsSaveUnpacked() const1018 sal_Bool SvtSaveOptions::IsSaveUnpacked() const
1019 {
1020     return pImp->pSaveOpt->IsSaveUnpacked();
1021 }
1022 
SetLoadUserSettings(sal_Bool b)1023 void SvtSaveOptions::SetLoadUserSettings(sal_Bool b)
1024 {
1025     pImp->pLoadOpt->SetLoadUserSettings(b);
1026 }
1027 
IsLoadUserSettings() const1028 sal_Bool   SvtSaveOptions::IsLoadUserSettings() const
1029 {
1030     return pImp->pLoadOpt->IsLoadUserSettings();
1031 }
1032 
SetPrettyPrinting(sal_Bool _bEnable)1033 void SvtSaveOptions::SetPrettyPrinting( sal_Bool _bEnable )
1034 {
1035     pImp->pSaveOpt->EnablePrettyPrinting( _bEnable );
1036 }
1037 
IsPrettyPrinting() const1038 sal_Bool SvtSaveOptions::IsPrettyPrinting() const
1039 {
1040     return pImp->pSaveOpt->IsPrettyPrintingEnabled();
1041 }
1042 
SetWarnAlienFormat(sal_Bool _bEnable)1043 void SvtSaveOptions::SetWarnAlienFormat( sal_Bool _bEnable )
1044 {
1045     pImp->pSaveOpt->SetWarnAlienFormat( _bEnable );
1046 }
1047 
IsWarnAlienFormat() const1048 sal_Bool SvtSaveOptions::IsWarnAlienFormat() const
1049 {
1050     return pImp->pSaveOpt->IsWarnAlienFormat();
1051 }
1052 
SetLoadDocumentPrinter(sal_Bool _bEnable)1053 void SvtSaveOptions::SetLoadDocumentPrinter( sal_Bool _bEnable )
1054 {
1055     pImp->pSaveOpt->SetLoadDocPrinter( _bEnable );
1056 }
1057 
IsLoadDocumentPrinter() const1058 sal_Bool SvtSaveOptions::IsLoadDocumentPrinter() const
1059 {
1060     return pImp->pSaveOpt->IsLoadDocPrinter();
1061 }
1062 
SetODFDefaultVersion(SvtSaveOptions::ODFDefaultVersion eVersion)1063 void SvtSaveOptions::SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion eVersion )
1064 {
1065     pImp->pSaveOpt->SetODFDefaultVersion( eVersion );
1066 }
1067 
IsODFExtended(ODFDefaultVersion eVersion)1068 sal_Bool SvtSaveOptions::IsODFExtended( ODFDefaultVersion eVersion )
1069 {
1070     return eVersion == ODFVER_012_EXT || eVersion == ODFVER_013_EXT;
1071 }
1072 
IsODFStrict(ODFDefaultVersion eVersion)1073 sal_Bool SvtSaveOptions::IsODFStrict( ODFDefaultVersion eVersion )
1074 {
1075     return eVersion == ODFVER_012 || eVersion == ODFVER_013;
1076 }
1077 
GetODFDefaultVersion() const1078 SvtSaveOptions::ODFDefaultVersion SvtSaveOptions::GetODFDefaultVersion() const
1079 {
1080     return pImp->pSaveOpt->GetODFDefaultVersion();
1081 }
1082 
SetUseSHA1InODF12(sal_Bool bUse)1083 void SvtSaveOptions::SetUseSHA1InODF12( sal_Bool bUse )
1084 {
1085     pImp->pSaveOpt->SetUseSHA1InODF12( bUse );
1086 }
1087 
IsUseSHA1InODF12() const1088 sal_Bool SvtSaveOptions::IsUseSHA1InODF12() const
1089 {
1090     return pImp->pSaveOpt->IsUseSHA1InODF12();
1091 }
1092 
SetUseBlowfishInODF12(sal_Bool bUse)1093 void SvtSaveOptions::SetUseBlowfishInODF12( sal_Bool bUse )
1094 {
1095     pImp->pSaveOpt->SetUseBlowfishInODF12( bUse );
1096 }
1097 
IsUseBlowfishInODF12() const1098 sal_Bool SvtSaveOptions::IsUseBlowfishInODF12() const
1099 {
1100     return pImp->pSaveOpt->IsUseBlowfishInODF12();
1101 }
1102 
IsReadOnly(SvtSaveOptions::EOption eOption) const1103 sal_Bool SvtSaveOptions::IsReadOnly( SvtSaveOptions::EOption eOption ) const
1104 {
1105     return pImp->pSaveOpt->IsReadOnly(eOption);
1106 }
1107