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