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 <svtools/miscopt.hxx>
21 : #include <unotools/configmgr.hxx>
22 : #include <unotools/configitem.hxx>
23 : #include <tools/debug.hxx>
24 : #include <com/sun/star/uno/Any.hxx>
25 : #include <com/sun/star/uno/Sequence.hxx>
26 : #include <tools/link.hxx>
27 :
28 : #include <rtl/instance.hxx>
29 : #include "itemholder2.hxx"
30 :
31 : #include <svtools/imgdef.hxx>
32 : #include <vcl/svapp.hxx>
33 : #include <vcl/settings.hxx>
34 :
35 : #include <list>
36 :
37 : using namespace ::utl ;
38 : using namespace ::osl ;
39 : using namespace ::com::sun::star::uno ;
40 : using namespace ::com::sun::star;
41 :
42 : #define ROOTNODE_MISC "Office.Common/Misc"
43 :
44 : // PROPERTYHANDLE defines must be sequential from zero for Commit/Load
45 : #define PROPERTYNAME_PLUGINSENABLED "PluginsEnabled"
46 : #define PROPERTYHANDLE_PLUGINSENABLED 0
47 : #define PROPERTYNAME_SYMBOLSET "SymbolSet"
48 : #define PROPERTYHANDLE_SYMBOLSET 1
49 : #define PROPERTYNAME_TOOLBOXSTYLE "ToolboxStyle"
50 : #define PROPERTYHANDLE_TOOLBOXSTYLE 2
51 : #define PROPERTYNAME_USESYSTEMFILEDIALOG "UseSystemFileDialog"
52 : #define PROPERTYHANDLE_USESYSTEMFILEDIALOG 3
53 : #define PROPERTYNAME_ICONTHEME "SymbolStyle"
54 : #define PROPERTYHANDLE_SYMBOLSTYLE 4
55 : #define PROPERTYNAME_USESYSTEMPRINTDIALOG "UseSystemPrintDialog"
56 : #define PROPERTYHANDLE_USESYSTEMPRINTDIALOG 5
57 : #define PROPERTYNAME_SHOWLINKWARNINGDIALOG "ShowLinkWarningDialog"
58 : #define PROPERTYHANDLE_SHOWLINKWARNINGDIALOG 6
59 : #define PROPERTYNAME_DISABLEUICUSTOMIZATION "DisableUICustomization"
60 : #define PROPERTYHANDLE_DISABLEUICUSTOMIZATION 7
61 : #define PROPERTYNAME_ALWAYSALLOWSAVE "AlwaysAllowSave"
62 : #define PROPERTYHANDLE_ALWAYSALLOWSAVE 8
63 : #define PROPERTYNAME_EXPERIMENTALMODE "ExperimentalMode"
64 : #define PROPERTYHANDLE_EXPERIMENTALMODE 9
65 : #define PROPERTYNAME_MACRORECORDERMODE "MacroRecorderMode"
66 : #define PROPERTYHANDLE_MACRORECORDERMODE 10
67 :
68 : #define VCL_TOOLBOX_STYLE_FLAT ((sal_uInt16)0x0004) // from <vcl/toolbox.hxx>
69 :
70 : class SvtMiscOptions_Impl : public ConfigItem
71 : {
72 : private:
73 : ::std::list<Link<>> aList;
74 : bool m_bUseSystemFileDialog;
75 : bool m_bIsUseSystemFileDialogRO;
76 : bool m_bPluginsEnabled;
77 : bool m_bIsPluginsEnabledRO;
78 : sal_Int16 m_nSymbolsSize;
79 : bool m_bIsSymbolsSizeRO;
80 : bool m_bIsSymbolsStyleRO;
81 : sal_Int16 m_nToolboxStyle;
82 : bool m_bIsToolboxStyleRO;
83 : bool m_bUseSystemPrintDialog;
84 : bool m_bIsUseSystemPrintDialogRO;
85 : bool m_bShowLinkWarningDialog;
86 : bool m_bIsShowLinkWarningDialogRO;
87 : bool m_bDisableUICustomization;
88 : bool m_bAlwaysAllowSave;
89 : bool m_bExperimentalMode;
90 : bool m_bMacroRecorderMode;
91 : bool m_bIconThemeWasSetAutomatically;
92 :
93 : virtual void ImplCommit() SAL_OVERRIDE;
94 :
95 : public:
96 :
97 : SvtMiscOptions_Impl();
98 : virtual ~SvtMiscOptions_Impl();
99 :
100 : /*-****************************************************************************************************
101 : @short called for notify of configmanager
102 : @descr These method is called from the ConfigManager before application ends or from the
103 : PropertyChangeListener if the sub tree broadcasts changes. You must update your
104 : internal values.
105 :
106 : @seealso baseclass ConfigItem
107 :
108 : @param "seqPropertyNames" is the list of properties which should be updated.
109 : *//*-*****************************************************************************************************/
110 :
111 : virtual void Notify( const Sequence< OUString >& seqPropertyNames ) SAL_OVERRIDE;
112 :
113 : /** loads required data from the configuration. It's called in the constructor to
114 : read all entries and form ::Notify to re-read changed settings
115 :
116 : */
117 : void Load( const Sequence< OUString >& rPropertyNames );
118 :
119 : // public interface
120 :
121 :
122 118 : inline bool UseSystemFileDialog() const
123 118 : { return m_bUseSystemFileDialog; }
124 :
125 232 : inline void SetUseSystemFileDialog( bool bSet )
126 232 : { m_bUseSystemFileDialog = bSet; SetModified(); }
127 :
128 0 : inline bool IsUseSystemFileDialogReadOnly() const
129 0 : { return m_bIsUseSystemFileDialogRO; }
130 :
131 1346 : inline bool DisableUICustomization() const
132 1346 : { return m_bDisableUICustomization; }
133 :
134 0 : inline void SetSaveAlwaysAllowed( bool bSet )
135 0 : { m_bAlwaysAllowSave = bSet; SetModified(); }
136 :
137 1723 : inline bool IsSaveAlwaysAllowed() const
138 1723 : { return m_bAlwaysAllowSave; }
139 :
140 0 : inline void SetExperimentalMode( bool bSet )
141 0 : { m_bExperimentalMode = bSet; SetModified(); }
142 :
143 29247 : inline bool IsExperimentalMode() const
144 29247 : { return m_bExperimentalMode; }
145 :
146 0 : inline void SetMacroRecorderMode( bool bSet )
147 0 : { m_bMacroRecorderMode = bSet; SetModified(); }
148 :
149 0 : inline bool IsMacroRecorderMode() const
150 0 : { return m_bMacroRecorderMode; }
151 :
152 0 : inline bool IsPluginsEnabled() const
153 0 : { return m_bPluginsEnabled; }
154 :
155 14051 : inline sal_Int16 GetSymbolsSize()
156 14051 : { return m_nSymbolsSize; }
157 :
158 : void SetSymbolsSize( sal_Int16 nSet );
159 :
160 : static OUString GetIconTheme();
161 :
162 : enum SetModifiedFlag { SET_MODIFIED, DONT_SET_MODIFIED };
163 :
164 : /** Set the icon theme
165 : *
166 : * @param theme
167 : * The name of the icon theme to use.
168 : *
169 : * @param setModified
170 : * Whether to call SetModified() and CallListeners().
171 : *
172 : * @internal
173 : * The @p setModified flag was introduced because the unittests fail if we call SetModified()
174 : * during initialization in the constructor.
175 : */
176 : void
177 : SetIconTheme(const OUString &theme, SetModifiedFlag setModified = SET_MODIFIED );
178 :
179 0 : bool IconThemeWasSetAutomatically()
180 0 : {return m_bIconThemeWasSetAutomatically;}
181 :
182 : // translate to VCL settings ( "0" = 3D, "1" = FLAT )
183 9522 : inline sal_Int16 GetToolboxStyle()
184 9522 : { return m_nToolboxStyle ? VCL_TOOLBOX_STYLE_FLAT : 0; }
185 :
186 : // translate from VCL settings
187 : void SetToolboxStyle( sal_Int16 nStyle, bool _bSetModified );
188 :
189 0 : inline bool UseSystemPrintDialog() const
190 0 : { return m_bUseSystemPrintDialog; }
191 :
192 0 : inline void SetUseSystemPrintDialog( bool bSet )
193 0 : { m_bUseSystemPrintDialog = bSet; SetModified(); }
194 :
195 0 : inline bool ShowLinkWarningDialog() const
196 0 : { return m_bShowLinkWarningDialog; }
197 :
198 0 : void SetShowLinkWarningDialog( bool bSet )
199 0 : { m_bShowLinkWarningDialog = bSet; SetModified(); }
200 :
201 0 : bool IsShowLinkWarningDialogReadOnly() const
202 0 : { return m_bIsShowLinkWarningDialogRO; }
203 :
204 : void AddListenerLink( const Link<>& rLink );
205 : void RemoveListenerLink( const Link<>& rLink );
206 : void CallListeners();
207 :
208 :
209 : // private methods
210 :
211 :
212 : private:
213 :
214 : /*-****************************************************************************************************
215 : @short return list of key names of our configuration management which represent oue module tree
216 : @descr These methods return a static const list of key names. We need it to get needed values from our
217 : configuration management.
218 : @return A list of needed configuration keys is returned.
219 : *//*-*****************************************************************************************************/
220 :
221 : static Sequence< OUString > GetPropertyNames();
222 : };
223 :
224 :
225 : // constructor
226 :
227 185 : SvtMiscOptions_Impl::SvtMiscOptions_Impl()
228 : // Init baseclasses first
229 : : ConfigItem( ROOTNODE_MISC )
230 :
231 : , m_bUseSystemFileDialog( false )
232 : , m_bIsUseSystemFileDialogRO( false )
233 : , m_bPluginsEnabled( false )
234 : , m_bIsPluginsEnabledRO( false )
235 : , m_nSymbolsSize( 0 )
236 : , m_bIsSymbolsSizeRO( false )
237 : , m_bIsSymbolsStyleRO( false )
238 : , m_nToolboxStyle( 1 )
239 : , m_bIsToolboxStyleRO( false )
240 : , m_bUseSystemPrintDialog( false )
241 : , m_bIsUseSystemPrintDialogRO( false )
242 : , m_bShowLinkWarningDialog( true )
243 : , m_bIsShowLinkWarningDialogRO( false )
244 : , m_bAlwaysAllowSave( false )
245 : , m_bExperimentalMode( false )
246 : , m_bMacroRecorderMode( false )
247 185 : , m_bIconThemeWasSetAutomatically( false )
248 : {
249 : // Use our static list of configuration keys to get his values.
250 185 : Sequence< OUString > seqNames = GetPropertyNames ( );
251 185 : Load( seqNames );
252 370 : Sequence< Any > seqValues = GetProperties ( seqNames );
253 370 : Sequence< sal_Bool > seqRO = GetReadOnlyStates ( seqNames );
254 :
255 : // Safe impossible cases.
256 : // We need values from ALL configuration keys.
257 : // Follow assignment use order of values in relation to our list of key names!
258 : DBG_ASSERT( !(seqNames.getLength()!=seqValues.getLength()), "SvtMiscOptions_Impl::SvtMiscOptions_Impl()\nI miss some values of configuration keys!\n" );
259 :
260 : // Copy values from list in right order to our internal member.
261 185 : sal_Int32 nPropertyCount = seqValues.getLength();
262 2220 : for( sal_Int32 nProperty=0; nProperty<nPropertyCount; ++nProperty )
263 : {
264 2035 : if (!seqValues[nProperty].hasValue())
265 0 : continue;
266 2035 : switch( nProperty )
267 : {
268 : case PROPERTYHANDLE_PLUGINSENABLED :
269 : {
270 185 : if( !(seqValues[nProperty] >>= m_bPluginsEnabled) )
271 : {
272 : OSL_FAIL("Wrong type of \"Misc\\PluginsEnabled\"!" );
273 : }
274 185 : m_bIsPluginsEnabledRO = seqRO[nProperty];
275 185 : break;
276 : }
277 :
278 : case PROPERTYHANDLE_SYMBOLSET :
279 : {
280 185 : if( !(seqValues[nProperty] >>= m_nSymbolsSize) )
281 : {
282 : OSL_FAIL("Wrong type of \"Misc\\SymbolSet\"!" );
283 : }
284 185 : m_bIsSymbolsSizeRO = seqRO[nProperty];
285 185 : break;
286 : }
287 :
288 : case PROPERTYHANDLE_TOOLBOXSTYLE :
289 : {
290 185 : if( !(seqValues[nProperty] >>= m_nToolboxStyle) )
291 : {
292 : OSL_FAIL("Wrong type of \"Misc\\ToolboxStyle\"!" );
293 : }
294 185 : m_bIsToolboxStyleRO = seqRO[nProperty];
295 185 : break;
296 : }
297 :
298 : case PROPERTYHANDLE_USESYSTEMFILEDIALOG :
299 : {
300 185 : if( !(seqValues[nProperty] >>= m_bUseSystemFileDialog) )
301 : {
302 : OSL_FAIL("Wrong type of \"Misc\\UseSystemFileDialog\"!" );
303 : }
304 185 : m_bIsUseSystemFileDialogRO = seqRO[nProperty];
305 185 : break;
306 : }
307 :
308 : case PROPERTYHANDLE_USESYSTEMPRINTDIALOG :
309 : {
310 185 : if( !(seqValues[nProperty] >>= m_bUseSystemPrintDialog) )
311 : {
312 : OSL_FAIL("Wrong type of \"Misc\\UseSystemPrintDialog\"!" );
313 : }
314 185 : m_bIsUseSystemPrintDialogRO = seqRO[nProperty];
315 185 : break;
316 : }
317 :
318 : case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG :
319 : {
320 185 : if( !(seqValues[nProperty] >>= m_bShowLinkWarningDialog) )
321 : {
322 : OSL_FAIL("Wrong type of \"Misc\\ShowLinkWarningDialog\"!" );
323 : }
324 185 : m_bIsShowLinkWarningDialogRO = seqRO[nProperty];
325 185 : break;
326 : }
327 :
328 : case PROPERTYHANDLE_SYMBOLSTYLE :
329 : {
330 185 : OUString aIconTheme;
331 185 : if (seqValues[nProperty] >>= aIconTheme)
332 185 : SetIconTheme(aIconTheme, DONT_SET_MODIFIED);
333 : else
334 : OSL_FAIL("Wrong type of \"Misc\\SymbolStyle\"!" );
335 :
336 185 : m_bIsSymbolsStyleRO = seqRO[nProperty];
337 185 : break;
338 : }
339 :
340 : case PROPERTYHANDLE_DISABLEUICUSTOMIZATION :
341 : {
342 185 : if( !(seqValues[nProperty] >>= m_bDisableUICustomization) )
343 : OSL_FAIL("Wrong type of \"Misc\\DisableUICustomization\"!" );
344 185 : break;
345 : }
346 : case PROPERTYHANDLE_ALWAYSALLOWSAVE :
347 : {
348 185 : if( !(seqValues[nProperty] >>= m_bAlwaysAllowSave) )
349 : OSL_FAIL("Wrong type of \"Misc\\AlwaysAllowSave\"!" );
350 185 : break;
351 : }
352 : case PROPERTYHANDLE_EXPERIMENTALMODE :
353 : {
354 185 : if( !(seqValues[nProperty] >>= m_bExperimentalMode) )
355 : OSL_FAIL("Wrong type of \"Misc\\ExperimentalMode\"!" );
356 185 : break;
357 : }
358 : case PROPERTYHANDLE_MACRORECORDERMODE :
359 : {
360 185 : if( !(seqValues[nProperty] >>= m_bMacroRecorderMode) )
361 : OSL_FAIL("Wrong type of \"Misc\\MacroRecorderMode\"!" );
362 185 : break;
363 : }
364 : }
365 : }
366 :
367 : // Enable notification mechanism of our baseclass.
368 : // We need it to get information about changes outside these class on our used configuration keys!
369 370 : EnableNotification( seqNames );
370 185 : }
371 :
372 :
373 : // destructor
374 :
375 366 : SvtMiscOptions_Impl::~SvtMiscOptions_Impl()
376 : {
377 : assert(!IsModified()); // should have been committed
378 366 : }
379 :
380 2035 : static int lcl_MapPropertyName( const OUString& rCompare,
381 : const uno::Sequence< OUString>& aInternalPropertyNames)
382 : {
383 12210 : for(int nProp = 0; nProp < aInternalPropertyNames.getLength(); ++nProp)
384 : {
385 12210 : if( aInternalPropertyNames[nProp] == rCompare )
386 2035 : return nProp;
387 : }
388 0 : return -1;
389 : }
390 :
391 185 : void SvtMiscOptions_Impl::Load( const Sequence< OUString >& rPropertyNames )
392 : {
393 185 : const uno::Sequence< OUString> aInternalPropertyNames( GetPropertyNames());
394 370 : Sequence< Any > seqValues = GetProperties( rPropertyNames );
395 :
396 : // Safe impossible cases.
397 : // We need values from ALL configuration keys.
398 : // Follow assignment use order of values in relation to our list of key names!
399 : DBG_ASSERT( !(rPropertyNames.getLength()!=seqValues.getLength()), "SvtSecurityOptions_Impl::SvtSecurityOptions_Impl()\nI miss some values of configuration keys!\n" );
400 :
401 : // Copy values from list in right order to our internal member.
402 185 : sal_Int32 nPropertyCount = seqValues.getLength();
403 2220 : for( sal_Int32 nProperty=0; nProperty<nPropertyCount; ++nProperty )
404 : {
405 2035 : if (!seqValues[nProperty].hasValue())
406 0 : continue;
407 2035 : switch( lcl_MapPropertyName(rPropertyNames[nProperty], aInternalPropertyNames) )
408 : {
409 : case PROPERTYHANDLE_PLUGINSENABLED : {
410 185 : if( !(seqValues[nProperty] >>= m_bPluginsEnabled) )
411 : {
412 : OSL_FAIL("Wrong type of \"Misc\\PluginsEnabled\"!" );
413 : }
414 : }
415 185 : break;
416 : case PROPERTYHANDLE_SYMBOLSET : {
417 185 : if( !(seqValues[nProperty] >>= m_nSymbolsSize) )
418 : {
419 : OSL_FAIL("Wrong type of \"Misc\\SymbolSet\"!" );
420 : }
421 : }
422 185 : break;
423 : case PROPERTYHANDLE_TOOLBOXSTYLE : {
424 185 : if( !(seqValues[nProperty] >>= m_nToolboxStyle) )
425 : {
426 : OSL_FAIL("Wrong type of \"Misc\\ToolboxStyle\"!" );
427 : }
428 : }
429 185 : break;
430 : case PROPERTYHANDLE_USESYSTEMFILEDIALOG : {
431 185 : if( !(seqValues[nProperty] >>= m_bUseSystemFileDialog) )
432 : {
433 : OSL_FAIL("Wrong type of \"Misc\\UseSystemFileDialog\"!" );
434 : }
435 : }
436 185 : break;
437 : case PROPERTYHANDLE_USESYSTEMPRINTDIALOG : {
438 185 : if( !(seqValues[nProperty] >>= m_bUseSystemPrintDialog) )
439 : {
440 : OSL_FAIL("Wrong type of \"Misc\\UseSystemPrintDialog\"!" );
441 : }
442 : }
443 185 : break;
444 : case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG : {
445 185 : if( !(seqValues[nProperty] >>= m_bShowLinkWarningDialog) )
446 : {
447 : OSL_FAIL("Wrong type of \"Misc\\ShowLinkWarningDialog\"!" );
448 : }
449 : }
450 185 : break;
451 : case PROPERTYHANDLE_SYMBOLSTYLE : {
452 185 : OUString aIconTheme;
453 185 : if (seqValues[nProperty] >>= aIconTheme)
454 185 : SetIconTheme(aIconTheme, DONT_SET_MODIFIED);
455 : else
456 185 : OSL_FAIL("Wrong type of \"Misc\\SymbolStyle\"!" );
457 : }
458 185 : break;
459 : case PROPERTYHANDLE_DISABLEUICUSTOMIZATION : {
460 185 : if( !(seqValues[nProperty] >>= m_bDisableUICustomization) )
461 : OSL_FAIL("Wrong type of \"Misc\\DisableUICustomization\"!" );
462 : }
463 185 : break;
464 : case PROPERTYHANDLE_ALWAYSALLOWSAVE:
465 : {
466 185 : if( !(seqValues[nProperty] >>= m_bAlwaysAllowSave) )
467 : OSL_FAIL("Wrong type of \"Misc\\AlwaysAllowSave\"!" );
468 : }
469 185 : break;
470 : }
471 185 : }
472 185 : }
473 :
474 9565 : void SvtMiscOptions_Impl::AddListenerLink( const Link<>& rLink )
475 : {
476 9565 : aList.push_back( rLink );
477 9565 : }
478 :
479 9552 : void SvtMiscOptions_Impl::RemoveListenerLink( const Link<>& rLink )
480 : {
481 19921 : for ( ::std::list<Link<>>::iterator iter = aList.begin(); iter != aList.end(); ++iter )
482 : {
483 19921 : if ( *iter == rLink )
484 : {
485 9552 : aList.erase(iter);
486 9552 : break;
487 : }
488 : }
489 9552 : }
490 :
491 370 : void SvtMiscOptions_Impl::CallListeners()
492 : {
493 370 : for ( ::std::list<Link<>>::const_iterator iter = aList.begin(); iter != aList.end(); ++iter )
494 0 : iter->Call( this );
495 370 : }
496 :
497 0 : void SvtMiscOptions_Impl::SetToolboxStyle( sal_Int16 nStyle, bool _bSetModified )
498 : {
499 0 : m_nToolboxStyle = nStyle ? 1 : 0;
500 0 : if ( _bSetModified )
501 0 : SetModified();
502 0 : CallListeners();
503 0 : }
504 :
505 0 : void SvtMiscOptions_Impl::SetSymbolsSize( sal_Int16 nSet )
506 : {
507 0 : m_nSymbolsSize = nSet;
508 0 : SetModified();
509 0 : CallListeners();
510 0 : }
511 :
512 115848 : OUString SvtMiscOptions_Impl::GetIconTheme()
513 : {
514 115848 : return Application::GetSettings().GetStyleSettings().DetermineIconTheme();
515 : }
516 :
517 : void
518 370 : SvtMiscOptions_Impl::SetIconTheme(const OUString &rName, SetModifiedFlag setModified)
519 : {
520 370 : OUString aTheme(rName);
521 370 : if (aTheme.isEmpty() || aTheme == "auto")
522 : {
523 370 : aTheme = Application::GetSettings().GetStyleSettings().GetAutomaticallyChosenIconTheme();
524 370 : m_bIconThemeWasSetAutomatically = true;
525 : }
526 : else
527 0 : m_bIconThemeWasSetAutomatically = false;
528 :
529 740 : AllSettings aAllSettings = Application::GetSettings();
530 740 : StyleSettings aStyleSettings = aAllSettings.GetStyleSettings();
531 370 : aStyleSettings.SetIconTheme(aTheme);
532 :
533 370 : aAllSettings.SetStyleSettings(aStyleSettings);
534 370 : Application::MergeSystemSettings( aAllSettings );
535 370 : Application::SetSettings(aAllSettings);
536 :
537 370 : if (setModified == SET_MODIFIED) {
538 0 : SetModified();
539 : }
540 740 : CallListeners();
541 370 : }
542 :
543 :
544 : // public method
545 :
546 0 : void SvtMiscOptions_Impl::Notify( const Sequence< OUString >& rPropertyNames )
547 : {
548 0 : Load( rPropertyNames );
549 0 : CallListeners();
550 0 : }
551 :
552 :
553 : // public method
554 :
555 231 : void SvtMiscOptions_Impl::ImplCommit()
556 : {
557 : // Get names of supported properties, create a list for values and copy current values to it.
558 231 : Sequence< OUString > seqNames = GetPropertyNames ();
559 231 : sal_Int32 nCount = seqNames.getLength();
560 462 : Sequence< Any > seqValues ( nCount );
561 2772 : for( sal_Int32 nProperty=0; nProperty<nCount; ++nProperty )
562 : {
563 2541 : switch( nProperty )
564 : {
565 : case PROPERTYHANDLE_PLUGINSENABLED :
566 : {
567 231 : if ( !m_bIsPluginsEnabledRO )
568 231 : seqValues[nProperty] <<= m_bPluginsEnabled;
569 231 : break;
570 : }
571 :
572 : case PROPERTYHANDLE_SYMBOLSET :
573 : {
574 231 : if ( !m_bIsSymbolsSizeRO )
575 231 : seqValues[nProperty] <<= m_nSymbolsSize;
576 231 : break;
577 : }
578 :
579 : case PROPERTYHANDLE_TOOLBOXSTYLE :
580 : {
581 231 : if ( !m_bIsToolboxStyleRO )
582 231 : seqValues[nProperty] <<= m_nToolboxStyle;
583 231 : break;
584 : }
585 :
586 : case PROPERTYHANDLE_USESYSTEMFILEDIALOG :
587 : {
588 231 : if ( !m_bIsUseSystemFileDialogRO )
589 231 : seqValues[nProperty] <<= m_bUseSystemFileDialog;
590 231 : break;
591 : }
592 :
593 : case PROPERTYHANDLE_SYMBOLSTYLE :
594 : {
595 231 : if ( !m_bIsSymbolsStyleRO ) {
596 231 : OUString value;
597 231 : if (m_bIconThemeWasSetAutomatically) {
598 231 : value = "auto";
599 : }
600 : else {
601 0 : value = GetIconTheme();
602 : }
603 231 : seqValues[nProperty] <<= value;
604 : }
605 231 : break;
606 : }
607 :
608 : case PROPERTYHANDLE_USESYSTEMPRINTDIALOG :
609 : {
610 231 : if ( !m_bIsUseSystemPrintDialogRO )
611 231 : seqValues[nProperty] <<= m_bUseSystemPrintDialog;
612 231 : break;
613 : }
614 :
615 : case PROPERTYHANDLE_SHOWLINKWARNINGDIALOG :
616 : {
617 231 : if ( !m_bIsShowLinkWarningDialogRO )
618 231 : seqValues[nProperty] <<= m_bShowLinkWarningDialog;
619 231 : break;
620 : }
621 :
622 : case PROPERTYHANDLE_DISABLEUICUSTOMIZATION :
623 : {
624 231 : seqValues[nProperty] <<= m_bDisableUICustomization;
625 231 : break;
626 : }
627 : case PROPERTYHANDLE_ALWAYSALLOWSAVE :
628 : {
629 231 : seqValues[nProperty] <<= m_bAlwaysAllowSave;
630 231 : break;
631 : }
632 : case PROPERTYHANDLE_EXPERIMENTALMODE :
633 : {
634 231 : seqValues[nProperty] <<= m_bExperimentalMode;
635 231 : break;
636 : }
637 : case PROPERTYHANDLE_MACRORECORDERMODE :
638 : {
639 231 : seqValues[nProperty] <<= m_bMacroRecorderMode;
640 231 : break;
641 : }
642 : }
643 : }
644 : // Set properties in configuration.
645 462 : PutProperties( seqNames, seqValues );
646 231 : }
647 :
648 :
649 : // private method
650 :
651 601 : Sequence< OUString > SvtMiscOptions_Impl::GetPropertyNames()
652 : {
653 : // Build list of configuration key names.
654 : const OUString pProperties[] =
655 : {
656 : OUString(PROPERTYNAME_PLUGINSENABLED),
657 : OUString(PROPERTYNAME_SYMBOLSET),
658 : OUString(PROPERTYNAME_TOOLBOXSTYLE),
659 : OUString(PROPERTYNAME_USESYSTEMFILEDIALOG),
660 : OUString(PROPERTYNAME_ICONTHEME),
661 : OUString(PROPERTYNAME_USESYSTEMPRINTDIALOG),
662 : OUString(PROPERTYNAME_SHOWLINKWARNINGDIALOG),
663 : OUString(PROPERTYNAME_DISABLEUICUSTOMIZATION),
664 : OUString(PROPERTYNAME_ALWAYSALLOWSAVE),
665 : OUString(PROPERTYNAME_EXPERIMENTALMODE),
666 : OUString(PROPERTYNAME_MACRORECORDERMODE)
667 7212 : };
668 :
669 : // Initialize return sequence with these list ...
670 601 : const Sequence< OUString > seqPropertyNames( pProperties, SAL_N_ELEMENTS( pProperties ) );
671 : // ... and return it.
672 7212 : return seqPropertyNames;
673 : }
674 :
675 :
676 : // initialize static member
677 : // DON'T DO IT IN YOUR HEADER!
678 : // see definition for further information
679 :
680 : SvtMiscOptions_Impl* SvtMiscOptions::m_pDataContainer = NULL ;
681 : sal_Int32 SvtMiscOptions::m_nRefCount = 0 ;
682 :
683 :
684 : // constructor
685 :
686 162165 : SvtMiscOptions::SvtMiscOptions()
687 : {
688 : // SvtMiscOptions_Impl ctor indirectly calls code that requires locked
689 : // SolarMutex; lock it first:
690 162165 : SolarMutexGuard g;
691 : // Global access, must be guarded (multithreading!).
692 324330 : MutexGuard aGuard( GetInitMutex() );
693 : // Increase our refcount ...
694 162165 : ++m_nRefCount;
695 : // ... and initialize our data container only if it not already exist!
696 162165 : if( m_pDataContainer == NULL )
697 : {
698 185 : m_pDataContainer = new SvtMiscOptions_Impl;
699 185 : svtools::ItemHolder2::holdConfigItem(E_MISCOPTIONS);
700 162165 : }
701 162165 : }
702 :
703 :
704 : // destructor
705 :
706 324509 : SvtMiscOptions::~SvtMiscOptions()
707 : {
708 : // Global access, must be guarded (multithreading!)
709 162163 : MutexGuard aGuard( GetInitMutex() );
710 : // Decrease our refcount.
711 162163 : --m_nRefCount;
712 : // If last instance was deleted ...
713 : // we must destroy our static data container!
714 162163 : if( m_nRefCount <= 0 )
715 : {
716 183 : delete m_pDataContainer;
717 183 : m_pDataContainer = NULL;
718 162163 : }
719 162346 : }
720 :
721 118 : bool SvtMiscOptions::UseSystemFileDialog() const
722 : {
723 118 : return m_pDataContainer->UseSystemFileDialog();
724 : }
725 :
726 232 : void SvtMiscOptions::SetUseSystemFileDialog( bool bEnable )
727 : {
728 232 : m_pDataContainer->SetUseSystemFileDialog( bEnable );
729 232 : }
730 :
731 0 : bool SvtMiscOptions::IsUseSystemFileDialogReadOnly() const
732 : {
733 0 : return m_pDataContainer->IsUseSystemFileDialogReadOnly();
734 : }
735 :
736 0 : bool SvtMiscOptions::IsPluginsEnabled() const
737 : {
738 0 : return m_pDataContainer->IsPluginsEnabled();
739 : }
740 :
741 0 : sal_Int16 SvtMiscOptions::GetSymbolsSize() const
742 : {
743 0 : return m_pDataContainer->GetSymbolsSize();
744 : }
745 :
746 0 : void SvtMiscOptions::SetSymbolsSize( sal_Int16 nSet )
747 : {
748 0 : m_pDataContainer->SetSymbolsSize( nSet );
749 0 : }
750 :
751 14051 : sal_Int16 SvtMiscOptions::GetCurrentSymbolsSize() const
752 : {
753 14051 : sal_Int16 eOptSymbolsSize = m_pDataContainer->GetSymbolsSize();
754 :
755 14051 : if ( eOptSymbolsSize == SFX_SYMBOLS_SIZE_AUTO )
756 : {
757 : // Use system settings, we have to retrieve the toolbar icon size from the
758 : // Application class
759 14051 : ToolbarIconSize nStyleIconSize = Application::GetSettings().GetStyleSettings().GetToolbarIconSize();
760 14051 : if ( nStyleIconSize == ToolbarIconSize::Large )
761 14 : eOptSymbolsSize = SFX_SYMBOLS_SIZE_LARGE;
762 : else
763 14037 : eOptSymbolsSize = SFX_SYMBOLS_SIZE_SMALL;
764 : }
765 :
766 14051 : return eOptSymbolsSize;
767 : }
768 :
769 14008 : bool SvtMiscOptions::AreCurrentSymbolsLarge() const
770 : {
771 14008 : return ( GetCurrentSymbolsSize() == SFX_SYMBOLS_SIZE_LARGE );
772 : }
773 :
774 115848 : OUString SvtMiscOptions::GetIconTheme() const
775 : {
776 115848 : return SvtMiscOptions_Impl::GetIconTheme();
777 : }
778 :
779 0 : void SvtMiscOptions::SetIconTheme(const OUString& iconTheme)
780 : {
781 0 : m_pDataContainer->SetIconTheme(iconTheme);
782 0 : }
783 :
784 1346 : bool SvtMiscOptions::DisableUICustomization() const
785 : {
786 1346 : return m_pDataContainer->DisableUICustomization();
787 : }
788 :
789 9522 : sal_Int16 SvtMiscOptions::GetToolboxStyle() const
790 : {
791 9522 : return m_pDataContainer->GetToolboxStyle();
792 : }
793 :
794 0 : void SvtMiscOptions::SetToolboxStyle( sal_Int16 nStyle )
795 : {
796 0 : m_pDataContainer->SetToolboxStyle( nStyle, true );
797 0 : }
798 :
799 0 : bool SvtMiscOptions::UseSystemPrintDialog() const
800 : {
801 0 : return m_pDataContainer->UseSystemPrintDialog();
802 : }
803 :
804 0 : void SvtMiscOptions::SetUseSystemPrintDialog( bool bEnable )
805 : {
806 0 : m_pDataContainer->SetUseSystemPrintDialog( bEnable );
807 0 : }
808 :
809 0 : bool SvtMiscOptions::ShowLinkWarningDialog() const
810 : {
811 0 : return m_pDataContainer->ShowLinkWarningDialog();
812 : }
813 :
814 0 : void SvtMiscOptions::SetShowLinkWarningDialog( bool bSet )
815 : {
816 0 : m_pDataContainer->SetShowLinkWarningDialog( bSet );
817 0 : }
818 :
819 0 : bool SvtMiscOptions::IsShowLinkWarningDialogReadOnly() const
820 : {
821 0 : return m_pDataContainer->IsShowLinkWarningDialogReadOnly();
822 : }
823 :
824 0 : void SvtMiscOptions::SetSaveAlwaysAllowed( bool bSet )
825 : {
826 0 : m_pDataContainer->SetSaveAlwaysAllowed( bSet );
827 0 : }
828 :
829 1723 : bool SvtMiscOptions::IsSaveAlwaysAllowed() const
830 : {
831 1723 : return m_pDataContainer->IsSaveAlwaysAllowed();
832 : }
833 :
834 0 : void SvtMiscOptions::SetExperimentalMode( bool bSet )
835 : {
836 0 : m_pDataContainer->SetExperimentalMode( bSet );
837 0 : }
838 :
839 29247 : bool SvtMiscOptions::IsExperimentalMode() const
840 : {
841 29247 : return m_pDataContainer->IsExperimentalMode();
842 : }
843 :
844 0 : void SvtMiscOptions::SetMacroRecorderMode( bool bSet )
845 : {
846 0 : m_pDataContainer->SetMacroRecorderMode( bSet );
847 0 : }
848 :
849 0 : bool SvtMiscOptions::IsMacroRecorderMode() const
850 : {
851 0 : return m_pDataContainer->IsMacroRecorderMode();
852 : }
853 :
854 : namespace
855 : {
856 : class theSvtMiscOptionsMutex :
857 : public rtl::Static< osl::Mutex, theSvtMiscOptionsMutex > {};
858 : }
859 :
860 324328 : Mutex & SvtMiscOptions::GetInitMutex()
861 : {
862 324328 : return theSvtMiscOptionsMutex::get();
863 : }
864 :
865 9565 : void SvtMiscOptions::AddListenerLink( const Link<>& rLink )
866 : {
867 9565 : m_pDataContainer->AddListenerLink( rLink );
868 9565 : }
869 :
870 9552 : void SvtMiscOptions::RemoveListenerLink( const Link<>& rLink )
871 : {
872 9552 : m_pDataContainer->RemoveListenerLink( rLink );
873 9552 : }
874 :
875 : bool
876 0 : SvtMiscOptions::IconThemeWasSetAutomatically()
877 : {
878 0 : return m_pDataContainer->IconThemeWasSetAutomatically();
879 : }
880 :
881 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|