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