Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <unotools/saveopt.hxx>
21 : #include <rtl/instance.hxx>
22 : #include <unotools/configmgr.hxx>
23 : #include <unotools/configitem.hxx>
24 : #include <tools/debug.hxx>
25 : #include <tools/solar.h>
26 : #include <com/sun/star/uno/Any.hxx>
27 : #include <com/sun/star/uno/Sequence.hxx>
28 :
29 : #include <osl/mutex.hxx>
30 : #include <comphelper/processfactory.hxx>
31 : #include "itemholder1.hxx"
32 : #include <officecfg/Office/Recovery.hxx>
33 :
34 : using namespace utl;
35 : using namespace com::sun::star::uno;
36 :
37 : class SvtSaveOptions_Impl;
38 : class SvtLoadOptions_Impl;
39 :
40 : #define CFG_READONLY_DEFAULT false
41 :
42 : struct SvtLoadSaveOptions_Impl
43 : {
44 : SvtSaveOptions_Impl* pSaveOpt;
45 : SvtLoadOptions_Impl* pLoadOpt;
46 : };
47 :
48 : static SvtLoadSaveOptions_Impl* pOptions = NULL;
49 : static sal_Int32 nRefCount = 0;
50 :
51 : class SvtSaveOptions_Impl : public utl::ConfigItem
52 : {
53 : sal_Int32 nAutoSaveTime;
54 : bool bUseUserData,
55 : bBackup,
56 : bAutoSave,
57 : bAutoSavePrompt,
58 : bUserAutoSave,
59 : bDocInfSave,
60 : bSaveWorkingSet,
61 : bSaveDocView,
62 : bSaveRelINet,
63 : bSaveRelFSys,
64 : bSaveUnpacked,
65 : bDoPrettyPrinting,
66 : bWarnAlienFormat,
67 : bLoadDocPrinter,
68 : bUseSHA1InODF12,
69 : bUseBlowfishInODF12;
70 :
71 : SvtSaveOptions::ODFDefaultVersion eODFDefaultVersion;
72 :
73 : bool bROAutoSaveTime,
74 : bROUseUserData,
75 : bROBackup,
76 : bROAutoSave,
77 : bROAutoSavePrompt,
78 : bROUserAutoSave,
79 : bRODocInfSave,
80 : bROSaveWorkingSet,
81 : bROSaveDocView,
82 : bROSaveRelINet,
83 : bROSaveRelFSys,
84 : bROSaveUnpacked,
85 : bROWarnAlienFormat,
86 : bRODoPrettyPrinting,
87 : bROLoadDocPrinter,
88 : bROODFDefaultVersion,
89 : bROUseSHA1InODF12,
90 : bROUseBlowfishInODF12;
91 :
92 : public:
93 : SvtSaveOptions_Impl();
94 : virtual ~SvtSaveOptions_Impl();
95 :
96 : virtual void Notify( const com::sun::star::uno::Sequence< OUString >& aPropertyNames ) SAL_OVERRIDE;
97 : virtual void Commit() SAL_OVERRIDE;
98 :
99 0 : sal_Int32 GetAutoSaveTime() const { return nAutoSaveTime; }
100 0 : bool IsUseUserData() const { return bUseUserData; }
101 2 : bool IsBackup() const { return bBackup; }
102 0 : bool IsAutoSave() const { return bAutoSave; }
103 0 : bool IsAutoSavePrompt() const { return bAutoSavePrompt; }
104 0 : bool IsUserAutoSave() const { return bUserAutoSave; }
105 0 : bool IsDocInfoSave() const { return bDocInfSave; }
106 0 : bool IsSaveWorkingSet() const { return bSaveWorkingSet; }
107 0 : bool IsSaveDocView() const { return bSaveDocView; }
108 0 : bool IsSaveRelINet() const { return bSaveRelINet; }
109 2674 : bool IsSaveRelFSys() const { return bSaveRelFSys; }
110 1114 : bool IsSaveUnpacked() const { return bSaveUnpacked; }
111 1972 : bool IsPrettyPrintingEnabled( ) const { return bDoPrettyPrinting; }
112 0 : bool IsWarnAlienFormat() const { return bWarnAlienFormat; }
113 0 : bool IsLoadDocPrinter() const { return bLoadDocPrinter; }
114 8486 : bool IsUseSHA1InODF12() const { return bUseSHA1InODF12; }
115 8486 : bool IsUseBlowfishInODF12() const { return bUseBlowfishInODF12; }
116 :
117 : SvtSaveOptions::ODFDefaultVersion
118 109196 : GetODFDefaultVersion() const { return eODFDefaultVersion; }
119 :
120 : void SetAutoSaveTime( sal_Int32 n );
121 : void SetUseUserData( bool b );
122 : void SetBackup( bool b );
123 : void SetAutoSave( bool b );
124 : void SetAutoSavePrompt( bool b );
125 : void SetUserAutoSave( bool b );
126 : void SetDocInfoSave( bool b );
127 : void SetSaveWorkingSet( bool b );
128 : void SetSaveDocView( bool b );
129 : void SetSaveRelINet( bool b );
130 : void SetSaveRelFSys( bool b );
131 : void EnablePrettyPrinting( bool _bDoPP );
132 : void SetWarnAlienFormat( bool _bDoPP );
133 : void SetLoadDocPrinter( bool bNew );
134 : void SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion eNew );
135 :
136 : bool IsReadOnly( SvtSaveOptions::EOption eOption ) const;
137 : };
138 :
139 0 : void SvtSaveOptions_Impl::SetAutoSaveTime( sal_Int32 n )
140 : {
141 0 : if (!bROAutoSaveTime && nAutoSaveTime!=n)
142 : {
143 0 : nAutoSaveTime = n;
144 0 : SetModified();
145 0 : Commit();
146 : }
147 0 : }
148 :
149 0 : void SvtSaveOptions_Impl::SetUseUserData( bool b )
150 : {
151 0 : if (!bROUseUserData && bUseUserData!=b)
152 : {
153 0 : bUseUserData = b;
154 0 : SetModified();
155 : }
156 0 : }
157 :
158 0 : void SvtSaveOptions_Impl::SetBackup( bool b )
159 : {
160 0 : if (!bROBackup && bBackup!=b)
161 : {
162 0 : bBackup = b;
163 0 : SetModified();
164 : }
165 0 : }
166 :
167 0 : void SvtSaveOptions_Impl::SetAutoSave( bool b )
168 : {
169 0 : if (!bROAutoSave && bAutoSave!=b)
170 : {
171 0 : bAutoSave = b;
172 0 : SetModified();
173 0 : Commit();
174 : }
175 0 : }
176 :
177 0 : void SvtSaveOptions_Impl::SetAutoSavePrompt( bool b )
178 : {
179 0 : if (!bROAutoSavePrompt && bAutoSavePrompt!=b)
180 : {
181 0 : bAutoSavePrompt = b;
182 0 : SetModified();
183 : }
184 0 : }
185 :
186 0 : void SvtSaveOptions_Impl::SetUserAutoSave( bool b )
187 : {
188 0 : if (!bROUserAutoSave && bUserAutoSave!=b)
189 : {
190 0 : bUserAutoSave = b;
191 0 : SetModified();
192 0 : Commit();
193 : }
194 0 : }
195 :
196 0 : void SvtSaveOptions_Impl::SetDocInfoSave(bool b)
197 : {
198 0 : if (!bRODocInfSave && bDocInfSave!=b)
199 : {
200 0 : bDocInfSave = b;
201 0 : SetModified();
202 : }
203 0 : }
204 :
205 0 : void SvtSaveOptions_Impl::SetSaveWorkingSet( bool b )
206 : {
207 0 : if (!bROSaveWorkingSet && bSaveWorkingSet!=b)
208 : {
209 0 : bSaveWorkingSet = b;
210 0 : SetModified();
211 : }
212 0 : }
213 :
214 0 : void SvtSaveOptions_Impl::SetSaveDocView( bool b )
215 : {
216 0 : if (!bROSaveDocView && bSaveDocView!=b)
217 : {
218 0 : bSaveDocView = b;
219 0 : SetModified();
220 : }
221 0 : }
222 :
223 0 : void SvtSaveOptions_Impl::SetSaveRelINet( bool b )
224 : {
225 0 : if (!bROSaveRelINet && bSaveRelINet!=b)
226 : {
227 0 : bSaveRelINet = b;
228 0 : SetModified();
229 : }
230 0 : }
231 :
232 0 : void SvtSaveOptions_Impl::SetSaveRelFSys( bool b )
233 : {
234 0 : if (!bROSaveRelFSys && bSaveRelFSys!=b)
235 : {
236 0 : bSaveRelFSys = b;
237 0 : SetModified();
238 : }
239 0 : }
240 :
241 0 : void SvtSaveOptions_Impl::EnablePrettyPrinting( bool _bDoPP )
242 : {
243 0 : if (!bRODoPrettyPrinting && bDoPrettyPrinting!=_bDoPP)
244 : {
245 0 : bDoPrettyPrinting = _bDoPP;
246 0 : SetModified();
247 : }
248 0 : }
249 :
250 0 : void SvtSaveOptions_Impl::SetWarnAlienFormat( bool _bDoPP )
251 : {
252 0 : if (!bROWarnAlienFormat && bWarnAlienFormat!=_bDoPP)
253 : {
254 0 : bWarnAlienFormat = _bDoPP;
255 0 : SetModified();
256 : }
257 0 : }
258 :
259 0 : void SvtSaveOptions_Impl::SetLoadDocPrinter( bool bNew )
260 : {
261 0 : if ( !bROLoadDocPrinter && bLoadDocPrinter != bNew )
262 : {
263 0 : bLoadDocPrinter = bNew;
264 0 : SetModified();
265 : }
266 0 : }
267 :
268 0 : void SvtSaveOptions_Impl::SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion eNew )
269 : {
270 0 : if ( !bROODFDefaultVersion && eODFDefaultVersion != eNew )
271 : {
272 0 : eODFDefaultVersion = eNew;
273 0 : SetModified();
274 : }
275 0 : }
276 :
277 0 : bool SvtSaveOptions_Impl::IsReadOnly( SvtSaveOptions::EOption eOption ) const
278 : {
279 0 : bool bReadOnly = CFG_READONLY_DEFAULT;
280 0 : switch(eOption)
281 : {
282 : case SvtSaveOptions::E_AUTOSAVETIME :
283 0 : bReadOnly = bROAutoSaveTime;
284 0 : break;
285 : case SvtSaveOptions::E_USEUSERDATA :
286 0 : bReadOnly = bROUseUserData;
287 0 : break;
288 : case SvtSaveOptions::E_BACKUP :
289 0 : bReadOnly = bROBackup;
290 0 : break;
291 : case SvtSaveOptions::E_AUTOSAVE :
292 0 : bReadOnly = bROAutoSave;
293 0 : break;
294 : case SvtSaveOptions::E_AUTOSAVEPROMPT :
295 0 : bReadOnly = bROAutoSavePrompt;
296 0 : break;
297 : case SvtSaveOptions::E_USERAUTOSAVE :
298 0 : bReadOnly = bROUserAutoSave;
299 0 : break;
300 : case SvtSaveOptions::E_DOCINFSAVE :
301 0 : bReadOnly = bRODocInfSave;
302 0 : break;
303 : case SvtSaveOptions::E_SAVEWORKINGSET :
304 0 : bReadOnly = bROSaveWorkingSet;
305 0 : break;
306 : case SvtSaveOptions::E_SAVEDOCVIEW :
307 0 : bReadOnly = bROSaveDocView;
308 0 : break;
309 : case SvtSaveOptions::E_SAVERELINET :
310 0 : bReadOnly = bROSaveRelINet;
311 0 : break;
312 : case SvtSaveOptions::E_SAVERELFSYS :
313 0 : bReadOnly = bROSaveRelFSys;
314 0 : break;
315 : case SvtSaveOptions::E_SAVEUNPACKED :
316 0 : bReadOnly = bROSaveUnpacked;
317 0 : break;
318 : case SvtSaveOptions::E_DOPRETTYPRINTING :
319 0 : bReadOnly = bRODoPrettyPrinting;
320 0 : break;
321 : case SvtSaveOptions::E_WARNALIENFORMAT :
322 0 : bReadOnly = bROWarnAlienFormat;
323 0 : break;
324 : case SvtSaveOptions::E_LOADDOCPRINTER :
325 0 : bReadOnly = bROLoadDocPrinter;
326 0 : break;
327 : case SvtSaveOptions::E_ODFDEFAULTVERSION :
328 0 : bReadOnly = bROLoadDocPrinter;
329 0 : break;
330 : case SvtSaveOptions::E_USESHA1INODF12:
331 0 : bReadOnly = bROUseSHA1InODF12;
332 0 : break;
333 : case SvtSaveOptions::E_USEBLOWFISHINODF12:
334 0 : bReadOnly = bROUseBlowfishInODF12;
335 0 : break;
336 : }
337 0 : return bReadOnly;
338 : }
339 :
340 : #define FORMAT 0
341 : #define TIMEINTERVALL 1
342 : #define USEUSERDATA 2
343 : #define CREATEBACKUP 3
344 : #define AUTOSAVE 4
345 : #define PROMPT 5
346 : #define EDITPROPERTY 6
347 : #define SAVEVIEWINFO 7
348 : #define UNPACKED 8
349 : #define PRETTYPRINTING 9
350 : #define WARNALIENFORMAT 10
351 : #define LOADDOCPRINTER 11
352 : #define FILESYSTEM 12
353 : #define INTERNET 13
354 : #define SAVEWORKINGSET 14
355 : #define ODFDEFAULTVERSION 15
356 : #define USESHA1INODF12 16
357 : #define USEBLOWFISHINODF12 17
358 :
359 150 : Sequence< OUString > GetPropertyNames()
360 : {
361 : static const char* aPropNames[] =
362 : {
363 : "Graphic/Format",
364 : "Document/AutoSaveTimeIntervall",
365 : "Document/UseUserData",
366 : "Document/CreateBackup",
367 : "Document/AutoSave",
368 : "Document/AutoSavePrompt",
369 : "Document/EditProperty",
370 : "Document/ViewInfo",
371 : "Document/Unpacked",
372 : "Document/PrettyPrinting",
373 : "Document/WarnAlienFormat",
374 : "Document/LoadPrinter",
375 : "URL/FileSystem",
376 : "URL/Internet",
377 : "WorkingSet",
378 : "ODF/DefaultVersion",
379 : "ODF/UseSHA1InODF12",
380 : "ODF/UseBlowfishInODF12"
381 : };
382 :
383 150 : const int nCount = sizeof( aPropNames ) / sizeof( const char* );
384 150 : Sequence< OUString > aNames( nCount );
385 150 : OUString* pNames = aNames.getArray();
386 2850 : for ( int i = 0; i < nCount; i++ )
387 2700 : pNames[i] = OUString::createFromAscii( aPropNames[i] );
388 :
389 150 : return aNames;
390 : }
391 :
392 150 : SvtSaveOptions_Impl::SvtSaveOptions_Impl()
393 : : ConfigItem( OUString("Office.Common/Save") )
394 : , nAutoSaveTime( 0 )
395 : , bUseUserData( false )
396 : , bBackup( false )
397 : , bAutoSave( false )
398 : , bAutoSavePrompt( false )
399 : , bUserAutoSave( false )
400 : , bDocInfSave( false )
401 : , bSaveWorkingSet( false )
402 : , bSaveDocView( false )
403 : , bSaveRelINet( false )
404 : , bSaveRelFSys( false )
405 : , bSaveUnpacked( false )
406 : , bDoPrettyPrinting( false )
407 : , bWarnAlienFormat( true )
408 : , bLoadDocPrinter( true )
409 : , bUseSHA1InODF12( false )
410 : , bUseBlowfishInODF12( false )
411 : , eODFDefaultVersion( SvtSaveOptions::ODFVER_LATEST )
412 : , bROAutoSaveTime( CFG_READONLY_DEFAULT )
413 : , bROUseUserData( CFG_READONLY_DEFAULT )
414 : , bROBackup( CFG_READONLY_DEFAULT )
415 : , bROAutoSave( CFG_READONLY_DEFAULT )
416 : , bROAutoSavePrompt( CFG_READONLY_DEFAULT )
417 : , bROUserAutoSave( CFG_READONLY_DEFAULT )
418 : , bRODocInfSave( CFG_READONLY_DEFAULT )
419 : , bROSaveWorkingSet( CFG_READONLY_DEFAULT )
420 : , bROSaveDocView( CFG_READONLY_DEFAULT )
421 : , bROSaveRelINet( CFG_READONLY_DEFAULT )
422 : , bROSaveRelFSys( CFG_READONLY_DEFAULT )
423 : , bROSaveUnpacked( CFG_READONLY_DEFAULT )
424 : , bROWarnAlienFormat( CFG_READONLY_DEFAULT )
425 : , bRODoPrettyPrinting( CFG_READONLY_DEFAULT )
426 : , bROLoadDocPrinter( CFG_READONLY_DEFAULT )
427 : , bROODFDefaultVersion( CFG_READONLY_DEFAULT )
428 : , bROUseSHA1InODF12( CFG_READONLY_DEFAULT )
429 150 : , bROUseBlowfishInODF12( CFG_READONLY_DEFAULT )
430 : {
431 150 : Sequence< OUString > aNames = GetPropertyNames();
432 300 : Sequence< Any > aValues = GetProperties( aNames );
433 300 : Sequence< sal_Bool > aROStates = GetReadOnlyStates( aNames );
434 150 : EnableNotification( aNames );
435 150 : const Any* pValues = aValues.getConstArray();
436 150 : const sal_Bool* pROStates = aROStates.getConstArray();
437 : DBG_ASSERT( aValues.getLength() == aNames.getLength(), "GetProperties failed" );
438 : DBG_ASSERT( aROStates.getLength() == aNames.getLength(), "GetReadOnlyStates failed" );
439 150 : if ( aValues.getLength() == aNames.getLength() && aROStates.getLength() == aNames.getLength() )
440 : {
441 2850 : for ( int nProp = 0; nProp < aNames.getLength(); nProp++ )
442 : {
443 2700 : if ( pValues[nProp].hasValue() )
444 : {
445 2700 : sal_Int32 nTemp = 0;
446 2700 : switch ( nProp )
447 : {
448 : case FORMAT:
449 : // not supported anymore
450 150 : break;
451 :
452 : case TIMEINTERVALL :
453 150 : if ( pValues[nProp] >>= nTemp )
454 150 : nAutoSaveTime = nTemp;
455 : else {
456 : OSL_FAIL( "Wrong Type!" );
457 : };
458 150 : bROAutoSaveTime = pROStates[nProp];
459 150 : break;
460 :
461 : case ODFDEFAULTVERSION :
462 : {
463 150 : sal_Int16 nTmp = 0;
464 150 : if ( pValues[nProp] >>= nTmp )
465 : {
466 150 : if( nTmp == 3 )
467 150 : eODFDefaultVersion = SvtSaveOptions::ODFVER_LATEST;
468 : else
469 0 : eODFDefaultVersion = SvtSaveOptions::ODFDefaultVersion( nTmp );
470 : }
471 : else {
472 : SAL_WARN( "unotools.config", "SvtSaveOptions_Impl::SvtSaveOptions_Impl(): Wrong Type!" );
473 : };
474 150 : bROODFDefaultVersion = pROStates[nProp];
475 150 : break;
476 : }
477 :
478 : default:
479 : {
480 2250 : bool bTemp = bool();
481 2250 : if ( pValues[nProp] >>= bTemp )
482 : {
483 2250 : switch ( nProp )
484 : {
485 : case USEUSERDATA :
486 150 : bUseUserData = bTemp;
487 150 : bROUseUserData = pROStates[nProp];
488 150 : break;
489 : case CREATEBACKUP :
490 150 : bBackup = bTemp;
491 150 : bROBackup = pROStates[nProp];
492 150 : break;
493 : case AUTOSAVE :
494 150 : bAutoSave = bTemp;
495 150 : bROAutoSave = pROStates[nProp];
496 150 : break;
497 : case PROMPT :
498 150 : bAutoSavePrompt = bTemp;
499 150 : bROAutoSavePrompt = pROStates[nProp];
500 150 : break;
501 : case EDITPROPERTY :
502 150 : bDocInfSave = bTemp;
503 150 : bRODocInfSave = pROStates[nProp];
504 150 : break;
505 : case SAVEWORKINGSET :
506 150 : bSaveWorkingSet = bTemp;
507 150 : bROSaveWorkingSet = pROStates[nProp];
508 150 : break;
509 : case SAVEVIEWINFO :
510 150 : bSaveDocView = bTemp;
511 150 : bROSaveDocView = pROStates[nProp];
512 150 : break;
513 : case FILESYSTEM :
514 150 : bSaveRelFSys = bTemp;
515 150 : bROSaveRelFSys = pROStates[nProp];
516 150 : break;
517 : case INTERNET :
518 150 : bSaveRelINet = bTemp;
519 150 : bROSaveRelINet = pROStates[nProp];
520 150 : break;
521 : case UNPACKED :
522 150 : bSaveUnpacked = bTemp;
523 150 : bROSaveUnpacked = pROStates[nProp];
524 150 : break;
525 :
526 : case PRETTYPRINTING:
527 150 : bDoPrettyPrinting = bTemp;
528 150 : bRODoPrettyPrinting = pROStates[nProp];
529 150 : break;
530 :
531 : case WARNALIENFORMAT:
532 150 : bWarnAlienFormat = bTemp;
533 150 : bROWarnAlienFormat = pROStates[nProp];
534 150 : break;
535 :
536 : case LOADDOCPRINTER:
537 150 : bLoadDocPrinter = bTemp;
538 150 : bROLoadDocPrinter = pROStates[nProp];
539 150 : break;
540 :
541 : case USESHA1INODF12:
542 150 : bUseSHA1InODF12 = bTemp;
543 150 : bROUseSHA1InODF12 = pROStates[nProp];
544 150 : break;
545 :
546 : case USEBLOWFISHINODF12:
547 150 : bUseBlowfishInODF12 = bTemp;
548 150 : bROUseBlowfishInODF12 = pROStates[nProp];
549 150 : break;
550 :
551 : default :
552 : SAL_WARN( "unotools.config", "invalid index to load a path" );
553 : }
554 : }
555 : else
556 : {
557 : OSL_FAIL( "Wrong Type!" );
558 : }
559 : }
560 : }
561 : }
562 : }
563 : }
564 :
565 150 : bAutoSave = officecfg::Office::Recovery::AutoSave::Enabled::get();
566 150 : nAutoSaveTime = officecfg::Office::Recovery::AutoSave::TimeIntervall::get();
567 300 : bUserAutoSave = officecfg::Office::Recovery::AutoSave::UserAutoSaveEnabled::get();
568 150 : }
569 :
570 296 : SvtSaveOptions_Impl::~SvtSaveOptions_Impl()
571 296 : {}
572 :
573 0 : void SvtSaveOptions_Impl::Commit()
574 : {
575 0 : Sequence< OUString > aOrgNames = GetPropertyNames();
576 0 : OUString* pOrgNames = aOrgNames.getArray();
577 0 : sal_Int32 nOrgCount = aOrgNames.getLength();
578 :
579 0 : Sequence< OUString > aNames( nOrgCount );
580 0 : Sequence< Any > aValues( nOrgCount );
581 0 : OUString* pNames = aNames.getArray();
582 0 : Any* pValues = aValues.getArray();
583 0 : sal_Int32 nRealCount = 0;
584 :
585 0 : for (sal_Int32 i=0; i<nOrgCount; ++i)
586 : {
587 0 : switch (i)
588 : {
589 : case FORMAT:
590 : // not supported anymore
591 0 : break;
592 : case TIMEINTERVALL :
593 0 : if (!bROAutoSaveTime)
594 : {
595 0 : pValues[nRealCount] <<= nAutoSaveTime;
596 0 : pNames[nRealCount] = pOrgNames[i];
597 0 : ++nRealCount;
598 : }
599 0 : break;
600 : case USEUSERDATA :
601 0 : if (!bROUseUserData)
602 : {
603 0 : pValues[nRealCount] <<= bUseUserData;
604 0 : pNames[nRealCount] = pOrgNames[i];
605 0 : ++nRealCount;
606 : }
607 0 : break;
608 : case CREATEBACKUP :
609 0 : if (!bROBackup)
610 : {
611 0 : pValues[nRealCount] <<= bBackup;
612 0 : pNames[nRealCount] = pOrgNames[i];
613 0 : ++nRealCount;
614 : }
615 0 : break;
616 : case AUTOSAVE :
617 0 : if (!bROAutoSave)
618 : {
619 0 : pValues[nRealCount] <<= bAutoSave;
620 0 : pNames[nRealCount] = pOrgNames[i];
621 0 : ++nRealCount;
622 : }
623 0 : break;
624 : case PROMPT :
625 0 : if (!bROAutoSavePrompt)
626 : {
627 0 : pValues[nRealCount] <<= bAutoSavePrompt;
628 0 : pNames[nRealCount] = pOrgNames[i];
629 0 : ++nRealCount;
630 : }
631 0 : break;
632 : case EDITPROPERTY :
633 0 : if (!bRODocInfSave)
634 : {
635 0 : pValues[nRealCount] <<= bDocInfSave;
636 0 : pNames[nRealCount] = pOrgNames[i];
637 0 : ++nRealCount;
638 : }
639 0 : break;
640 : case SAVEWORKINGSET :
641 0 : if (!bROSaveWorkingSet)
642 : {
643 0 : pValues[nRealCount] <<= bSaveWorkingSet;
644 0 : pNames[nRealCount] = pOrgNames[i];
645 0 : ++nRealCount;
646 : }
647 0 : break;
648 : case SAVEVIEWINFO :
649 0 : if (!bROSaveDocView)
650 : {
651 0 : pValues[nRealCount] <<= bSaveDocView;
652 0 : pNames[nRealCount] = pOrgNames[i];
653 0 : ++nRealCount;
654 : }
655 0 : break;
656 : case FILESYSTEM :
657 0 : if (!bROSaveRelFSys)
658 : {
659 0 : pValues[nRealCount] <<= bSaveRelFSys;
660 0 : pNames[nRealCount] = pOrgNames[i];
661 0 : ++nRealCount;
662 : }
663 0 : break;
664 : case INTERNET :
665 0 : if (!bROSaveRelINet)
666 : {
667 0 : pValues[nRealCount] <<= bSaveRelINet;
668 0 : pNames[nRealCount] = pOrgNames[i];
669 0 : ++nRealCount;
670 : }
671 0 : break;
672 : case UNPACKED :
673 0 : if (!bROSaveUnpacked)
674 : {
675 0 : pValues[nRealCount] <<= bSaveUnpacked;
676 0 : pNames[nRealCount] = pOrgNames[i];
677 0 : ++nRealCount;
678 : }
679 0 : break;
680 : case PRETTYPRINTING:
681 0 : if (!bRODoPrettyPrinting)
682 : {
683 0 : pValues[nRealCount] <<= bDoPrettyPrinting;
684 0 : pNames[nRealCount] = pOrgNames[i];
685 0 : ++nRealCount;
686 : }
687 0 : break;
688 : case WARNALIENFORMAT:
689 0 : if (!bROWarnAlienFormat)
690 : {
691 0 : pValues[nRealCount] <<= bWarnAlienFormat;
692 0 : pNames[nRealCount] = pOrgNames[i];
693 0 : ++nRealCount;
694 : }
695 0 : break;
696 : case LOADDOCPRINTER:
697 0 : if (!bROLoadDocPrinter)
698 : {
699 0 : pValues[nRealCount] <<= bLoadDocPrinter;
700 0 : pNames[nRealCount] = pOrgNames[i];
701 0 : ++nRealCount;
702 : }
703 0 : break;
704 : case ODFDEFAULTVERSION:
705 0 : if (!bROODFDefaultVersion)
706 : {
707 0 : pValues[nRealCount] <<= (eODFDefaultVersion == SvtSaveOptions::ODFVER_LATEST) ? sal_Int16( 3 ) : sal_Int16( eODFDefaultVersion );
708 0 : pNames[nRealCount] = pOrgNames[i];
709 0 : ++nRealCount;
710 : }
711 0 : break;
712 : case USESHA1INODF12:
713 0 : if (!bROUseSHA1InODF12)
714 : {
715 0 : pValues[nRealCount] <<= bUseSHA1InODF12;
716 0 : pNames[nRealCount] = pOrgNames[i];
717 0 : ++nRealCount;
718 : }
719 0 : break;
720 : case USEBLOWFISHINODF12:
721 0 : if (!bROUseBlowfishInODF12)
722 : {
723 0 : pValues[nRealCount] <<= bUseBlowfishInODF12;
724 0 : pNames[nRealCount] = pOrgNames[i];
725 0 : ++nRealCount;
726 : }
727 0 : break;
728 :
729 : default:
730 : SAL_WARN( "unotools.config", "invalid index to save a path" );
731 : }
732 : }
733 :
734 0 : aNames.realloc(nRealCount);
735 0 : aValues.realloc(nRealCount);
736 0 : PutProperties( aNames, aValues );
737 :
738 : boost::shared_ptr< comphelper::ConfigurationChanges > batch(
739 0 : comphelper::ConfigurationChanges::create());
740 0 : officecfg::Office::Recovery::AutoSave::TimeIntervall::set(nAutoSaveTime, batch);
741 0 : officecfg::Office::Recovery::AutoSave::Enabled::set(bAutoSave, batch);
742 0 : officecfg::Office::Recovery::AutoSave::UserAutoSaveEnabled::set(bUserAutoSave, batch);
743 0 : batch->commit();
744 0 : }
745 :
746 0 : void SvtSaveOptions_Impl::Notify( const Sequence<OUString>& )
747 : {
748 0 : }
749 :
750 : class SvtLoadOptions_Impl : public utl::ConfigItem
751 : {
752 :
753 : bool bLoadUserDefinedSettings;
754 :
755 : public:
756 : SvtLoadOptions_Impl();
757 : virtual ~SvtLoadOptions_Impl();
758 :
759 : virtual void Notify( const com::sun::star::uno::Sequence< OUString >& aPropertyNames ) SAL_OVERRIDE;
760 : virtual void Commit() SAL_OVERRIDE;
761 :
762 0 : void SetLoadUserSettings(bool b){bLoadUserDefinedSettings = b; SetModified();}
763 310 : bool IsLoadUserSettings() const {return bLoadUserDefinedSettings;}
764 : };
765 :
766 : const sal_Char cUserDefinedSettings[] = "UserDefinedSettings";
767 :
768 150 : SvtLoadOptions_Impl::SvtLoadOptions_Impl()
769 : : ConfigItem( OUString("Office.Common/Load") )
770 150 : , bLoadUserDefinedSettings( false )
771 : {
772 150 : Sequence< OUString > aNames(1);
773 150 : aNames[0] = OUString::createFromAscii(cUserDefinedSettings);
774 300 : Sequence< Any > aValues = GetProperties( aNames );
775 150 : EnableNotification( aNames );
776 150 : const Any* pValues = aValues.getConstArray();
777 : DBG_ASSERT( aValues.getLength() == aNames.getLength(), "GetProperties failed" );
778 150 : if (pValues[0].getValueTypeClass() == ::com::sun::star::uno::TypeClass_BOOLEAN)
779 300 : bLoadUserDefinedSettings = *(sal_Bool *)pValues[0].getValue();
780 150 : }
781 :
782 296 : SvtLoadOptions_Impl::~SvtLoadOptions_Impl()
783 : {
784 296 : }
785 :
786 0 : void SvtLoadOptions_Impl::Commit()
787 : {
788 0 : Sequence< OUString > aNames(1);
789 0 : aNames[0] = OUString::createFromAscii(cUserDefinedSettings);
790 0 : Sequence< Any > aValues( 1 );
791 0 : aValues[0].setValue(&bLoadUserDefinedSettings, ::getBooleanCppuType());
792 0 : PutProperties( aNames, aValues );
793 0 : }
794 :
795 0 : void SvtLoadOptions_Impl::Notify( const Sequence<OUString>& )
796 : {
797 : SAL_WARN( "unotools.config", "properties have been changed" );
798 0 : }
799 :
800 : namespace
801 : {
802 : class LocalSingleton : public rtl::Static< osl::Mutex, LocalSingleton >
803 : {
804 : };
805 : }
806 :
807 92570 : SvtSaveOptions::SvtSaveOptions()
808 : {
809 : // Global access, must be guarded (multithreading)
810 92570 : ::osl::MutexGuard aGuard( LocalSingleton::get() );
811 92570 : if ( !pOptions )
812 : {
813 150 : pOptions = new SvtLoadSaveOptions_Impl;
814 150 : pOptions->pSaveOpt = new SvtSaveOptions_Impl;
815 150 : pOptions->pLoadOpt = new SvtLoadOptions_Impl;
816 :
817 150 : ItemHolder1::holdConfigItem(E_SAVEOPTIONS);
818 : }
819 92570 : ++nRefCount;
820 92570 : pImp = pOptions;
821 92570 : }
822 :
823 185284 : SvtSaveOptions::~SvtSaveOptions()
824 : {
825 : // Global access, must be guarded (multithreading)
826 92568 : ::osl::MutexGuard aGuard( LocalSingleton::get() );
827 92568 : if ( !--nRefCount )
828 : {
829 148 : if ( pOptions->pSaveOpt->IsModified() )
830 0 : pOptions->pSaveOpt->Commit();
831 148 : if ( pOptions->pLoadOpt->IsModified() )
832 0 : pOptions->pLoadOpt->Commit();
833 :
834 148 : DELETEZ( pOptions->pLoadOpt );
835 148 : DELETEZ( pOptions->pSaveOpt );
836 148 : DELETEZ( pOptions );
837 92568 : }
838 92716 : }
839 :
840 0 : void SvtSaveOptions::SetAutoSaveTime( sal_Int32 n )
841 : {
842 0 : pImp->pSaveOpt->SetAutoSaveTime( n );
843 0 : }
844 :
845 0 : sal_Int32 SvtSaveOptions::GetAutoSaveTime() const
846 : {
847 0 : return pImp->pSaveOpt->GetAutoSaveTime();
848 : }
849 :
850 0 : void SvtSaveOptions::SetUseUserData( bool b )
851 : {
852 0 : pImp->pSaveOpt->SetUseUserData( b );
853 0 : }
854 :
855 0 : bool SvtSaveOptions::IsUseUserData() const
856 : {
857 0 : return pImp->pSaveOpt->IsUseUserData();
858 : }
859 :
860 0 : void SvtSaveOptions::SetBackup( bool b )
861 : {
862 0 : pImp->pSaveOpt->SetBackup( b );
863 0 : }
864 :
865 2 : bool SvtSaveOptions::IsBackup() const
866 : {
867 2 : return pImp->pSaveOpt->IsBackup();
868 : }
869 :
870 0 : void SvtSaveOptions::SetAutoSave( bool b )
871 : {
872 0 : pImp->pSaveOpt->SetAutoSave( b );
873 0 : }
874 :
875 0 : bool SvtSaveOptions::IsAutoSave() const
876 : {
877 0 : return pImp->pSaveOpt->IsAutoSave();
878 : }
879 :
880 0 : void SvtSaveOptions::SetAutoSavePrompt( bool b )
881 : {
882 0 : pImp->pSaveOpt->SetAutoSavePrompt( b );
883 0 : }
884 :
885 0 : bool SvtSaveOptions::IsAutoSavePrompt() const
886 : {
887 0 : return pImp->pSaveOpt->IsAutoSavePrompt();
888 : }
889 :
890 0 : void SvtSaveOptions::SetUserAutoSave( bool b )
891 : {
892 0 : pImp->pSaveOpt->SetUserAutoSave( b );
893 0 : }
894 :
895 0 : bool SvtSaveOptions::IsUserAutoSave() const
896 : {
897 0 : return pImp->pSaveOpt->IsUserAutoSave();
898 : }
899 :
900 0 : void SvtSaveOptions::SetDocInfoSave(bool b)
901 : {
902 0 : pImp->pSaveOpt->SetDocInfoSave( b );
903 0 : }
904 :
905 0 : bool SvtSaveOptions::IsDocInfoSave() const
906 : {
907 0 : return pImp->pSaveOpt->IsDocInfoSave();
908 : }
909 :
910 0 : void SvtSaveOptions::SetSaveWorkingSet( bool b )
911 : {
912 0 : pImp->pSaveOpt->SetSaveWorkingSet( b );
913 0 : }
914 :
915 0 : bool SvtSaveOptions::IsSaveWorkingSet() const
916 : {
917 0 : return pImp->pSaveOpt->IsSaveWorkingSet();
918 : }
919 :
920 0 : void SvtSaveOptions::SetSaveDocView( bool b )
921 : {
922 0 : pImp->pSaveOpt->SetSaveDocView( b );
923 0 : }
924 :
925 0 : bool SvtSaveOptions::IsSaveDocView() const
926 : {
927 0 : return pImp->pSaveOpt->IsSaveDocView();
928 : }
929 :
930 0 : void SvtSaveOptions::SetSaveRelINet( bool b )
931 : {
932 0 : pImp->pSaveOpt->SetSaveRelINet( b );
933 0 : }
934 :
935 0 : bool SvtSaveOptions::IsSaveRelINet() const
936 : {
937 0 : return pImp->pSaveOpt->IsSaveRelINet();
938 : }
939 :
940 0 : void SvtSaveOptions::SetSaveRelFSys( bool b )
941 : {
942 0 : pImp->pSaveOpt->SetSaveRelFSys( b );
943 0 : }
944 :
945 2674 : bool SvtSaveOptions::IsSaveRelFSys() const
946 : {
947 2674 : return pImp->pSaveOpt->IsSaveRelFSys();
948 : }
949 :
950 1114 : bool SvtSaveOptions::IsSaveUnpacked() const
951 : {
952 1114 : return pImp->pSaveOpt->IsSaveUnpacked();
953 : }
954 :
955 0 : void SvtSaveOptions::SetLoadUserSettings(bool b)
956 : {
957 0 : pImp->pLoadOpt->SetLoadUserSettings(b);
958 0 : }
959 :
960 310 : bool SvtSaveOptions::IsLoadUserSettings() const
961 : {
962 310 : return pImp->pLoadOpt->IsLoadUserSettings();
963 : }
964 :
965 0 : void SvtSaveOptions::SetPrettyPrinting( bool _bEnable )
966 : {
967 0 : pImp->pSaveOpt->EnablePrettyPrinting( _bEnable );
968 0 : }
969 :
970 1972 : bool SvtSaveOptions::IsPrettyPrinting() const
971 : {
972 1972 : return pImp->pSaveOpt->IsPrettyPrintingEnabled();
973 : }
974 :
975 0 : void SvtSaveOptions::SetWarnAlienFormat( bool _bEnable )
976 : {
977 0 : pImp->pSaveOpt->SetWarnAlienFormat( _bEnable );
978 0 : }
979 :
980 0 : bool SvtSaveOptions::IsWarnAlienFormat() const
981 : {
982 0 : return pImp->pSaveOpt->IsWarnAlienFormat();
983 : }
984 :
985 0 : void SvtSaveOptions::SetLoadDocumentPrinter( bool _bEnable )
986 : {
987 0 : pImp->pSaveOpt->SetLoadDocPrinter( _bEnable );
988 0 : }
989 :
990 0 : bool SvtSaveOptions::IsLoadDocumentPrinter() const
991 : {
992 0 : return pImp->pSaveOpt->IsLoadDocPrinter();
993 : }
994 :
995 0 : void SvtSaveOptions::SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion eVersion )
996 : {
997 0 : pImp->pSaveOpt->SetODFDefaultVersion( eVersion );
998 0 : }
999 :
1000 109196 : SvtSaveOptions::ODFDefaultVersion SvtSaveOptions::GetODFDefaultVersion() const
1001 : {
1002 109196 : return pImp->pSaveOpt->GetODFDefaultVersion();
1003 : }
1004 :
1005 8486 : bool SvtSaveOptions::IsUseSHA1InODF12() const
1006 : {
1007 8486 : return pImp->pSaveOpt->IsUseSHA1InODF12();
1008 : }
1009 :
1010 8486 : bool SvtSaveOptions::IsUseBlowfishInODF12() const
1011 : {
1012 8486 : return pImp->pSaveOpt->IsUseBlowfishInODF12();
1013 : }
1014 :
1015 0 : bool SvtSaveOptions::IsReadOnly( SvtSaveOptions::EOption eOption ) const
1016 : {
1017 0 : return pImp->pSaveOpt->IsReadOnly(eOption);
1018 : }
1019 :
1020 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|