xref: /trunk/main/sc/source/core/tool/viewopti.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sc.hxx"
30 
31 
32 
33 #include <vcl/svapp.hxx>
34 
35 #include <com/sun/star/uno/Any.hxx>
36 #include <com/sun/star/uno/Sequence.hxx>
37 
38 #include "global.hxx"
39 #include "globstr.hrc"
40 #include "cfgids.hxx"
41 #include "viewopti.hxx"
42 #include "rechead.hxx"
43 #include "scresid.hxx"
44 #include "sc.hrc"
45 #include "miscuno.hxx"
46 
47 using namespace utl;
48 using namespace rtl;
49 using namespace com::sun::star::uno;
50 
51 //------------------------------------------------------------------
52 
53 TYPEINIT1(ScTpViewItem, SfxPoolItem);
54 
55 #define SC_VERSION ((sal_uInt16)302)
56 
57 
58 //========================================================================
59 // class ScGridOptions
60 //========================================================================
61 
62 
63 void ScGridOptions::SetDefaults()
64 {
65     *this = ScGridOptions();
66 
67     //  Raster-Defaults sind jetzt zwischen den Apps unterschiedlich
68     //  darum hier selber eintragen (alles in 1/100mm)
69 
70     if ( ScOptionsUtil::IsMetricSystem() )
71     {
72         nFldDrawX = 1000;   // 1cm
73         nFldDrawY = 1000;
74         nFldSnapX = 1000;
75         nFldSnapY = 1000;
76     }
77     else
78     {
79         nFldDrawX = 1270;   // 0,5"
80         nFldDrawY = 1270;
81         nFldSnapX = 1270;
82         nFldSnapY = 1270;
83     }
84     nFldDivisionX = 1;
85     nFldDivisionY = 1;
86 }
87 
88 //------------------------------------------------------------------------
89 
90 const ScGridOptions& ScGridOptions::operator=( const ScGridOptions& rCpy )
91 {
92     nFldDrawX       = rCpy.nFldDrawX;       // UINT32
93     nFldDrawX       = rCpy.nFldDrawX;
94     nFldDivisionX   = rCpy.nFldDivisionX;
95     nFldDrawY       = rCpy.nFldDrawY;
96     nFldDivisionY   = rCpy.nFldDivisionY;
97     nFldSnapX       = rCpy.nFldSnapX;
98     nFldSnapY       = rCpy.nFldSnapY;
99     bUseGridsnap    = rCpy.bUseGridsnap;    // BitBool
100     bSynchronize    = rCpy.bSynchronize;
101     bGridVisible    = rCpy.bGridVisible;
102     bEqualGrid      = rCpy.bEqualGrid;
103 
104     return *this;
105 }
106 
107 //------------------------------------------------------------------------
108 
109 int ScGridOptions::operator==( const ScGridOptions& rCpy ) const
110 {
111     return (   nFldDrawX        == rCpy.nFldDrawX
112             && nFldDrawX        == rCpy.nFldDrawX
113             && nFldDivisionX    == rCpy.nFldDivisionX
114             && nFldDrawY        == rCpy.nFldDrawY
115             && nFldDivisionY    == rCpy.nFldDivisionY
116             && nFldSnapX        == rCpy.nFldSnapX
117             && nFldSnapY        == rCpy.nFldSnapY
118             && bUseGridsnap     == rCpy.bUseGridsnap
119             && bSynchronize     == rCpy.bSynchronize
120             && bGridVisible     == rCpy.bGridVisible
121             && bEqualGrid       == rCpy.bEqualGrid );
122 }
123 
124 
125 //========================================================================
126 // class ScViewOptions
127 //========================================================================
128 
129 ScViewOptions::ScViewOptions()
130 {
131     SetDefaults();
132 }
133 
134 //------------------------------------------------------------------------
135 
136 ScViewOptions::ScViewOptions( const ScViewOptions& rCpy )
137 {
138     *this = rCpy;
139 }
140 
141 //------------------------------------------------------------------------
142 
143 __EXPORT ScViewOptions::~ScViewOptions()
144 {
145 }
146 
147 //------------------------------------------------------------------------
148 
149 void ScViewOptions::SetDefaults()
150 {
151     aOptArr[ VOPT_FORMULAS    ] =
152     aOptArr[ VOPT_SYNTAX      ] =
153     aOptArr[ VOPT_HELPLINES   ] =
154     aOptArr[ VOPT_BIGHANDLES  ] = sal_False;
155     aOptArr[ VOPT_NOTES       ] =
156     aOptArr[ VOPT_NULLVALS    ] =
157     aOptArr[ VOPT_VSCROLL     ] =
158     aOptArr[ VOPT_HSCROLL     ] =
159     aOptArr[ VOPT_TABCONTROLS ] =
160     aOptArr[ VOPT_OUTLINER    ] =
161     aOptArr[ VOPT_HEADER      ] =
162     aOptArr[ VOPT_GRID        ] =
163     aOptArr[ VOPT_ANCHOR      ] =
164     aOptArr[ VOPT_PAGEBREAKS  ] =
165     aOptArr[ VOPT_SOLIDHANDLES] =
166     aOptArr[ VOPT_CLIPMARKS   ] = sal_True;
167 
168     aModeArr[VOBJ_TYPE_OLE ]  =
169     aModeArr[VOBJ_TYPE_CHART] =
170     aModeArr[VOBJ_TYPE_DRAW ] = VOBJ_MODE_SHOW;
171 
172     aGridCol     = Color( SC_STD_GRIDCOLOR );
173     aGridColName = ScGlobal::GetRscString( STR_GRIDCOLOR );
174 
175     aGridOpt.SetDefaults();
176 }
177 
178 //------------------------------------------------------------------------
179 
180 Color ScViewOptions::GetGridColor( String* pStrName ) const
181 {
182     if ( pStrName )
183         *pStrName = aGridColName;
184 
185     return aGridCol;
186 }
187 
188 //------------------------------------------------------------------------
189 
190 const ScViewOptions& ScViewOptions::operator=( const ScViewOptions& rCpy )
191 {
192     sal_uInt16 i;
193 
194     for ( i=0; i<MAX_OPT; i++ )  aOptArr [i] = rCpy.aOptArr[i];
195     for ( i=0; i<MAX_TYPE; i++ ) aModeArr[i] = rCpy.aModeArr[i];
196 
197     aGridCol        = rCpy.aGridCol;
198     aGridColName    = rCpy.aGridColName;
199     aGridOpt        = rCpy.aGridOpt;
200 
201     return *this;
202 }
203 
204 //------------------------------------------------------------------------
205 
206 int ScViewOptions::operator==( const ScViewOptions& rOpt ) const
207 {
208     sal_Bool    bEqual = sal_True;
209     sal_uInt16  i;
210 
211     for ( i=0; i<MAX_OPT && bEqual; i++ )  bEqual = (aOptArr [i] == rOpt.aOptArr[i]);
212     for ( i=0; i<MAX_TYPE && bEqual; i++ ) bEqual = (aModeArr[i] == rOpt.aModeArr[i]);
213 
214     bEqual = bEqual && (aGridCol       == rOpt.aGridCol);
215     bEqual = bEqual && (aGridColName   == rOpt.aGridColName);
216     bEqual = bEqual && (aGridOpt       == rOpt.aGridOpt);
217 
218     return bEqual;
219 }
220 
221 //------------------------------------------------------------------------
222 
223 SvxGridItem* ScViewOptions::CreateGridItem( sal_uInt16 nId /* = SID_ATTR_GRID_OPTIONS */ ) const
224 {
225     SvxGridItem* pItem = new SvxGridItem( nId );
226 
227     pItem->SetFldDrawX      ( aGridOpt.GetFldDrawX() );
228     pItem->SetFldDivisionX  ( aGridOpt.GetFldDivisionX() );
229     pItem->SetFldDrawY      ( aGridOpt.GetFldDrawY() );
230     pItem->SetFldDivisionY  ( aGridOpt.GetFldDivisionY() );
231     pItem->SetFldSnapX      ( aGridOpt.GetFldSnapX() );
232     pItem->SetFldSnapY      ( aGridOpt.GetFldSnapY() );
233     pItem->SetUseGridSnap   ( aGridOpt.GetUseGridSnap() );
234     pItem->SetSynchronize   ( aGridOpt.GetSynchronize() );
235     pItem->SetGridVisible   ( aGridOpt.GetGridVisible() );
236     pItem->SetEqualGrid     ( aGridOpt.GetEqualGrid() );
237 
238     return pItem;
239 }
240 
241 //========================================================================
242 //      ScTpViewItem - Daten fuer die ViewOptions-TabPage
243 //========================================================================
244 
245 //UNUSED2008-05  ScTpViewItem::ScTpViewItem( sal_uInt16 nWhichP ) : SfxPoolItem( nWhichP )
246 //UNUSED2008-05  {
247 //UNUSED2008-05  }
248 
249 //------------------------------------------------------------------------
250 
251 ScTpViewItem::ScTpViewItem( sal_uInt16 nWhichP, const ScViewOptions& rOpt )
252     :   SfxPoolItem ( nWhichP ),
253         theOptions  ( rOpt )
254 {
255 }
256 
257 //------------------------------------------------------------------------
258 
259 ScTpViewItem::ScTpViewItem( const ScTpViewItem& rItem )
260     :   SfxPoolItem ( rItem ),
261         theOptions  ( rItem.theOptions )
262 {
263 }
264 
265 //------------------------------------------------------------------------
266 
267 __EXPORT ScTpViewItem::~ScTpViewItem()
268 {
269 }
270 
271 //------------------------------------------------------------------------
272 
273 String __EXPORT ScTpViewItem::GetValueText() const
274 {
275     return String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM("ScTpViewItem") );
276 }
277 
278 //------------------------------------------------------------------------
279 
280 int __EXPORT ScTpViewItem::operator==( const SfxPoolItem& rItem ) const
281 {
282     DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal Which or Type" );
283 
284     const ScTpViewItem& rPItem = (const ScTpViewItem&)rItem;
285 
286     return ( theOptions == rPItem.theOptions );
287 }
288 
289 //------------------------------------------------------------------------
290 
291 SfxPoolItem* __EXPORT ScTpViewItem::Clone( SfxItemPool * ) const
292 {
293     return new ScTpViewItem( *this );
294 }
295 
296 //==================================================================
297 //  Config Item containing view options
298 //==================================================================
299 
300 #define CFGPATH_LAYOUT      "Office.Calc/Layout"
301 
302 #define SCLAYOUTOPT_GRIDLINES       0
303 #define SCLAYOUTOPT_GRIDCOLOR       1
304 #define SCLAYOUTOPT_PAGEBREAK       2
305 #define SCLAYOUTOPT_GUIDE           3
306 #define SCLAYOUTOPT_SIMPLECONT      4
307 #define SCLAYOUTOPT_LARGECONT       5
308 #define SCLAYOUTOPT_COLROWHDR       6
309 #define SCLAYOUTOPT_HORISCROLL      7
310 #define SCLAYOUTOPT_VERTSCROLL      8
311 #define SCLAYOUTOPT_SHEETTAB        9
312 #define SCLAYOUTOPT_OUTLINE         10
313 #define SCLAYOUTOPT_COUNT           11
314 
315 #define CFGPATH_DISPLAY     "Office.Calc/Content/Display"
316 
317 #define SCDISPLAYOPT_FORMULA        0
318 #define SCDISPLAYOPT_ZEROVALUE      1
319 #define SCDISPLAYOPT_NOTETAG        2
320 #define SCDISPLAYOPT_VALUEHI        3
321 #define SCDISPLAYOPT_ANCHOR         4
322 #define SCDISPLAYOPT_TEXTOVER       5
323 #define SCDISPLAYOPT_OBJECTGRA      6
324 #define SCDISPLAYOPT_CHART          7
325 #define SCDISPLAYOPT_DRAWING        8
326 #define SCDISPLAYOPT_COUNT          9
327 
328 #define CFGPATH_GRID        "Office.Calc/Grid"
329 
330 #define SCGRIDOPT_RESOLU_X          0
331 #define SCGRIDOPT_RESOLU_Y          1
332 #define SCGRIDOPT_SUBDIV_X          2
333 #define SCGRIDOPT_SUBDIV_Y          3
334 #define SCGRIDOPT_OPTION_X          4
335 #define SCGRIDOPT_OPTION_Y          5
336 #define SCGRIDOPT_SNAPTOGRID        6
337 #define SCGRIDOPT_SYNCHRON          7
338 #define SCGRIDOPT_VISIBLE           8
339 #define SCGRIDOPT_SIZETOGRID        9
340 #define SCGRIDOPT_COUNT             10
341 
342 
343 Sequence<OUString> ScViewCfg::GetLayoutPropertyNames()
344 {
345     static const char* aPropNames[] =
346     {
347         "Line/GridLine",            // SCLAYOUTOPT_GRIDLINES
348         "Line/GridLineColor",       // SCLAYOUTOPT_GRIDCOLOR
349         "Line/PageBreak",           // SCLAYOUTOPT_PAGEBREAK
350         "Line/Guide",               // SCLAYOUTOPT_GUIDE
351         "Line/SimpleControlPoint",  // SCLAYOUTOPT_SIMPLECONT
352         "Line/LargeControlPoint",   // SCLAYOUTOPT_LARGECONT
353         "Window/ColumnRowHeader",   // SCLAYOUTOPT_COLROWHDR
354         "Window/HorizontalScroll",  // SCLAYOUTOPT_HORISCROLL
355         "Window/VerticalScroll",    // SCLAYOUTOPT_VERTSCROLL
356         "Window/SheetTab",          // SCLAYOUTOPT_SHEETTAB
357         "Window/OutlineSymbol"      // SCLAYOUTOPT_OUTLINE
358     };
359     Sequence<OUString> aNames(SCLAYOUTOPT_COUNT);
360     OUString* pNames = aNames.getArray();
361     for(int i = 0; i < SCLAYOUTOPT_COUNT; i++)
362         pNames[i] = OUString::createFromAscii(aPropNames[i]);
363 
364     return aNames;
365 }
366 
367 Sequence<OUString> ScViewCfg::GetDisplayPropertyNames()
368 {
369     static const char* aPropNames[] =
370     {
371         "Formula",                  // SCDISPLAYOPT_FORMULA
372         "ZeroValue",                // SCDISPLAYOPT_ZEROVALUE
373         "NoteTag",                  // SCDISPLAYOPT_NOTETAG
374         "ValueHighlighting",        // SCDISPLAYOPT_VALUEHI
375         "Anchor",                   // SCDISPLAYOPT_ANCHOR
376         "TextOverflow",             // SCDISPLAYOPT_TEXTOVER
377         "ObjectGraphic",            // SCDISPLAYOPT_OBJECTGRA
378         "Chart",                    // SCDISPLAYOPT_CHART
379         "DrawingObject"             // SCDISPLAYOPT_DRAWING
380     };
381     Sequence<OUString> aNames(SCDISPLAYOPT_COUNT);
382     OUString* pNames = aNames.getArray();
383     for(int i = 0; i < SCDISPLAYOPT_COUNT; i++)
384         pNames[i] = OUString::createFromAscii(aPropNames[i]);
385 
386     return aNames;
387 }
388 
389 Sequence<OUString> ScViewCfg::GetGridPropertyNames()
390 {
391     static const char* aPropNames[] =
392     {
393         "Resolution/XAxis/NonMetric",   // SCGRIDOPT_RESOLU_X
394         "Resolution/YAxis/NonMetric",   // SCGRIDOPT_RESOLU_Y
395         "Subdivision/XAxis",            // SCGRIDOPT_SUBDIV_X
396         "Subdivision/YAxis",            // SCGRIDOPT_SUBDIV_Y
397         "Option/XAxis/NonMetric",       // SCGRIDOPT_OPTION_X
398         "Option/YAxis/NonMetric",       // SCGRIDOPT_OPTION_Y
399         "Option/SnapToGrid",            // SCGRIDOPT_SNAPTOGRID
400         "Option/Synchronize",           // SCGRIDOPT_SYNCHRON
401         "Option/VisibleGrid",           // SCGRIDOPT_VISIBLE
402         "Option/SizeToGrid"             // SCGRIDOPT_SIZETOGRID
403     };
404     Sequence<OUString> aNames(SCGRIDOPT_COUNT);
405     OUString* pNames = aNames.getArray();
406     for(int i = 0; i < SCGRIDOPT_COUNT; i++)
407         pNames[i] = OUString::createFromAscii(aPropNames[i]);
408 
409     //  adjust for metric system
410     if (ScOptionsUtil::IsMetricSystem())
411     {
412         pNames[SCGRIDOPT_RESOLU_X] = OUString::createFromAscii( "Resolution/XAxis/Metric" );
413         pNames[SCGRIDOPT_RESOLU_Y] = OUString::createFromAscii( "Resolution/YAxis/Metric" );
414         pNames[SCGRIDOPT_OPTION_X] = OUString::createFromAscii( "Option/XAxis/Metric" );
415         pNames[SCGRIDOPT_OPTION_Y] = OUString::createFromAscii( "Option/YAxis/Metric" );
416     }
417 
418     return aNames;
419 }
420 
421 
422 ScViewCfg::ScViewCfg() :
423     aLayoutItem( OUString::createFromAscii( CFGPATH_LAYOUT ) ),
424     aDisplayItem( OUString::createFromAscii( CFGPATH_DISPLAY ) ),
425     aGridItem( OUString::createFromAscii( CFGPATH_GRID ) )
426 {
427     sal_Int32 nIntVal = 0;
428 
429     Sequence<OUString> aNames = GetLayoutPropertyNames();
430     Sequence<Any> aValues = aLayoutItem.GetProperties(aNames);
431     aLayoutItem.EnableNotification(aNames);
432     const Any* pValues = aValues.getConstArray();
433     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
434     if(aValues.getLength() == aNames.getLength())
435     {
436         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
437         {
438             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
439             if(pValues[nProp].hasValue())
440             {
441                 switch(nProp)
442                 {
443                     case SCLAYOUTOPT_GRIDCOLOR:
444                         if ( pValues[nProp] >>= nIntVal )
445                             SetGridColor( Color(nIntVal), EMPTY_STRING );
446                         break;
447                     case SCLAYOUTOPT_GRIDLINES:
448                         SetOption( VOPT_GRID, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
449                         break;
450                     case SCLAYOUTOPT_PAGEBREAK:
451                         SetOption( VOPT_PAGEBREAKS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
452                         break;
453                     case SCLAYOUTOPT_GUIDE:
454                         SetOption( VOPT_HELPLINES, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
455                         break;
456                     case SCLAYOUTOPT_SIMPLECONT:
457                         // content is reversed
458                         SetOption( VOPT_SOLIDHANDLES, !ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
459                         break;
460                     case SCLAYOUTOPT_LARGECONT:
461                         SetOption( VOPT_BIGHANDLES, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
462                         break;
463                     case SCLAYOUTOPT_COLROWHDR:
464                         SetOption( VOPT_HEADER, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
465                         break;
466                     case SCLAYOUTOPT_HORISCROLL:
467                         SetOption( VOPT_HSCROLL, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
468                         break;
469                     case SCLAYOUTOPT_VERTSCROLL:
470                         SetOption( VOPT_VSCROLL, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
471                         break;
472                     case SCLAYOUTOPT_SHEETTAB:
473                         SetOption( VOPT_TABCONTROLS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
474                         break;
475                     case SCLAYOUTOPT_OUTLINE:
476                         SetOption( VOPT_OUTLINER, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
477                         break;
478                 }
479             }
480         }
481     }
482     aLayoutItem.SetCommitLink( LINK( this, ScViewCfg, LayoutCommitHdl ) );
483 
484     aNames = GetDisplayPropertyNames();
485     aValues = aDisplayItem.GetProperties(aNames);
486     aDisplayItem.EnableNotification(aNames);
487     pValues = aValues.getConstArray();
488     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
489     if(aValues.getLength() == aNames.getLength())
490     {
491         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
492         {
493             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
494             if(pValues[nProp].hasValue())
495             {
496                 switch(nProp)
497                 {
498                     case SCDISPLAYOPT_FORMULA:
499                         SetOption( VOPT_FORMULAS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
500                         break;
501                     case SCDISPLAYOPT_ZEROVALUE:
502                         SetOption( VOPT_NULLVALS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
503                         break;
504                     case SCDISPLAYOPT_NOTETAG:
505                         SetOption( VOPT_NOTES, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
506                         break;
507                     case SCDISPLAYOPT_VALUEHI:
508                         SetOption( VOPT_SYNTAX, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
509                         break;
510                     case SCDISPLAYOPT_ANCHOR:
511                         SetOption( VOPT_ANCHOR, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
512                         break;
513                     case SCDISPLAYOPT_TEXTOVER:
514                         SetOption( VOPT_CLIPMARKS, ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
515                         break;
516                     case SCDISPLAYOPT_OBJECTGRA:
517                         if ( pValues[nProp] >>= nIntVal )
518                         {
519                             //#i80528# adapt to new range eventually
520                             if((sal_Int32)VOBJ_MODE_HIDE < nIntVal) nIntVal = (sal_Int32)VOBJ_MODE_SHOW;
521 
522                             SetObjMode( VOBJ_TYPE_OLE, (ScVObjMode)nIntVal);
523                         }
524                         break;
525                     case SCDISPLAYOPT_CHART:
526                         if ( pValues[nProp] >>= nIntVal )
527                         {
528                             //#i80528# adapt to new range eventually
529                             if((sal_Int32)VOBJ_MODE_HIDE < nIntVal) nIntVal = (sal_Int32)VOBJ_MODE_SHOW;
530 
531                             SetObjMode( VOBJ_TYPE_CHART, (ScVObjMode)nIntVal);
532                         }
533                         break;
534                     case SCDISPLAYOPT_DRAWING:
535                         if ( pValues[nProp] >>= nIntVal )
536                         {
537                             //#i80528# adapt to new range eventually
538                             if((sal_Int32)VOBJ_MODE_HIDE < nIntVal) nIntVal = (sal_Int32)VOBJ_MODE_SHOW;
539 
540                             SetObjMode( VOBJ_TYPE_DRAW, (ScVObjMode)nIntVal);
541                         }
542                         break;
543                 }
544             }
545         }
546     }
547     aDisplayItem.SetCommitLink( LINK( this, ScViewCfg, DisplayCommitHdl ) );
548 
549     ScGridOptions aGrid = GetGridOptions();     //! initialization necessary?
550     aNames = GetGridPropertyNames();
551     aValues = aGridItem.GetProperties(aNames);
552     aGridItem.EnableNotification(aNames);
553     pValues = aValues.getConstArray();
554     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
555     if(aValues.getLength() == aNames.getLength())
556     {
557         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
558         {
559             DBG_ASSERT(pValues[nProp].hasValue(), "property value missing");
560             if(pValues[nProp].hasValue())
561             {
562                 switch(nProp)
563                 {
564                     case SCGRIDOPT_RESOLU_X:
565                         if (pValues[nProp] >>= nIntVal) aGrid.SetFldDrawX( nIntVal );
566                         break;
567                     case SCGRIDOPT_RESOLU_Y:
568                         if (pValues[nProp] >>= nIntVal) aGrid.SetFldDrawY( nIntVal );
569                         break;
570                     case SCGRIDOPT_SUBDIV_X:
571                         if (pValues[nProp] >>= nIntVal) aGrid.SetFldDivisionX( nIntVal );
572                         break;
573                     case SCGRIDOPT_SUBDIV_Y:
574                         if (pValues[nProp] >>= nIntVal) aGrid.SetFldDivisionY( nIntVal );
575                         break;
576                     case SCGRIDOPT_OPTION_X:
577                         if (pValues[nProp] >>= nIntVal) aGrid.SetFldSnapX( nIntVal );
578                         break;
579                     case SCGRIDOPT_OPTION_Y:
580                         if (pValues[nProp] >>= nIntVal) aGrid.SetFldSnapY( nIntVal );
581                         break;
582                     case SCGRIDOPT_SNAPTOGRID:
583                         aGrid.SetUseGridSnap( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
584                         break;
585                     case SCGRIDOPT_SYNCHRON:
586                         aGrid.SetSynchronize( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
587                         break;
588                     case SCGRIDOPT_VISIBLE:
589                         aGrid.SetGridVisible( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
590                         break;
591                     case SCGRIDOPT_SIZETOGRID:
592                         aGrid.SetEqualGrid( ScUnoHelpFunctions::GetBoolFromAny( pValues[nProp] ) );
593                         break;
594                 }
595             }
596         }
597     }
598     SetGridOptions( aGrid );
599     aGridItem.SetCommitLink( LINK( this, ScViewCfg, GridCommitHdl ) );
600 }
601 
602 IMPL_LINK( ScViewCfg, LayoutCommitHdl, void *, EMPTYARG )
603 {
604     Sequence<OUString> aNames = GetLayoutPropertyNames();
605     Sequence<Any> aValues(aNames.getLength());
606     Any* pValues = aValues.getArray();
607 
608     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
609     {
610         switch(nProp)
611         {
612             case SCLAYOUTOPT_GRIDCOLOR:
613                 pValues[nProp] <<= (sal_Int32) GetGridColor().GetColor();
614                 break;
615             case SCLAYOUTOPT_GRIDLINES:
616                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_GRID ) );
617                 break;
618             case SCLAYOUTOPT_PAGEBREAK:
619                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_PAGEBREAKS ) );
620                 break;
621             case SCLAYOUTOPT_GUIDE:
622                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_HELPLINES ) );
623                 break;
624             case SCLAYOUTOPT_SIMPLECONT:
625                 // content is reversed
626                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], !GetOption( VOPT_SOLIDHANDLES ) );
627                 break;
628             case SCLAYOUTOPT_LARGECONT:
629                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_BIGHANDLES ) );
630                 break;
631             case SCLAYOUTOPT_COLROWHDR:
632                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_HEADER ) );
633                 break;
634             case SCLAYOUTOPT_HORISCROLL:
635                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_HSCROLL ) );
636                 break;
637             case SCLAYOUTOPT_VERTSCROLL:
638                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_VSCROLL ) );
639                 break;
640             case SCLAYOUTOPT_SHEETTAB:
641                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_TABCONTROLS ) );
642                 break;
643             case SCLAYOUTOPT_OUTLINE:
644                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_OUTLINER ) );
645                 break;
646         }
647     }
648     aLayoutItem.PutProperties(aNames, aValues);
649 
650     return 0;
651 }
652 
653 IMPL_LINK( ScViewCfg, DisplayCommitHdl, void *, EMPTYARG )
654 {
655     Sequence<OUString> aNames = GetDisplayPropertyNames();
656     Sequence<Any> aValues(aNames.getLength());
657     Any* pValues = aValues.getArray();
658 
659     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
660     {
661         switch(nProp)
662         {
663             case SCDISPLAYOPT_FORMULA:
664                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_FORMULAS ) );
665                 break;
666             case SCDISPLAYOPT_ZEROVALUE:
667                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_NULLVALS ) );
668                 break;
669             case SCDISPLAYOPT_NOTETAG:
670                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_NOTES ) );
671                 break;
672             case SCDISPLAYOPT_VALUEHI:
673                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_SYNTAX ) );
674                 break;
675             case SCDISPLAYOPT_ANCHOR:
676                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_ANCHOR ) );
677                 break;
678             case SCDISPLAYOPT_TEXTOVER:
679                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], GetOption( VOPT_CLIPMARKS ) );
680                 break;
681             case SCDISPLAYOPT_OBJECTGRA:
682                 pValues[nProp] <<= (sal_Int32) GetObjMode( VOBJ_TYPE_OLE );
683                 break;
684             case SCDISPLAYOPT_CHART:
685                 pValues[nProp] <<= (sal_Int32) GetObjMode( VOBJ_TYPE_CHART );
686                 break;
687             case SCDISPLAYOPT_DRAWING:
688                 pValues[nProp] <<= (sal_Int32) GetObjMode( VOBJ_TYPE_DRAW );
689                 break;
690         }
691     }
692     aDisplayItem.PutProperties(aNames, aValues);
693 
694     return 0;
695 }
696 
697 IMPL_LINK( ScViewCfg, GridCommitHdl, void *, EMPTYARG )
698 {
699     const ScGridOptions& rGrid = GetGridOptions();
700 
701     Sequence<OUString> aNames = GetGridPropertyNames();
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 SCGRIDOPT_RESOLU_X:
710                 pValues[nProp] <<= (sal_Int32) rGrid.GetFldDrawX();
711                 break;
712             case SCGRIDOPT_RESOLU_Y:
713                 pValues[nProp] <<= (sal_Int32) rGrid.GetFldDrawY();
714                 break;
715             case SCGRIDOPT_SUBDIV_X:
716                 pValues[nProp] <<= (sal_Int32) rGrid.GetFldDivisionX();
717                 break;
718             case SCGRIDOPT_SUBDIV_Y:
719                 pValues[nProp] <<= (sal_Int32) rGrid.GetFldDivisionY();
720                 break;
721             case SCGRIDOPT_OPTION_X:
722                 pValues[nProp] <<= (sal_Int32) rGrid.GetFldSnapX();
723                 break;
724             case SCGRIDOPT_OPTION_Y:
725                 pValues[nProp] <<= (sal_Int32) rGrid.GetFldSnapY();
726                 break;
727             case SCGRIDOPT_SNAPTOGRID:
728                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], rGrid.GetUseGridSnap() );
729                 break;
730             case SCGRIDOPT_SYNCHRON:
731                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], rGrid.GetSynchronize() );
732                 break;
733             case SCGRIDOPT_VISIBLE:
734                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], rGrid.GetGridVisible() );
735                 break;
736             case SCGRIDOPT_SIZETOGRID:
737                 ScUnoHelpFunctions::SetBoolInAny( pValues[nProp], rGrid.GetEqualGrid() );
738                 break;
739         }
740     }
741     aGridItem.PutProperties(aNames, aValues);
742 
743     return 0;
744 }
745 
746 void ScViewCfg::SetOptions( const ScViewOptions& rNew )
747 {
748     *(ScViewOptions*)this = rNew;
749     aLayoutItem.SetModified();
750     aDisplayItem.SetModified();
751     aGridItem.SetModified();
752 }
753 
754 
755