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