xref: /AOO41X/main/sc/source/core/tool/appoptio.cxx (revision b3f79822e811ac3493b185030a72c3c5a51f32d8)
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_sc.hxx"
26 
27 
28 
29 //------------------------------------------------------------------
30 
31 #include <vcl/svapp.hxx>
32 
33 #include <com/sun/star/uno/Any.hxx>
34 #include <com/sun/star/uno/Sequence.hxx>
35 
36 #include "cfgids.hxx"
37 #include "appoptio.hxx"
38 #include "rechead.hxx"
39 #include "scresid.hxx"
40 #include "global.hxx"
41 #include "userlist.hxx"
42 #include "sc.hrc"
43 #include <formula/compiler.hrc>
44 #include "miscuno.hxx"
45 
46 using namespace utl;
47 using namespace rtl;
48 using namespace com::sun::star::uno;
49 
50 // STATIC DATA -----------------------------------------------------------
51 
52 #define SC_VERSION ((sal_uInt16)304)
53 
54 //========================================================================
55 //      ScAppOptions - Applikations-Optionen
56 //========================================================================
57 
ScAppOptions()58 ScAppOptions::ScAppOptions() : pLRUList( NULL )
59 {
60     SetDefaults();
61 }
62 
63 //------------------------------------------------------------------------
64 
ScAppOptions(const ScAppOptions & rCpy)65 ScAppOptions::ScAppOptions( const ScAppOptions& rCpy ) : pLRUList( NULL )
66 {
67     *this = rCpy;
68 }
69 
70 //------------------------------------------------------------------------
71 
~ScAppOptions()72 ScAppOptions::~ScAppOptions()
73 {
74     delete [] pLRUList;
75 }
76 
77 //------------------------------------------------------------------------
78 
SetDefaults()79 void ScAppOptions::SetDefaults()
80 {
81     if ( ScOptionsUtil::IsMetricSystem() )
82         eMetric     = FUNIT_CM;             // default for countries with metric system
83     else
84         eMetric     = FUNIT_INCH;           // default for others
85 
86     nZoom           = 100;
87     eZoomType       = SVX_ZOOM_PERCENT;
88     bSynchronizeZoom = sal_True;
89     nStatusFunc     = SUBTOTAL_FUNC_SUM;
90     bAutoComplete   = sal_True;
91     bDetectiveAuto  = sal_True;
92 
93     delete [] pLRUList;
94     pLRUList = new sal_uInt16[5];               // sinnvoll vorbelegen
95     pLRUList[0] = SC_OPCODE_SUM;
96     pLRUList[1] = SC_OPCODE_AVERAGE;
97     pLRUList[2] = SC_OPCODE_MIN;
98     pLRUList[3] = SC_OPCODE_MAX;
99     pLRUList[4] = SC_OPCODE_IF;
100     nLRUFuncCount = 5;
101 
102     nTrackContentColor = COL_TRANSPARENT;
103     nTrackInsertColor  = COL_TRANSPARENT;
104     nTrackDeleteColor  = COL_TRANSPARENT;
105     nTrackMoveColor    = COL_TRANSPARENT;
106     eLinkMode          = LM_ON_DEMAND;
107 
108     nDefaultObjectSizeWidth = 8000;
109     nDefaultObjectSizeHeight = 5000;
110 
111     mbShowSharedDocumentWarning = true;
112 }
113 
114 //------------------------------------------------------------------------
115 
operator =(const ScAppOptions & rCpy)116 const ScAppOptions& ScAppOptions::operator=( const ScAppOptions& rCpy )
117 {
118     eMetric         = rCpy.eMetric;
119     eZoomType       = rCpy.eZoomType;
120     bSynchronizeZoom = rCpy.bSynchronizeZoom;
121     nZoom           = rCpy.nZoom;
122     SetLRUFuncList( rCpy.pLRUList, rCpy.nLRUFuncCount );
123     nStatusFunc     = rCpy.nStatusFunc;
124     bAutoComplete   = rCpy.bAutoComplete;
125     bDetectiveAuto  = rCpy.bDetectiveAuto;
126     nTrackContentColor = rCpy.nTrackContentColor;
127     nTrackInsertColor  = rCpy.nTrackInsertColor;
128     nTrackDeleteColor  = rCpy.nTrackDeleteColor;
129     nTrackMoveColor    = rCpy.nTrackMoveColor;
130     eLinkMode       = rCpy.eLinkMode;
131     nDefaultObjectSizeWidth = rCpy.nDefaultObjectSizeWidth;
132     nDefaultObjectSizeHeight = rCpy.nDefaultObjectSizeHeight;
133     mbShowSharedDocumentWarning = rCpy.mbShowSharedDocumentWarning;
134     return *this;
135 }
136 
137 //------------------------------------------------------------------------
138 
SetLRUFuncList(const sal_uInt16 * pList,const sal_uInt16 nCount)139 void ScAppOptions::SetLRUFuncList( const sal_uInt16* pList, const sal_uInt16 nCount )
140 {
141     delete [] pLRUList;
142 
143     nLRUFuncCount = nCount;
144 
145     if ( nLRUFuncCount > 0 )
146     {
147         pLRUList = new sal_uInt16[nLRUFuncCount];
148 
149         for ( sal_uInt16 i=0; i<nLRUFuncCount; i++ )
150             pLRUList[i] = pList[i];
151     }
152     else
153         pLRUList = NULL;
154 }
155 
156 //==================================================================
157 //  Config Item containing app options
158 //==================================================================
159 
lcl_SetLastFunctions(ScAppOptions & rOpt,const Any & rValue)160 void lcl_SetLastFunctions( ScAppOptions& rOpt, const Any& rValue )
161 {
162     Sequence<sal_Int32> aSeq;
163     if ( rValue >>= aSeq )
164     {
165         long nCount = aSeq.getLength();
166         if ( nCount < USHRT_MAX )
167         {
168             const sal_Int32* pArray = aSeq.getConstArray();
169             sal_uInt16* pUShorts = new sal_uInt16[nCount];
170             for (long i=0; i<nCount; i++)
171                 pUShorts[i] = (sal_uInt16) pArray[i];
172 
173             rOpt.SetLRUFuncList( pUShorts, sal::static_int_cast<sal_uInt16>(nCount) );
174 
175             delete[] pUShorts;
176         }
177     }
178 }
179 
lcl_GetLastFunctions(Any & rDest,const ScAppOptions & rOpt)180 void lcl_GetLastFunctions( Any& rDest, const ScAppOptions& rOpt )
181 {
182     long nCount = rOpt.GetLRUFuncListCount();
183     sal_uInt16* pUShorts = rOpt.GetLRUFuncList();
184     if ( nCount && pUShorts )
185     {
186         Sequence<sal_Int32> aSeq( nCount );
187         sal_Int32* pArray = aSeq.getArray();
188         for (long i=0; i<nCount; i++)
189             pArray[i] = pUShorts[i];
190         rDest <<= aSeq;
191     }
192     else
193         rDest <<= Sequence<sal_Int32>(0);   // empty
194 }
195 
lcl_SetSortList(const Any & rValue)196 void lcl_SetSortList( const Any& rValue )
197 {
198     Sequence<OUString> aSeq;
199     if ( rValue >>= aSeq )
200     {
201         long nCount = aSeq.getLength();
202         const OUString* pArray = aSeq.getConstArray();
203         ScUserList aList;
204 
205         //  if setting is "default", keep default values from ScUserList ctor
206         //! mark "default" in a safe way
207         sal_Bool bDefault = ( nCount == 1 &&
208                         pArray[0].equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "NULL" ) ) );
209 
210         if (!bDefault)
211         {
212             aList.FreeAll();
213 
214             for (long i=0; i<nCount; i++)
215             {
216                 ScUserListData* pNew = new ScUserListData( pArray[i] );
217                 if ( !aList.Insert(pNew) )
218                     delete pNew;
219             }
220         }
221 
222         ScGlobal::SetUserList( &aList );
223     }
224 }
225 
lcl_GetSortList(Any & rDest)226 void lcl_GetSortList( Any& rDest )
227 {
228     const ScUserList* pUserList = ScGlobal::GetUserList();
229     if (pUserList)
230     {
231         long nCount = pUserList->GetCount();
232         Sequence<OUString> aSeq( nCount );
233         OUString* pArray = aSeq.getArray();
234         for (long i=0; i<nCount; i++)
235             pArray[i] = (*pUserList)[sal::static_int_cast<sal_uInt16>(i)]->GetString();
236         rDest <<= aSeq;
237     }
238     else
239         rDest <<= Sequence<OUString>(0);    // empty
240 }
241 
242 //------------------------------------------------------------------
243 
244 #define CFGPATH_LAYOUT      "Office.Calc/Layout"
245 
246 #define SCLAYOUTOPT_MEASURE         0
247 #define SCLAYOUTOPT_STATUSBAR       1
248 #define SCLAYOUTOPT_ZOOMVAL         2
249 #define SCLAYOUTOPT_ZOOMTYPE        3
250 #define SCLAYOUTOPT_SYNCZOOM        4
251 #define SCLAYOUTOPT_COUNT           5
252 
253 #define CFGPATH_INPUT       "Office.Calc/Input"
254 
255 #define SCINPUTOPT_LASTFUNCS        0
256 #define SCINPUTOPT_AUTOINPUT        1
257 #define SCINPUTOPT_DET_AUTO         2
258 #define SCINPUTOPT_COUNT            3
259 
260 #define CFGPATH_REVISION    "Office.Calc/Revision/Color"
261 
262 #define SCREVISOPT_CHANGE           0
263 #define SCREVISOPT_INSERTION        1
264 #define SCREVISOPT_DELETION         2
265 #define SCREVISOPT_MOVEDENTRY       3
266 #define SCREVISOPT_COUNT            4
267 
268 #define CFGPATH_CONTENT     "Office.Calc/Content/Update"
269 
270 #define SCCONTENTOPT_LINK           0
271 #define SCCONTENTOPT_COUNT          1
272 
273 #define CFGPATH_SORTLIST    "Office.Calc/SortList"
274 
275 #define SCSORTLISTOPT_LIST          0
276 #define SCSORTLISTOPT_COUNT         1
277 
278 #define CFGPATH_MISC        "Office.Calc/Misc"
279 
280 #define SCMISCOPT_DEFOBJWIDTH       0
281 #define SCMISCOPT_DEFOBJHEIGHT      1
282 #define SCMISCOPT_SHOWSHAREDDOCWARN 2
283 #define SCMISCOPT_COUNT             3
284 
285 
GetLayoutPropertyNames()286 Sequence<OUString> ScAppCfg::GetLayoutPropertyNames()
287 {
288     static const char* aPropNames[] =
289     {
290         "Other/MeasureUnit/NonMetric",  // SCLAYOUTOPT_MEASURE
291         "Other/StatusbarFunction",      // SCLAYOUTOPT_STATUSBAR
292         "Zoom/Value",                   // SCLAYOUTOPT_ZOOMVAL
293         "Zoom/Type",                    // SCLAYOUTOPT_ZOOMTYPE
294         "Zoom/Synchronize"              // SCLAYOUTOPT_SYNCZOOM
295     };
296     Sequence<OUString> aNames(SCLAYOUTOPT_COUNT);
297     OUString* pNames = aNames.getArray();
298     for(int i = 0; i < SCLAYOUTOPT_COUNT; i++)
299         pNames[i] = OUString::createFromAscii(aPropNames[i]);
300 
301     //  adjust for metric system
302     if (ScOptionsUtil::IsMetricSystem())
303         pNames[SCLAYOUTOPT_MEASURE] = OUString::createFromAscii( "Other/MeasureUnit/Metric" );
304 
305     return aNames;
306 }
307 
GetInputPropertyNames()308 Sequence<OUString> ScAppCfg::GetInputPropertyNames()
309 {
310     static const char* aPropNames[] =
311     {
312         "LastFunctions",            // SCINPUTOPT_LASTFUNCS
313         "AutoInput",                // SCINPUTOPT_AUTOINPUT
314         "DetectiveAuto"             // SCINPUTOPT_DET_AUTO
315     };
316     Sequence<OUString> aNames(SCINPUTOPT_COUNT);
317     OUString* pNames = aNames.getArray();
318     for(int i = 0; i < SCINPUTOPT_COUNT; i++)
319         pNames[i] = OUString::createFromAscii(aPropNames[i]);
320 
321     return aNames;
322 }
323 
GetRevisionPropertyNames()324 Sequence<OUString> ScAppCfg::GetRevisionPropertyNames()
325 {
326     static const char* aPropNames[] =
327     {
328         "Change",                   // SCREVISOPT_CHANGE
329         "Insertion",                // SCREVISOPT_INSERTION
330         "Deletion",                 // SCREVISOPT_DELETION
331         "MovedEntry"                // SCREVISOPT_MOVEDENTRY
332     };
333     Sequence<OUString> aNames(SCREVISOPT_COUNT);
334     OUString* pNames = aNames.getArray();
335     for(int i = 0; i < SCREVISOPT_COUNT; i++)
336         pNames[i] = OUString::createFromAscii(aPropNames[i]);
337 
338     return aNames;
339 }
340 
GetContentPropertyNames()341 Sequence<OUString> ScAppCfg::GetContentPropertyNames()
342 {
343     static const char* aPropNames[] =
344     {
345         "Link"                      // SCCONTENTOPT_LINK
346     };
347     Sequence<OUString> aNames(SCCONTENTOPT_COUNT);
348     OUString* pNames = aNames.getArray();
349     for(int i = 0; i < SCCONTENTOPT_COUNT; i++)
350         pNames[i] = OUString::createFromAscii(aPropNames[i]);
351 
352     return aNames;
353 }
354 
GetSortListPropertyNames()355 Sequence<OUString> ScAppCfg::GetSortListPropertyNames()
356 {
357     static const char* aPropNames[] =
358     {
359         "List"                      // SCSORTLISTOPT_LIST
360     };
361     Sequence<OUString> aNames(SCSORTLISTOPT_COUNT);
362     OUString* pNames = aNames.getArray();
363     for(int i = 0; i < SCSORTLISTOPT_COUNT; i++)
364         pNames[i] = OUString::createFromAscii(aPropNames[i]);
365 
366     return aNames;
367 }
368 
GetMiscPropertyNames()369 Sequence<OUString> ScAppCfg::GetMiscPropertyNames()
370 {
371     static const char* aPropNames[] =
372     {
373         "DefaultObjectSize/Width",      // SCMISCOPT_DEFOBJWIDTH
374         "DefaultObjectSize/Height",     // SCMISCOPT_DEFOBJHEIGHT
375         "SharedDocument/ShowWarning"    // SCMISCOPT_SHOWSHAREDDOCWARN
376     };
377     Sequence<OUString> aNames(SCMISCOPT_COUNT);
378     OUString* pNames = aNames.getArray();
379     for(int i = 0; i < SCMISCOPT_COUNT; i++)
380         pNames[i] = OUString::createFromAscii(aPropNames[i]);
381 
382     return aNames;
383 }
384 
385 
ScAppCfg()386 ScAppCfg::ScAppCfg() :
387     aLayoutItem( OUString::createFromAscii( CFGPATH_LAYOUT ) ),
388     aInputItem( OUString::createFromAscii( CFGPATH_INPUT ) ),
389     aRevisionItem( OUString::createFromAscii( CFGPATH_REVISION ) ),
390     aContentItem( OUString::createFromAscii( CFGPATH_CONTENT ) ),
391     aSortListItem( OUString::createFromAscii( CFGPATH_SORTLIST ) ),
392     aMiscItem( OUString::createFromAscii( CFGPATH_MISC ) )
393 {
394     sal_Int32 nIntVal = 0;
395 
396     Sequence<OUString> aNames;
397     Sequence<Any> aValues;
398     const Any* pValues = NULL;
399 
400     aNames = GetLayoutPropertyNames();
401     aValues = aLayoutItem.GetProperties(aNames);
402     aLayoutItem.EnableNotification(aNames);
403     pValues = aValues.getConstArray();
404     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
405     if(aValues.getLength() == aNames.getLength())
406     {
407         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
408         {
409             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
410             if(pValues[nProp].hasValue())
411             {
412                 switch(nProp)
413                 {
414                     case SCLAYOUTOPT_MEASURE:
415                         if (pValues[nProp] >>= nIntVal) SetAppMetric( (FieldUnit) nIntVal );
416                         break;
417                     case SCLAYOUTOPT_STATUSBAR:
418                         if (pValues[nProp] >>= nIntVal) SetStatusFunc( (sal_uInt16) nIntVal );
419                         break;
420                     case SCLAYOUTOPT_ZOOMVAL:
421                         if (pValues[nProp] >>= nIntVal) SetZoom( (sal_uInt16) nIntVal );
422                         break;
423                     case SCLAYOUTOPT_ZOOMTYPE:
424                         if (pValues[nProp] >>= nIntVal) SetZoomType( (SvxZoomType) nIntVal );
425                         break;
426                     case SCLAYOUTOPT_SYNCZOOM:
427                         SetSynchronizeZoom( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
428                         break;
429                 }
430             }
431         }
432     }
433     aLayoutItem.SetCommitLink( LINK( this, ScAppCfg, LayoutCommitHdl ) );
434 
435     aNames = GetInputPropertyNames();
436     aValues = aInputItem.GetProperties(aNames);
437     aInputItem.EnableNotification(aNames);
438     pValues = aValues.getConstArray();
439     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
440     if(aValues.getLength() == aNames.getLength())
441     {
442         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
443         {
444             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
445             if(pValues[nProp].hasValue())
446             {
447                 switch(nProp)
448                 {
449                     case SCINPUTOPT_LASTFUNCS:
450                         lcl_SetLastFunctions( *this, pValues[nProp] );
451                         break;
452                     case SCINPUTOPT_AUTOINPUT:
453                         SetAutoComplete( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
454                         break;
455                     case SCINPUTOPT_DET_AUTO:
456                         SetDetectiveAuto( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
457                         break;
458                 }
459             }
460         }
461     }
462     aInputItem.SetCommitLink( LINK( this, ScAppCfg, InputCommitHdl ) );
463 
464     aNames = GetRevisionPropertyNames();
465     aValues = aRevisionItem.GetProperties(aNames);
466     aRevisionItem.EnableNotification(aNames);
467     pValues = aValues.getConstArray();
468     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
469     if(aValues.getLength() == aNames.getLength())
470     {
471         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
472         {
473             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
474             if(pValues[nProp].hasValue())
475             {
476                 switch(nProp)
477                 {
478                     case SCREVISOPT_CHANGE:
479                         if (pValues[nProp] >>= nIntVal) SetTrackContentColor( (sal_uInt32) nIntVal );
480                         break;
481                     case SCREVISOPT_INSERTION:
482                         if (pValues[nProp] >>= nIntVal) SetTrackInsertColor( (sal_uInt32) nIntVal );
483                         break;
484                     case SCREVISOPT_DELETION:
485                         if (pValues[nProp] >>= nIntVal) SetTrackDeleteColor( (sal_uInt32) nIntVal );
486                         break;
487                     case SCREVISOPT_MOVEDENTRY:
488                         if (pValues[nProp] >>= nIntVal) SetTrackMoveColor( (sal_uInt32) nIntVal );
489                         break;
490                 }
491             }
492         }
493     }
494     aRevisionItem.SetCommitLink( LINK( this, ScAppCfg, RevisionCommitHdl ) );
495 
496     aNames = GetContentPropertyNames();
497     aValues = aContentItem.GetProperties(aNames);
498     aContentItem.EnableNotification(aNames);
499     pValues = aValues.getConstArray();
500     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
501     if(aValues.getLength() == aNames.getLength())
502     {
503         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
504         {
505             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
506             if(pValues[nProp].hasValue())
507             {
508                 switch(nProp)
509                 {
510                     case SCCONTENTOPT_LINK:
511                         if (pValues[nProp] >>= nIntVal) SetLinkMode( (ScLkUpdMode) nIntVal );
512                         break;
513                 }
514             }
515         }
516     }
517     aContentItem.SetCommitLink( LINK( this, ScAppCfg, ContentCommitHdl ) );
518 
519     aNames = GetSortListPropertyNames();
520     aValues = aSortListItem.GetProperties(aNames);
521     aSortListItem.EnableNotification(aNames);
522     pValues = aValues.getConstArray();
523     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
524     if(aValues.getLength() == aNames.getLength())
525     {
526         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
527         {
528             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
529             if(pValues[nProp].hasValue())
530             {
531                 switch(nProp)
532                 {
533                     case SCSORTLISTOPT_LIST:
534                         lcl_SetSortList( pValues[nProp] );
535                         break;
536                 }
537             }
538         }
539     }
540     aSortListItem.SetCommitLink( LINK( this, ScAppCfg, SortListCommitHdl ) );
541 
542     aNames = GetMiscPropertyNames();
543     aValues = aMiscItem.GetProperties(aNames);
544     aMiscItem.EnableNotification(aNames);
545     pValues = aValues.getConstArray();
546     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
547     if(aValues.getLength() == aNames.getLength())
548     {
549         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
550         {
551             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
552             if(pValues[nProp].hasValue())
553             {
554                 switch(nProp)
555                 {
556                     case SCMISCOPT_DEFOBJWIDTH:
557                         if (pValues[nProp] >>= nIntVal) SetDefaultObjectSizeWidth( nIntVal );
558                         break;
559                     case SCMISCOPT_DEFOBJHEIGHT:
560                         if (pValues[nProp] >>= nIntVal) SetDefaultObjectSizeHeight( nIntVal );
561                         break;
562                     case SCMISCOPT_SHOWSHAREDDOCWARN:
563                         SetShowSharedDocumentWarning( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
564                         break;
565                 }
566             }
567         }
568     }
569     aMiscItem.SetCommitLink( LINK( this, ScAppCfg, MiscCommitHdl ) );
570 }
571 
IMPL_LINK(ScAppCfg,LayoutCommitHdl,void *,EMPTYARG)572 IMPL_LINK( ScAppCfg, LayoutCommitHdl, void *, EMPTYARG )
573 {
574     Sequence<OUString> aNames = GetLayoutPropertyNames();
575     Sequence<Any> aValues(aNames.getLength());
576     Any* pValues = aValues.getArray();
577 
578     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
579     {
580         switch(nProp)
581         {
582             case SCLAYOUTOPT_MEASURE:
583                 pValues[nProp] <<= (sal_Int32) GetAppMetric();
584                 break;
585             case SCLAYOUTOPT_STATUSBAR:
586                 pValues[nProp] <<= (sal_Int32) GetStatusFunc();
587                 break;
588             case SCLAYOUTOPT_ZOOMVAL:
589                 pValues[nProp] <<= (sal_Int32) GetZoom();
590                 break;
591             case SCLAYOUTOPT_ZOOMTYPE:
592                 pValues[nProp] <<= (sal_Int32) GetZoomType();
593                 break;
594             case SCLAYOUTOPT_SYNCZOOM:
595                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetSynchronizeZoom() );
596                 break;
597         }
598     }
599     aLayoutItem.PutProperties(aNames, aValues);
600 
601     return 0;
602 }
603 
IMPL_LINK(ScAppCfg,InputCommitHdl,void *,EMPTYARG)604 IMPL_LINK( ScAppCfg, InputCommitHdl, void *, EMPTYARG )
605 {
606     Sequence<OUString> aNames = GetInputPropertyNames();
607     Sequence<Any> aValues(aNames.getLength());
608     Any* pValues = aValues.getArray();
609 
610     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
611     {
612         switch(nProp)
613         {
614             case SCINPUTOPT_LASTFUNCS:
615                 lcl_GetLastFunctions( pValues[nProp], *this );
616                 break;
617             case SCINPUTOPT_AUTOINPUT:
618                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetAutoComplete() );
619                 break;
620             case SCINPUTOPT_DET_AUTO:
621                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetDetectiveAuto() );
622                 break;
623         }
624     }
625     aInputItem.PutProperties(aNames, aValues);
626 
627     return 0;
628 }
629 
IMPL_LINK(ScAppCfg,RevisionCommitHdl,void *,EMPTYARG)630 IMPL_LINK( ScAppCfg, RevisionCommitHdl, void *, EMPTYARG )
631 {
632     Sequence<OUString> aNames = GetRevisionPropertyNames();
633     Sequence<Any> aValues(aNames.getLength());
634     Any* pValues = aValues.getArray();
635 
636     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
637     {
638         switch(nProp)
639         {
640             case SCREVISOPT_CHANGE:
641                 pValues[nProp] <<= (sal_Int32) GetTrackContentColor();
642                 break;
643             case SCREVISOPT_INSERTION:
644                 pValues[nProp] <<= (sal_Int32) GetTrackInsertColor();
645                 break;
646             case SCREVISOPT_DELETION:
647                 pValues[nProp] <<= (sal_Int32) GetTrackDeleteColor();
648                 break;
649             case SCREVISOPT_MOVEDENTRY:
650                 pValues[nProp] <<= (sal_Int32) GetTrackMoveColor();
651                 break;
652         }
653     }
654     aRevisionItem.PutProperties(aNames, aValues);
655 
656     return 0;
657 }
658 
IMPL_LINK(ScAppCfg,ContentCommitHdl,void *,EMPTYARG)659 IMPL_LINK( ScAppCfg, ContentCommitHdl, void *, EMPTYARG )
660 {
661     Sequence<OUString> aNames = GetContentPropertyNames();
662     Sequence<Any> aValues(aNames.getLength());
663     Any* pValues = aValues.getArray();
664 
665     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
666     {
667         switch(nProp)
668         {
669             case SCCONTENTOPT_LINK:
670                 pValues[nProp] <<= (sal_Int32) GetLinkMode();
671                 break;
672         }
673     }
674     aContentItem.PutProperties(aNames, aValues);
675 
676     return 0;
677 }
678 
IMPL_LINK(ScAppCfg,SortListCommitHdl,void *,EMPTYARG)679 IMPL_LINK( ScAppCfg, SortListCommitHdl, void *, EMPTYARG )
680 {
681     Sequence<OUString> aNames = GetSortListPropertyNames();
682     Sequence<Any> aValues(aNames.getLength());
683     Any* pValues = aValues.getArray();
684 
685     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
686     {
687         switch(nProp)
688         {
689             case SCSORTLISTOPT_LIST:
690                 lcl_GetSortList( pValues[nProp] );
691                 break;
692         }
693     }
694     aSortListItem.PutProperties(aNames, aValues);
695 
696     return 0;
697 }
698 
IMPL_LINK(ScAppCfg,MiscCommitHdl,void *,EMPTYARG)699 IMPL_LINK( ScAppCfg, MiscCommitHdl, void *, EMPTYARG )
700 {
701     Sequence<OUString> aNames = GetMiscPropertyNames();
702     Sequence<Any> aValues(aNames.getLength());
703     Any* pValues = aValues.getArray();
704 
705     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
706     {
707         switch(nProp)
708         {
709             case SCMISCOPT_DEFOBJWIDTH:
710                 pValues[nProp] <<= (sal_Int32) GetDefaultObjectSizeWidth();
711                 break;
712             case SCMISCOPT_DEFOBJHEIGHT:
713                 pValues[nProp] <<= (sal_Int32) GetDefaultObjectSizeHeight();
714                 break;
715             case SCMISCOPT_SHOWSHAREDDOCWARN:
716                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetShowSharedDocumentWarning() );
717                 break;
718         }
719     }
720     aMiscItem.PutProperties(aNames, aValues);
721 
722     return 0;
723 }
724 
SetOptions(const ScAppOptions & rNew)725 void ScAppCfg::SetOptions( const ScAppOptions& rNew )
726 {
727     *(ScAppOptions*)this = rNew;
728     OptionsChanged();
729 }
730 
OptionsChanged()731 void ScAppCfg::OptionsChanged()
732 {
733     aLayoutItem.SetModified();
734     aInputItem.SetModified();
735     aRevisionItem.SetModified();
736     aContentItem.SetModified();
737     aSortListItem.SetModified();
738     aMiscItem.SetModified();
739 }
740 
741 
742