LCOV - code coverage report
Current view: top level - chart2/source/controller/dialogs - tp_ChartType.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 554 0.2 %
Date: 2015-06-13 12:38:46 Functions: 2 94 2.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "tp_ChartType.hxx"
      21             : #include "Strings.hrc"
      22             : #include "ResId.hxx"
      23             : #include "ChartModelHelper.hxx"
      24             : #include "DiagramHelper.hxx"
      25             : #include "res_BarGeometry.hxx"
      26             : #include "ControllerLockGuard.hxx"
      27             : #include "macros.hxx"
      28             : #include "GL3DBarChartDialogController.hxx"
      29             : #include <unonames.hxx>
      30             : 
      31             : #include <svtools/controldims.hrc>
      32             : #include <svtools/miscopt.hxx>
      33             : 
      34             : #include <vcl/layout.hxx>
      35             : #include <vcl/msgbox.hxx>
      36             : 
      37             : namespace chart
      38             : {
      39             : using namespace ::com::sun::star;
      40             : using namespace ::com::sun::star::chart2;
      41             : 
      42             : #define POS_3DSCHEME_SIMPLE    0
      43             : #define POS_3DSCHEME_REALISTIC 1
      44             : 
      45           0 : class Dim3DLookResourceGroup : public ChangingResource
      46             : {
      47             : public:
      48             :     explicit Dim3DLookResourceGroup(VclBuilderContainer* pWindow);
      49             : 
      50             :     void showControls( bool bShow );
      51             : 
      52             :     void fillControls( const ChartTypeParameter& rParameter );
      53             :     void fillParameter( ChartTypeParameter& rParameter );
      54             : 
      55             : private:
      56             :     DECL_LINK( Dim3DLookCheckHdl, void* );
      57             :     DECL_LINK( SelectSchemeHdl, void* );
      58             : 
      59             : private:
      60             :     VclPtr<CheckBox> m_pCB_3DLook;
      61             :     VclPtr<ListBox>  m_pLB_Scheme;
      62             : };
      63             : 
      64           0 : Dim3DLookResourceGroup::Dim3DLookResourceGroup(VclBuilderContainer* pWindow)
      65           0 :     : ChangingResource()
      66             : {
      67           0 :     pWindow->get(m_pCB_3DLook, "3dlook");
      68           0 :     pWindow->get(m_pLB_Scheme, "3dscheme");
      69             : 
      70           0 :     m_pCB_3DLook->SetToggleHdl( LINK( this, Dim3DLookResourceGroup, Dim3DLookCheckHdl ) );
      71           0 :     m_pLB_Scheme->SetSelectHdl( LINK( this, Dim3DLookResourceGroup, SelectSchemeHdl ) );
      72           0 : }
      73             : 
      74           0 : void Dim3DLookResourceGroup::showControls( bool bShow )
      75             : {
      76           0 :     m_pCB_3DLook->Show(bShow);
      77           0 :     m_pLB_Scheme->Show(bShow);
      78           0 : }
      79             : 
      80           0 : void Dim3DLookResourceGroup::fillControls( const ChartTypeParameter& rParameter )
      81             : {
      82           0 :     m_pCB_3DLook->Check(rParameter.b3DLook);
      83           0 :     m_pLB_Scheme->Enable(rParameter.b3DLook);
      84             : 
      85           0 :     if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Simple )
      86           0 :         m_pLB_Scheme->SelectEntryPos(POS_3DSCHEME_SIMPLE);
      87           0 :     else if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Realistic )
      88           0 :         m_pLB_Scheme->SelectEntryPos(POS_3DSCHEME_REALISTIC);
      89             :     else
      90           0 :         m_pLB_Scheme->SetNoSelection();
      91           0 : }
      92             : 
      93           0 : void Dim3DLookResourceGroup::fillParameter( ChartTypeParameter& rParameter )
      94             : {
      95           0 :     rParameter.b3DLook = m_pCB_3DLook->IsChecked();
      96           0 :     sal_uInt16 nPos = m_pLB_Scheme->GetSelectEntryPos();
      97           0 :     if( POS_3DSCHEME_SIMPLE == nPos )
      98           0 :         rParameter.eThreeDLookScheme = ThreeDLookScheme_Simple;
      99           0 :     else if( POS_3DSCHEME_REALISTIC == nPos )
     100           0 :         rParameter.eThreeDLookScheme = ThreeDLookScheme_Realistic;
     101             :     else
     102           0 :         rParameter.eThreeDLookScheme = ThreeDLookScheme_Unknown;
     103           0 : }
     104             : 
     105           0 : IMPL_LINK_NOARG(Dim3DLookResourceGroup, Dim3DLookCheckHdl)
     106             : {
     107           0 :     if(m_pChangeListener)
     108           0 :         m_pChangeListener->stateChanged(this);
     109           0 :     return 0;
     110             : }
     111             : 
     112           0 : IMPL_LINK_NOARG(Dim3DLookResourceGroup, SelectSchemeHdl)
     113             : {
     114           0 :     if(m_pChangeListener)
     115           0 :         m_pChangeListener->stateChanged(this);
     116           0 :     return 0;
     117             : }
     118             : 
     119           0 : class SortByXValuesResourceGroup : public ChangingResource
     120             : {
     121             : public:
     122             :     explicit SortByXValuesResourceGroup(VclBuilderContainer* pWindow);
     123             : 
     124             :     void showControls( bool bShow );
     125             : 
     126             :     void fillControls( const ChartTypeParameter& rParameter );
     127             :     void fillParameter( ChartTypeParameter& rParameter );
     128             : 
     129             : private:
     130             :     DECL_LINK( SortByXValuesCheckHdl, void* );
     131             : 
     132             : private:
     133             :     VclPtr<CheckBox> m_pCB_XValueSorting;
     134             : };
     135             : 
     136           0 : SortByXValuesResourceGroup::SortByXValuesResourceGroup(VclBuilderContainer* pWindow )
     137           0 :     : ChangingResource()
     138             : {
     139           0 :     pWindow->get(m_pCB_XValueSorting, "sort");
     140           0 :     m_pCB_XValueSorting->SetToggleHdl( LINK( this, SortByXValuesResourceGroup, SortByXValuesCheckHdl ) );
     141           0 : }
     142             : 
     143           0 : void SortByXValuesResourceGroup::showControls( bool bShow )
     144             : {
     145           0 :     m_pCB_XValueSorting->Show(bShow);
     146           0 : }
     147             : 
     148           0 : void SortByXValuesResourceGroup::fillControls( const ChartTypeParameter& rParameter )
     149             : {
     150           0 :     m_pCB_XValueSorting->Check( rParameter.bSortByXValues );
     151           0 : }
     152             : 
     153           0 : void SortByXValuesResourceGroup::fillParameter( ChartTypeParameter& rParameter )
     154             : {
     155           0 :     rParameter.bSortByXValues = m_pCB_XValueSorting->IsChecked();
     156           0 : }
     157             : 
     158           0 : IMPL_LINK_NOARG(SortByXValuesResourceGroup, SortByXValuesCheckHdl)
     159             : {
     160           0 :     if(m_pChangeListener)
     161           0 :         m_pChangeListener->stateChanged(this);
     162           0 :     return 0;
     163             : }
     164             : 
     165           0 : class StackingResourceGroup : public ChangingResource
     166             : {
     167             : public:
     168             :     explicit StackingResourceGroup(VclBuilderContainer* pWindow);
     169             : 
     170             :     void showControls( bool bShow, bool bShowDeepStacking );
     171             : 
     172             :     void fillControls( const ChartTypeParameter& rParameter );
     173             :     void fillParameter( ChartTypeParameter& rParameter );
     174             : 
     175             : private:
     176             :     DECL_LINK( StackingChangeHdl, RadioButton* );
     177             :     DECL_LINK( StackingEnableHdl, void* );
     178             : 
     179             : private:
     180             :     VclPtr<CheckBox>    m_pCB_Stacked;
     181             :     VclPtr<RadioButton> m_pRB_Stack_Y;
     182             :     VclPtr<RadioButton> m_pRB_Stack_Y_Percent;
     183             :     VclPtr<RadioButton> m_pRB_Stack_Z;
     184             : 
     185             :     bool m_bShowDeepStacking;
     186             : };
     187             : 
     188           0 : StackingResourceGroup::StackingResourceGroup(VclBuilderContainer* pWindow)
     189             :         : ChangingResource()
     190           0 :         , m_bShowDeepStacking(true)
     191             : {
     192           0 :     pWindow->get(m_pCB_Stacked, "stack");
     193           0 :     pWindow->get(m_pRB_Stack_Y, "ontop");
     194           0 :     pWindow->get(m_pRB_Stack_Y_Percent, "percent");
     195           0 :     pWindow->get(m_pRB_Stack_Z, "deep");
     196             : 
     197           0 :     m_pCB_Stacked->SetToggleHdl( LINK( this, StackingResourceGroup, StackingEnableHdl ) );
     198           0 :     m_pRB_Stack_Y->SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
     199           0 :     m_pRB_Stack_Y_Percent->SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
     200           0 :     m_pRB_Stack_Z->SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
     201           0 : }
     202             : 
     203           0 : void StackingResourceGroup::showControls( bool bShow, bool bShowDeepStacking )
     204             : {
     205           0 :     m_bShowDeepStacking = bShowDeepStacking;
     206           0 :     m_pCB_Stacked->Show(bShow);
     207           0 :     m_pRB_Stack_Y->Show(bShow);
     208           0 :     m_pRB_Stack_Y_Percent->Show(bShow);
     209           0 :     m_pRB_Stack_Z->Show(bShow&&bShowDeepStacking);
     210           0 : }
     211             : 
     212           0 : void StackingResourceGroup::fillControls( const ChartTypeParameter& rParameter )
     213             : {
     214           0 :     m_pCB_Stacked->Check( rParameter.eStackMode!=GlobalStackMode_NONE
     215           0 :         && rParameter.eStackMode!=GlobalStackMode_STACK_Z ); //todo remove this condition if z stacking radio button is really used
     216           0 :     switch( rParameter.eStackMode )
     217             :     {
     218             :         case GlobalStackMode_STACK_Y:
     219           0 :             m_pRB_Stack_Y->Check();
     220           0 :             break;
     221             :         case GlobalStackMode_STACK_Y_PERCENT:
     222           0 :             m_pRB_Stack_Y_Percent->Check();
     223           0 :             break;
     224             :         case GlobalStackMode_STACK_Z:
     225             :             //todo uncomment this condition if z stacking radio button is really used
     226             :             /*
     227             :             if( rParameter.b3DLook )
     228             :                 m_pRB_Stack_Z->Check();
     229             :             else
     230             :             */
     231           0 :                 m_pRB_Stack_Y->Check();
     232           0 :             break;
     233             :         default:
     234           0 :             m_pRB_Stack_Y->Check();
     235           0 :             break;
     236             :     }
     237             :     //dis/enabling
     238           0 :     m_pCB_Stacked->Enable( !rParameter.bXAxisWithValues );
     239           0 :     m_pRB_Stack_Y->Enable( m_pCB_Stacked->IsChecked() && !rParameter.bXAxisWithValues );
     240           0 :     m_pRB_Stack_Y_Percent->Enable( m_pCB_Stacked->IsChecked() && !rParameter.bXAxisWithValues );
     241           0 :     m_pRB_Stack_Z->Enable( m_pCB_Stacked->IsChecked() && rParameter.b3DLook );
     242           0 : }
     243           0 : void StackingResourceGroup::fillParameter( ChartTypeParameter& rParameter )
     244             : {
     245           0 :     if(!m_pCB_Stacked->IsChecked())
     246           0 :         rParameter.eStackMode = GlobalStackMode_NONE;
     247           0 :     else if(m_pRB_Stack_Y->IsChecked())
     248           0 :         rParameter.eStackMode = GlobalStackMode_STACK_Y;
     249           0 :     else if(m_pRB_Stack_Y_Percent->IsChecked())
     250           0 :         rParameter.eStackMode = GlobalStackMode_STACK_Y_PERCENT;
     251           0 :     else if(m_pRB_Stack_Z->IsChecked())
     252           0 :         rParameter.eStackMode = GlobalStackMode_STACK_Z;
     253           0 : }
     254           0 : IMPL_LINK( StackingResourceGroup, StackingChangeHdl, RadioButton*, pRadio )
     255             : {
     256             :     //for each radio click there are coming two change events
     257             :     //first uncheck of previous button -> ignore that call
     258             :     //the second call gives the check of the new button
     259           0 :     if( m_pChangeListener && pRadio && pRadio->IsChecked() )
     260           0 :         m_pChangeListener->stateChanged(this);
     261           0 :     return 0;
     262             : }
     263           0 : IMPL_LINK_NOARG(StackingResourceGroup, StackingEnableHdl)
     264             : {
     265           0 :     if( m_pChangeListener )
     266           0 :         m_pChangeListener->stateChanged(this);
     267           0 :     return 0;
     268             : }
     269             : 
     270           0 : class GL3DResourceGroup : public ChangingResource
     271             : {
     272             : public:
     273             :     explicit GL3DResourceGroup( VclBuilderContainer* pWindow );
     274             : 
     275             :     void showControls( bool bShow );
     276             :     void fillControls( const ChartTypeParameter& rParam );
     277             :     void fillParameter( ChartTypeParameter& rParam );
     278             : 
     279             : private:
     280             :     DECL_LINK( SettingChangedHdl, void* );
     281             : private:
     282             :     VclPtr<CheckBox> m_pCB_RoundedEdge;
     283             : };
     284             : 
     285           0 : GL3DResourceGroup::GL3DResourceGroup( VclBuilderContainer* pWindow )
     286             : {
     287           0 :     pWindow->get(m_pCB_RoundedEdge, "rounded-edge");
     288           0 :     m_pCB_RoundedEdge->SetToggleHdl( LINK(this, GL3DResourceGroup, SettingChangedHdl) );
     289           0 : }
     290             : 
     291           0 : void GL3DResourceGroup::showControls( bool bShow )
     292             : {
     293           0 :     m_pCB_RoundedEdge->Show(bShow);
     294           0 : }
     295             : 
     296           0 : void GL3DResourceGroup::fillControls( const ChartTypeParameter& rParam )
     297             : {
     298           0 :     m_pCB_RoundedEdge->Check(rParam.mbRoundedEdge);
     299           0 : }
     300             : 
     301           0 : void GL3DResourceGroup::fillParameter( ChartTypeParameter& rParam )
     302             : {
     303           0 :     rParam.mbRoundedEdge = m_pCB_RoundedEdge->IsChecked();
     304           0 : }
     305             : 
     306           0 : IMPL_LINK_NOARG( GL3DResourceGroup, SettingChangedHdl )
     307             : {
     308           0 :     if (m_pChangeListener)
     309           0 :         m_pChangeListener->stateChanged(this);
     310           0 :     return 0;
     311             : }
     312             : 
     313             : class SplinePropertiesDialog : public ModalDialog
     314             : {
     315             : public:
     316             :     explicit SplinePropertiesDialog( vcl::Window* pParent );
     317           0 :     virtual ~SplinePropertiesDialog() { disposeOnce(); }
     318             :     virtual void dispose() SAL_OVERRIDE;
     319             : 
     320             :     void fillControls( const ChartTypeParameter& rParameter );
     321             :     void fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines );
     322             : 
     323             :     virtual void StateChanged( StateChangedType nType ) SAL_OVERRIDE;
     324             : 
     325             : private:
     326             :     DECL_LINK( SplineTypeListBoxHdl, void* );
     327             : 
     328             : private:
     329             :     VclPtr<ListBox>      m_pLB_Spline_Type;
     330             : 
     331             :     VclPtr<NumericField> m_pMF_SplineResolution;
     332             :     VclPtr<FixedText>    m_pFT_SplineOrder;
     333             :     VclPtr<NumericField> m_pMF_SplineOrder;
     334             : };
     335             : 
     336             : const sal_uInt16 CUBIC_SPLINE_POS = 0;
     337             : const sal_uInt16 B_SPLINE_POS = 1;
     338             : 
     339           0 : SplinePropertiesDialog::SplinePropertiesDialog( vcl::Window* pParent )
     340           0 :         : ModalDialog( pParent, "SmoothLinesDialog", "modules/schart/ui/smoothlinesdlg.ui")
     341             : {
     342           0 :     get(m_pLB_Spline_Type, "SplineTypeComboBox");
     343           0 :     get(m_pMF_SplineResolution, "ResolutionSpinbutton");
     344           0 :     get(m_pFT_SplineOrder, "PolynomialsLabel");
     345           0 :     get(m_pMF_SplineOrder, "PolynomialsSpinButton");
     346             : 
     347           0 :     this->SetText( SCH_RESSTR( STR_DLG_SMOOTH_LINE_PROPERTIES ) );
     348             : 
     349           0 :     m_pLB_Spline_Type->SetSelectHdl( LINK (this, SplinePropertiesDialog, SplineTypeListBoxHdl ) );
     350           0 : }
     351             : 
     352           0 : void SplinePropertiesDialog::dispose()
     353             : {
     354           0 :     m_pLB_Spline_Type.clear();
     355           0 :     m_pMF_SplineResolution.clear();
     356           0 :     m_pFT_SplineOrder.clear();
     357           0 :     m_pMF_SplineOrder.clear();
     358           0 :     ModalDialog::dispose();
     359           0 : }
     360             : 
     361           0 : void SplinePropertiesDialog::StateChanged( StateChangedType nType )
     362             : {
     363           0 :     Dialog::StateChanged( nType );
     364           0 : }
     365             : 
     366           0 : void SplinePropertiesDialog::fillControls( const ChartTypeParameter& rParameter )
     367             : {
     368           0 :     switch(rParameter.eCurveStyle)
     369             :     {
     370             :     case CurveStyle_CUBIC_SPLINES:
     371           0 :         m_pLB_Spline_Type->SelectEntryPos(CUBIC_SPLINE_POS);
     372           0 :         break;
     373             :     case CurveStyle_B_SPLINES:
     374           0 :         m_pLB_Spline_Type->SelectEntryPos(B_SPLINE_POS);
     375           0 :         break;
     376             :     default:
     377           0 :         m_pLB_Spline_Type->SelectEntryPos(CUBIC_SPLINE_POS);
     378           0 :         break;
     379             :     }
     380           0 :     m_pMF_SplineOrder->SetValue( rParameter.nSplineOrder );
     381           0 :     m_pMF_SplineResolution->SetValue( rParameter.nCurveResolution );
     382             : 
     383             :     //dis/enabling
     384           0 :     m_pFT_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
     385           0 :     m_pMF_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
     386           0 : }
     387           0 : void SplinePropertiesDialog::fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines )
     388             : {
     389           0 :     if(!bSmoothLines)
     390           0 :         rParameter.eCurveStyle=CurveStyle_LINES;
     391           0 :     else if(CUBIC_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos())
     392           0 :         rParameter.eCurveStyle=CurveStyle_CUBIC_SPLINES;
     393           0 :     else if(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos())
     394           0 :         rParameter.eCurveStyle=CurveStyle_B_SPLINES;
     395             : 
     396           0 :     rParameter.nCurveResolution = static_cast< sal_Int32 >( m_pMF_SplineResolution->GetValue());
     397           0 :     rParameter.nSplineOrder = static_cast< sal_Int32 >( m_pMF_SplineOrder->GetValue());
     398           0 : }
     399           0 : IMPL_LINK_NOARG(SplinePropertiesDialog, SplineTypeListBoxHdl)
     400             : {
     401           0 :     m_pFT_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
     402           0 :     m_pMF_SplineOrder->Enable(B_SPLINE_POS == m_pLB_Spline_Type->GetSelectEntryPos());
     403           0 :     return 0;
     404             : }
     405             : 
     406             : class SteppedPropertiesDialog : public ModalDialog
     407             : {
     408             : public:
     409             :     explicit SteppedPropertiesDialog( vcl::Window* pParent );
     410           0 :     virtual ~SteppedPropertiesDialog() { disposeOnce(); }
     411             :     virtual void dispose() SAL_OVERRIDE;
     412             : 
     413             :     void fillControls( const ChartTypeParameter& rParameter );
     414             :     void fillParameter( ChartTypeParameter& rParameter, bool bSteppedLines );
     415             : 
     416             :     virtual void StateChanged( StateChangedType nType ) SAL_OVERRIDE;
     417             : 
     418             : private:
     419             : 
     420             : private:
     421             :     VclPtr<RadioButton> m_pRB_Start;
     422             :     VclPtr<RadioButton> m_pRB_End;
     423             :     VclPtr<RadioButton> m_pRB_CenterX;
     424             :     VclPtr<RadioButton> m_pRB_CenterY;
     425             : };
     426             : 
     427           0 : SteppedPropertiesDialog::SteppedPropertiesDialog( vcl::Window* pParent )
     428           0 :     : ModalDialog( pParent, "SteppedLinesDialog", "modules/schart/ui/steppedlinesdlg.ui")
     429             : {
     430           0 :     get(m_pRB_Start, "step_start_rb");
     431           0 :     get(m_pRB_End, "step_end_rb");
     432           0 :     get(m_pRB_CenterX, "step_center_x_rb");
     433           0 :     get(m_pRB_CenterY, "step_center_y_rb");
     434             : 
     435           0 :     SetText(SCH_RESSTR(STR_DLG_STEPPED_LINE_PROPERTIES));
     436           0 : }
     437             : 
     438           0 : void SteppedPropertiesDialog::dispose()
     439             : {
     440           0 :     m_pRB_Start.clear();
     441           0 :     m_pRB_End.clear();
     442           0 :     m_pRB_CenterX.clear();
     443           0 :     m_pRB_CenterY.clear();
     444           0 :     ModalDialog::dispose();
     445           0 : }
     446             : 
     447           0 : void SteppedPropertiesDialog::StateChanged( StateChangedType nType )
     448             : {
     449           0 :     Dialog::StateChanged( nType );
     450           0 : }
     451             : 
     452           0 : void SteppedPropertiesDialog::fillControls( const ChartTypeParameter& rParameter )
     453             : {
     454           0 :     switch(rParameter.eCurveStyle)
     455             :     {
     456             :         case CurveStyle_STEP_END:
     457           0 :             m_pRB_End->Check();
     458           0 :             break;
     459             :         case CurveStyle_STEP_CENTER_X:
     460           0 :             m_pRB_CenterX->Check();
     461           0 :             break;
     462             :         case CurveStyle_STEP_CENTER_Y:
     463           0 :             m_pRB_CenterY->Check();
     464           0 :             break;
     465             :         default: // includes CurveStyle_STEP_START
     466           0 :             m_pRB_Start->Check();
     467           0 :             break;
     468             :     }
     469           0 : }
     470           0 : void SteppedPropertiesDialog::fillParameter( ChartTypeParameter& rParameter, bool bSteppedLines )
     471             : {
     472           0 :     if (!bSteppedLines)
     473           0 :         rParameter.eCurveStyle=CurveStyle_LINES;
     474           0 :     else if(m_pRB_CenterY->IsChecked())
     475           0 :         rParameter.eCurveStyle=CurveStyle_STEP_CENTER_Y;
     476           0 :     else if(m_pRB_Start->IsChecked())
     477           0 :         rParameter.eCurveStyle=CurveStyle_STEP_START;
     478           0 :     else if(m_pRB_End->IsChecked())
     479           0 :         rParameter.eCurveStyle=CurveStyle_STEP_END;
     480           0 :     else if(m_pRB_CenterX->IsChecked())
     481           0 :         rParameter.eCurveStyle=CurveStyle_STEP_CENTER_X;
     482           0 : }
     483             : 
     484             : #define POS_LINETYPE_STRAIGHT    0
     485             : #define POS_LINETYPE_SMOOTH      1
     486             : #define POS_LINETYPE_STEPPED     2
     487             : 
     488           0 : class SplineResourceGroup : public ChangingResource
     489             : {
     490             : public:
     491             :     explicit SplineResourceGroup(VclBuilderContainer* pWindow);
     492             : 
     493             :     void showControls( bool bShow );
     494             : 
     495             :     void fillControls( const ChartTypeParameter& rParameter );
     496             :     void fillParameter( ChartTypeParameter& rParameter );
     497             : 
     498             : private:
     499             :     DECL_LINK( LineTypeChangeHdl, void* );
     500             :     DECL_LINK( SplineDetailsDialogHdl, void* );
     501             :     DECL_LINK( SteppedDetailsDialogHdl, void* );
     502             :     SplinePropertiesDialog& getSplinePropertiesDialog();
     503             :     SteppedPropertiesDialog& getSteppedPropertiesDialog();
     504             : 
     505             : private:
     506             :     VclPtr<FixedText>  m_pFT_LineType;
     507             :     VclPtr<ListBox>    m_pLB_LineType;
     508             :     VclPtr<PushButton> m_pPB_DetailsDialog;
     509             :     VclPtr< SplinePropertiesDialog > m_pSplinePropertiesDialog;
     510             :     VclPtr< SteppedPropertiesDialog > m_pSteppedPropertiesDialog;
     511             : };
     512             : 
     513           0 : SplineResourceGroup::SplineResourceGroup(VclBuilderContainer* pWindow)
     514           0 :     : ChangingResource()
     515             : {
     516           0 :     pWindow->get(m_pFT_LineType, "linetypeft");
     517           0 :     pWindow->get(m_pLB_LineType, "linetype");
     518           0 :     pWindow->get(m_pPB_DetailsDialog, "properties");
     519             : 
     520           0 :     m_pLB_LineType->SetSelectHdl( LINK( this, SplineResourceGroup, LineTypeChangeHdl ) );
     521           0 : }
     522             : 
     523           0 : SplinePropertiesDialog& SplineResourceGroup::getSplinePropertiesDialog()
     524             : {
     525           0 :     if( !m_pSplinePropertiesDialog.get() )
     526           0 :         m_pSplinePropertiesDialog.reset( VclPtr<SplinePropertiesDialog>::Create( m_pPB_DetailsDialog->GetParentDialog() ) );
     527           0 :     return *m_pSplinePropertiesDialog;
     528             : }
     529             : 
     530           0 : SteppedPropertiesDialog& SplineResourceGroup::getSteppedPropertiesDialog()
     531             : {
     532           0 :     if( !m_pSteppedPropertiesDialog.get() )
     533             :     {
     534           0 :         m_pSteppedPropertiesDialog.reset( VclPtr<SteppedPropertiesDialog>::Create( m_pPB_DetailsDialog->GetParentDialog() ) );
     535             :     }
     536           0 :     return *m_pSteppedPropertiesDialog;
     537             : }
     538             : 
     539           0 : void SplineResourceGroup::showControls( bool bShow )
     540             : {
     541           0 :     m_pFT_LineType->Show(bShow);
     542           0 :     m_pLB_LineType->Show(bShow);
     543           0 :     m_pPB_DetailsDialog->Show(bShow);
     544           0 : }
     545             : 
     546           0 : void SplineResourceGroup::fillControls( const ChartTypeParameter& rParameter )
     547             : {
     548           0 :     switch (rParameter.eCurveStyle)
     549             :     {
     550             :         case CurveStyle_LINES:
     551           0 :             m_pLB_LineType->SelectEntryPos(POS_LINETYPE_STRAIGHT);
     552           0 :             m_pPB_DetailsDialog->Enable(false);
     553           0 :             break;
     554             :         case CurveStyle_CUBIC_SPLINES:
     555             :         case CurveStyle_B_SPLINES:
     556           0 :             m_pLB_LineType->SelectEntryPos(POS_LINETYPE_SMOOTH);
     557           0 :             m_pPB_DetailsDialog->Enable(true);
     558           0 :             m_pPB_DetailsDialog->SetClickHdl( LINK( this, SplineResourceGroup, SplineDetailsDialogHdl ) );
     559           0 :             m_pPB_DetailsDialog->SetQuickHelpText( SCH_RESSTR(STR_DLG_SMOOTH_LINE_PROPERTIES) );
     560           0 :             getSplinePropertiesDialog().fillControls( rParameter );
     561           0 :             break;
     562             :         case CurveStyle_STEP_START:
     563             :         case CurveStyle_STEP_END:
     564             :         case CurveStyle_STEP_CENTER_X:
     565             :         case CurveStyle_STEP_CENTER_Y:
     566           0 :             m_pLB_LineType->SelectEntryPos(POS_LINETYPE_STEPPED);
     567           0 :             m_pPB_DetailsDialog->Enable(true);
     568           0 :             m_pPB_DetailsDialog->SetClickHdl( LINK( this, SplineResourceGroup, SteppedDetailsDialogHdl ) );
     569           0 :             m_pPB_DetailsDialog->SetQuickHelpText( SCH_RESSTR(STR_DLG_STEPPED_LINE_PROPERTIES) );
     570           0 :             getSteppedPropertiesDialog().fillControls( rParameter );
     571           0 :             break;
     572             :         default:
     573           0 :             m_pLB_LineType->SetNoSelection();
     574           0 :             m_pPB_DetailsDialog->Enable(false);
     575             :     }
     576           0 : }
     577           0 : void SplineResourceGroup::fillParameter( ChartTypeParameter& rParameter )
     578             : {
     579           0 :     switch (m_pLB_LineType->GetSelectEntryPos())
     580             :     {
     581             :         case POS_LINETYPE_SMOOTH:
     582           0 :             getSplinePropertiesDialog().fillParameter( rParameter, true );
     583           0 :             break;
     584             :         case POS_LINETYPE_STEPPED:
     585           0 :             getSteppedPropertiesDialog().fillParameter( rParameter, true );
     586           0 :             break;
     587             :         default: // includes POS_LINETYPE_STRAIGHT
     588           0 :             rParameter.eCurveStyle = CurveStyle_LINES;
     589           0 :             break;
     590             :     }
     591           0 : }
     592           0 : IMPL_LINK_NOARG(SplineResourceGroup, LineTypeChangeHdl)
     593             : {
     594           0 :     if( m_pChangeListener )
     595           0 :         m_pChangeListener->stateChanged(this);
     596           0 :     return 0;
     597             : }
     598           0 : IMPL_LINK_NOARG(SplineResourceGroup, SplineDetailsDialogHdl)
     599             : {
     600             : 
     601           0 :     ChartTypeParameter aOldParameter;
     602           0 :     getSplinePropertiesDialog().fillParameter( aOldParameter, POS_LINETYPE_SMOOTH == m_pLB_LineType->GetSelectEntryPos() );
     603             : 
     604           0 :     sal_uInt16 iOldLineTypePos = m_pLB_LineType->GetSelectEntryPos();
     605           0 :     m_pLB_LineType->SelectEntryPos(POS_LINETYPE_SMOOTH);
     606           0 :     if( RET_OK == getSplinePropertiesDialog().Execute() )
     607             :     {
     608           0 :         if( m_pChangeListener )
     609           0 :             m_pChangeListener->stateChanged(this);
     610             :     }
     611             :     else
     612             :     {
     613             :         //restore old state:
     614           0 :         m_pLB_LineType->SelectEntryPos( iOldLineTypePos );
     615           0 :         getSplinePropertiesDialog().fillControls( aOldParameter );
     616             :     }
     617           0 :     return 0;
     618             : }
     619           0 : IMPL_LINK_NOARG(SplineResourceGroup, SteppedDetailsDialogHdl)
     620             : {
     621             : 
     622           0 :     ChartTypeParameter aOldParameter;
     623           0 :     getSteppedPropertiesDialog().fillParameter( aOldParameter, POS_LINETYPE_STEPPED == m_pLB_LineType->GetSelectEntryPos() );
     624             : 
     625           0 :     sal_uInt16 iOldLineTypePos = m_pLB_LineType->GetSelectEntryPos();
     626           0 :     m_pLB_LineType->SelectEntryPos(POS_LINETYPE_STEPPED);
     627           0 :     if( RET_OK == getSteppedPropertiesDialog().Execute() )
     628             :     {
     629           0 :         if( m_pChangeListener )
     630           0 :             m_pChangeListener->stateChanged(this);
     631             :     }
     632             :     else
     633             :     {
     634             :         //restore old state:
     635           0 :         m_pLB_LineType->SelectEntryPos( iOldLineTypePos );
     636           0 :         getSteppedPropertiesDialog().fillControls( aOldParameter );
     637             :     }
     638           0 :     return 0;
     639             : }
     640             : 
     641           0 : class GeometryResourceGroup : public ChangingResource
     642             : {
     643             : public:
     644             :     explicit GeometryResourceGroup(VclBuilderContainer* pWindow);
     645             : 
     646             :     void showControls( bool bShow );
     647             : 
     648             :     void fillControls( const ChartTypeParameter& rParameter );
     649             :     void fillParameter( ChartTypeParameter& rParameter );
     650             : 
     651             : private:
     652             :     DECL_LINK( GeometryChangeHdl, void* );
     653             : 
     654             : private:
     655             :     BarGeometryResources m_aGeometryResources;
     656             : };
     657             : 
     658           0 : GeometryResourceGroup::GeometryResourceGroup(VclBuilderContainer* pWindow )
     659             :     : ChangingResource()
     660           0 :     , m_aGeometryResources( pWindow )
     661             : {
     662           0 :     m_aGeometryResources.SetSelectHdl( LINK( this, GeometryResourceGroup, GeometryChangeHdl ) );
     663           0 : }
     664             : 
     665           0 : void GeometryResourceGroup::showControls( bool bShow )
     666             : {
     667           0 :     m_aGeometryResources.Show(bShow);
     668           0 : }
     669             : 
     670           0 : void GeometryResourceGroup::fillControls( const ChartTypeParameter& rParameter )
     671             : {
     672           0 :     sal_uInt16 nGeometry3D = static_cast<sal_uInt16>(rParameter.nGeometry3D);
     673           0 :     m_aGeometryResources.SelectEntryPos(nGeometry3D);
     674           0 :     m_aGeometryResources.Enable(rParameter.b3DLook);
     675           0 : }
     676             : 
     677           0 : void GeometryResourceGroup::fillParameter( ChartTypeParameter& rParameter )
     678             : {
     679           0 :     rParameter.nGeometry3D = 1;
     680           0 :     if( m_aGeometryResources.GetSelectEntryCount() )
     681           0 :         rParameter.nGeometry3D = m_aGeometryResources.GetSelectEntryPos();
     682           0 : }
     683             : 
     684           0 : IMPL_LINK_NOARG(GeometryResourceGroup, GeometryChangeHdl)
     685             : {
     686           0 :     if( m_pChangeListener )
     687           0 :         m_pChangeListener->stateChanged(this);
     688           0 :     return 0;
     689             : }
     690             : 
     691           0 : ChartTypeTabPage::ChartTypeTabPage(vcl::Window* pParent
     692             :         , const uno::Reference< XChartDocument >& xChartModel
     693             :         , const uno::Reference< uno::XComponentContext >& xContext
     694             :         , bool bDoLiveUpdate, bool bShowDescription)
     695             :         : OWizardPage(pParent, "tp_ChartType",
     696             :             "modules/schart/ui/tp_ChartType.ui")
     697           0 :         , m_pDim3DLookResourceGroup( new Dim3DLookResourceGroup(this) )
     698           0 :         , m_pStackingResourceGroup( new StackingResourceGroup(this) )
     699           0 :         , m_pSplineResourceGroup( new SplineResourceGroup(this) )
     700           0 :         , m_pGeometryResourceGroup( new GeometryResourceGroup( this ) )
     701           0 :         , m_pSortByXValuesResourceGroup( new SortByXValuesResourceGroup( this ) )
     702           0 :         , m_pGL3DResourceGroup(new GL3DResourceGroup(this))
     703             :         , m_xChartModel( xChartModel )
     704             :         , m_xCC( xContext )
     705             :         , m_aChartTypeDialogControllerList(0)
     706             :         , m_pCurrentMainType(0)
     707             :         , m_nChangingCalls(0)
     708             :         , m_bDoLiveUpdate(bDoLiveUpdate)
     709           0 :         , m_aTimerTriggeredControllerLock( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) )
     710             : {
     711           0 :     get(m_pFT_ChooseType, "FT_CAPTION_FOR_WIZARD");
     712           0 :     get(m_pMainTypeList, "charttype");
     713           0 :     get(m_pSubTypeList, "subtype");
     714           0 :     Size aSize(m_pSubTypeList->LogicToPixel(Size(150, 50), MAP_APPFONT));
     715           0 :     m_pSubTypeList->set_width_request(aSize.Width());
     716           0 :     m_pSubTypeList->set_height_request(aSize.Height());
     717             : 
     718           0 :     if( bShowDescription )
     719             :     {
     720           0 :         m_pFT_ChooseType->Show();
     721             :     }
     722             :     else
     723             :     {
     724           0 :         m_pFT_ChooseType->SetStyle(m_pFT_ChooseType->GetStyle() | WB_NOLABEL);
     725             :     }
     726             : 
     727           0 :     this->SetText( SCH_RESSTR(STR_PAGE_CHARTTYPE) );
     728             : 
     729           0 :     m_pMainTypeList->SetStyle(m_pMainTypeList->GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_FLATVALUESET | WB_3DLOOK );
     730           0 :     m_pMainTypeList->SetSelectHdl( LINK( this, ChartTypeTabPage, SelectMainTypeHdl ) );
     731           0 :     m_pSubTypeList->SetSelectHdl( LINK( this, ChartTypeTabPage, SelectSubTypeHdl ) );
     732             : 
     733           0 :     m_pSubTypeList->SetStyle(m_pSubTypeList->GetStyle() |
     734           0 :         WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_FLATVALUESET | WB_3DLOOK );
     735           0 :     m_pSubTypeList->SetColCount(4);
     736           0 :     m_pSubTypeList->SetLineCount(1);
     737             : 
     738           0 :     bool bEnableComplexChartTypes = true;
     739           0 :     uno::Reference< beans::XPropertySet > xProps( m_xChartModel, uno::UNO_QUERY );
     740           0 :     if ( xProps.is() )
     741             :     {
     742             :         try
     743             :         {
     744           0 :             xProps->getPropertyValue("EnableComplexChartTypes") >>= bEnableComplexChartTypes;
     745             :         }
     746           0 :         catch( const uno::Exception& e )
     747             :         {
     748             :             ASSERT_EXCEPTION( e );
     749             :         }
     750             :     }
     751             : 
     752           0 :     m_aChartTypeDialogControllerList.push_back(new ColumnChartDialogController() );
     753           0 :     m_aChartTypeDialogControllerList.push_back(new BarChartDialogController() );
     754           0 :     m_aChartTypeDialogControllerList.push_back(new PieChartDialogController() );
     755           0 :     m_aChartTypeDialogControllerList.push_back(new AreaChartDialogController() );
     756           0 :     m_aChartTypeDialogControllerList.push_back(new LineChartDialogController() );
     757           0 :     if (bEnableComplexChartTypes)
     758             :     {
     759           0 :         m_aChartTypeDialogControllerList.push_back(new XYChartDialogController() );
     760           0 :         m_aChartTypeDialogControllerList.push_back(new BubbleChartDialogController() );
     761             :     }
     762           0 :     m_aChartTypeDialogControllerList.push_back(new NetChartDialogController() );
     763           0 :     if (bEnableComplexChartTypes)
     764             :     {
     765           0 :         m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
     766             :     }
     767           0 :     m_aChartTypeDialogControllerList.push_back(new CombiColumnLineChartDialogController() );
     768             : #if ENABLE_GL3D_BARCHART
     769           0 :     SvtMiscOptions aOpts;
     770           0 :     if ( aOpts.IsExperimentalMode() )
     771           0 :         m_aChartTypeDialogControllerList.push_back(new GL3DBarChartDialogController());
     772             : #endif
     773             : 
     774           0 :     ::std::vector< ChartTypeDialogController* >::const_iterator       aIter = m_aChartTypeDialogControllerList.begin();
     775           0 :     const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd  = m_aChartTypeDialogControllerList.end();
     776           0 :     for( ; aIter != aEnd; ++aIter )
     777             :     {
     778           0 :         m_pMainTypeList->InsertEntry( (*aIter)->getName(), (*aIter)->getImage() );
     779           0 :         (*aIter)->setChangeListener( this );
     780             :     }
     781             : 
     782           0 :     m_pDim3DLookResourceGroup->setChangeListener( this );
     783           0 :     m_pStackingResourceGroup->setChangeListener( this );
     784           0 :     m_pSplineResourceGroup->setChangeListener( this );
     785           0 :     m_pGeometryResourceGroup->setChangeListener( this );
     786           0 :     m_pSortByXValuesResourceGroup->setChangeListener( this );
     787           0 :     m_pGL3DResourceGroup->setChangeListener(this);
     788           0 : }
     789             : 
     790           0 : ChartTypeTabPage::~ChartTypeTabPage()
     791             : {
     792           0 :     disposeOnce();
     793           0 : }
     794             : 
     795           0 : void ChartTypeTabPage::dispose()
     796             : {
     797             :     //delete all dialog controller
     798           0 :     ::std::vector< ChartTypeDialogController* >::const_iterator       aIter = m_aChartTypeDialogControllerList.begin();
     799           0 :     const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd  = m_aChartTypeDialogControllerList.end();
     800           0 :     for( ; aIter != aEnd; ++aIter )
     801             :     {
     802           0 :         delete *aIter;
     803             :     }
     804           0 :     m_aChartTypeDialogControllerList.clear();
     805             : 
     806             :     //delete all resource helper
     807           0 :     delete m_pDim3DLookResourceGroup;
     808           0 :     m_pDim3DLookResourceGroup = NULL;
     809           0 :     delete m_pStackingResourceGroup;
     810           0 :     m_pStackingResourceGroup = NULL;
     811           0 :     delete m_pSplineResourceGroup;
     812           0 :     m_pSplineResourceGroup = NULL;
     813           0 :     delete m_pGeometryResourceGroup;
     814           0 :     m_pGeometryResourceGroup = NULL;
     815           0 :     delete m_pSortByXValuesResourceGroup;
     816           0 :     m_pSortByXValuesResourceGroup = NULL;
     817           0 :     delete m_pGL3DResourceGroup;
     818           0 :     m_pGL3DResourceGroup = NULL;
     819           0 :     m_pFT_ChooseType.clear();
     820           0 :     m_pMainTypeList.clear();
     821           0 :     m_pSubTypeList.clear();
     822           0 :     svt::OWizardPage::dispose();
     823           0 : }
     824             : 
     825           0 : ChartTypeParameter ChartTypeTabPage::getCurrentParamter() const
     826             : {
     827           0 :     ChartTypeParameter aParameter;
     828           0 :     aParameter.nSubTypeIndex = static_cast<sal_Int32>( m_pSubTypeList->GetSelectItemId() );
     829           0 :     m_pDim3DLookResourceGroup->fillParameter( aParameter );
     830           0 :     m_pStackingResourceGroup->fillParameter( aParameter );
     831           0 :     m_pSplineResourceGroup->fillParameter( aParameter );
     832           0 :     m_pGeometryResourceGroup->fillParameter( aParameter );
     833           0 :     m_pSortByXValuesResourceGroup->fillParameter( aParameter );
     834           0 :     m_pGL3DResourceGroup->fillParameter(aParameter);
     835           0 :     return aParameter;
     836             : }
     837           0 : void ChartTypeTabPage::commitToModel( const ChartTypeParameter& rParameter )
     838             : {
     839           0 :     if( !m_pCurrentMainType )
     840           0 :         return;
     841             : 
     842           0 :     m_aTimerTriggeredControllerLock.startTimer();
     843           0 :     ControllerLockGuardUNO aLockedControllers( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) );
     844           0 :     m_pCurrentMainType->commitToModel( rParameter, m_xChartModel );
     845             : }
     846           0 : void ChartTypeTabPage::stateChanged( ChangingResource* /*pResource*/ )
     847             : {
     848           0 :     if(m_nChangingCalls)
     849           0 :         return;
     850           0 :     m_nChangingCalls++;
     851             : 
     852           0 :     ChartTypeParameter aParameter( this->getCurrentParamter() );
     853           0 :     if( m_pCurrentMainType )
     854             :     {
     855           0 :         m_pCurrentMainType->adjustParameterToSubType( aParameter );
     856           0 :         m_pCurrentMainType->adjustSubTypeAndEnableControls( aParameter );
     857             :     }
     858           0 :     if( m_bDoLiveUpdate )
     859           0 :         commitToModel( aParameter );
     860             : 
     861             :     //detect the new ThreeDLookScheme
     862           0 :     uno::Reference<XDiagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel);
     863           0 :     aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme(xDiagram);
     864             :     try
     865             :     {
     866           0 :         uno::Reference<beans::XPropertySet> xPropSet(xDiagram, uno::UNO_QUERY_THROW);
     867           0 :         xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues;
     868             :     }
     869           0 :     catch ( const uno::Exception& ex )
     870             :     {
     871             :         ASSERT_EXCEPTION(ex);
     872             :     }
     873             :     //the controls have to be enabled/disabled accordingly
     874           0 :     this->fillAllControls( aParameter );
     875             : 
     876           0 :     m_nChangingCalls--;
     877             : }
     878           0 : ChartTypeDialogController* ChartTypeTabPage::getSelectedMainType()
     879             : {
     880           0 :     ChartTypeDialogController* pTypeController = 0;
     881             :     ::std::vector< ChartTypeDialogController* >::size_type nM = static_cast< ::std::vector< ChartTypeDialogController* >::size_type >(
     882           0 :         m_pMainTypeList->GetSelectEntryPos() );
     883           0 :     if( nM<m_aChartTypeDialogControllerList.size() )
     884           0 :         pTypeController = m_aChartTypeDialogControllerList[nM];
     885           0 :     return pTypeController;
     886             : }
     887           0 : IMPL_LINK_NOARG(ChartTypeTabPage, SelectSubTypeHdl)
     888             : {
     889           0 :     if( m_pCurrentMainType )
     890             :     {
     891           0 :         ChartTypeParameter aParameter( this->getCurrentParamter() );
     892           0 :         m_pCurrentMainType->adjustParameterToSubType( aParameter );
     893           0 :         this->fillAllControls( aParameter, false );
     894           0 :         if( m_bDoLiveUpdate )
     895           0 :             commitToModel( aParameter );
     896             :     }
     897           0 :     return 0;
     898             : }
     899             : 
     900           0 : IMPL_LINK_NOARG(ChartTypeTabPage, SelectMainTypeHdl)
     901             : {
     902           0 :     selectMainType();
     903           0 :     return 0;
     904             : }
     905             : 
     906           0 : void ChartTypeTabPage::selectMainType()
     907             : {
     908           0 :     ChartTypeParameter aParameter( this->getCurrentParamter() );
     909             : 
     910           0 :     if( m_pCurrentMainType )
     911             :     {
     912           0 :         m_pCurrentMainType->adjustParameterToSubType( aParameter );
     913           0 :         m_pCurrentMainType->hideExtraControls();
     914             :     }
     915             : 
     916           0 :     m_pCurrentMainType = this->getSelectedMainType();
     917           0 :     if( m_pCurrentMainType )
     918             :     {
     919           0 :         this->showAllControls(*m_pCurrentMainType);
     920             : 
     921           0 :         m_pCurrentMainType->adjustParameterToMainType( aParameter );
     922           0 :         if( m_bDoLiveUpdate )
     923           0 :             commitToModel( aParameter );
     924             :         //detect the new ThreeDLookScheme
     925           0 :         aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( ChartModelHelper::findDiagram( m_xChartModel ) );
     926           0 :         if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
     927           0 :             aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
     928             : 
     929           0 :         uno::Reference<XDiagram> xDiagram = ChartModelHelper::findDiagram(m_xChartModel);
     930             :         try
     931             :         {
     932           0 :             uno::Reference<beans::XPropertySet> xPropSet(xDiagram, uno::UNO_QUERY_THROW);
     933           0 :             xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues;
     934             :         }
     935           0 :         catch ( const uno::Exception& ex )
     936             :         {
     937             :             ASSERT_EXCEPTION(ex);
     938             :         }
     939             : 
     940           0 :         this->fillAllControls( aParameter );
     941           0 :         uno::Reference< beans::XPropertySet > xTemplateProps( this->getCurrentTemplate(), uno::UNO_QUERY );
     942           0 :         m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
     943           0 :     }
     944           0 : }
     945             : 
     946           0 : void ChartTypeTabPage::showAllControls( ChartTypeDialogController& rTypeController )
     947             : {
     948           0 :     m_pMainTypeList->Show();
     949           0 :     m_pSubTypeList->Show();
     950             : 
     951           0 :     bool bShow = rTypeController.shouldShow_3DLookControl();
     952           0 :     m_pDim3DLookResourceGroup->showControls( bShow );
     953           0 :     bShow = rTypeController.shouldShow_StackingControl();
     954           0 :     m_pStackingResourceGroup->showControls( bShow, rTypeController.shouldShow_DeepStackingControl() );
     955           0 :     bShow = rTypeController.shouldShow_SplineControl();
     956           0 :     m_pSplineResourceGroup->showControls( bShow );
     957           0 :     bShow = rTypeController.shouldShow_GeometryControl();
     958           0 :     m_pGeometryResourceGroup->showControls( bShow );
     959           0 :     bShow = rTypeController.shouldShow_SortByXValuesResourceGroup();
     960           0 :     m_pSortByXValuesResourceGroup->showControls( bShow );
     961           0 :     bShow = rTypeController.shouldShow_GL3DResourceGroup();
     962           0 :     m_pGL3DResourceGroup->showControls(bShow);
     963           0 :     rTypeController.showExtraControls(this);
     964           0 : }
     965             : 
     966           0 : void ChartTypeTabPage::fillAllControls( const ChartTypeParameter& rParameter, bool bAlsoResetSubTypeList )
     967             : {
     968           0 :     m_nChangingCalls++;
     969           0 :     if( m_pCurrentMainType && bAlsoResetSubTypeList )
     970             :     {
     971           0 :         m_pCurrentMainType->fillSubTypeList(*m_pSubTypeList, rParameter);
     972             :     }
     973           0 :     m_pSubTypeList->SelectItem( static_cast<sal_uInt16>( rParameter.nSubTypeIndex) );
     974           0 :     m_pDim3DLookResourceGroup->fillControls( rParameter );
     975           0 :     m_pStackingResourceGroup->fillControls( rParameter );
     976           0 :     m_pSplineResourceGroup->fillControls( rParameter );
     977           0 :     m_pGeometryResourceGroup->fillControls( rParameter );
     978           0 :     m_pSortByXValuesResourceGroup->fillControls( rParameter );
     979           0 :     m_pGL3DResourceGroup->fillControls(rParameter);
     980           0 :     m_nChangingCalls--;
     981           0 : }
     982             : 
     983           0 : void ChartTypeTabPage::initializePage()
     984             : {
     985           0 :     if( !m_xChartModel.is() )
     986           0 :         return;
     987           0 :     uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
     988           0 :     uno::Reference< frame::XModel > xModel( m_xChartModel, uno::UNO_QUERY);
     989           0 :     uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) );
     990             :     DiagramHelper::tTemplateWithServiceName aTemplate =
     991           0 :         DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager );
     992           0 :     OUString aServiceName( aTemplate.second );
     993             : 
     994           0 :     bool bFound = false;
     995             : 
     996           0 :     ::std::vector< ChartTypeDialogController* >::iterator             aIter = m_aChartTypeDialogControllerList.begin();
     997           0 :     const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd  = m_aChartTypeDialogControllerList.end();
     998           0 :     for( sal_uInt16 nM=0; aIter != aEnd; ++aIter, ++nM )
     999             :     {
    1000           0 :         if( (*aIter)->isSubType(aServiceName) )
    1001             :         {
    1002           0 :             bFound = true;
    1003             : 
    1004           0 :             m_pMainTypeList->SelectEntryPos( nM );
    1005           0 :             this->showAllControls( **aIter );
    1006           0 :             uno::Reference< beans::XPropertySet > xTemplateProps( aTemplate.first, uno::UNO_QUERY );
    1007           0 :             ChartTypeParameter aParameter = (*aIter)->getChartTypeParameterForService( aServiceName, xTemplateProps );
    1008           0 :             m_pCurrentMainType = this->getSelectedMainType();
    1009             : 
    1010             :             //set ThreeDLookScheme
    1011           0 :             aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( xDiagram );
    1012           0 :             if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
    1013           0 :                 aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
    1014             : 
    1015             :             try
    1016             :             {
    1017           0 :                 uno::Reference<beans::XPropertySet> xPropSet(xDiagram, uno::UNO_QUERY_THROW);
    1018           0 :                 xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= aParameter.bSortByXValues;
    1019             :             }
    1020           0 :             catch (const uno::Exception& ex)
    1021             :             {
    1022             :                 ASSERT_EXCEPTION(ex);
    1023             :             }
    1024             : 
    1025           0 :             this->fillAllControls( aParameter );
    1026           0 :             if( m_pCurrentMainType )
    1027           0 :                 m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
    1028           0 :             break;
    1029             :         }
    1030             :     }
    1031             : 
    1032           0 :     if( !bFound )
    1033             :     {
    1034           0 :         m_pSubTypeList->Hide();
    1035           0 :         m_pDim3DLookResourceGroup->showControls( false );
    1036           0 :         m_pStackingResourceGroup->showControls( false, false );
    1037           0 :         m_pSplineResourceGroup->showControls( false );
    1038           0 :         m_pGeometryResourceGroup->showControls( false );
    1039           0 :         m_pSortByXValuesResourceGroup->showControls( false );
    1040           0 :         m_pGL3DResourceGroup->showControls(false);
    1041           0 :     }
    1042             : }
    1043             : 
    1044           0 : bool ChartTypeTabPage::commitPage( ::svt::WizardTypes::CommitPageReason /*eReason*/ )
    1045             : {
    1046             :     //commit changes to model
    1047           0 :     if( !m_bDoLiveUpdate && m_pCurrentMainType )
    1048             :     {
    1049           0 :         ChartTypeParameter aParameter( this->getCurrentParamter() );
    1050           0 :         m_pCurrentMainType->adjustParameterToSubType( aParameter );
    1051           0 :         commitToModel( aParameter );
    1052             :     }
    1053             : 
    1054           0 :     return true; // return false if this page should not be left
    1055             : }
    1056             : 
    1057           0 : uno::Reference< XChartTypeTemplate > ChartTypeTabPage::getCurrentTemplate() const
    1058             : {
    1059           0 :     if( m_pCurrentMainType && m_xChartModel.is() )
    1060             :     {
    1061           0 :         ChartTypeParameter aParameter( this->getCurrentParamter() );
    1062           0 :         m_pCurrentMainType->adjustParameterToSubType( aParameter );
    1063           0 :         uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
    1064           0 :         return m_pCurrentMainType->getCurrentTemplate( aParameter, xTemplateManager );
    1065             :     }
    1066           0 :     return 0;
    1067             : }
    1068             : 
    1069          57 : } //namespace chart
    1070             : 
    1071             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11