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