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_chart2.hxx"
30 
31 #include "ChartTypeDialogController.hxx"
32 #include "ResId.hxx"
33 #include "HelpIds.hrc"
34 #include "Strings.hrc"
35 #include "Bitmaps.hrc"
36 #include "Bitmaps_HC.hrc"
37 #include "macros.hxx"
38 #include "ChartModelHelper.hxx"
39 #include "DiagramHelper.hxx"
40 #include "ControllerLockGuard.hxx"
41 #include "AxisHelper.hxx"
42 
43 #include <com/sun/star/chart2/DataPointGeometry3D.hpp>
44 #include <com/sun/star/chart2/PieChartOffsetMode.hpp>
45 #include <com/sun/star/chart2/XDataSeriesContainer.hpp>
46 
47 #ifndef _SVT_CONTROLDIMS_HRC_
48 #include <svtools/controldims.hrc>
49 #endif
50 // header for class Image
51 #include <vcl/image.hxx>
52 // header for class Bitmap
53 #include <vcl/bitmap.hxx>
54 #include <vcl/svapp.hxx>
55 
56 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
57 
58 //.............................................................................
59 namespace chart
60 {
61 //.............................................................................
62 using namespace ::com::sun::star;
63 using namespace ::com::sun::star::chart2;
64 
65 // macro for selecting a normal or high contrast bitmap the stack variable
66 // bIsHighContrast must exist and reflect the correct state
67 #define SELECT_BITMAP(name) Bitmap( SchResId( bIsHighContrast ? name ## _HC : name ))
68 #define SELECT_IMAGE(name) Image( SchResId( bIsHighContrast ? name ## _HC : name ))
69 
70 /*
71         ( C2U( "com.sun.star.chart2.template.Surface" ),                        CHSTYLE_3D_SURFACE)
72         ( C2U( "com.sun.star.chart2.template.Addin" ),                          CHSTYLE_ADDIN)
73 */
74 
75 ChartTypeParameter::ChartTypeParameter()
76                     : nSubTypeIndex( 1 )
77                     , bXAxisWithValues( false )
78                     , b3DLook( false )
79                     , bSymbols( true )
80                     , bLines( true )
81                     , eStackMode( GlobalStackMode_NONE )
82                     , eCurveStyle( CurveStyle_LINES )
83                     , nCurveResolution(20)
84                     , nSplineOrder(3)
85                     , nGeometry3D(DataPointGeometry3D::CUBOID)
86                     , eThreeDLookScheme(ThreeDLookScheme_Realistic)
87                     , bSortByXValues(sal_False)
88 {
89 }
90 
91 ChartTypeParameter::ChartTypeParameter( sal_Int32 SubTypeIndex, bool HasXAxisWithValues
92                     ,  bool Is3DLook,  GlobalStackMode nStackMode
93                     , bool HasSymbols, bool HasLines
94                     , CurveStyle nCurveStyle )
95                     : nSubTypeIndex( SubTypeIndex )
96                     , bXAxisWithValues( HasXAxisWithValues )
97                     , b3DLook( Is3DLook )
98                     , bSymbols( HasSymbols )
99                     , bLines( HasLines )
100                     , eStackMode( nStackMode )
101                     , eCurveStyle( nCurveStyle )
102                     , nCurveResolution(20)
103                     , nSplineOrder(3)
104                     , nGeometry3D(DataPointGeometry3D::CUBOID)
105                     , eThreeDLookScheme(ThreeDLookScheme_Realistic)
106                     , bSortByXValues(sal_False)
107 {
108 }
109 ChartTypeParameter::~ChartTypeParameter()
110 {
111 }
112 
113 bool ChartTypeParameter::mapsToSameService( const ChartTypeParameter& rParameter ) const
114 {
115     return this->mapsToSimilarService( rParameter, 0 );
116 }
117 bool ChartTypeParameter::mapsToSimilarService( const ChartTypeParameter& rParameter, sal_Int32 nTheHigherTheLess ) const
118 {
119     sal_Int32 nMax=7;
120     if(nTheHigherTheLess>nMax)
121         return true;
122     if( this->bXAxisWithValues!=rParameter.bXAxisWithValues )
123         return nTheHigherTheLess>nMax-1;
124     if( this->b3DLook!=rParameter.b3DLook )
125         return nTheHigherTheLess>nMax-2;
126     if( this->eStackMode!=rParameter.eStackMode )
127         return nTheHigherTheLess>nMax-3;
128     if( this->nSubTypeIndex!=rParameter.nSubTypeIndex )
129         return nTheHigherTheLess>nMax-4;
130     if( this->bSymbols!=rParameter.bSymbols )
131         return nTheHigherTheLess>nMax-5;
132     if( this->bLines!=rParameter.bLines )
133         return nTheHigherTheLess>nMax-6;
134     return true;
135 }
136 
137 //-----------------------------------------------------------------------------
138 //-----------------------------------------------------------------------------
139 //-----------------------------------------------------------------------------
140 
141 ChartTypeDialogController::ChartTypeDialogController()
142     : bSupportsXAxisWithValues(false)
143     , bSupports3D(true)
144 {
145 }
146 
147 ChartTypeDialogController::~ChartTypeDialogController()
148 {
149 }
150 Image ChartTypeDialogController::getImage( bool /*bIsHighContrast*/ )
151 {
152     return Image();
153 }
154 bool ChartTypeDialogController::isSubType( const rtl::OUString& rServiceName )
155 {
156     const tTemplateServiceChartTypeParameterMap& rTemplateMap = this->getTemplateMap();
157     tTemplateServiceChartTypeParameterMap::const_iterator aIt( rTemplateMap.find( rServiceName ));
158     if( aIt != rTemplateMap.end())
159         return true;
160     return false;
161 }
162 ChartTypeParameter ChartTypeDialogController::getChartTypeParameterForService(
163                                                     const rtl::OUString& rServiceName
164                                                     , const uno::Reference< beans::XPropertySet >& xTemplateProps )
165 {
166     ChartTypeParameter aRet;
167     const tTemplateServiceChartTypeParameterMap& rTemplateMap = this->getTemplateMap();
168     tTemplateServiceChartTypeParameterMap::const_iterator aIt( rTemplateMap.find( rServiceName ));
169     if( aIt != rTemplateMap.end())
170         aRet = (*aIt).second;
171     if( xTemplateProps.is() )
172     {
173         try
174         {
175             xTemplateProps->getPropertyValue( C2U( "CurveStyle" )) >>= aRet.eCurveStyle;
176             xTemplateProps->getPropertyValue( C2U( "CurveResolution" )) >>= aRet.nCurveResolution;
177             xTemplateProps->getPropertyValue( C2U( "SplineOrder" )) >>= aRet.nSplineOrder;
178         }
179         catch( uno::Exception & ex )
180         {
181             //not all templates need to support CurveStyle, CurveResolution or SplineOrder
182             ex.Context.is();//to have debug information without compilation warnings
183         }
184 
185         try
186         {
187             xTemplateProps->getPropertyValue( C2U( "Geometry3D" )) >>= aRet.nGeometry3D;
188         }
189         catch( uno::Exception& ex )
190 	    {
191             //not all templates need to support CGeometry3D
192             ex.Context.is();//to have debug information without compilation warnings
193         }
194     }
195     return aRet;
196 }
197 void ChartTypeDialogController::adjustSubTypeAndEnableControls( ChartTypeParameter& /*rParameter*/ )
198 {
199 }
200 void ChartTypeDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
201 {
202     switch( rParameter.nSubTypeIndex )
203     {
204         case 2:
205             rParameter.eStackMode=GlobalStackMode_STACK_Y;
206             break;
207         case 3:
208             rParameter.eStackMode=GlobalStackMode_STACK_Y_PERCENT;
209             break;
210         case 4:
211             rParameter.eStackMode=GlobalStackMode_STACK_Z;
212             break;
213         default:
214             rParameter.eStackMode=GlobalStackMode_NONE;
215             break;
216     }
217 }
218 void ChartTypeDialogController::adjustParameterToMainType( ChartTypeParameter& rParameter )
219 {
220     bool bFoundSomeMatch=false;
221 
222     rParameter.bXAxisWithValues = bSupportsXAxisWithValues;
223     if( rParameter.b3DLook && !bSupports3D )
224         rParameter.b3DLook = false;
225     if(!rParameter.b3DLook && rParameter.eStackMode==GlobalStackMode_STACK_Z)
226         rParameter.eStackMode = GlobalStackMode_NONE;
227 
228     const tTemplateServiceChartTypeParameterMap& rMap = getTemplateMap();
229     tTemplateServiceChartTypeParameterMap::const_iterator       aIter = rMap.begin();
230     const tTemplateServiceChartTypeParameterMap::const_iterator aEnd  = rMap.end();
231     for( sal_Int32 nMatchPrecision=0; nMatchPrecision<7 && !bFoundSomeMatch; nMatchPrecision++ )
232     {
233         for( aIter = rMap.begin(); aIter != aEnd; aIter++ )
234         {
235             if( rParameter.mapsToSimilarService( (*aIter).second, nMatchPrecision ) )
236             {
237                 //remind some values
238                 ThreeDLookScheme aScheme = rParameter.eThreeDLookScheme;
239                 sal_Int32        nCurveResolution = rParameter.nCurveResolution;
240                 sal_Int32        nSplineOrder = rParameter.nSplineOrder;
241                 CurveStyle       eCurveStyle = rParameter.eCurveStyle;
242                 sal_Int32        nGeometry3D = rParameter.nGeometry3D;
243                 sal_Bool         bSortByXValues = rParameter.bSortByXValues;
244 
245                 rParameter = (*aIter).second;
246 
247                 //some values should not be changed with charttype
248                 rParameter.eThreeDLookScheme = aScheme;
249                 rParameter.nCurveResolution = nCurveResolution;
250                 rParameter.nSplineOrder =nSplineOrder;
251                 rParameter.eCurveStyle = eCurveStyle;
252                 rParameter.nGeometry3D = nGeometry3D;
253                 rParameter.bSortByXValues = bSortByXValues;
254 
255                 bFoundSomeMatch = true;
256                 break;
257             }
258         }
259     }
260     if(!bFoundSomeMatch)
261     {
262         if(rMap.begin()!=rMap.end())
263             rParameter = (*rMap.begin()).second;
264         else
265             rParameter = ChartTypeParameter();
266     }
267 }
268 rtl::OUString ChartTypeDialogController::getServiceNameForParameter( const ChartTypeParameter& rParameter ) const
269 {
270     ChartTypeParameter aParameter(rParameter);
271     if( aParameter.bXAxisWithValues )
272         aParameter.eStackMode = GlobalStackMode_NONE;
273     if(!aParameter.b3DLook && aParameter.eStackMode==GlobalStackMode_STACK_Z)
274         aParameter.eStackMode = GlobalStackMode_NONE;
275     const tTemplateServiceChartTypeParameterMap& rMap = getTemplateMap();
276     tTemplateServiceChartTypeParameterMap::const_iterator       aIter = rMap.begin();
277     const tTemplateServiceChartTypeParameterMap::const_iterator aEnd  = rMap.end();
278 	for( ; aIter != aEnd; aIter++ )
279     {
280         if( aParameter.mapsToSameService( (*aIter).second ) )
281             return (*aIter).first;
282     }
283 
284     OSL_ENSURE( false, "ChartType not implemented yet - use fallback to similar type" );
285     for( sal_Int32 nMatchPrecision=1; nMatchPrecision<8; nMatchPrecision++ )
286     {
287         for( aIter = rMap.begin(); aIter != aEnd; aIter++ )
288         {
289             if( aParameter.mapsToSimilarService( (*aIter).second, nMatchPrecision ) )
290                 return (*aIter).first;
291         }
292     }
293     return ::rtl::OUString();
294 }
295 uno::Reference< XChartTypeTemplate > ChartTypeDialogController::getCurrentTemplate(
296     const ChartTypeParameter& rParameter
297     , const uno::Reference< lang::XMultiServiceFactory >& xTemplateManager ) const
298 {
299     uno::Reference< XChartTypeTemplate > xTemplate(0);
300 
301     rtl::OUString aServiceName( this->getServiceNameForParameter( rParameter ) );
302     if(aServiceName.getLength())
303     {
304         xTemplate.set( xTemplateManager->createInstance( aServiceName ), uno::UNO_QUERY );
305         if(xTemplate.is())
306         {
307             uno::Reference< beans::XPropertySet > xTemplateProps( xTemplate, uno::UNO_QUERY );
308             if(xTemplateProps.is())
309             {
310                 try
311                 {
312                     xTemplateProps->setPropertyValue( C2U( "CurveStyle" ), uno::makeAny(rParameter.eCurveStyle) );
313                     xTemplateProps->setPropertyValue( C2U( "CurveResolution" ), uno::makeAny(rParameter.nCurveResolution) );
314                     xTemplateProps->setPropertyValue( C2U( "SplineOrder" ), uno::makeAny(rParameter.nSplineOrder) );
315                 }
316                 catch( uno::Exception & ex )
317                 {
318                     //not all templates need to support CurveStyle, CurveResolution or SplineOrder
319                     ex.Context.is();//to have debug information without compilation warnings
320                 }
321                 try
322                 {
323                     xTemplateProps->setPropertyValue( C2U( "Geometry3D" ), uno::makeAny(rParameter.nGeometry3D) );
324                 }
325                 catch( uno::Exception & ex )
326                 {
327                     //not all templates need to support Geometry3D
328                     ex.Context.is();//to have debug information without compilation warnings
329                 }
330                 try
331                 {
332                     this->setTemplateProperties( xTemplateProps );
333                 }
334                 catch( uno::Exception & ex )
335                 {
336                     ASSERT_EXCEPTION( ex );
337                 }
338             }
339         }
340     }
341     return xTemplate;
342 }
343 
344 bool ChartTypeDialogController::commitToModel( const ChartTypeParameter& rParameter
345                 , const uno::Reference< XChartDocument >& xChartModel )
346 {
347     uno::Reference< lang::XMultiServiceFactory > xTemplateManager( xChartModel->getChartTypeManager(), uno::UNO_QUERY );
348     uno::Reference< XChartTypeTemplate > xTemplate( this->getCurrentTemplate( rParameter, xTemplateManager ) );
349     if(xTemplate.is())
350     {
351         uno::Reference< frame::XModel > xModel( xChartModel, uno::UNO_QUERY);
352 
353         // /-- locked controllers
354         ControllerLockGuard aCtrlLockGuard( xModel );
355         uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( xModel );
356         DiagramHelper::tTemplateWithServiceName aTemplateWithService(
357             DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager ));
358         if( aTemplateWithService.first.is())
359             aTemplateWithService.first->resetStyles( xDiagram );
360         xTemplate->changeDiagram( xDiagram );
361         if( Application::GetSettings().GetLayoutRTL() )
362             AxisHelper::setRTLAxisLayout( AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 ) );
363         if( rParameter.b3DLook )
364             ThreeDHelper::setScheme( xDiagram, rParameter.eThreeDLookScheme );
365 
366         //SortByXValues
367         {
368             uno::Reference< beans::XPropertySet > xDiaProp( xDiagram, uno::UNO_QUERY );
369             if( xDiaProp.is() )
370                 xDiaProp->setPropertyValue( C2U( "SortByXValues" ), uno::makeAny( rParameter.bSortByXValues ) );
371         }
372         // \-- locked controllers
373     }
374     return false;
375 }
376 void ChartTypeDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool /*bIsHighContrast*/, const ChartTypeParameter& /*rParameter*/ )
377 {
378     rSubTypeList.Clear();
379 }
380 bool ChartTypeDialogController::shouldShow_XAxisTypeControl() const
381 {
382     return false;
383 }
384 bool ChartTypeDialogController::shouldShow_3DLookControl() const
385 {
386     return false;
387 }
388 bool ChartTypeDialogController::shouldShow_StackingControl() const
389 {
390     return false;
391 }
392 bool ChartTypeDialogController::shouldShow_DeepStackingControl() const
393 {
394     return false;
395 }
396 bool ChartTypeDialogController::shouldShow_SplineControl() const
397 {
398     return false;
399 }
400 bool ChartTypeDialogController::shouldShow_GeometryControl() const
401 {
402     return false;
403 }
404 bool ChartTypeDialogController::shouldShow_SortByXValuesResourceGroup() const
405 {
406     return false;
407 }
408 
409 void ChartTypeDialogController::showExtraControls( Window* /*pParent*/, const Point& /*rPosition*/, const Size& /*rSize*/ )
410 {
411 }
412 void ChartTypeDialogController::hideExtraControls() const
413 {
414 }
415 void ChartTypeDialogController::fillExtraControls( const ChartTypeParameter& /*rParameter*/
416                                                   , const uno::Reference< XChartDocument >& /*xChartModel*/
417                                                   , const uno::Reference< beans::XPropertySet >& /*xTemplateProps*/ ) const
418 {
419 }
420 void ChartTypeDialogController::setTemplateProperties( const uno::Reference< beans::XPropertySet >& /*xTemplateProps*/ ) const throw (uno::RuntimeException)
421 {
422 }
423 //--------------------------------------------------------------------------
424 
425 ColumnOrBarChartDialogController_Base::ColumnOrBarChartDialogController_Base()
426                                         : ChartTypeDialogController()
427 {
428 }
429 ColumnOrBarChartDialogController_Base::~ColumnOrBarChartDialogController_Base()
430 {
431 }
432 bool ColumnOrBarChartDialogController_Base::shouldShow_3DLookControl() const
433 {
434     return true;
435 }
436 bool ColumnOrBarChartDialogController_Base::shouldShow_GeometryControl() const
437 {
438     return true;
439 }
440 void ColumnOrBarChartDialogController_Base::adjustSubTypeAndEnableControls( ChartTypeParameter& rParameter )
441 {
442     if(rParameter.nSubTypeIndex>3 && !rParameter.b3DLook)
443     {
444         rParameter.nSubTypeIndex=1;
445     }
446 }
447 //--------------------------------------------------------------------------
448 ColumnChartDialogController::ColumnChartDialogController()
449 {
450 }
451 ColumnChartDialogController::~ColumnChartDialogController()
452 {
453 }
454 String ColumnChartDialogController::getName()
455 {
456     return String( SchResId( STR_TYPE_COLUMN ));
457 }
458 Image ColumnChartDialogController::getImage( bool bIsHighContrast )
459 {
460     return SELECT_IMAGE( IMG_TYPE_COLUMN );
461 }
462 const tTemplateServiceChartTypeParameterMap& ColumnChartDialogController::getTemplateMap() const
463 {
464     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
465     tTemplateServiceChartTypeParameterMap
466         ( C2U( "com.sun.star.chart2.template.Column" ),                         ChartTypeParameter(1,false,false,GlobalStackMode_NONE) )
467         ( C2U( "com.sun.star.chart2.template.StackedColumn" ),                  ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y) )
468         ( C2U( "com.sun.star.chart2.template.PercentStackedColumn" ),           ChartTypeParameter(3,false,false,GlobalStackMode_STACK_Y_PERCENT) )
469         ( C2U( "com.sun.star.chart2.template.ThreeDColumnFlat" ),               ChartTypeParameter(1,false,true,GlobalStackMode_NONE) )
470         ( C2U( "com.sun.star.chart2.template.StackedThreeDColumnFlat" ),        ChartTypeParameter(2,false,true,GlobalStackMode_STACK_Y) )
471         ( C2U( "com.sun.star.chart2.template.PercentStackedThreeDColumnFlat" ), ChartTypeParameter(3,false,true,GlobalStackMode_STACK_Y_PERCENT) )
472         ( C2U( "com.sun.star.chart2.template.ThreeDColumnDeep" ),               ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Z) )
473         ;
474     return m_aTemplateMap;
475 }
476 void ColumnChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& rParameter )
477 {
478     rSubTypeList.Clear();
479 
480     if( rParameter.b3DLook )
481     {
482         switch(rParameter.nGeometry3D)
483         {
484             case DataPointGeometry3D::CYLINDER:
485                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_SAEULE_3D_1 ) );
486                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_SAEULE_3D_2 ) );
487                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_SAEULE_3D_3 ) );
488                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_SAEULE_3D_4 ) );
489             break;
490             case DataPointGeometry3D::CONE:
491                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_KEGEL_3D_1 ) );
492                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_KEGEL_3D_2 ) );
493                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_KEGEL_3D_3 ) );
494                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_KEGEL_3D_4 ) );
495             break;
496             case DataPointGeometry3D::PYRAMID:
497                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_PYRAMID_3D_1 ) );
498                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_PYRAMID_3D_2 ) );
499                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_PYRAMID_3D_3 ) );
500                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_PYRAMID_3D_4 ) );
501             break;
502             default: //DataPointGeometry3D::CUBOID:
503                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_COLUMNS_3D_1 ) );
504                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_COLUMNS_3D_2 ) );
505                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_COLUMNS_3D_3 ) );
506                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_COLUMNS_3D ) );
507             break;
508         }
509     }
510     else
511     {
512         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_COLUMNS_2D_1 ) );
513         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_COLUMNS_2D_2 ) );
514         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_COLUMNS_2D_3 ) );
515     }
516 
517     rSubTypeList.SetItemText( 1, String( SchResId( STR_NORMAL )) );
518     rSubTypeList.SetItemText( 2, String( SchResId( STR_STACKED )) );
519     rSubTypeList.SetItemText( 3, String( SchResId( STR_PERCENT )) );
520     rSubTypeList.SetItemText( 4, String( SchResId( STR_DEEP )) );
521 }
522 
523 //--------------------------------------------------------------------------
524 
525 BarChartDialogController::BarChartDialogController()
526 {
527 }
528 BarChartDialogController::~BarChartDialogController()
529 {
530 }
531 String BarChartDialogController::getName()
532 {
533     return String( SchResId( STR_TYPE_BAR ));
534 }
535 Image BarChartDialogController::getImage( bool bIsHighContrast )
536 {
537     return SELECT_IMAGE( IMG_TYPE_BAR );
538 }
539 const tTemplateServiceChartTypeParameterMap& BarChartDialogController::getTemplateMap() const
540 {
541     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
542     tTemplateServiceChartTypeParameterMap
543         ( C2U( "com.sun.star.chart2.template.Bar" ),                         ChartTypeParameter(1,false,false,GlobalStackMode_NONE) )
544         ( C2U( "com.sun.star.chart2.template.StackedBar" ),                  ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y) )
545         ( C2U( "com.sun.star.chart2.template.PercentStackedBar" ),           ChartTypeParameter(3,false,false,GlobalStackMode_STACK_Y_PERCENT) )
546         ( C2U( "com.sun.star.chart2.template.ThreeDBarFlat" ),               ChartTypeParameter(1,false,true,GlobalStackMode_NONE) )
547         ( C2U( "com.sun.star.chart2.template.StackedThreeDBarFlat" ),        ChartTypeParameter(2,false,true,GlobalStackMode_STACK_Y) )
548         ( C2U( "com.sun.star.chart2.template.PercentStackedThreeDBarFlat" ), ChartTypeParameter(3,false,true,GlobalStackMode_STACK_Y_PERCENT) )
549         ( C2U( "com.sun.star.chart2.template.ThreeDBarDeep" ),               ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Z) )
550         ;
551     return m_aTemplateMap;
552 }
553 void BarChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& rParameter )
554 {
555     rSubTypeList.Clear();
556 
557     if( rParameter.b3DLook )
558     {
559         switch(rParameter.nGeometry3D)
560         {
561             case DataPointGeometry3D::CYLINDER:
562                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_ROEHRE_3D_1 ) );
563                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_ROEHRE_3D_2 ) );
564                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_ROEHRE_3D_3 ) );
565                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_ROEHRE_3D_4 ) );
566             break;
567             case DataPointGeometry3D::CONE:
568                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_KEGELQ_3D_1 ) );
569                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_KEGELQ_3D_2 ) );
570                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_KEGELQ_3D_3 ) );
571                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_KEGELQ_3D_4 ) );
572             break;
573             case DataPointGeometry3D::PYRAMID:
574                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_PYRAMIDQ_3D_1 ) );
575                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_PYRAMIDQ_3D_2 ) );
576                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_PYRAMIDQ_3D_3 ) );
577                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_PYRAMIDQ_3D_4 ) );
578             break;
579             default: //DataPointGeometry3D::CUBOID:
580                 rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_BARS_3D_1 ) );
581                 rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_BARS_3D_2 ) );
582                 rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_BARS_3D_3 ) );
583                 rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_BARS_3D ) );
584             break;
585         }
586     }
587     else
588     {
589         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_BARS_2D_1 ) );
590         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_BARS_2D_2 ) );
591         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_BARS_2D_3 ) );
592     }
593     rSubTypeList.SetItemText( 1, String( SchResId( STR_NORMAL )) );
594     rSubTypeList.SetItemText( 2, String( SchResId( STR_STACKED )) );
595     rSubTypeList.SetItemText( 3, String( SchResId( STR_PERCENT )) );
596     rSubTypeList.SetItemText( 4, String( SchResId( STR_DEEP )) );
597 }
598 
599 //--------------------------------------------------------------------------
600 
601 PieChartDialogController::PieChartDialogController()
602 {
603 }
604 PieChartDialogController::~PieChartDialogController()
605 {
606 }
607 String PieChartDialogController::getName()
608 {
609     return String( SchResId( STR_TYPE_PIE ));
610 }
611 Image PieChartDialogController::getImage( bool bIsHighContrast )
612 {
613     return SELECT_IMAGE( IMG_TYPE_PIE );
614 }
615 const tTemplateServiceChartTypeParameterMap& PieChartDialogController::getTemplateMap() const
616 {
617     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
618     tTemplateServiceChartTypeParameterMap
619     ( C2U( "com.sun.star.chart2.template.Pie" ),                    ChartTypeParameter(1,false,false) )
620     ( C2U( "com.sun.star.chart2.template.PieAllExploded" ),         ChartTypeParameter(2,false,false) )
621     ( C2U( "com.sun.star.chart2.template.Donut" ),                  ChartTypeParameter(3,false,false) )
622     ( C2U( "com.sun.star.chart2.template.DonutAllExploded" ),       ChartTypeParameter(4,false,false) )
623     ( C2U( "com.sun.star.chart2.template.ThreeDPie" ),              ChartTypeParameter(1,false,true) )
624     ( C2U( "com.sun.star.chart2.template.ThreeDPieAllExploded" ),   ChartTypeParameter(2,false,true) )
625     ( C2U( "com.sun.star.chart2.template.ThreeDDonut" ),            ChartTypeParameter(3,false,true) )
626     ( C2U( "com.sun.star.chart2.template.ThreeDDonutAllExploded" ), ChartTypeParameter(4,false,true) )
627     ;
628     return m_aTemplateMap;
629 }
630 void PieChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& rParameter )
631 {
632     rSubTypeList.Clear();
633 
634     if( rParameter.b3DLook )
635     {
636         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_CIRCLES_3D ) );
637         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_CIRCLES_3D_EXPLODED ) );
638         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_DONUT_3D ) );
639         rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_DONUT_3D_EXPLODED ) );
640     }
641     else
642     {
643         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_CIRCLES_2D ) );
644         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_CIRCLES_2D_EXPLODED ) );
645         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_DONUT_2D ) );
646         rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_DONUT_2D_EXPLODED ) );
647     }
648     rSubTypeList.SetItemText( 1, String( SchResId( STR_NORMAL )) );
649     rSubTypeList.SetItemText( 2, String( SchResId( STR_PIE_EXPLODED )) );
650     rSubTypeList.SetItemText( 3, String( SchResId( STR_DONUT )) );
651     rSubTypeList.SetItemText( 4, String( SchResId( STR_DONUT_EXPLODED )) );
652 }
653 bool PieChartDialogController::shouldShow_3DLookControl() const
654 {
655     return true;
656 }
657 void PieChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
658 {
659     if(rParameter.eStackMode==GlobalStackMode_STACK_Z)
660         rParameter.eStackMode = GlobalStackMode_NONE;
661 }
662 //--------------------------------------------------------------------------
663 LineChartDialogController::LineChartDialogController()
664 {
665 }
666 LineChartDialogController::~LineChartDialogController()
667 {
668 }
669 String LineChartDialogController::getName()
670 {
671     return String( SchResId( STR_TYPE_LINE ));
672 }
673 Image LineChartDialogController::getImage( bool bIsHighContrast )
674 {
675     return SELECT_IMAGE( IMG_TYPE_LINE );
676 }
677 const tTemplateServiceChartTypeParameterMap& LineChartDialogController::getTemplateMap() const
678 {
679     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
680     tTemplateServiceChartTypeParameterMap
681     //-------------------------------------------------------
682     ( C2U( "com.sun.star.chart2.template.Symbol" ),                     ChartTypeParameter(1,false,false,GlobalStackMode_NONE,true,false) )
683     ( C2U( "com.sun.star.chart2.template.StackedSymbol" ),              ChartTypeParameter(1,false,false,GlobalStackMode_STACK_Y,true,false) )
684     ( C2U( "com.sun.star.chart2.template.PercentStackedSymbol" ),       ChartTypeParameter(1,false,false,GlobalStackMode_STACK_Y_PERCENT,true,false) )
685     ( C2U( "com.sun.star.chart2.template.LineSymbol" ),                 ChartTypeParameter(2,false,false,GlobalStackMode_NONE,true,true) )
686     ( C2U( "com.sun.star.chart2.template.StackedLineSymbol" ),          ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y,true,true) )
687     ( C2U( "com.sun.star.chart2.template.PercentStackedLineSymbol" ),   ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y_PERCENT,true,true) )
688     ( C2U( "com.sun.star.chart2.template.Line" ),                       ChartTypeParameter(3,false,false,GlobalStackMode_NONE,false,true) )
689     ( C2U( "com.sun.star.chart2.template.StackedLine" ),                ChartTypeParameter(3,false,false,GlobalStackMode_STACK_Y,false,true) )
690     ( C2U( "com.sun.star.chart2.template.PercentStackedLine" ),         ChartTypeParameter(3,false,false,GlobalStackMode_STACK_Y_PERCENT,false,true) )
691     //-------------------------------------------------------
692     //( C2U( "com.sun.star.chart2.template.ThreeDLine" ),                 ChartTypeParameter(4,false,true,GlobalStackMode_NONE,false,true) )
693     ( C2U( "com.sun.star.chart2.template.StackedThreeDLine" ),          ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Y,false,true) )
694     ( C2U( "com.sun.star.chart2.template.PercentStackedThreeDLine" ),   ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Y_PERCENT,false,true) )
695     ( C2U( "com.sun.star.chart2.template.ThreeDLineDeep" ),             ChartTypeParameter(4,false,true,GlobalStackMode_STACK_Z,false,true) )
696     //-------------------------------------------------------
697     ;
698     return m_aTemplateMap;
699 }
700 void LineChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& rParameter )
701 {
702     rSubTypeList.Clear();
703 
704     if( CurveStyle_LINES==rParameter.eCurveStyle )
705     {
706         //direct lines
707         if( GlobalStackMode_NONE == rParameter.eStackMode || GlobalStackMode_STACK_Z == rParameter.eStackMode )
708         {
709             rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_POINTS_XCATEGORY ) );
710             rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_LINE_P_XCATEGORY ) );
711             rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_LINE_O_XCATEGORY ) );
712             rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_LINE3D_XCATEGORY ) );
713         }
714         else
715         {
716             rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_POINTS_STACKED ) );
717             rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_LINE_P_STACKED ) );
718             rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_LINE_O_STACKED ) );
719             rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_LINE3D_STACKED ) );
720         }
721     }
722     else //CurveStyle_LINES
723     {
724         if( GlobalStackMode_NONE == rParameter.eStackMode || GlobalStackMode_STACK_Z == rParameter.eStackMode )
725         {
726             rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_POINTS_XCATEGORY ) );
727             rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_LINE_P_XCATEGORY_SMOOTH ) );
728             rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_LINE_O_XCATEGORY_SMOOTH ) );
729             rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_LINE3D_XCATEGORY_SMOOTH ) );
730         }
731         else
732         {
733             rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_POINTS_STACKED ) );
734             rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_LINE_P_STACKED_SMOOTH ) );
735             rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_LINE_O_STACKED_SMOOTH ) );
736             rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_LINE3D_STACKED_SMOOTH ) );
737         }
738     }
739 
740     rSubTypeList.SetItemText( 1, String( SchResId( STR_POINTS_ONLY )) );
741     rSubTypeList.SetItemText( 2, String( SchResId( STR_POINTS_AND_LINES )) );
742     rSubTypeList.SetItemText( 3, String( SchResId( STR_LINES_ONLY )) );
743     rSubTypeList.SetItemText( 4, String( SchResId( STR_LINES_3D )) );
744 }
745 bool LineChartDialogController::shouldShow_StackingControl() const
746 {
747     return true;
748 }
749 bool LineChartDialogController::shouldShow_DeepStackingControl() const
750 {
751     return false;
752 }
753 bool LineChartDialogController::shouldShow_SplineControl() const
754 {
755     return true;
756 }
757 void LineChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
758 {
759     rParameter.b3DLook = false;
760 
761     switch( rParameter.nSubTypeIndex )
762     {
763         case 2:
764             rParameter.bSymbols = true;
765             rParameter.bLines = true;
766             break;
767         case 3:
768             rParameter.bSymbols = false;
769             rParameter.bLines = true;
770             break;
771         case 4:
772             rParameter.bSymbols = false;
773             rParameter.bLines = true;
774             rParameter.b3DLook = true;
775             if( rParameter.eStackMode == GlobalStackMode_NONE )
776                 rParameter.eStackMode = GlobalStackMode_STACK_Z;
777             break;
778         default:
779             rParameter.bSymbols = true;
780             rParameter.bLines = false;
781             break;
782     }
783 
784     if(!rParameter.b3DLook && rParameter.eStackMode == GlobalStackMode_STACK_Z )
785         rParameter.eStackMode = GlobalStackMode_NONE;
786 }
787 void LineChartDialogController::adjustParameterToMainType( ChartTypeParameter& rParameter )
788 {
789     if( rParameter.b3DLook && rParameter.eStackMode == GlobalStackMode_NONE )
790         rParameter.eStackMode = GlobalStackMode_STACK_Z;
791 
792     ChartTypeDialogController::adjustParameterToMainType( rParameter );
793 }
794 //--------------------------------------------------------------------------
795 XYChartDialogController::XYChartDialogController()
796 {
797     bSupportsXAxisWithValues = true;
798 }
799 XYChartDialogController::~XYChartDialogController()
800 {
801 }
802 String XYChartDialogController::getName()
803 {
804     return String( SchResId( STR_TYPE_XY ));
805 }
806 Image XYChartDialogController::getImage( bool bIsHighContrast )
807 {
808     return SELECT_IMAGE( IMG_TYPE_XY );
809 }
810 const tTemplateServiceChartTypeParameterMap& XYChartDialogController::getTemplateMap() const
811 {
812     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
813     tTemplateServiceChartTypeParameterMap
814     //-------------------------------------------------------
815     ( C2U( "com.sun.star.chart2.template.ScatterSymbol" ),              ChartTypeParameter(1,true,false,GlobalStackMode_NONE,true,false) )
816     ( C2U( "com.sun.star.chart2.template.ScatterLineSymbol" ),          ChartTypeParameter(2,true,false,GlobalStackMode_NONE,true,true) )
817     ( C2U( "com.sun.star.chart2.template.ScatterLine" ),                ChartTypeParameter(3,true,false,GlobalStackMode_NONE,false,true) )
818     ( C2U( "com.sun.star.chart2.template.ThreeDScatter" ),              ChartTypeParameter(4,true,true,GlobalStackMode_NONE,false,true) )
819     ;
820     return m_aTemplateMap;
821 }
822 void XYChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& rParameter )
823 {
824     rSubTypeList.Clear();
825 
826     if( CurveStyle_LINES==rParameter.eCurveStyle )
827     {
828         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_POINTS_XVALUES ) );
829         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_LINE_P_XVALUES ) );
830         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_LINE_O_XVALUES ) );
831         rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_LINE3D_XVALUES ) );
832     }
833     else //CurveStyle_LINES
834     {
835         //smooth lines
836         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_POINTS_XVALUES ) );
837         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_LINE_P_XVALUES_SMOOTH ) );
838         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_LINE_O_XVALUES_SMOOTH ) );
839         rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_LINE3D_XVALUES_SMOOTH ) );
840     }
841 
842     rSubTypeList.SetItemText( 1, String( SchResId( STR_POINTS_ONLY )) );
843     rSubTypeList.SetItemText( 2, String( SchResId( STR_POINTS_AND_LINES )) );
844     rSubTypeList.SetItemText( 3, String( SchResId( STR_LINES_ONLY )) );
845     rSubTypeList.SetItemText( 4, String( SchResId( STR_LINES_3D )) );
846 }
847 bool XYChartDialogController::shouldShow_SplineControl() const
848 {
849     return true;
850 }
851 bool XYChartDialogController::shouldShow_SortByXValuesResourceGroup() const
852 {
853     return true;
854 }
855 void XYChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
856 {
857     rParameter.eStackMode=GlobalStackMode_NONE;
858     rParameter.b3DLook = false;
859 
860     switch( rParameter.nSubTypeIndex )
861     {
862         case 2:
863             rParameter.bSymbols = true;
864             rParameter.bLines = true;
865             break;
866         case 3:
867             rParameter.bSymbols = false;
868             rParameter.bLines = true;
869             break;
870         case 4:
871             rParameter.bSymbols = false;
872             rParameter.bLines = true;
873             rParameter.b3DLook = true;
874             rParameter.eStackMode=GlobalStackMode_STACK_Z;
875             break;
876         default:
877             rParameter.bSymbols = true;
878             rParameter.bLines = false;
879             break;
880     }
881 }
882 //--------------------------------------------------------------------------
883 AreaChartDialogController::AreaChartDialogController()
884 {
885 }
886 AreaChartDialogController::~AreaChartDialogController()
887 {
888 }
889 String AreaChartDialogController::getName()
890 {
891     return String( SchResId( STR_TYPE_AREA ));
892 }
893 Image AreaChartDialogController::getImage( bool bIsHighContrast )
894 {
895     return SELECT_IMAGE( IMG_TYPE_AREA );
896 }
897 bool AreaChartDialogController::shouldShow_3DLookControl() const
898 {
899     return true;
900 }
901 const tTemplateServiceChartTypeParameterMap& AreaChartDialogController::getTemplateMap() const
902 {
903     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
904     tTemplateServiceChartTypeParameterMap
905     ( C2U( "com.sun.star.chart2.template.Area" ),                     ChartTypeParameter(1,false,false,GlobalStackMode_NONE) )
906     ( C2U( "com.sun.star.chart2.template.ThreeDArea" ),               ChartTypeParameter(1,false,true,GlobalStackMode_STACK_Z) )
907     ( C2U( "com.sun.star.chart2.template.StackedArea" ),              ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y) )
908     ( C2U( "com.sun.star.chart2.template.StackedThreeDArea" ),        ChartTypeParameter(2,false,true,GlobalStackMode_STACK_Y) )
909     ( C2U( "com.sun.star.chart2.template.PercentStackedArea" ),       ChartTypeParameter(3,false,false,GlobalStackMode_STACK_Y_PERCENT) )
910     ( C2U( "com.sun.star.chart2.template.PercentStackedThreeDArea" ), ChartTypeParameter(3,false,true,GlobalStackMode_STACK_Y_PERCENT) )
911     ;
912     return m_aTemplateMap;
913 }
914 void AreaChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& rParameter )
915 {
916     rSubTypeList.Clear();
917 
918     if( rParameter.b3DLook )
919     {
920         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_AREAS_3D ) );
921         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_AREAS_3D_1 ) );
922         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_AREAS_3D_2 ) );
923     }
924     else
925     {
926         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_AREAS_2D_1 ) );
927         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_AREAS_2D ) );
928         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_AREAS_2D_3 ) );
929     }
930 
931     rSubTypeList.SetItemText( 1, String( SchResId( rParameter.b3DLook ? STR_DEEP : STR_NORMAL )) );
932     rSubTypeList.SetItemText( 2, String( SchResId( STR_STACKED )) );
933     rSubTypeList.SetItemText( 3, String( SchResId( STR_PERCENT )) );
934 }
935 void AreaChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
936 {
937     rParameter.eCurveStyle = CurveStyle_LINES;
938 
939     if( rParameter.nSubTypeIndex>3 )
940         rParameter.nSubTypeIndex = 1;
941     switch( rParameter.nSubTypeIndex )
942     {
943         case 2:
944             rParameter.eStackMode=GlobalStackMode_STACK_Y;
945             break;
946         case 3:
947             rParameter.eStackMode=GlobalStackMode_STACK_Y_PERCENT;
948             break;
949         default:
950             if( rParameter.b3DLook )
951                 rParameter.eStackMode=GlobalStackMode_STACK_Z;
952             else
953                 rParameter.eStackMode=GlobalStackMode_NONE;
954             break;
955     }
956 }
957 void AreaChartDialogController::adjustParameterToMainType( ChartTypeParameter& rParameter )
958 {
959     if( rParameter.b3DLook && rParameter.eStackMode == GlobalStackMode_NONE )
960         rParameter.eStackMode = GlobalStackMode_STACK_Z;
961 
962     ChartTypeDialogController::adjustParameterToMainType( rParameter );
963 }
964 //--------------------------------------------------------------------------
965 NetChartDialogController::NetChartDialogController()
966 {
967     bSupports3D = false;
968 }
969 NetChartDialogController::~NetChartDialogController()
970 {
971 }
972 String NetChartDialogController::getName()
973 {
974     return String( SchResId( STR_TYPE_NET ));
975 }
976 Image NetChartDialogController::getImage( bool bIsHighContrast )
977 {
978     return SELECT_IMAGE( IMG_TYPE_NET );
979 }
980 bool NetChartDialogController::shouldShow_StackingControl() const
981 {
982     return true;
983 }
984 const tTemplateServiceChartTypeParameterMap& NetChartDialogController::getTemplateMap() const
985 {
986     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
987     tTemplateServiceChartTypeParameterMap
988     //@todo need templates with symbols only
989     ( C2U( "com.sun.star.chart2.template.NetSymbol" ),              ChartTypeParameter(1,false,false,GlobalStackMode_NONE,true,false) )
990     ( C2U( "com.sun.star.chart2.template.StackedNetSymbol" ),       ChartTypeParameter(1,false,false,GlobalStackMode_STACK_Y,true,false) )
991     ( C2U( "com.sun.star.chart2.template.PercentStackedNetSymbol" ),ChartTypeParameter(1,false,false,GlobalStackMode_STACK_Y_PERCENT,true,false) )
992 
993     ( C2U( "com.sun.star.chart2.template.Net" ),                    ChartTypeParameter(2,false,false,GlobalStackMode_NONE,true,true) )
994     ( C2U( "com.sun.star.chart2.template.StackedNet" ),             ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y,true,true) )
995     ( C2U( "com.sun.star.chart2.template.PercentStackedNet" ),      ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y_PERCENT,true,true) )
996 
997     ( C2U( "com.sun.star.chart2.template.NetLine" ),                ChartTypeParameter(3,false,false,GlobalStackMode_NONE,false,true) )
998     ( C2U( "com.sun.star.chart2.template.StackedNetLine" ),         ChartTypeParameter(3,false,false,GlobalStackMode_STACK_Y,false,true) )
999     ( C2U( "com.sun.star.chart2.template.PercentStackedNetLine" ),  ChartTypeParameter(3,false,false,GlobalStackMode_STACK_Y_PERCENT,false,true) )
1000 
1001     ( C2U( "com.sun.star.chart2.template.FilledNet" ),            ChartTypeParameter(4,false,false,GlobalStackMode_NONE,false,false) )
1002     ( C2U( "com.sun.star.chart2.template.StackedFilledNet" ),     ChartTypeParameter(4,false,false,GlobalStackMode_STACK_Y,false,false) )
1003     ( C2U( "com.sun.star.chart2.template.PercentStackedFilledNet" ),ChartTypeParameter(4,false,false,GlobalStackMode_STACK_Y_PERCENT,false,false) )
1004     ;
1005     return m_aTemplateMap;
1006 }
1007 void NetChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& rParameter )
1008 {
1009     rSubTypeList.Clear();
1010 
1011     if( GlobalStackMode_NONE == rParameter.eStackMode )
1012     {
1013         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_NET_SYMB ) );
1014         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_NET_LINESYMB ) );
1015         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_NET ) );
1016         rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_NET_FILL ) );
1017     }
1018     else
1019     {
1020         rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_NET_SYMB_STACK ) );
1021         rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_NET_LINESYMB_STACK ) );
1022         rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_NET_STACK ) );
1023         rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_NET_FILL_STACK ) );
1024     }
1025 
1026     rSubTypeList.SetItemText( 1, String( SchResId( STR_POINTS_ONLY )) );
1027     rSubTypeList.SetItemText( 2, String( SchResId( STR_POINTS_AND_LINES )) );
1028     rSubTypeList.SetItemText( 3, String( SchResId( STR_LINES_ONLY )) );
1029     rSubTypeList.SetItemText( 4, String( SchResId( STR_FILLED )) );
1030 }
1031 void NetChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
1032 {
1033     rParameter.b3DLook = false;
1034     if(rParameter.eStackMode==GlobalStackMode_STACK_Z)
1035         rParameter.eStackMode = GlobalStackMode_NONE;
1036 
1037     switch( rParameter.nSubTypeIndex )
1038     {
1039         case 2:
1040             rParameter.bSymbols = true;
1041             rParameter.bLines = true;
1042             break;
1043         case 3:
1044             rParameter.bSymbols = false;
1045             rParameter.bLines = true;
1046             break;
1047         case 4:
1048             rParameter.bSymbols = false;
1049             rParameter.bLines = false;
1050             break;
1051         default:
1052             rParameter.bSymbols = true;
1053             rParameter.bLines = false;
1054             break;
1055     }
1056 }
1057 //--------------------------------------------------------------------------
1058 StockChartDialogController::StockChartDialogController()
1059 {
1060     bSupports3D = false;
1061 }
1062 StockChartDialogController::~StockChartDialogController()
1063 {
1064 }
1065 String StockChartDialogController::getName()
1066 {
1067     return String( SchResId( STR_TYPE_STOCK ));
1068 }
1069 Image StockChartDialogController::getImage( bool bIsHighContrast )
1070 {
1071     return SELECT_IMAGE( IMG_TYPE_STOCK );
1072 }
1073 const tTemplateServiceChartTypeParameterMap& StockChartDialogController::getTemplateMap() const
1074 {
1075     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
1076     tTemplateServiceChartTypeParameterMap
1077     ( C2U( "com.sun.star.chart2.template.StockLowHighClose" ),          ChartTypeParameter(1) )
1078     ( C2U( "com.sun.star.chart2.template.StockOpenLowHighClose" ),      ChartTypeParameter(2) )
1079     ( C2U( "com.sun.star.chart2.template.StockVolumeLowHighClose" ),    ChartTypeParameter(3) )
1080     ( C2U( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ),ChartTypeParameter(4) )
1081     ;
1082     return m_aTemplateMap;
1083 }
1084 void StockChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& /*rParameter*/ )
1085 {
1086     rSubTypeList.Clear();
1087     rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_STOCK_1 ) );
1088     rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_STOCK_2 ) );
1089     rSubTypeList.InsertItem( 3, SELECT_BITMAP( BMP_STOCK_3 ) );
1090     rSubTypeList.InsertItem( 4, SELECT_BITMAP( BMP_STOCK_4 ) );
1091 
1092     rSubTypeList.SetItemText( 1, String( SchResId( STR_STOCK_1 )) );
1093     rSubTypeList.SetItemText( 2, String( SchResId( STR_STOCK_2 )) );
1094     rSubTypeList.SetItemText( 3, String( SchResId( STR_STOCK_3 )) );
1095     rSubTypeList.SetItemText( 4, String( SchResId( STR_STOCK_4 )) );
1096 }
1097 void StockChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
1098 {
1099     rParameter.b3DLook = false;
1100     rParameter.eStackMode = GlobalStackMode_NONE;
1101 }
1102 //--------------------------------------------------------------------------
1103 CombiColumnLineChartDialogController::CombiColumnLineChartDialogController()
1104                     : m_pFT_NumberOfLines(0)
1105                     , m_pMF_NumberOfLines(0)
1106 {
1107     bSupports3D = false;
1108 }
1109 CombiColumnLineChartDialogController::~CombiColumnLineChartDialogController()
1110 {
1111     if(m_pFT_NumberOfLines)
1112         delete m_pFT_NumberOfLines;
1113     if(m_pMF_NumberOfLines)
1114         delete m_pMF_NumberOfLines;
1115 }
1116 String CombiColumnLineChartDialogController::getName()
1117 {
1118     return String( SchResId( STR_TYPE_COMBI_COLUMN_LINE ));
1119 }
1120 Image CombiColumnLineChartDialogController::getImage( bool bIsHighContrast )
1121 {
1122     return SELECT_IMAGE( IMG_TYPE_COLUMN_LINE );
1123 }
1124 const tTemplateServiceChartTypeParameterMap& CombiColumnLineChartDialogController::getTemplateMap() const
1125 {
1126     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
1127     tTemplateServiceChartTypeParameterMap
1128     ( C2U( "com.sun.star.chart2.template.ColumnWithLine" ),             ChartTypeParameter(1) )
1129     ( C2U( "com.sun.star.chart2.template.StackedColumnWithLine" ),      ChartTypeParameter(2,false,false,GlobalStackMode_STACK_Y) )
1130     ;
1131     return m_aTemplateMap;
1132 }
1133 void CombiColumnLineChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& /*rParameter*/ )
1134 {
1135     rSubTypeList.Clear();
1136     rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_COLUMN_LINE ) );
1137     rSubTypeList.InsertItem( 2, SELECT_BITMAP( BMP_COLUMN_LINE_STACKED ) );
1138 
1139     rSubTypeList.SetItemText( 1, String( SchResId( STR_LINE_COLUMN )) );
1140     rSubTypeList.SetItemText( 2, String( SchResId( STR_LINE_STACKEDCOLUMN )) );
1141 }
1142 void CombiColumnLineChartDialogController::showExtraControls( Window* pParent, const Point& rPosition, const Size& rSize )
1143 {
1144     if(!m_pFT_NumberOfLines)
1145     {
1146         m_pFT_NumberOfLines = new FixedText(pParent,pParent->GetStyle());
1147         m_pFT_NumberOfLines->SetText( String( SchResId( STR_NUMBER_OF_LINES )) );
1148     }
1149     if(!m_pMF_NumberOfLines)
1150     {
1151         m_pMF_NumberOfLines = new MetricField(pParent,pParent->GetStyle() | WB_SPIN | WB_REPEAT | WB_BORDER );
1152         m_pMF_NumberOfLines->SetDefaultUnit( FUNIT_CUSTOM );
1153         m_pMF_NumberOfLines->SetUnit( FUNIT_CUSTOM );
1154         m_pMF_NumberOfLines->SetSpinSize(1);
1155         m_pMF_NumberOfLines->SetFirst( 1, FUNIT_CUSTOM );
1156         m_pMF_NumberOfLines->SetLast( 100, FUNIT_CUSTOM );
1157         m_pMF_NumberOfLines->SetMin( 1, FUNIT_CUSTOM );
1158         m_pMF_NumberOfLines->SetMax( 100, FUNIT_CUSTOM );
1159         m_pMF_NumberOfLines->SetHelpId( HID_SCH_NUM_OF_LINES );
1160 
1161         m_pMF_NumberOfLines->SetModifyHdl( LINK( this, CombiColumnLineChartDialogController, ChangeLineCountHdl ) );
1162     }
1163 
1164     Size aDistanceSize( pParent->LogicToPixel( Size(RSC_SP_CTRL_DESC_X,2), MapMode(MAP_APPFONT) ) );
1165     Size aMFSize( pParent->LogicToPixel( Size(20,RSC_CD_TEXTBOX_HEIGHT), MapMode(MAP_APPFONT) ) );
1166     m_pMF_NumberOfLines->SetSizePixel( aMFSize );
1167 
1168     Size aFTSize(m_pFT_NumberOfLines->CalcMinimumSize(rSize.Width()-aMFSize.Width()-aDistanceSize.Width()));
1169     m_pFT_NumberOfLines->SetSizePixel(aFTSize);
1170 
1171     m_pFT_NumberOfLines->SetPosPixel( Point( rPosition.X(), rPosition.Y()+aDistanceSize.Height()) );
1172     m_pMF_NumberOfLines->SetPosPixel( Point( rPosition.X()+aFTSize.Width()+aDistanceSize.Width(), rPosition.Y()) );
1173 
1174     m_pFT_NumberOfLines->Show();
1175     m_pMF_NumberOfLines->Show();
1176 	m_pMF_NumberOfLines->SetAccessibleName(m_pFT_NumberOfLines->GetText());
1177 	m_pMF_NumberOfLines->SetAccessibleRelationLabeledBy(m_pFT_NumberOfLines);
1178 }
1179 void CombiColumnLineChartDialogController::hideExtraControls() const
1180 {
1181     if(m_pFT_NumberOfLines)
1182         m_pFT_NumberOfLines->Hide();
1183     if(m_pMF_NumberOfLines)
1184         m_pMF_NumberOfLines->Hide();
1185 }
1186 void CombiColumnLineChartDialogController::fillExtraControls( const ChartTypeParameter& /*rParameter*/
1187                 , const uno::Reference< XChartDocument >& xChartModel
1188                 , const uno::Reference< beans::XPropertySet >& xTemplateProps ) const
1189 {
1190     if(!m_pMF_NumberOfLines)
1191         return;
1192 
1193     uno::Reference< frame::XModel > xModel( xChartModel, uno::UNO_QUERY );
1194 
1195     uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( xModel );
1196     if(!xDiagram.is())
1197         return;
1198 
1199     sal_Int32 nNumLines = 0;
1200 
1201     if(xTemplateProps.is())
1202     try
1203     {
1204         xTemplateProps->getPropertyValue( C2U("NumberOfLines") ) >>= nNumLines;
1205     }
1206     catch( uno::Exception & ex )
1207     {
1208         ASSERT_EXCEPTION( ex );
1209     }
1210     if( nNumLines < 0 )
1211         nNumLines = 0;
1212     m_pMF_NumberOfLines->SetValue( nNumLines );
1213 
1214     sal_Int32 nMaxLines = ChartModelHelper::getDataSeries( xModel ).size() - 1;
1215     if( nMaxLines < 0 )
1216         nMaxLines = 0;
1217     m_pMF_NumberOfLines->SetLast( nMaxLines );
1218     m_pMF_NumberOfLines->SetMax( nMaxLines );
1219 }
1220 void CombiColumnLineChartDialogController::setTemplateProperties( const uno::Reference< beans::XPropertySet >& xTemplateProps ) const throw (uno::RuntimeException)
1221 {
1222     if( xTemplateProps.is() )
1223     {
1224         sal_Int32 nNumLines = static_cast< sal_Int32 >( m_pMF_NumberOfLines->GetValue());
1225         xTemplateProps->setPropertyValue( C2U( "NumberOfLines" ), uno::makeAny(nNumLines) );
1226     }
1227 }
1228 
1229 IMPL_LINK( CombiColumnLineChartDialogController, ChangeLineCountHdl, void *, EMPTYARG )
1230 {
1231     if( m_pChangeListener )
1232         m_pChangeListener->stateChanged(this);
1233     return 0;
1234 }
1235 void CombiColumnLineChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
1236 {
1237     rParameter.b3DLook = false;
1238     if(rParameter.eStackMode==GlobalStackMode_STACK_Z)
1239         rParameter.eStackMode = GlobalStackMode_NONE;
1240 
1241     switch( rParameter.nSubTypeIndex )
1242     {
1243         case 2:
1244             rParameter.eStackMode=GlobalStackMode_STACK_Y;
1245             break;
1246         default:
1247             rParameter.eStackMode=GlobalStackMode_NONE;
1248             break;
1249     }
1250 }
1251 //--------------------------------------------------------------------------
1252 BubbleChartDialogController::BubbleChartDialogController()
1253 {
1254 }
1255 BubbleChartDialogController::~BubbleChartDialogController()
1256 {
1257 }
1258 String BubbleChartDialogController::getName()
1259 {
1260     return String( SchResId( STR_TYPE_BUBBLE ));
1261 }
1262 Image BubbleChartDialogController::getImage( bool bIsHighContrast )
1263 {
1264     return SELECT_IMAGE( IMG_TYPE_BUBBLE );
1265 }
1266 const tTemplateServiceChartTypeParameterMap& BubbleChartDialogController::getTemplateMap() const
1267 {
1268     static tTemplateServiceChartTypeParameterMap m_aTemplateMap =
1269     tTemplateServiceChartTypeParameterMap
1270         ( C2U( "com.sun.star.chart2.template.Bubble" ),          ChartTypeParameter(1,true) ) ;
1271     return m_aTemplateMap;
1272 }
1273 void BubbleChartDialogController::fillSubTypeList( ValueSet& rSubTypeList, bool bIsHighContrast, const ChartTypeParameter& /*rParameter*/ )
1274 {
1275     rSubTypeList.Clear();
1276     rSubTypeList.InsertItem( 1, SELECT_BITMAP( BMP_BUBBLE_1 ) );
1277 
1278     rSubTypeList.SetItemText( 1, String( SchResId( STR_BUBBLE_1 )) );
1279 }
1280 void BubbleChartDialogController::adjustParameterToSubType( ChartTypeParameter& rParameter )
1281 {
1282     rParameter.b3DLook = false;
1283     rParameter.eStackMode = GlobalStackMode_NONE;
1284 }
1285 //.............................................................................
1286 } //namespace chart
1287 //.............................................................................
1288