xref: /trunk/main/sd/source/ui/app/optsitem.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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_sd.hxx"
30 #include <svx/svdmodel.hxx>
31 #include <sfx2/app.hxx>
32 #include <sfx2/sfx.hrc>
33 #ifndef _SV_SALBTYPE_HRC //autogen
34 #include <vcl/salbtype.hxx>
35 #endif
36 #include <unotools/syslocale.hxx>
37 
38 #include "app.hxx"
39 #include "optsitem.hxx"
40 #include "cfgids.hxx"
41 #include "FrameView.hxx"
42 
43 using namespace ::rtl;
44 using namespace ::utl;
45 using namespace ::com::sun::star::uno;
46 
47 #define B2U(_def_aStr) (OUString::createFromAscii(_def_aStr))
48 
49 template< class T > T getSafeValue( const Any& rAny )
50 {
51     T value = T();
52     bool bOk = (rAny >>= value);
53 
54     DBG_ASSERT( bOk, "SdOptionsItem, wrong type from configuration!" );
55     (void)bOk;
56 
57     return value;
58 }
59 
60 // -----------------
61 // - SdOptionsItem -
62 // -----------------
63 
64 SdOptionsItem::SdOptionsItem( const SdOptionsGeneric& rParent, const OUString rSubTree ) :
65     ConfigItem  ( rSubTree ),
66     mrParent    ( rParent )
67 {
68 }
69 
70 // -----------------------------------------------------------------------------
71 
72 SdOptionsItem::~SdOptionsItem()
73 {
74 }
75 
76 // -----------------------------------------------------------------------------
77 
78 void SdOptionsItem::Commit()
79 {
80     if( IsModified() )
81         mrParent.Commit( *this );
82 };
83 
84 void SdOptionsItem::Notify( const com::sun::star::uno::Sequence<rtl::OUString>& )
85 {}
86 
87 
88 // -----------------------------------------------------------------------------
89 
90 Sequence< Any > SdOptionsItem::GetProperties( const Sequence< OUString >& rNames )
91 {
92     return ConfigItem::GetProperties( rNames );
93 }
94 
95 // -----------------------------------------------------------------------------
96 
97 sal_Bool SdOptionsItem::PutProperties( const Sequence< OUString >& rNames, const Sequence< Any>& rValues )
98 {
99     return ConfigItem::PutProperties( rNames, rValues );
100 }
101 
102 // -----------------------------------------------------------------------------
103 
104 void SdOptionsItem::SetModified()
105 {
106     ConfigItem::SetModified();
107 }
108 
109 // --------------------
110 // - SdOptionsGeneric -
111 // --------------------
112 
113 SdOptionsGeneric::SdOptionsGeneric( sal_uInt16 nConfigId, const OUString& rSubTree ) :
114     maSubTree   ( rSubTree ),
115     mpCfgItem   ( NULL ),
116     mnConfigId  ( nConfigId ),
117     mbInit      ( rSubTree.getLength() == 0 )
118 {
119 }
120 
121 // -----------------------------------------------------------------------------
122 
123 void SdOptionsGeneric::Init() const
124 {
125     if( !mbInit )
126     {
127         SdOptionsGeneric* pThis = const_cast<SdOptionsGeneric*>(this);
128 
129         if( !mpCfgItem )
130             pThis->mpCfgItem = new SdOptionsItem( *this, maSubTree );
131 
132         const Sequence< OUString >  aNames( GetPropertyNames() );
133         const Sequence< Any >       aValues = mpCfgItem->GetProperties( aNames );
134 
135         if( aNames.getLength() && ( aValues.getLength() == aNames.getLength() ) )
136         {
137             const Any* pValues = aValues.getConstArray();
138 
139             pThis->EnableModify( sal_False );
140             pThis->mbInit = pThis->ReadData( pValues );
141             pThis->EnableModify( sal_True );
142         }
143         else
144             pThis->mbInit = sal_True;
145     }
146 }
147 
148 // -----------------------------------------------------------------------------
149 
150 SdOptionsGeneric::~SdOptionsGeneric()
151 {
152     if( mpCfgItem )
153         delete mpCfgItem;
154 }
155 
156 // -----------------------------------------------------------------------------
157 
158 void SdOptionsGeneric::Commit( SdOptionsItem& rCfgItem ) const
159 {
160     const Sequence< OUString >  aNames( GetPropertyNames() );
161     Sequence< Any >             aValues( aNames.getLength() );
162 
163     if( aNames.getLength() && ( aValues.getLength() == aNames.getLength() ) )
164     {
165         if( (const_cast<SdOptionsGeneric*>(this))->WriteData( aValues.getArray() ) )
166             rCfgItem.PutProperties( aNames, aValues );
167         else
168         {
169             DBG_ERROR( "PutProperties failed" );
170         }
171     }
172 }
173 
174 // -----------------------------------------------------------------------------
175 
176 Sequence< OUString > SdOptionsGeneric::GetPropertyNames() const
177 {
178     sal_uLong           nCount;
179     const char**    ppPropNames;
180 
181     GetPropNameArray( ppPropNames, nCount );
182 
183     Sequence< OUString > aNames( nCount );
184     OUString*            pNames = aNames.getArray();
185 
186     for( sal_uLong i = 0; i < nCount; i++ )
187         pNames[ i ] = OUString::createFromAscii( ppPropNames[ i ] );
188 
189     return aNames;
190 }
191 
192 // -----------------------------------------------------------------------------
193 
194 void SdOptionsGeneric::Store()
195 {
196     if( mpCfgItem )
197         mpCfgItem->Commit();
198 }
199 
200 // -----------------------------------------------------------------------------
201 
202 bool SdOptionsGeneric::isMetricSystem()
203 {
204     SvtSysLocale aSysLocale;
205     MeasurementSystem eSys = aSysLocale.GetLocaleDataPtr()->getMeasurementSystemEnum();
206 
207     return ( eSys == MEASURE_METRIC );
208 }
209 
210 /*************************************************************************
211 |*
212 |* SdOptionsLayout
213 |*
214 \************************************************************************/
215 
216 SdOptionsLayout::SdOptionsLayout(  sal_uInt16 nConfigId, sal_Bool bUseConfig ) :
217     SdOptionsGeneric( nConfigId, bUseConfig ?
218                       ( ( SDCFG_DRAW == nConfigId ) ?
219                         B2U( "Office.Draw/Layout" ) :
220                         B2U( "Office.Impress/Layout" ) ) :
221                       OUString() ),
222     bRuler( sal_True ),
223     bMoveOutline( sal_True ),
224     bDragStripes( sal_False ),
225     bHandlesBezier( sal_False ),
226     bHelplines( sal_True ),
227     nMetric((sal_uInt16)(isMetricSystem() ? FUNIT_CM : FUNIT_INCH)),
228     nDefTab( 1250 )
229 {
230     EnableModify( sal_True );
231 }
232 
233 // -----------------------------------------------------------------------------
234 
235 sal_Bool SdOptionsLayout::operator==( const SdOptionsLayout& rOpt ) const
236 {
237     return( IsRulerVisible() == rOpt.IsRulerVisible() &&
238             IsMoveOutline() == rOpt.IsMoveOutline() &&
239             IsDragStripes() == rOpt.IsDragStripes() &&
240             IsHandlesBezier() == rOpt.IsHandlesBezier() &&
241             IsHelplines() == rOpt.IsHelplines() &&
242             GetMetric() == rOpt.GetMetric() &&
243             GetDefTab() == rOpt.GetDefTab() );
244 }
245 
246 // -----------------------------------------------------------------------------
247 
248 void SdOptionsLayout::GetPropNameArray( const char**& ppNames, sal_uLong& rCount ) const
249 {
250     static const char* aPropNamesMetric[] =
251     {
252         "Display/Ruler",
253         "Display/Bezier",
254         "Display/Contour",
255         "Display/Guide",
256         "Display/Helpline",
257         "Other/MeasureUnit/Metric",
258         "Other/TabStop/Metric"
259     };
260 
261     static const char* aPropNamesNonMetric[] =
262     {
263         "Display/Ruler",
264         "Display/Bezier",
265         "Display/Contour",
266         "Display/Guide",
267         "Display/Helpline",
268         "Other/MeasureUnit/NonMetric",
269         "Other/TabStop/NonMetric"
270     };
271 
272     rCount = 7;
273 
274     if( isMetricSystem() )
275         ppNames = aPropNamesMetric;
276     else
277         ppNames = aPropNamesNonMetric;
278 }
279 
280 // -----------------------------------------------------------------------------
281 
282 sal_Bool SdOptionsLayout::ReadData( const Any* pValues )
283 {
284     if( pValues[0].hasValue() ) SetRulerVisible( *(sal_Bool*) pValues[ 0 ].getValue() );
285     if( pValues[1].hasValue() ) SetHandlesBezier( *(sal_Bool*) pValues[ 1 ].getValue() );
286     if( pValues[2].hasValue() ) SetMoveOutline( *(sal_Bool*) pValues[ 2 ].getValue() );
287     if( pValues[3].hasValue() ) SetDragStripes( *(sal_Bool*) pValues[ 3 ].getValue() );
288     if( pValues[4].hasValue() ) SetHelplines( *(sal_Bool*) pValues[ 4 ].getValue() );
289     if( pValues[5].hasValue() ) SetMetric( (sal_uInt16) *(sal_Int32*) pValues[ 5 ].getValue() );
290     if( pValues[6].hasValue() ) SetDefTab( (sal_uInt16) *(sal_Int32*) pValues[ 6 ].getValue() );
291 
292     return sal_True;
293 }
294 
295 // -----------------------------------------------------------------------------
296 
297 sal_Bool SdOptionsLayout::WriteData( Any* pValues ) const
298 {
299     pValues[ 0 ] <<= IsRulerVisible();
300     pValues[ 1 ] <<= IsHandlesBezier();
301     pValues[ 2 ] <<= IsMoveOutline();
302     pValues[ 3 ] <<= IsDragStripes();
303     pValues[ 4 ] <<= IsHelplines();
304     pValues[ 5 ] <<= (sal_Int32) GetMetric();
305     pValues[ 6 ] <<= (sal_Int32) GetDefTab();
306 
307     return sal_True;
308 }
309 
310 /*************************************************************************
311 |*
312 |* SdOptionsLayoutItem
313 |*
314 \************************************************************************/
315 
316 SdOptionsLayoutItem::SdOptionsLayoutItem( sal_uInt16 _nWhich )
317 :   SfxPoolItem     ( _nWhich )
318 ,   maOptionsLayout ( 0, sal_False )
319 {
320 }
321 
322 // ----------------------------------------------------------------------
323 
324 SdOptionsLayoutItem::SdOptionsLayoutItem( sal_uInt16 _nWhich, SdOptions* pOpts, ::sd::FrameView* pView )
325 :   SfxPoolItem     ( _nWhich )
326 ,   maOptionsLayout ( 0, sal_False )
327 {
328     if( pOpts )
329     {
330         maOptionsLayout.SetMetric( pOpts->GetMetric() );
331         maOptionsLayout.SetDefTab( pOpts->GetDefTab() );
332     }
333 
334     if( pView )
335     {
336         maOptionsLayout.SetRulerVisible( pView->HasRuler() );
337         maOptionsLayout.SetMoveOutline( !pView->IsNoDragXorPolys() );
338         maOptionsLayout.SetDragStripes( pView->IsDragStripes() );
339         maOptionsLayout.SetHandlesBezier( pView->IsPlusHandlesAlwaysVisible() );
340         maOptionsLayout.SetHelplines( pView->IsHlplVisible() );
341     }
342     else if( pOpts )
343     {
344         maOptionsLayout.SetRulerVisible( pOpts->IsRulerVisible() );
345         maOptionsLayout.SetMoveOutline( pOpts->IsMoveOutline() );
346         maOptionsLayout.SetDragStripes( pOpts->IsDragStripes() );
347         maOptionsLayout.SetHandlesBezier( pOpts->IsHandlesBezier() );
348         maOptionsLayout.SetHelplines( pOpts->IsHelplines() );
349     }
350 }
351 
352 // ----------------------------------------------------------------------
353 
354 SfxPoolItem* SdOptionsLayoutItem::Clone( SfxItemPool* ) const
355 {
356     return new SdOptionsLayoutItem( *this );
357 }
358 
359 
360 // ----------------------------------------------------------------------
361 
362 int SdOptionsLayoutItem::operator==( const SfxPoolItem& rAttr ) const
363 {
364     const bool bSameType = SfxPoolItem::operator==( rAttr );
365     DBG_ASSERT( bSameType, "SdOptionsLayoutItem::operator==(), differen pool item type!" );
366     return bSameType && ( maOptionsLayout == static_cast< const SdOptionsLayoutItem& >( rAttr ).maOptionsLayout );
367 }
368 
369 // -----------------------------------------------------------------------
370 
371 void SdOptionsLayoutItem::SetOptions( SdOptions* pOpts ) const
372 {
373     if( pOpts )
374     {
375         pOpts->SetRulerVisible( maOptionsLayout.IsRulerVisible() );
376         pOpts->SetMoveOutline( maOptionsLayout.IsMoveOutline() );
377         pOpts->SetDragStripes( maOptionsLayout.IsDragStripes() );
378         pOpts->SetHandlesBezier( maOptionsLayout.IsHandlesBezier() );
379         pOpts->SetHelplines( maOptionsLayout.IsHelplines() );
380         pOpts->SetMetric( maOptionsLayout.GetMetric() );
381         pOpts->SetDefTab( maOptionsLayout.GetDefTab() );
382     }
383 }
384 
385 /*************************************************************************
386 |*
387 |* SdOptionsContents
388 |*
389 \************************************************************************/
390 
391 SdOptionsContents::SdOptionsContents( sal_uInt16 nConfigId, sal_Bool bUseConfig ) :
392     SdOptionsGeneric( nConfigId, bUseConfig ?
393                       ( ( SDCFG_DRAW == nConfigId ) ?
394                         B2U( "Office.Draw/Content" ) :
395                         B2U( "Office.Impress/Content" ) ) :
396                       OUString() )
397 {
398     EnableModify( sal_True );
399 }
400 
401 // -----------------------------------------------------------------------------
402 
403 sal_Bool SdOptionsContents::operator==(const SdOptionsContents&) const
404 {
405     return true;
406 }
407 
408 // -----------------------------------------------------------------------------
409 
410 void SdOptionsContents::GetPropNameArray( const char**& ppNames, sal_uLong& rCount ) const
411 {
412     static const char* aPropNames[] =
413     {
414         "Display/PicturePlaceholder",
415         "Display/ContourMode",
416         "Display/LineContour",
417         "Display/TextPlaceholder"
418     };
419 
420     rCount = 4;
421     ppNames = aPropNames;
422 }
423 
424 // -----------------------------------------------------------------------------
425 
426 sal_Bool SdOptionsContents::ReadData(const Any*)
427 {
428     return sal_True;
429 }
430 
431 // -----------------------------------------------------------------------------
432 
433 sal_Bool SdOptionsContents::WriteData( Any* pValues ) const
434 {
435     //#i80528# no draft anymore
436     pValues[ 0 ] <<= (sal_Bool)false;
437     pValues[ 1 ] <<= (sal_Bool)false;
438     pValues[ 2 ] <<= (sal_Bool)false;
439     pValues[ 3 ] <<= (sal_Bool)false;
440 
441     return sal_True;
442 }
443 
444 /*************************************************************************
445 |*
446 |* SdOptionsContentsItem
447 |*
448 \************************************************************************/
449 
450 SdOptionsContentsItem::SdOptionsContentsItem(sal_uInt16 _nWhich, SdOptions*, ::sd::FrameView*)
451 :   SfxPoolItem         ( _nWhich )
452 ,   maOptionsContents   ( 0, sal_False )
453 {
454 }
455 
456 // ----------------------------------------------------------------------
457 
458 SfxPoolItem* SdOptionsContentsItem::Clone( SfxItemPool* ) const
459 {
460     return new SdOptionsContentsItem( *this );
461 }
462 
463 // ----------------------------------------------------------------------
464 
465 int SdOptionsContentsItem::operator==( const SfxPoolItem& rAttr ) const
466 {
467     const bool bSameType = SfxPoolItem::operator==(rAttr);
468     DBG_ASSERT( bSameType, "SdOptionsContentsItem::operator==(), differen pool item type!" );
469     return bSameType && ( maOptionsContents == static_cast<const SdOptionsContentsItem&>( rAttr ).maOptionsContents );
470 }
471 
472 // -----------------------------------------------------------------------
473 
474 void SdOptionsContentsItem::SetOptions(SdOptions*) const
475 {
476 }
477 
478 /*************************************************************************
479 |*
480 |* SdOptionsMisc
481 |*
482 \************************************************************************/
483 
484 SdOptionsMisc::SdOptionsMisc( sal_uInt16 nConfigId, sal_Bool bUseConfig ) :
485     SdOptionsGeneric( nConfigId, bUseConfig ?
486                       ( ( SDCFG_DRAW == nConfigId ) ?
487                         B2U( "Office.Draw/Misc" ) :
488                         B2U( "Office.Impress/Misc" ) ) :
489                       OUString() ),
490     // #97016#
491     nDefaultObjectSizeWidth(8000),
492     nDefaultObjectSizeHeight(5000),
493     bStartWithTemplate( sal_True ),
494     bMarkedHitMovesAlways( sal_True ),
495     bMoveOnlyDragging( sal_False ),
496     bCrookNoContortion( sal_False ),
497     bQuickEdit( GetConfigId() != SDCFG_DRAW ),
498     bMasterPageCache( sal_True ),
499     bDragWithCopy( sal_False ),
500     bPickThrough( sal_True ),
501     bBigHandles( sal_False ),
502     bDoubleClickTextEdit( sal_True ),
503     bClickChangeRotation( sal_False ),
504     bStartWithActualPage( sal_False ),
505     bSolidDragging( sal_True ),
506     bSolidMarkHdl( sal_True ),
507     bSummationOfParagraphs( sal_False ),
508     // #90356#
509     bShowUndoDeleteWarning( sal_True ),
510     bSlideshowRespectZOrder( sal_True ),
511     bShowComments( sal_True ),
512     bPreviewNewEffects( sal_True ),
513     bPreviewChangedEffects( sal_False ),
514     bPreviewTransitions( sal_True ),
515     mnDisplay( 0 ),
516     mnPenColor( 0xff0000 ),
517     mnPenWidth( 150.0 ),
518 
519     // The default for 6.1-and-above documents is to use printer-independent
520     // formatting.
521     mnPrinterIndependentLayout (1)
522 {
523     EnableModify( sal_True );
524 }
525 
526 // -----------------------------------------------------------------------------
527 
528 sal_Bool SdOptionsMisc::operator==( const SdOptionsMisc& rOpt ) const
529 {
530     return( IsStartWithTemplate() == rOpt.IsStartWithTemplate() &&
531             IsMarkedHitMovesAlways() == rOpt.IsMarkedHitMovesAlways() &&
532             IsMoveOnlyDragging() == rOpt.IsMoveOnlyDragging() &&
533             IsCrookNoContortion() == rOpt.IsCrookNoContortion() &&
534             IsQuickEdit() == rOpt.IsQuickEdit() &&
535             IsMasterPagePaintCaching() == rOpt.IsMasterPagePaintCaching() &&
536             IsDragWithCopy() == rOpt.IsDragWithCopy() &&
537             IsPickThrough() == rOpt.IsPickThrough() &&
538             IsBigHandles() == rOpt.IsBigHandles() &&
539             IsDoubleClickTextEdit() == rOpt.IsDoubleClickTextEdit() &&
540             IsClickChangeRotation() == rOpt.IsClickChangeRotation() &&
541             IsStartWithActualPage() == rOpt.IsStartWithActualPage() &&
542             IsSummationOfParagraphs() == rOpt.IsSummationOfParagraphs() &&
543             IsSolidDragging() == rOpt.IsSolidDragging() &&
544             IsSolidMarkHdl() == rOpt.IsSolidMarkHdl() &&
545             // #90356#
546             IsShowUndoDeleteWarning() == rOpt.IsShowUndoDeleteWarning() &&
547             IsSlideshowRespectZOrder() == rOpt.IsSlideshowRespectZOrder() &&
548             GetPrinterIndependentLayout() == rOpt.GetPrinterIndependentLayout() &&
549             // #97016#
550             GetDefaultObjectSizeWidth() == rOpt.GetDefaultObjectSizeWidth() &&
551             GetDefaultObjectSizeHeight() == rOpt.GetDefaultObjectSizeHeight() &&
552 
553             IsPreviewNewEffects() == rOpt.IsPreviewNewEffects() &&
554             IsPreviewChangedEffects() == rOpt.IsPreviewChangedEffects() &&
555             IsPreviewTransitions() == rOpt.IsPreviewTransitions() &&
556             GetDisplay() == rOpt.GetDisplay() &&
557             IsShowComments() == rOpt.IsShowComments() &&
558             GetPresentationPenColor() == rOpt.GetPresentationPenColor() &&
559             GetPresentationPenWidth() == rOpt.GetPresentationPenWidth()
560         );
561 }
562 
563 // -----------------------------------------------------------------------------
564 
565 void SdOptionsMisc::GetPropNameArray( const char**& ppNames, sal_uLong& rCount ) const
566 {
567     static const char* aPropNames[] =
568     {
569         "ObjectMoveable",
570         "NoDistort",
571         "TextObject/QuickEditing",
572         "BackgroundCache",
573         "CopyWhileMoving",
574         "TextObject/Selectable",
575         "BigHandles",
576         "DclickTextedit",
577         "RotateClick",
578         "Preview",
579         "ModifyWithAttributes",
580         "SimpleHandles",
581         // #97016#
582         "DefaultObjectSize/Width",
583         "DefaultObjectSize/Height",
584 
585         "Compatibility/PrinterIndependentLayout",
586 
587         "ShowComments",
588 
589         // just for impress
590         "NewDoc/AutoPilot",
591         "Start/CurrentPage",
592         "Compatibility/AddBetween",
593         // #90356#
594         "ShowUndoDeleteWarning",
595         "SlideshowRespectZOrder",
596 
597         "PreviewNewEffects",
598         "PreviewChangedEffects",
599         "PreviewTransitions",
600 
601         "Display",
602 
603         "PenColor",
604         "PenWidth"
605     };
606 
607     rCount = ( ( GetConfigId() == SDCFG_IMPRESS ) ? 27 : 16 );
608     ppNames = aPropNames;
609 }
610 
611 // -----------------------------------------------------------------------------
612 
613 sal_Bool SdOptionsMisc::ReadData( const Any* pValues )
614 {
615     if( pValues[0].hasValue() ) SetMarkedHitMovesAlways( *(sal_Bool*) pValues[ 0 ].getValue() );
616     if( pValues[1].hasValue() ) SetCrookNoContortion( *(sal_Bool*) pValues[ 1 ].getValue() );
617     if( pValues[2].hasValue() ) SetQuickEdit( *(sal_Bool*)pValues[ 2 ].getValue() );
618     if( pValues[3].hasValue() ) SetMasterPagePaintCaching( *(sal_Bool*) pValues[ 3 ].getValue() );
619     if( pValues[4].hasValue() ) SetDragWithCopy( *(sal_Bool*) pValues[ 4 ].getValue() );
620     if( pValues[5].hasValue() ) SetPickThrough( *(sal_Bool*) pValues[ 5 ].getValue() );
621     if( pValues[6].hasValue() ) SetBigHandles( *(sal_Bool*) pValues[ 6 ].getValue() );
622     if( pValues[7].hasValue() ) SetDoubleClickTextEdit( *(sal_Bool*) pValues[ 7 ].getValue() );
623     if( pValues[8].hasValue() ) SetClickChangeRotation( *(sal_Bool*) pValues[ 8 ].getValue() );
624     //  if( pValues[9].hasValue() ) SetPreviewQuality( FRound( *(double*) pValues[ 9 ].getValue() ) );
625     if( pValues[10].hasValue() ) SetSolidDragging( *(sal_Bool*) pValues[ 10 ].getValue() );
626     if( pValues[11].hasValue() ) SetSolidMarkHdl( *(sal_Bool*) pValues[ 11 ].getValue() );
627     // #97016#
628     if( pValues[12].hasValue() ) SetDefaultObjectSizeWidth( *(sal_uInt32*) pValues[ 12 ].getValue() );
629     if( pValues[13].hasValue() ) SetDefaultObjectSizeHeight( *(sal_uInt32*) pValues[ 13 ].getValue() );
630     if( pValues[14].hasValue() ) SetPrinterIndependentLayout( *(sal_uInt16*) pValues[ 14 ].getValue() );
631 
632     if( pValues[15].hasValue() )
633         SetShowComments(  *(sal_Bool*) pValues[ 15 ].getValue() );
634 
635     // just for Impress
636     if( GetConfigId() == SDCFG_IMPRESS )
637     {
638         if( pValues[16].hasValue() )
639             SetStartWithTemplate( *(sal_Bool*) pValues[ 16 ].getValue() );
640         if( pValues[17].hasValue() )
641             SetStartWithActualPage( *(sal_Bool*) pValues[ 17 ].getValue() );
642         if( pValues[18].hasValue() )
643             SetSummationOfParagraphs( *(sal_Bool*) pValues[ 18 ].getValue() );
644         // #90356#
645         if( pValues[19].hasValue() )
646             SetShowUndoDeleteWarning( *(sal_Bool*) pValues[ 19 ].getValue() );
647 
648         if( pValues[20].hasValue() )
649             SetSlideshowRespectZOrder(*(sal_Bool*) pValues[ 20 ].getValue());
650 
651         if( pValues[21].hasValue() )
652             SetPreviewNewEffects(*(sal_Bool*) pValues[ 21 ].getValue());
653 
654         if( pValues[22].hasValue() )
655             SetPreviewChangedEffects(*(sal_Bool*) pValues[ 22 ].getValue());
656 
657         if( pValues[23].hasValue() )
658             SetPreviewTransitions(*(sal_Bool*) pValues[ 23 ].getValue());
659 
660         if( pValues[24].hasValue() )
661             SetDisplay(*(sal_Int32*) pValues[ 24 ].getValue());
662 
663         if( pValues[25].hasValue() )
664             SetPresentationPenColor( getSafeValue< sal_Int32 >( pValues[ 25 ] ) );
665 
666         if( pValues[26].hasValue() )
667             SetPresentationPenWidth( getSafeValue< double >( pValues[ 26 ] ) );
668     }
669 
670     return sal_True;
671 }
672 
673 // -----------------------------------------------------------------------------
674 
675 sal_Bool SdOptionsMisc::WriteData( Any* pValues ) const
676 {
677     pValues[ 0 ] <<= IsMarkedHitMovesAlways();
678     pValues[ 1 ] <<= IsCrookNoContortion();
679     pValues[ 2 ] <<= IsQuickEdit();
680     pValues[ 3 ] <<= IsMasterPagePaintCaching();
681     pValues[ 4 ] <<= IsDragWithCopy();
682     pValues[ 5 ] <<= IsPickThrough();
683     pValues[ 6 ] <<= IsBigHandles();
684     pValues[ 7 ] <<= IsDoubleClickTextEdit();
685     pValues[ 8 ] <<= IsClickChangeRotation();
686     // The preview is not supported anymore.  Use a dummy value.
687     pValues[ 9 ] <<= (double)0;// GetPreviewQuality();
688     pValues[ 10 ] <<= IsSolidDragging();
689     pValues[ 11 ] <<= IsSolidMarkHdl();
690     // #97016#
691     pValues[ 12 ] <<= GetDefaultObjectSizeWidth();
692     pValues[ 13 ] <<= GetDefaultObjectSizeHeight();
693     pValues[ 14 ] <<= GetPrinterIndependentLayout();
694     pValues[ 15 ] <<= (sal_Bool)IsShowComments();
695 
696     // just for Impress
697     if( GetConfigId() == SDCFG_IMPRESS )
698     {
699         pValues[ 16 ] <<= IsStartWithTemplate();
700         pValues[ 17 ] <<= IsStartWithActualPage();
701         pValues[ 18 ] <<= IsSummationOfParagraphs();
702         // #90356#
703         pValues[ 19 ] <<= IsShowUndoDeleteWarning();
704         pValues[ 20 ] <<= IsSlideshowRespectZOrder();
705 
706         pValues[ 21 ] <<= IsPreviewNewEffects();
707         pValues[ 22 ] <<= IsPreviewChangedEffects();
708         pValues[ 23 ] <<= IsPreviewTransitions();
709 
710         pValues[ 24 ] <<= GetDisplay();
711 
712         pValues[ 25 ] <<= GetPresentationPenColor();
713         pValues[ 26 ] <<= GetPresentationPenWidth();
714     }
715 
716     return sal_True;
717 }
718 
719 /*************************************************************************
720 |*
721 |* SdOptionsMiscItem
722 |*
723 \************************************************************************/
724 
725 SdOptionsMiscItem::SdOptionsMiscItem( sal_uInt16 _nWhich )
726 :   SfxPoolItem     ( _nWhich )
727 ,   maOptionsMisc   ( 0, sal_False )
728 {
729 }
730 
731 // ----------------------------------------------------------------------
732 
733 SdOptionsMiscItem::SdOptionsMiscItem( sal_uInt16 _nWhich, SdOptions* pOpts, ::sd::FrameView* pView )
734 :   SfxPoolItem     ( _nWhich )
735 ,   maOptionsMisc   ( 0, sal_False )
736 {
737     if( pOpts )
738     {
739         maOptionsMisc.SetStartWithTemplate( pOpts->IsStartWithTemplate() );
740         maOptionsMisc.SetStartWithActualPage( pOpts->IsStartWithActualPage() );
741         maOptionsMisc.SetSummationOfParagraphs( pOpts->IsSummationOfParagraphs() );
742         // #90356#
743         maOptionsMisc.SetShowUndoDeleteWarning( pOpts->IsShowUndoDeleteWarning() );
744         maOptionsMisc.SetPrinterIndependentLayout( pOpts->GetPrinterIndependentLayout() );
745         // #97016#
746         maOptionsMisc.SetDefaultObjectSizeWidth( pOpts->GetDefaultObjectSizeWidth() );
747         maOptionsMisc.SetDefaultObjectSizeHeight( pOpts->GetDefaultObjectSizeHeight() );
748 
749         maOptionsMisc.SetPreviewNewEffects(pOpts->IsPreviewNewEffects());
750         maOptionsMisc.SetPreviewChangedEffects(pOpts->IsPreviewChangedEffects());
751         maOptionsMisc.SetPreviewTransitions(pOpts->IsPreviewTransitions());
752 
753         maOptionsMisc.SetDisplay(pOpts->GetDisplay());
754         maOptionsMisc.SetShowComments( pOpts->IsShowComments() );
755 
756         maOptionsMisc.SetPresentationPenColor(pOpts->GetPresentationPenColor() );
757         maOptionsMisc.SetPresentationPenWidth(pOpts->GetPresentationPenWidth() );
758     }
759 
760     if( pView )
761     {
762         maOptionsMisc.SetMarkedHitMovesAlways( pView->IsMarkedHitMovesAlways() );
763         maOptionsMisc.SetMoveOnlyDragging( pView->IsMoveOnlyDragging() );
764         maOptionsMisc.SetCrookNoContortion( pView->IsCrookNoContortion() );
765         maOptionsMisc.SetQuickEdit( pView->IsQuickEdit() );
766 
767         // #i26631#
768         maOptionsMisc.SetMasterPagePaintCaching( pView->IsMasterPagePaintCaching() );
769 
770         maOptionsMisc.SetDragWithCopy( pView->IsDragWithCopy() );
771         maOptionsMisc.SetPickThrough( (sal_Bool)pView->GetModel()->IsPickThroughTransparentTextFrames() );
772         maOptionsMisc.SetBigHandles( (sal_Bool)pView->IsBigHandles() );
773         maOptionsMisc.SetDoubleClickTextEdit( pView->IsDoubleClickTextEdit() );
774         maOptionsMisc.SetClickChangeRotation( pView->IsClickChangeRotation() );
775         maOptionsMisc.SetSolidDragging( pView->IsSolidDragging() );
776         maOptionsMisc.SetSolidMarkHdl( pView->IsSolidMarkHdl() );
777     }
778     else if( pOpts )
779     {
780         maOptionsMisc.SetMarkedHitMovesAlways( pOpts->IsMarkedHitMovesAlways() );
781         maOptionsMisc.SetMoveOnlyDragging( pOpts->IsMoveOnlyDragging() );
782         maOptionsMisc.SetCrookNoContortion( pOpts->IsCrookNoContortion() );
783         maOptionsMisc.SetQuickEdit( pOpts->IsQuickEdit() );
784         maOptionsMisc.SetMasterPagePaintCaching( pOpts->IsMasterPagePaintCaching() );
785         maOptionsMisc.SetDragWithCopy( pOpts->IsDragWithCopy() );
786         maOptionsMisc.SetPickThrough( pOpts->IsPickThrough() );
787         maOptionsMisc.SetBigHandles( pOpts->IsBigHandles() );
788         maOptionsMisc.SetDoubleClickTextEdit( pOpts->IsDoubleClickTextEdit() );
789         maOptionsMisc.SetClickChangeRotation( pOpts->IsClickChangeRotation() );
790         maOptionsMisc.SetSolidDragging( pOpts->IsSolidDragging() );
791         maOptionsMisc.SetSolidMarkHdl( pOpts->IsSolidMarkHdl() );
792     }
793 }
794 
795 // ----------------------------------------------------------------------
796 
797 SfxPoolItem* SdOptionsMiscItem::Clone( SfxItemPool* ) const
798 {
799     return new SdOptionsMiscItem( *this );
800 }
801 
802 
803 // ----------------------------------------------------------------------
804 
805 int SdOptionsMiscItem::operator==( const SfxPoolItem& rAttr ) const
806 {
807     const bool bSameType = SfxPoolItem::operator==(rAttr);
808     DBG_ASSERT( bSameType, "SdOptionsMiscItem::operator==(), differen pool item type!" );
809     return bSameType && ( maOptionsMisc == static_cast< const SdOptionsMiscItem& >(rAttr).maOptionsMisc );
810 }
811 
812 // -----------------------------------------------------------------------
813 
814 void SdOptionsMiscItem::SetOptions( SdOptions* pOpts ) const
815 {
816     if( pOpts )
817     {
818         pOpts->SetStartWithTemplate( maOptionsMisc.IsStartWithTemplate() );
819         pOpts->SetMarkedHitMovesAlways( maOptionsMisc.IsMarkedHitMovesAlways() );
820         pOpts->SetMoveOnlyDragging( maOptionsMisc.IsMoveOnlyDragging() );
821         pOpts->SetCrookNoContortion( maOptionsMisc.IsCrookNoContortion() );
822         pOpts->SetQuickEdit( maOptionsMisc.IsQuickEdit() );
823         pOpts->SetMasterPagePaintCaching( maOptionsMisc.IsMasterPagePaintCaching() );
824         pOpts->SetDragWithCopy( maOptionsMisc.IsDragWithCopy() );
825         pOpts->SetPickThrough( maOptionsMisc.IsPickThrough() );
826         pOpts->SetBigHandles( maOptionsMisc.IsBigHandles() );
827         pOpts->SetDoubleClickTextEdit( maOptionsMisc.IsDoubleClickTextEdit() );
828         pOpts->SetClickChangeRotation( maOptionsMisc.IsClickChangeRotation() );
829         pOpts->SetStartWithActualPage( maOptionsMisc.IsStartWithActualPage() );
830         pOpts->SetSummationOfParagraphs( maOptionsMisc.IsSummationOfParagraphs() );
831         pOpts->SetSolidDragging( maOptionsMisc.IsSolidDragging() );
832         pOpts->SetSolidMarkHdl( maOptionsMisc.IsSolidMarkHdl() );
833         // #90356#
834         pOpts->SetShowUndoDeleteWarning( maOptionsMisc.IsShowUndoDeleteWarning() );
835         pOpts->SetPrinterIndependentLayout( maOptionsMisc.GetPrinterIndependentLayout() );
836         pOpts->SetShowComments( maOptionsMisc.IsShowComments() );
837         // #97016#
838         pOpts->SetDefaultObjectSizeWidth( maOptionsMisc.GetDefaultObjectSizeWidth() );
839         pOpts->SetDefaultObjectSizeHeight( maOptionsMisc.GetDefaultObjectSizeHeight() );
840 
841         pOpts->SetPreviewNewEffects( maOptionsMisc.IsPreviewNewEffects() );
842         pOpts->SetPreviewChangedEffects( maOptionsMisc.IsPreviewChangedEffects() );
843         pOpts->SetPreviewTransitions( maOptionsMisc.IsPreviewTransitions() );
844 
845         pOpts->SetDisplay( maOptionsMisc.GetDisplay() );
846 
847         pOpts->SetPresentationPenColor( maOptionsMisc.GetPresentationPenColor() );
848         pOpts->SetPresentationPenWidth( maOptionsMisc.GetPresentationPenWidth() );
849     }
850 }
851 
852 /*************************************************************************
853 |*
854 |* SdOptionsSnap
855 |*
856 \************************************************************************/
857 
858 SdOptionsSnap::SdOptionsSnap( sal_uInt16 nConfigId, sal_Bool bUseConfig ) :
859     SdOptionsGeneric( nConfigId, bUseConfig ?
860                       ( ( SDCFG_DRAW == nConfigId ) ?
861                         B2U( "Office.Draw/Snap" ) :
862                         B2U( "Office.Impress/Snap" ) ) :
863                       OUString() ),
864     bSnapHelplines( sal_True ),
865     bSnapBorder( sal_True ),
866     bSnapFrame( sal_False ),
867     bSnapPoints( sal_False ),
868     bOrtho( sal_False ),
869     bBigOrtho( sal_True ),
870     bRotate( sal_False ),
871     nSnapArea( 5 ),
872     nAngle( 1500 ),
873     nBezAngle( 1500 )
874 
875 {
876     EnableModify( sal_True );
877 }
878 
879 // -----------------------------------------------------------------------------
880 
881 sal_Bool SdOptionsSnap::operator==( const SdOptionsSnap& rOpt ) const
882 {
883     return( IsSnapHelplines() == rOpt.IsSnapHelplines() &&
884             IsSnapBorder() == rOpt.IsSnapBorder() &&
885             IsSnapFrame() == rOpt.IsSnapFrame() &&
886             IsSnapPoints() == rOpt.IsSnapPoints() &&
887             IsOrtho() == rOpt.IsOrtho() &&
888             IsBigOrtho() == rOpt.IsBigOrtho() &&
889             IsRotate() == rOpt.IsRotate() &&
890             GetSnapArea() == rOpt.GetSnapArea() &&
891             GetAngle() == rOpt.GetAngle() &&
892             GetEliminatePolyPointLimitAngle() == rOpt.GetEliminatePolyPointLimitAngle() );
893 }
894 
895 // -----------------------------------------------------------------------------
896 
897 void SdOptionsSnap::GetPropNameArray( const char**& ppNames, sal_uLong& rCount ) const
898 {
899     static const char* aPropNames[] =
900     {
901         "Object/SnapLine",
902         "Object/PageMargin",
903         "Object/ObjectFrame",
904         "Object/ObjectPoint",
905         "Position/CreatingMoving",
906         "Position/ExtendEdges",
907         "Position/Rotating",
908         "Object/Range",
909         "Position/RotatingValue",
910         "Position/PointReduction"
911     };
912 
913     rCount = 10;
914     ppNames = aPropNames;
915 }
916 
917 // -----------------------------------------------------------------------------
918 
919 sal_Bool SdOptionsSnap::ReadData( const Any* pValues )
920 {
921     if( pValues[0].hasValue() ) SetSnapHelplines( *(sal_Bool*) pValues[ 0 ].getValue() );
922     if( pValues[1].hasValue() ) SetSnapBorder( *(sal_Bool*)pValues[ 1 ].getValue() );
923     if( pValues[2].hasValue() ) SetSnapFrame( *(sal_Bool*) pValues[ 2 ].getValue() );
924     if( pValues[3].hasValue() ) SetSnapPoints( *(sal_Bool*) pValues[ 3 ].getValue() );
925     if( pValues[4].hasValue() ) SetOrtho( *(sal_Bool*) pValues[ 4 ].getValue() );
926     if( pValues[5].hasValue() ) SetBigOrtho( *(sal_Bool*) pValues[ 5 ].getValue() );
927     if( pValues[6].hasValue() ) SetRotate( *(sal_Bool*) pValues[ 6 ].getValue() );
928     if( pValues[7].hasValue() ) SetSnapArea( (sal_Int16) *(sal_Int32*) pValues[ 7 ].getValue() );
929     if( pValues[8].hasValue() ) SetAngle( (sal_Int16) *(sal_Int32*) pValues[ 8 ].getValue() );
930     if( pValues[9].hasValue() ) SetEliminatePolyPointLimitAngle( (sal_Int16) *(sal_Int32*) pValues[ 9 ].getValue() );
931 
932     return sal_True;
933 }
934 
935 // -----------------------------------------------------------------------------
936 
937 sal_Bool SdOptionsSnap::WriteData( Any* pValues ) const
938 {
939     pValues[ 0 ] <<= IsSnapHelplines();
940     pValues[ 1 ] <<= IsSnapBorder();
941     pValues[ 2 ] <<= IsSnapFrame();
942     pValues[ 3 ] <<= IsSnapPoints();
943     pValues[ 4 ] <<= IsOrtho();
944     pValues[ 5 ] <<= IsBigOrtho();
945     pValues[ 6 ] <<= IsRotate();
946     pValues[ 7 ] <<= (sal_Int32) GetSnapArea();
947     pValues[ 8 ] <<= (sal_Int32) GetAngle();
948     pValues[ 9 ] <<= (sal_Int32) GetEliminatePolyPointLimitAngle();
949 
950     return sal_True;
951 }
952 
953 /*************************************************************************
954 |*
955 |* SdOptionsSnapItem
956 |*
957 \************************************************************************/
958 
959 SdOptionsSnapItem::SdOptionsSnapItem( sal_uInt16 _nWhich )
960 :   SfxPoolItem     ( _nWhich )
961 ,   maOptionsSnap   ( 0, sal_False )
962 {
963 }
964 
965 // ----------------------------------------------------------------------
966 
967 SdOptionsSnapItem::SdOptionsSnapItem( sal_uInt16 _nWhich, SdOptions* pOpts, ::sd::FrameView* pView )
968 :   SfxPoolItem     ( _nWhich )
969 ,   maOptionsSnap   ( 0, sal_False )
970 {
971     if( pView )
972     {
973         maOptionsSnap.SetSnapHelplines( pView->IsHlplSnap() );
974         maOptionsSnap.SetSnapBorder( pView->IsBordSnap() );
975         maOptionsSnap.SetSnapFrame( pView->IsOFrmSnap() );
976         maOptionsSnap.SetSnapPoints( pView->IsOPntSnap() );
977         maOptionsSnap.SetOrtho( pView->IsOrtho() );
978         maOptionsSnap.SetBigOrtho( pView->IsBigOrtho() );
979         maOptionsSnap.SetRotate( pView->IsAngleSnapEnabled() );
980         maOptionsSnap.SetSnapArea( pView->GetSnapMagneticPixel() );
981         maOptionsSnap.SetAngle( (sal_Int16) pView->GetSnapAngle() );
982         maOptionsSnap.SetEliminatePolyPointLimitAngle( (sal_Int16) pView->GetEliminatePolyPointLimitAngle() );
983     }
984     else if( pOpts )
985     {
986         maOptionsSnap.SetSnapHelplines( pOpts->IsSnapHelplines() );
987         maOptionsSnap.SetSnapBorder( pOpts->IsSnapBorder() );
988         maOptionsSnap.SetSnapFrame( pOpts->IsSnapFrame() );
989         maOptionsSnap.SetSnapPoints( pOpts->IsSnapPoints() );
990         maOptionsSnap.SetOrtho( pOpts->IsOrtho() );
991         maOptionsSnap.SetBigOrtho( pOpts->IsBigOrtho() );
992         maOptionsSnap.SetRotate( pOpts->IsRotate() );
993         maOptionsSnap.SetSnapArea( pOpts->GetSnapArea() );
994         maOptionsSnap.SetAngle( pOpts->GetAngle() );
995         maOptionsSnap.SetEliminatePolyPointLimitAngle( pOpts->GetEliminatePolyPointLimitAngle() );
996     }
997 }
998 
999 // ----------------------------------------------------------------------
1000 
1001 SfxPoolItem* SdOptionsSnapItem::Clone( SfxItemPool* ) const
1002 {
1003     return new SdOptionsSnapItem( *this );
1004 }
1005 
1006 
1007 // ----------------------------------------------------------------------
1008 
1009 int SdOptionsSnapItem::operator==( const SfxPoolItem& rAttr ) const
1010 {
1011     const bool bSameType = SfxPoolItem::operator==(rAttr);
1012     DBG_ASSERT( bSameType, "SdOptionsSnapItem::operator==(), differen pool item type!" );
1013     return bSameType && ( maOptionsSnap == static_cast< const SdOptionsSnapItem& >(rAttr).maOptionsSnap );
1014 }
1015 
1016 // -----------------------------------------------------------------------
1017 
1018 void SdOptionsSnapItem::SetOptions( SdOptions* pOpts ) const
1019 {
1020     if( pOpts )
1021     {
1022         pOpts->SetSnapHelplines( maOptionsSnap.IsSnapHelplines() );
1023         pOpts->SetSnapBorder( maOptionsSnap.IsSnapBorder() );
1024         pOpts->SetSnapFrame( maOptionsSnap.IsSnapFrame() );
1025         pOpts->SetSnapPoints( maOptionsSnap.IsSnapPoints() );
1026         pOpts->SetOrtho( maOptionsSnap.IsOrtho() );
1027         pOpts->SetBigOrtho( maOptionsSnap.IsBigOrtho() );
1028         pOpts->SetRotate( maOptionsSnap.IsRotate() );
1029         pOpts->SetSnapArea( maOptionsSnap.GetSnapArea() );
1030         pOpts->SetAngle( maOptionsSnap.GetAngle() );
1031         pOpts->SetEliminatePolyPointLimitAngle( maOptionsSnap.GetEliminatePolyPointLimitAngle() );
1032     }
1033 }
1034 
1035 /*************************************************************************
1036 |*
1037 |* SdOptionsZoom
1038 |*
1039 \************************************************************************/
1040 
1041 SdOptionsZoom::SdOptionsZoom( sal_uInt16 nConfigId, sal_Bool bUseConfig ) :
1042     SdOptionsGeneric( nConfigId, ( bUseConfig &&  ( SDCFG_DRAW == nConfigId ) ) ?
1043                                  B2U( "Office.Draw/Zoom" ) :
1044                                  OUString() ),
1045     nX( 1 ),
1046     nY( 1 )
1047 
1048 {
1049     EnableModify( sal_True );
1050 }
1051 
1052 // -----------------------------------------------------------------------------
1053 
1054 sal_Bool SdOptionsZoom::operator==( const SdOptionsZoom& rOpt ) const
1055 {
1056     sal_Int32 nX1, nX2, nY1, nY2;
1057 
1058     GetScale( nX1, nY1 );
1059     rOpt.GetScale( nX2, nY2 );
1060 
1061     return( ( nX1 == nX2 ) &&
1062             ( nY1 == nY2 ) );
1063 }
1064 
1065 // -----------------------------------------------------------------------------
1066 
1067 void SdOptionsZoom::GetPropNameArray( const char**& ppNames, sal_uLong& rCount ) const
1068 {
1069     static const char* aPropNames[] =
1070     {
1071         "ScaleX",
1072         "ScaleY"
1073     };
1074 
1075     rCount = ( GetConfigId() == SDCFG_DRAW ) ? 2 : 0;
1076     ppNames = aPropNames;
1077 }
1078 
1079 // -----------------------------------------------------------------------------
1080 
1081 sal_Bool SdOptionsZoom::ReadData( const Any* pValues )
1082 {
1083     sal_Int32 x = 1, y = 1;
1084 
1085     if( pValues[0].hasValue() ) x = ( *(sal_Int32*) pValues[ 0 ].getValue() );
1086     if( pValues[1].hasValue() ) y = ( *(sal_Int32*) pValues[ 1 ].getValue() );
1087 
1088     SetScale( x, y );
1089 
1090     return sal_True;
1091 }
1092 
1093 // -----------------------------------------------------------------------------
1094 
1095 sal_Bool SdOptionsZoom::WriteData( Any* pValues ) const
1096 {
1097     sal_Int32 x, y;
1098 
1099     GetScale( x, y );
1100 
1101     pValues[ 0 ] <<= (sal_Int32) x;
1102     pValues[ 1 ] <<= (sal_Int32) y;
1103 
1104     return sal_True;
1105 }
1106 
1107 /*************************************************************************
1108 |*
1109 |* SdOptionsGrid
1110 |*
1111 \************************************************************************/
1112 
1113 SdOptionsGrid::SdOptionsGrid( sal_uInt16 nConfigId, sal_Bool bUseConfig ) :
1114     SdOptionsGeneric( nConfigId, bUseConfig ?
1115                       ( ( SDCFG_DRAW == nConfigId ) ?
1116                         B2U( "Office.Draw/Grid" ) :
1117                         B2U( "Office.Impress/Grid" ) ) :
1118                       OUString() )
1119 {
1120     EnableModify( sal_False );
1121     SetDefaults();
1122     EnableModify( sal_True );
1123 }
1124 
1125 // -----------------------------------------------------------------------------
1126 
1127 SdOptionsGrid::~SdOptionsGrid()
1128 {
1129 }
1130 
1131 // -----------------------------------------------------------------------------
1132 
1133 void SdOptionsGrid::SetDefaults()
1134 {
1135     const sal_uInt32 nVal = 1000;
1136 
1137     SetFldDivisionX( nVal );
1138     SetFldDivisionY( nVal );
1139     SetFldDrawX( nVal );
1140     SetFldDrawY( nVal );
1141     SetFldSnapX( nVal );
1142     SetFldSnapY( nVal );
1143     SetUseGridSnap( sal_False );
1144     SetSynchronize( sal_True );
1145     SetGridVisible( sal_False );
1146     SetEqualGrid( sal_True );
1147 }
1148 
1149 // -----------------------------------------------------------------------------
1150 
1151 sal_Bool SdOptionsGrid::operator==( const SdOptionsGrid& rOpt ) const
1152 {
1153     return( GetFldDrawX() == rOpt.GetFldDrawX() &&
1154             GetFldDivisionX() == rOpt.GetFldDivisionX() &&
1155             GetFldDrawY() == rOpt.GetFldDrawY() &&
1156             GetFldDivisionY() == rOpt.GetFldDivisionY() &&
1157             GetFldSnapX() == rOpt.GetFldSnapX() &&
1158             GetFldSnapY() == rOpt.GetFldSnapY() &&
1159             IsUseGridSnap() == rOpt.IsUseGridSnap() &&
1160             IsSynchronize() == rOpt.IsSynchronize() &&
1161             IsGridVisible() == rOpt.IsGridVisible() &&
1162             IsEqualGrid() == rOpt.IsEqualGrid() );
1163 }
1164 
1165 // -----------------------------------------------------------------------------
1166 
1167 void SdOptionsGrid::GetPropNameArray( const char**& ppNames, sal_uLong& rCount ) const
1168 {
1169     static const char* aPropNamesMetric[] =
1170     {
1171         "Resolution/XAxis/Metric",
1172         "Resolution/YAxis/Metric",
1173         "Subdivision/XAxis",
1174         "Subdivision/YAxis",
1175         "SnapGrid/XAxis/Metric",
1176         "SnapGrid/YAxis/Metric",
1177         "Option/SnapToGrid",
1178         "Option/Synchronize",
1179         "Option/VisibleGrid",
1180         "SnapGrid/Size"
1181     };
1182 
1183     static const char* aPropNamesNonMetric[] =
1184     {
1185         "Resolution/XAxis/NonMetric",
1186         "Resolution/YAxis/NonMetric",
1187         "Subdivision/XAxis",
1188         "Subdivision/YAxis",
1189         "SnapGrid/XAxis/NonMetric",
1190         "SnapGrid/YAxis/NonMetric",
1191         "Option/SnapToGrid",
1192         "Option/Synchronize",
1193         "Option/VisibleGrid",
1194         "SnapGrid/Size"
1195     };
1196 
1197     rCount = 10;
1198 
1199     if( isMetricSystem() )
1200         ppNames = aPropNamesMetric;
1201     else
1202         ppNames = aPropNamesNonMetric;
1203 }
1204 
1205 // -----------------------------------------------------------------------------
1206 
1207 sal_Bool SdOptionsGrid::ReadData( const Any* pValues )
1208 {
1209     if( pValues[0].hasValue() ) SetFldDrawX( *(sal_Int32*) pValues[ 0 ].getValue() );
1210     if( pValues[1].hasValue() ) SetFldDrawY( *(sal_Int32*) pValues[ 1 ].getValue() );
1211 
1212     if( pValues[2].hasValue() )
1213     {
1214         const sal_uInt32 nDivX = FRound( *(double*) pValues[ 2 ].getValue() );
1215         SetFldDivisionX( SvxOptionsGrid::GetFldDrawX() / ( nDivX + 1 ) );
1216     }
1217 
1218     if( pValues[3].hasValue() )
1219     {
1220         const sal_uInt32 nDivY = FRound( *(double*) pValues[ 3 ].getValue() );
1221         SetFldDivisionY( SvxOptionsGrid::GetFldDrawY() / ( nDivY + 1 ) );
1222     }
1223 
1224     if( pValues[4].hasValue() ) SetFldSnapX( *(sal_Int32*) pValues[ 4 ].getValue() );
1225     if( pValues[5].hasValue() ) SetFldSnapY( *(sal_Int32*) pValues[ 5 ].getValue() );
1226     if( pValues[6].hasValue() ) SetUseGridSnap( *(sal_Bool*) pValues[ 6 ].getValue() );
1227     if( pValues[7].hasValue() ) SetSynchronize( *(sal_Bool*) pValues[ 7 ].getValue() );
1228     if( pValues[8].hasValue() ) SetGridVisible( *(sal_Bool*) pValues[ 8 ].getValue() );
1229     if( pValues[9].hasValue() ) SetEqualGrid( *(sal_Bool*) pValues[ 9 ].getValue() );
1230 
1231     return sal_True;
1232 }
1233 
1234 // -----------------------------------------------------------------------------
1235 
1236 sal_Bool SdOptionsGrid::WriteData( Any* pValues ) const
1237 {
1238     pValues[ 0 ] <<= (sal_Int32) GetFldDrawX();
1239     pValues[ 1 ] <<= (sal_Int32) GetFldDrawY();
1240     pValues[ 2 ] <<= ( GetFldDivisionX() ? ( (double) GetFldDrawX() / GetFldDivisionX() - 1.0 ) : (double) 0 );
1241     pValues[ 3 ] <<= ( GetFldDivisionY() ? ( (double) GetFldDrawY() / GetFldDivisionY() - 1.0 ) : (double) 0 );
1242     pValues[ 4 ] <<= (sal_Int32) GetFldSnapX();
1243     pValues[ 5 ] <<= (sal_Int32) GetFldSnapY();
1244     pValues[ 6 ] <<= IsUseGridSnap();
1245     pValues[ 7 ] <<= IsSynchronize();
1246     pValues[ 8 ] <<= IsGridVisible();
1247     pValues[ 9 ] <<= IsEqualGrid();
1248 
1249     return sal_True;
1250 }
1251 
1252 /*************************************************************************
1253 |*
1254 |* SdOptionsGridItem
1255 |*
1256 \************************************************************************/
1257 
1258 SdOptionsGridItem::SdOptionsGridItem( sal_uInt16 _nWhich, SdOptions* pOpts, ::sd::FrameView* pView ) :
1259     SvxGridItem( _nWhich )
1260 {
1261     SetSynchronize( pOpts->IsSynchronize() );
1262     SetEqualGrid( pOpts->IsEqualGrid() );
1263 
1264     if( pView )
1265     {
1266         SetFldDrawX( pView->GetGridCoarse().Width() );
1267         SetFldDrawY( pView->GetGridCoarse().Height() );
1268         SetFldDivisionX( pView->GetGridFine().Width() ? ( GetFldDrawX() / pView->GetGridFine().Width() - 1 ) : 0 );
1269         SetFldDivisionY( pView->GetGridFine().Height() ? ( GetFldDrawY() / pView->GetGridFine().Height() - 1 ) : 0 );
1270         SetFldSnapX( long(pView->GetSnapGridWidthX()) );
1271         SetFldSnapY( long(pView->GetSnapGridWidthY()) );
1272         SetUseGridSnap( pView->IsGridSnap() );
1273         SetGridVisible( pView->IsGridVisible() );
1274     }
1275     else
1276     {
1277         SetFldDrawX( pOpts->GetFldDrawX() );
1278         SetFldDrawY( pOpts->GetFldDrawY() );
1279         SetFldDivisionX( pOpts->GetFldDivisionX() ? ( pOpts->GetFldDrawX() / pOpts->GetFldDivisionX() - 1 ) : 0 );
1280         SetFldDivisionY( pOpts->GetFldDivisionY() ? ( pOpts->GetFldDrawY() / pOpts->GetFldDivisionY() - 1 ) : 0 );
1281         SetFldSnapX( pOpts->GetFldSnapX() );
1282         SetFldSnapY( pOpts->GetFldSnapY() );
1283         SetUseGridSnap( pOpts->IsUseGridSnap() );
1284         SetGridVisible( pOpts->IsGridVisible() );
1285     }
1286 }
1287 
1288 // -----------------------------------------------------------------------
1289 
1290 void SdOptionsGridItem::SetOptions( SdOptions* pOpts ) const
1291 {
1292     pOpts->SetFldDrawX( GetFldDrawX() );
1293     pOpts->SetFldDivisionX( GetFldDrawX() / ( GetFldDivisionX() + 1 ) );
1294     pOpts->SetFldDrawY( GetFldDrawY() );
1295     pOpts->SetFldDivisionY( GetFldDrawY() / ( GetFldDivisionY() + 1 ) );
1296     pOpts->SetFldSnapX( GetFldSnapX() );
1297     pOpts->SetFldSnapY( GetFldSnapY() );
1298     pOpts->SetUseGridSnap( GetUseGridSnap() );
1299     pOpts->SetSynchronize( GetSynchronize() );
1300     pOpts->SetGridVisible( GetGridVisible() );
1301     pOpts->SetEqualGrid( GetEqualGrid() );
1302 }
1303 
1304 /*************************************************************************
1305 |*
1306 |* SdOptionsPrint
1307 |*
1308 \************************************************************************/
1309 
1310 SdOptionsPrint::SdOptionsPrint( sal_uInt16 nConfigId, sal_Bool bUseConfig ) :
1311     SdOptionsGeneric( nConfigId, bUseConfig ?
1312                       ( ( SDCFG_DRAW == nConfigId ) ?
1313                         B2U( "Office.Draw/Print" ) :
1314                         B2U( "Office.Impress/Print" ) ) :
1315                       OUString() ),
1316     bDraw( sal_True ),
1317     bNotes( sal_False ),
1318     bHandout( sal_False ),
1319     bOutline( sal_False ),
1320     bDate( sal_False ),
1321     bTime( sal_False ),
1322     bPagename( sal_False ),
1323     bHiddenPages( sal_True ),
1324     bPagesize( sal_False ),
1325     bPagetile( sal_False ),
1326     bWarningPrinter( sal_True ),
1327     bWarningSize( sal_False ),
1328     bWarningOrientation( sal_False ),
1329     bBooklet( sal_False ),
1330     bFront( sal_True ),
1331     bBack( sal_True ),
1332     bCutPage( sal_False ),
1333     bPaperbin( sal_False ),
1334     mbHandoutHorizontal( sal_True ),
1335     mnHandoutPages( 6 ),
1336     nQuality( 0 )
1337 {
1338     EnableModify( sal_True );
1339 }
1340 
1341 // -----------------------------------------------------------------------------
1342 
1343 sal_Bool SdOptionsPrint::operator==( const SdOptionsPrint& rOpt ) const
1344 {
1345     return( IsDraw() == rOpt.IsDraw() &&
1346             IsNotes() == rOpt.IsNotes() &&
1347             IsHandout() == rOpt.IsHandout() &&
1348             IsOutline() == rOpt.IsOutline() &&
1349             IsDate() == rOpt.IsDate() &&
1350             IsTime() == rOpt.IsTime() &&
1351             IsPagename() == rOpt.IsPagename() &&
1352             IsHiddenPages() == rOpt.IsHiddenPages() &&
1353             IsPagesize() == rOpt.IsPagesize() &&
1354             IsPagetile() == rOpt.IsPagetile() &&
1355             IsWarningPrinter() == rOpt.IsWarningPrinter() &&
1356             IsWarningSize() == rOpt.IsWarningSize() &&
1357             IsWarningOrientation() == rOpt.IsWarningOrientation() &&
1358             IsBooklet() == rOpt.IsBooklet() &&
1359             IsFrontPage() == rOpt.IsFrontPage() &&
1360             IsBackPage() == rOpt.IsBackPage() &&
1361             IsCutPage() == rOpt.IsCutPage() &&
1362             IsPaperbin() == rOpt.IsPaperbin() &&
1363             GetOutputQuality() == rOpt.GetOutputQuality() &&
1364             IsHandoutHorizontal() == rOpt.IsHandoutHorizontal() &&
1365             GetHandoutPages() == rOpt.GetHandoutPages() );
1366 }
1367 
1368 // -----------------------------------------------------------------------------
1369 
1370 void SdOptionsPrint::GetPropNameArray( const char**& ppNames, sal_uLong& rCount ) const
1371 {
1372     static const char* aDrawPropNames[] =
1373     {
1374         "Other/Date",
1375         "Other/Time",
1376         "Other/PageName",
1377         "Other/HiddenPage",
1378         "Page/PageSize",
1379         "Page/PageTile",
1380         // bWarningPrinter
1381         // bWarningSize
1382         // bWarningOrientation
1383         "Page/Booklet",
1384         "Page/BookletFront",
1385         "Page/BookletBack",
1386         // bCutPage
1387         "Other/FromPrinterSetup",
1388         "Other/Quality",
1389         "Content/Drawing",
1390     };
1391     static const char* aImpressPropNames[] =
1392     {
1393         "Other/Date",
1394         "Other/Time",
1395         "Other/PageName",
1396         "Other/HiddenPage",
1397         "Page/PageSize",
1398         "Page/PageTile",
1399         // bWarningPrinter
1400         // bWarningSize
1401         // bWarningOrientation
1402         "Page/Booklet",
1403         "Page/BookletFront",
1404         "Page/BookletBack",
1405         // bCutPage
1406         "Other/FromPrinterSetup",
1407         "Other/Quality",
1408         "Content/Presentation",
1409         "Content/Note",
1410         "Content/Handout",
1411         "Content/Outline",
1412         "Other/HandoutHorizontal",
1413         "Other/PagesPerHandout"
1414     };
1415 
1416     if( GetConfigId() == SDCFG_IMPRESS )
1417     {
1418         rCount = 17;
1419         ppNames = aImpressPropNames;
1420     }
1421     else
1422     {
1423         rCount = 12;
1424         ppNames = aDrawPropNames;
1425     }
1426 }
1427 
1428 // -----------------------------------------------------------------------------
1429 
1430 sal_Bool SdOptionsPrint::ReadData( const Any* pValues )
1431 {
1432     if( pValues[0].hasValue() ) SetDate( *(sal_Bool*) pValues[ 0 ].getValue() );
1433     if( pValues[1].hasValue() ) SetTime( *(sal_Bool*) pValues[ 1 ].getValue() );
1434     if( pValues[2].hasValue() ) SetPagename( *(sal_Bool*) pValues[ 2 ].getValue() );
1435     if( pValues[3].hasValue() ) SetHiddenPages( *(sal_Bool*) pValues[ 3 ].getValue() );
1436     if( pValues[4].hasValue() ) SetPagesize( *(sal_Bool*) pValues[ 4 ].getValue() );
1437     if( pValues[5].hasValue() ) SetPagetile( *(sal_Bool*) pValues[ 5 ].getValue() );
1438     if( pValues[6].hasValue() ) SetBooklet( *(sal_Bool*) pValues[ 6 ].getValue() );
1439     if( pValues[7].hasValue() ) SetFrontPage( *(sal_Bool*) pValues[ 7 ].getValue() );
1440     if( pValues[8].hasValue() ) SetBackPage( *(sal_Bool*) pValues[ 8 ].getValue() );
1441     if( pValues[9].hasValue() ) SetPaperbin( *(sal_Bool*) pValues[ 9 ].getValue() );
1442     if( pValues[10].hasValue() ) SetOutputQuality( (sal_uInt16) *(sal_Int32*) pValues[ 10 ].getValue() );
1443     if( pValues[11].hasValue() ) SetDraw( *(sal_Bool*) pValues[ 11 ].getValue() );
1444 
1445     // just for impress
1446     if( GetConfigId() == SDCFG_IMPRESS )
1447     {
1448         if( pValues[12].hasValue() ) SetNotes( *(sal_Bool*) pValues[ 12 ].getValue() );
1449         if( pValues[13].hasValue() ) SetHandout( *(sal_Bool*) pValues[ 13 ].getValue() );
1450         if( pValues[14].hasValue() ) SetOutline( *(sal_Bool*) pValues[ 14 ].getValue() );
1451         if( pValues[15].hasValue() ) SetHandoutHorizontal( *(sal_Bool*) pValues[15].getValue() );
1452         if( pValues[16].hasValue() ) SetHandoutPages( (sal_uInt16)*(sal_Int32*) pValues[16].getValue() );
1453     }
1454 
1455     return sal_True;
1456 }
1457 
1458 // -----------------------------------------------------------------------------
1459 
1460 sal_Bool SdOptionsPrint::WriteData( Any* pValues ) const
1461 {
1462     pValues[ 0 ] <<= IsDate();
1463     pValues[ 1 ] <<= IsTime();
1464     pValues[ 2 ] <<= IsPagename();
1465     pValues[ 3 ] <<= IsHiddenPages();
1466     pValues[ 4 ] <<= IsPagesize();
1467     pValues[ 5 ] <<= IsPagetile();
1468     pValues[ 6 ] <<= IsBooklet();
1469     pValues[ 7 ] <<= IsFrontPage();
1470     pValues[ 8 ] <<= IsBackPage();
1471     pValues[ 9 ] <<= IsPaperbin();
1472     pValues[ 10 ] <<= (sal_Int32) GetOutputQuality();
1473     pValues[ 11 ] <<= IsDraw();
1474 
1475     // just for impress
1476     if( GetConfigId() == SDCFG_IMPRESS )
1477     {
1478         pValues[ 12 ] <<= IsNotes();
1479         pValues[ 13 ] <<= IsHandout();
1480         pValues[ 14 ] <<= IsOutline();
1481         pValues[ 15 ] <<= IsHandoutHorizontal();
1482         pValues[ 16 ] <<= GetHandoutPages();
1483     }
1484 
1485     return sal_True;
1486 }
1487 
1488 /*************************************************************************
1489 |*
1490 |* SdOptionsPrintItem
1491 |*
1492 \************************************************************************/
1493 
1494 SdOptionsPrintItem::SdOptionsPrintItem( sal_uInt16 _nWhich )
1495 :   SfxPoolItem     ( _nWhich )
1496 ,   maOptionsPrint  ( 0, sal_False )
1497 {
1498 }
1499 
1500 // ----------------------------------------------------------------------
1501 
1502 SdOptionsPrintItem::SdOptionsPrintItem( sal_uInt16 _nWhich, SdOptions* pOpts, ::sd::FrameView* )
1503 :   SfxPoolItem     ( _nWhich )
1504 ,   maOptionsPrint  ( 0, sal_False )
1505 {
1506     if( pOpts )
1507     {
1508         maOptionsPrint.SetDraw( pOpts->IsDraw() );
1509         maOptionsPrint.SetNotes( pOpts->IsNotes() );
1510         maOptionsPrint.SetHandout( pOpts->IsHandout() );
1511         maOptionsPrint.SetOutline( pOpts->IsOutline() );
1512         maOptionsPrint.SetDate( pOpts->IsDate() );
1513         maOptionsPrint.SetTime( pOpts->IsTime() );
1514         maOptionsPrint.SetPagename( pOpts->IsPagename() );
1515         maOptionsPrint.SetHiddenPages( pOpts->IsHiddenPages() );
1516         maOptionsPrint.SetPagesize( pOpts->IsPagesize() );
1517         maOptionsPrint.SetPagetile( pOpts->IsPagetile() );
1518         maOptionsPrint.SetWarningPrinter( pOpts->IsWarningPrinter() );
1519         maOptionsPrint.SetWarningSize( pOpts->IsWarningSize() );
1520         maOptionsPrint.SetWarningOrientation( pOpts->IsWarningOrientation() );
1521         maOptionsPrint.SetBooklet( pOpts->IsBooklet() );
1522         maOptionsPrint.SetFrontPage( pOpts->IsFrontPage() );
1523         maOptionsPrint.SetBackPage( pOpts->IsBackPage() );
1524         maOptionsPrint.SetCutPage( pOpts->IsCutPage() );
1525         maOptionsPrint.SetPaperbin( pOpts->IsPaperbin() );
1526         maOptionsPrint.SetOutputQuality( pOpts->GetOutputQuality() );
1527     }
1528 }
1529 
1530 // ----------------------------------------------------------------------
1531 
1532 SfxPoolItem* SdOptionsPrintItem::Clone( SfxItemPool* ) const
1533 {
1534     return new SdOptionsPrintItem( *this );
1535 }
1536 
1537 // ----------------------------------------------------------------------
1538 
1539 int SdOptionsPrintItem::operator==( const SfxPoolItem& rAttr ) const
1540 {
1541     const bool bSameType = SfxPoolItem::operator==(rAttr);
1542     DBG_ASSERT( bSameType, "SdOptionsPrintItem::operator==(), differen pool item type!" );
1543     return bSameType && ( maOptionsPrint == static_cast< const SdOptionsPrintItem& >( rAttr ).maOptionsPrint );
1544 }
1545 
1546 // -----------------------------------------------------------------------
1547 
1548 void SdOptionsPrintItem::SetOptions( SdOptions* pOpts ) const
1549 {
1550     if( pOpts )
1551     {
1552         pOpts->SetDraw( maOptionsPrint.IsDraw() );
1553         pOpts->SetNotes( maOptionsPrint.IsNotes() );
1554         pOpts->SetHandout( maOptionsPrint.IsHandout() );
1555         pOpts->SetOutline( maOptionsPrint.IsOutline() );
1556         pOpts->SetDate( maOptionsPrint.IsDate() );
1557         pOpts->SetTime( maOptionsPrint.IsTime() );
1558         pOpts->SetPagename( maOptionsPrint.IsPagename() );
1559         pOpts->SetHiddenPages( maOptionsPrint.IsHiddenPages() );
1560         pOpts->SetPagesize( maOptionsPrint.IsPagesize() );
1561         pOpts->SetPagetile( maOptionsPrint.IsPagetile() );
1562         pOpts->SetWarningPrinter( maOptionsPrint.IsWarningPrinter() );
1563         pOpts->SetWarningSize( maOptionsPrint.IsWarningSize() );
1564         pOpts->SetWarningOrientation( maOptionsPrint.IsWarningOrientation() );
1565         pOpts->SetBooklet( maOptionsPrint.IsBooklet() );
1566         pOpts->SetFrontPage( maOptionsPrint.IsFrontPage() );
1567         pOpts->SetBackPage( maOptionsPrint.IsBackPage() );
1568         pOpts->SetCutPage( maOptionsPrint.IsCutPage() );
1569         pOpts->SetPaperbin( maOptionsPrint.IsPaperbin() );
1570         pOpts->SetOutputQuality( maOptionsPrint.GetOutputQuality() );
1571     }
1572 }
1573 
1574 /*************************************************************************
1575 |*
1576 |* SdOptions
1577 |*
1578 \************************************************************************/
1579 
1580 SdOptions::SdOptions( sal_uInt16 nConfigId ) :
1581     SdOptionsLayout( nConfigId, sal_True ),
1582     SdOptionsContents( nConfigId, sal_True ),
1583     SdOptionsMisc( nConfigId, sal_True ),
1584     SdOptionsSnap( nConfigId, sal_True ),
1585     SdOptionsZoom( nConfigId, sal_True ),
1586     SdOptionsGrid( nConfigId, sal_True ),
1587     SdOptionsPrint( nConfigId, sal_True )
1588 {
1589 }
1590 
1591 // ----------------------------------------------------------------------
1592 
1593 SdOptions::~SdOptions()
1594 {
1595 }
1596 
1597 // ----------------------------------------------------------------------
1598 
1599 void SdOptions::StoreConfig( sal_uLong nOptionsRange )
1600 {
1601     if( nOptionsRange & SD_OPTIONS_LAYOUT )
1602         SdOptionsLayout::Store();
1603 
1604     if( nOptionsRange & SD_OPTIONS_CONTENTS )
1605         SdOptionsContents::Store();
1606 
1607     if( nOptionsRange & SD_OPTIONS_MISC )
1608         SdOptionsMisc::Store();
1609 
1610     if( nOptionsRange & SD_OPTIONS_SNAP )
1611         SdOptionsSnap::Store();
1612 
1613     if( nOptionsRange & SD_OPTIONS_ZOOM )
1614         SdOptionsZoom::Store();
1615 
1616     if( nOptionsRange & SD_OPTIONS_GRID )
1617         SdOptionsGrid::Store();
1618 
1619     if( nOptionsRange & SD_OPTIONS_PRINT )
1620         SdOptionsPrint::Store();
1621 }
1622