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