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