summaryrefslogtreecommitdiff
path: root/chart2/source/controller/dialogs/tp_ChartType.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/source/controller/dialogs/tp_ChartType.cxx')
-rw-r--r--chart2/source/controller/dialogs/tp_ChartType.cxx1183
1 files changed, 1183 insertions, 0 deletions
diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx b/chart2/source/controller/dialogs/tp_ChartType.cxx
new file mode 100644
index 000000000000..ec6c1d2a1c10
--- /dev/null
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -0,0 +1,1183 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_chart2.hxx"
+
+#include "tp_ChartType.hxx"
+#include "tp_ChartType.hrc"
+#include "Strings.hrc"
+#include "ResId.hxx"
+#include "ChartModelHelper.hxx"
+#include "DiagramHelper.hxx"
+#include "NoWarningThisInCTOR.hxx"
+#include "res_BarGeometry.hxx"
+#include "ControllerLockGuard.hxx"
+#include "macros.hxx"
+
+#ifndef _SVT_CONTROLDIMS_HRC_
+#include <svtools/controldims.hrc>
+#endif
+
+// header for define RET_OK
+#include <vcl/msgbox.hxx>
+#include <tools/debug.hxx>
+
+//for auto_ptr
+#include <memory>
+
+//.............................................................................
+namespace chart
+{
+//.............................................................................
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::chart2;
+
+// macro for selecting a normal or high contrast bitmap the stack variable
+// bIsHighContrast must exist and reflect the correct state
+#define SELECT_BITMAP(name) Bitmap( SchResId( bIsHighContrast ? name ## _HC : name ))
+#define SELECT_IMAGE(name) Image( SchResId( bIsHighContrast ? name ## _HC : name ))
+
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+
+namespace
+{
+ long lcl_getDistance()
+ {
+ return 6;
+ }
+
+ sal_Bool lcl_getSortByXValues( const uno::Reference< chart2::XChartDocument >& xChartDoc )
+ {
+ sal_Bool bRet = sal_False;
+ if( xChartDoc.is() )
+ {
+ try
+ {
+ uno::Reference< beans::XPropertySet > xDiaProp( xChartDoc->getFirstDiagram(), uno::UNO_QUERY_THROW );
+ xDiaProp->getPropertyValue( C2U( "SortByXValues" ) ) >>= bRet;
+ }
+ catch( const uno::Exception & ex )
+ {
+ ASSERT_EXCEPTION( ex );
+ }
+ }
+ return bRet;
+ }
+}
+
+//--------------------------------------------------------------------------
+class AxisTypeResourceGroup : public ChangingResource
+{
+public:
+ AxisTypeResourceGroup( Window* pWindow );
+ virtual ~AxisTypeResourceGroup();
+
+ void showControls( bool bShow );
+ Point getPosition();
+ long getHeight();
+ void setPosition( const Point& rPoint );
+
+ void fillControls( const ChartTypeParameter& rParameter );
+ void fillParameter( ChartTypeParameter& rParameter );
+
+private:
+ DECL_LINK( AxisTypeCheckHdl, CheckBox* );
+private:
+ CheckBox m_aCB_XAxis_Categories;
+};
+AxisTypeResourceGroup::AxisTypeResourceGroup( Window* pWindow )
+ : ChangingResource()
+ , m_aCB_XAxis_Categories( pWindow, SchResId( CB_X_AXIS_CATEGORIES ) )
+{
+ m_aCB_XAxis_Categories.SetToggleHdl( LINK( this, AxisTypeResourceGroup, AxisTypeCheckHdl ) );
+}
+AxisTypeResourceGroup::~AxisTypeResourceGroup()
+{
+}
+void AxisTypeResourceGroup::showControls( bool bShow )
+{
+ m_aCB_XAxis_Categories.Show(bShow);
+}
+Point AxisTypeResourceGroup::getPosition()
+{
+ return m_aCB_XAxis_Categories.GetPosPixel();
+}
+long AxisTypeResourceGroup::getHeight()
+{
+ return m_aCB_XAxis_Categories.GetSizePixel().Height();
+}
+void AxisTypeResourceGroup::setPosition( const Point& rPoint )
+{
+ m_aCB_XAxis_Categories.SetPosPixel(rPoint);
+}
+void AxisTypeResourceGroup::fillControls( const ChartTypeParameter& rParameter )
+{
+ m_aCB_XAxis_Categories.Check(!rParameter.bXAxisWithValues);
+}
+void AxisTypeResourceGroup::fillParameter( ChartTypeParameter& rParameter )
+{
+ rParameter.bXAxisWithValues = !m_aCB_XAxis_Categories.IsChecked();
+}
+IMPL_LINK( AxisTypeResourceGroup, AxisTypeCheckHdl, CheckBox*, EMPTYARG )
+{
+ if( m_pChangeListener )
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+//--------------------------------------------------------------------------
+
+#define POS_3DSCHEME_SIMPLE 0
+#define POS_3DSCHEME_REALISTIC 1
+
+class Dim3DLookResourceGroup : public ChangingResource
+{
+public:
+ Dim3DLookResourceGroup( Window* pWindow );
+ virtual ~Dim3DLookResourceGroup();
+
+ void showControls( bool bShow );
+ long getHeight();
+ void setPosition( const Point& rPoint );
+
+ void fillControls( const ChartTypeParameter& rParameter );
+ void fillParameter( ChartTypeParameter& rParameter );
+
+private:
+ DECL_LINK( Dim3DLookCheckHdl, CheckBox* );
+ DECL_LINK( SelectSchemeHdl, void* );
+
+private:
+ CheckBox m_aCB_3DLook;
+ ListBox m_aLB_Scheme;
+};
+Dim3DLookResourceGroup::Dim3DLookResourceGroup( Window* pWindow )
+ : ChangingResource()
+ , m_aCB_3DLook( pWindow, SchResId( CB_3D_LOOK ) )
+ , m_aLB_Scheme( pWindow, SchResId( LB_3D_SCHEME ) )
+{
+ m_aCB_3DLook.SetToggleHdl( LINK( this, Dim3DLookResourceGroup, Dim3DLookCheckHdl ) );
+
+ m_aLB_Scheme.InsertEntry(String(SchResId(STR_3DSCHEME_SIMPLE)));
+ m_aLB_Scheme.InsertEntry(String(SchResId(STR_3DSCHEME_REALISTIC)));
+ m_aLB_Scheme.SetDropDownLineCount(2);
+
+ m_aLB_Scheme.SetSelectHdl( LINK( this, Dim3DLookResourceGroup, SelectSchemeHdl ) );
+}
+Dim3DLookResourceGroup::~Dim3DLookResourceGroup()
+{
+}
+void Dim3DLookResourceGroup::showControls( bool bShow )
+{
+ m_aCB_3DLook.Show(bShow);
+ m_aLB_Scheme.Show(bShow);
+}
+long Dim3DLookResourceGroup::getHeight()
+{
+ return m_aCB_3DLook.GetSizePixel().Height() + m_aLB_Scheme.LogicToPixel( Size(0,2), MapMode(MAP_APPFONT) ).Height();
+}
+void Dim3DLookResourceGroup::setPosition( const Point& rPoint )
+{
+ m_aCB_3DLook.SetPosPixel(rPoint);
+ Size aSize( m_aCB_3DLook.CalcMinimumSize() );
+ m_aCB_3DLook.SetPosSizePixel(rPoint,aSize);
+ Point aLBPos(rPoint);
+ aLBPos.X() += aSize.Width()
+ + m_aLB_Scheme.LogicToPixel( Size(6,0), MapMode(MAP_APPFONT) ).Width();
+ aLBPos.Y() -= m_aLB_Scheme.LogicToPixel( Size(0,2), MapMode(MAP_APPFONT) ).Height();
+ m_aLB_Scheme.SetPosPixel(aLBPos);
+}
+void Dim3DLookResourceGroup::fillControls( const ChartTypeParameter& rParameter )
+{
+ m_aCB_3DLook.Check(rParameter.b3DLook);
+ m_aLB_Scheme.Enable(rParameter.b3DLook);
+
+ if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Simple )
+ m_aLB_Scheme.SelectEntryPos(POS_3DSCHEME_SIMPLE);
+ else if( rParameter.eThreeDLookScheme == ThreeDLookScheme_Realistic )
+ m_aLB_Scheme.SelectEntryPos(POS_3DSCHEME_REALISTIC);
+ else
+ m_aLB_Scheme.SetNoSelection();
+}
+void Dim3DLookResourceGroup::fillParameter( ChartTypeParameter& rParameter )
+{
+ rParameter.b3DLook = m_aCB_3DLook.IsChecked();
+ USHORT nPos = m_aLB_Scheme.GetSelectEntryPos();
+ if( POS_3DSCHEME_SIMPLE == nPos )
+ rParameter.eThreeDLookScheme = ThreeDLookScheme_Simple;
+ else if( POS_3DSCHEME_REALISTIC == nPos )
+ rParameter.eThreeDLookScheme = ThreeDLookScheme_Realistic;
+ else
+ rParameter.eThreeDLookScheme = ThreeDLookScheme_Unknown;
+}
+IMPL_LINK( Dim3DLookResourceGroup, Dim3DLookCheckHdl, CheckBox*, EMPTYARG )
+{
+ if(m_pChangeListener)
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+IMPL_LINK( Dim3DLookResourceGroup, SelectSchemeHdl, void*, EMPTYARG )
+{
+ if(m_pChangeListener)
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+
+//--------------------------------------------------------------------------
+
+class SortByXValuesResourceGroup : public ChangingResource
+{
+public:
+ SortByXValuesResourceGroup( Window* pWindow );
+ virtual ~SortByXValuesResourceGroup();
+
+ void showControls( bool bShow );
+ long getHeight();
+ void setPosition( const Point& rPoint );
+
+ void fillControls( const ChartTypeParameter& rParameter );
+ void fillParameter( ChartTypeParameter& rParameter );
+
+private:
+ DECL_LINK( SortByXValuesCheckHdl, CheckBox* );
+
+private:
+ CheckBox m_aCB_XValueSorting;
+};
+SortByXValuesResourceGroup::SortByXValuesResourceGroup( Window* pWindow )
+ : ChangingResource()
+ , m_aCB_XValueSorting( pWindow, SchResId( CB_XVALUE_SORTING ) )
+{
+ m_aCB_XValueSorting.SetToggleHdl( LINK( this, SortByXValuesResourceGroup, SortByXValuesCheckHdl ) );
+}
+SortByXValuesResourceGroup::~SortByXValuesResourceGroup()
+{
+}
+void SortByXValuesResourceGroup::showControls( bool bShow )
+{
+ m_aCB_XValueSorting.Show(bShow);
+}
+long SortByXValuesResourceGroup::getHeight()
+{
+ return m_aCB_XValueSorting.GetSizePixel().Height();
+}
+void SortByXValuesResourceGroup::setPosition( const Point& rPoint )
+{
+ m_aCB_XValueSorting.SetPosPixel(rPoint);
+}
+void SortByXValuesResourceGroup::fillControls( const ChartTypeParameter& rParameter )
+{
+ m_aCB_XValueSorting.Check( rParameter.bSortByXValues );
+}
+void SortByXValuesResourceGroup::fillParameter( ChartTypeParameter& rParameter )
+{
+ rParameter.bSortByXValues = m_aCB_XValueSorting.IsChecked();
+}
+IMPL_LINK( SortByXValuesResourceGroup, SortByXValuesCheckHdl, CheckBox*, EMPTYARG )
+{
+ if(m_pChangeListener)
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+//--------------------------------------------------------------------------
+class StackingResourceGroup : public ChangingResource
+{
+public:
+ StackingResourceGroup( Window* pWindow );
+ virtual ~StackingResourceGroup();
+
+ void showControls( bool bShow, bool bShowDeepStacking );
+ Point getPosition();
+ long getHeight();
+ void setPosition( const Point& rPoint );
+
+ void fillControls( const ChartTypeParameter& rParameter );
+ void fillParameter( ChartTypeParameter& rParameter );
+
+private:
+ DECL_LINK( StackingChangeHdl, RadioButton* );
+ DECL_LINK( StackingEnableHdl, void* );
+
+private:
+ CheckBox m_aCB_Stacked;
+ RadioButton m_aRB_Stack_Y;
+ RadioButton m_aRB_Stack_Y_Percent;
+ RadioButton m_aRB_Stack_Z;
+
+ bool m_bShowDeepStacking;
+};
+StackingResourceGroup::StackingResourceGroup( Window* pWindow )
+ : ChangingResource()
+ , m_aCB_Stacked( pWindow, SchResId( CB_STACKED ) )
+ , m_aRB_Stack_Y( pWindow, SchResId( RB_STACK_Y ) )
+ , m_aRB_Stack_Y_Percent( pWindow, SchResId( RB_STACK_Y_PERCENT ) )
+ , m_aRB_Stack_Z( pWindow, SchResId( RB_STACK_Z ) )
+ , m_bShowDeepStacking(true)
+{
+ m_aCB_Stacked.SetToggleHdl( LINK( this, StackingResourceGroup, StackingEnableHdl ) );
+ m_aRB_Stack_Y.SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
+ m_aRB_Stack_Y_Percent.SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
+ m_aRB_Stack_Z.SetToggleHdl( LINK( this, StackingResourceGroup, StackingChangeHdl ) );
+}
+StackingResourceGroup::~StackingResourceGroup()
+{
+}
+void StackingResourceGroup::showControls( bool bShow, bool bShowDeepStacking )
+{
+ m_bShowDeepStacking = bShowDeepStacking;
+ m_aCB_Stacked.Show(bShow);
+ m_aRB_Stack_Y.Show(bShow);
+ m_aRB_Stack_Y_Percent.Show(bShow);
+ m_aRB_Stack_Z.Show(bShow&&bShowDeepStacking);
+}
+Point StackingResourceGroup::getPosition()
+{
+ return m_aCB_Stacked.GetPosPixel();
+}
+long StackingResourceGroup::getHeight()
+{
+ RadioButton& rLastButton = m_bShowDeepStacking ? m_aRB_Stack_Z : m_aRB_Stack_Y_Percent;
+
+ long nHeight = rLastButton.GetPosPixel().Y()
+ - m_aCB_Stacked.GetPosPixel().Y();
+ nHeight += rLastButton.GetSizePixel().Height();
+ return nHeight;
+}
+void StackingResourceGroup::setPosition( const Point& rPoint )
+{
+ Point aOld = this->getPosition();
+ long nDiffY = rPoint.Y() - aOld.Y();
+ long nDiffX = rPoint.X() - aOld.X();
+ m_aCB_Stacked.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
+
+ aOld = m_aRB_Stack_Y.GetPosPixel();
+ m_aRB_Stack_Y.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
+
+ aOld = m_aRB_Stack_Y_Percent.GetPosPixel();
+ m_aRB_Stack_Y_Percent.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
+
+ aOld = m_aRB_Stack_Z.GetPosPixel();
+ m_aRB_Stack_Z.SetPosPixel( Point( aOld.X()+nDiffX, aOld.Y()+nDiffY ) );
+}
+void StackingResourceGroup::fillControls( const ChartTypeParameter& rParameter )
+{
+ m_aCB_Stacked.Check( rParameter.eStackMode!=GlobalStackMode_NONE
+ && rParameter.eStackMode!=GlobalStackMode_STACK_Z ); //todo remove this condition if z stacking radio button is really used
+ switch( rParameter.eStackMode )
+ {
+ case GlobalStackMode_STACK_Y:
+ m_aRB_Stack_Y.Check();
+ break;
+ case GlobalStackMode_STACK_Y_PERCENT:
+ m_aRB_Stack_Y_Percent.Check();
+ break;
+ case GlobalStackMode_STACK_Z:
+ //todo uncomment this condition if z stacking radio button is really used
+ /*
+ if( rParameter.b3DLook )
+ m_aRB_Stack_Z.Check();
+ else
+ */
+ m_aRB_Stack_Y.Check();
+ break;
+ default:
+ m_aRB_Stack_Y.Check();
+ break;
+ }
+ //dis/enabling
+ m_aCB_Stacked.Enable( !rParameter.bXAxisWithValues );
+ m_aRB_Stack_Y.Enable( m_aCB_Stacked.IsChecked() && !rParameter.bXAxisWithValues );
+ m_aRB_Stack_Y_Percent.Enable( m_aCB_Stacked.IsChecked() && !rParameter.bXAxisWithValues );
+ m_aRB_Stack_Z.Enable( m_aCB_Stacked.IsChecked() && rParameter.b3DLook );
+}
+void StackingResourceGroup::fillParameter( ChartTypeParameter& rParameter )
+{
+ if(!m_aCB_Stacked.IsChecked())
+ rParameter.eStackMode = GlobalStackMode_NONE;
+ else if(m_aRB_Stack_Y.IsChecked())
+ rParameter.eStackMode = GlobalStackMode_STACK_Y;
+ else if(m_aRB_Stack_Y_Percent.IsChecked())
+ rParameter.eStackMode = GlobalStackMode_STACK_Y_PERCENT;
+ else if(m_aRB_Stack_Z.IsChecked())
+ rParameter.eStackMode = GlobalStackMode_STACK_Z;
+}
+IMPL_LINK( StackingResourceGroup, StackingChangeHdl, RadioButton*, pRadio )
+{
+ //for each radio click ther are coming two change events
+ //first uncheck of previous button -> ignore that call
+ //the second call gives the check of the new button
+ if( m_pChangeListener && pRadio && pRadio->IsChecked() )
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+IMPL_LINK( StackingResourceGroup, StackingEnableHdl, void*, EMPTYARG )
+{
+ if( m_pChangeListener )
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+//--------------------------------------------------------------------------
+class SplinePropertiesDialog : public ModalDialog
+{
+public:
+ SplinePropertiesDialog( Window* pParent );
+ virtual ~SplinePropertiesDialog();
+
+ void fillControls( const ChartTypeParameter& rParameter );
+ void fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines );
+
+ virtual void StateChanged( StateChangedType nType );
+
+private:
+ DECL_LINK( SplineModeRadioHdl, RadioButton* );
+
+ void adjustControlPositions();
+ void adjustSize();
+
+private:
+ RadioButton m_aRB_Splines_Cubic;
+ RadioButton m_aRB_Splines_B;
+
+ FixedLine m_aFL_SplineSeparator;
+
+ FixedText m_aFT_SplineResolution;
+ MetricField m_aMF_SplineResolution;
+ FixedText m_aFT_SplineOrder;
+ MetricField m_aMF_SplineOrder;
+
+ FixedLine m_aFL_DialogButtons;
+ OKButton m_aBP_OK;
+ CancelButton m_aBP_Cancel;
+ HelpButton m_aBP_Help;
+};
+
+SplinePropertiesDialog::SplinePropertiesDialog( Window* pParent )
+ : ModalDialog( pParent, SchResId( DLG_SPLINE_PROPERTIES ) )
+ , m_aRB_Splines_Cubic( this, SchResId( RB_SPLINES_CUBIC ) )
+ , m_aRB_Splines_B( this, SchResId( RB_SPLINES_B ) )
+ , m_aFL_SplineSeparator( this, SchResId( FL_SPLINE_SEPARATOR ) )
+ , m_aFT_SplineResolution( this, SchResId( FT_SPLINE_RESOLUTION ) )
+ , m_aMF_SplineResolution( this, SchResId( MF_SPLINE_RESOLUTION ) )
+ , m_aFT_SplineOrder( this, SchResId( FT_SPLINE_ORDER ) )
+ , m_aMF_SplineOrder( this, SchResId( MF_SPLINE_ORDER ) )
+ , m_aFL_DialogButtons( this, SchResId( FL_SPLINE_DIALOGBUTTONS ) )
+ , m_aBP_OK( this, SchResId(BTN_OK) )
+ , m_aBP_Cancel( this, SchResId(BTN_CANCEL) )
+ , m_aBP_Help( this, SchResId(BTN_HELP) )
+{
+ FreeResource();
+
+ this->SetText( String( SchResId( STR_DLG_SMOOTH_LINE_PROPERTIES ) ) );
+
+ m_aRB_Splines_Cubic.SetToggleHdl( LINK( this, SplinePropertiesDialog, SplineModeRadioHdl ) );
+ m_aRB_Splines_B.SetToggleHdl( LINK( this, SplinePropertiesDialog, SplineModeRadioHdl ) );
+}
+
+SplinePropertiesDialog::~SplinePropertiesDialog()
+{
+}
+
+void SplinePropertiesDialog::StateChanged( StateChangedType nType )
+{
+ Dialog::StateChanged( nType );
+
+ if( nType == STATE_CHANGE_INITSHOW )
+ {
+ adjustControlPositions();
+ adjustSize();
+ }
+}
+
+void SplinePropertiesDialog::adjustControlPositions()
+{
+ //position of controls:
+ //----------------
+ //fixed line and Fixed texts as near as possible to radio controls
+ long nRBWidth = ::std::max( m_aRB_Splines_Cubic.CalcMinimumSize().Width(), m_aRB_Splines_B.CalcMinimumSize().Width());
+ long nFLXPos = m_aRB_Splines_Cubic.GetPosPixel().X()+nRBWidth+m_aFT_SplineOrder.LogicToPixel( Size(RSC_SP_CTRL_GROUP_X,0), MapMode(MAP_APPFONT) ).Width();
+ long nFTXPos = nFLXPos + m_aFL_SplineSeparator.GetSizePixel().Width() + m_aFT_SplineOrder.LogicToPixel( Size(RSC_SP_CTRL_GROUP_X,0), MapMode(MAP_APPFONT) ).Width();
+
+ m_aRB_Splines_Cubic.SetSizePixel( Size( nRBWidth, m_aRB_Splines_Cubic.GetSizePixel().Height() ) );
+ m_aRB_Splines_B.SetSizePixel( Size( nRBWidth, m_aRB_Splines_B.GetSizePixel().Height() ) );
+
+ m_aFL_SplineSeparator.SetPosPixel( Point( nFLXPos, m_aFL_SplineSeparator.GetPosPixel().Y() ) );
+
+ m_aFT_SplineOrder.SetPosPixel( Point( nFTXPos, m_aFT_SplineOrder.GetPosPixel().Y() ) );
+ m_aFT_SplineResolution.SetPosPixel( Point( nFTXPos, m_aFT_SplineResolution.GetPosPixel().Y() ) );
+
+ //----------------
+ //move metric controls as near to text as possible
+ long nFTWidth = ::std::max( m_aFT_SplineOrder.CalcMinimumSize().Width(), m_aFT_SplineResolution.CalcMinimumSize().Width());
+ long nMFXPos = m_aFT_SplineOrder.GetPosPixel().X()+nFTWidth+m_aFT_SplineOrder.LogicToPixel( Size(RSC_SP_CTRL_DESC_X,0), MapMode(MAP_APPFONT) ).Width();
+
+ m_aFT_SplineOrder.SetSizePixel( Size( nFTWidth, m_aFT_SplineOrder.GetSizePixel().Height() ) );
+ m_aFT_SplineResolution.SetSizePixel( Size( nFTWidth, m_aFT_SplineResolution.GetSizePixel().Height() ) );
+
+ m_aMF_SplineOrder.SetPosPixel( Point( nMFXPos, m_aMF_SplineOrder.GetPosPixel().Y() ) );
+ m_aMF_SplineResolution.SetPosPixel( Point( nMFXPos, m_aMF_SplineResolution.GetPosPixel().Y() ) );
+}
+
+void SplinePropertiesDialog::adjustSize()
+{
+ Size aDlgSize( this->GetSizePixel() );
+ long nBorder = m_aRB_Splines_Cubic.GetPosPixel().X();
+ long nX = m_aMF_SplineOrder.GetPosPixel().X() + m_aMF_SplineOrder.GetSizePixel().Width();
+ if(aDlgSize.Width()< (nX+nBorder) )
+ {
+ aDlgSize.Width() = (nX+nBorder);
+ this->SetSizePixel(aDlgSize);
+
+ Size aLineSize( m_aFL_DialogButtons.GetSizePixel() );
+ aLineSize.Width() = aDlgSize.Width();
+ m_aFL_DialogButtons.SetSizePixel(aLineSize);
+ }
+}
+void SplinePropertiesDialog::fillControls( const ChartTypeParameter& rParameter )
+{
+ switch(rParameter.eCurveStyle)
+ {
+ case CurveStyle_CUBIC_SPLINES:
+ m_aRB_Splines_Cubic.Check();
+ break;
+ case CurveStyle_B_SPLINES:
+ m_aRB_Splines_B.Check();
+ break;
+ default:
+ m_aRB_Splines_Cubic.Check();
+ break;
+ }
+ m_aMF_SplineOrder.SetValue( rParameter.nSplineOrder );
+ m_aMF_SplineResolution.SetValue( rParameter.nCurveResolution );
+
+ //dis/enabling
+ m_aFT_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
+ m_aMF_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
+}
+void SplinePropertiesDialog::fillParameter( ChartTypeParameter& rParameter, bool bSmoothLines )
+{
+ if(!bSmoothLines)
+ rParameter.eCurveStyle=CurveStyle_LINES;
+ else if(m_aRB_Splines_Cubic.IsChecked())
+ rParameter.eCurveStyle=CurveStyle_CUBIC_SPLINES;
+ else if(m_aRB_Splines_B.IsChecked())
+ rParameter.eCurveStyle=CurveStyle_B_SPLINES;
+
+ rParameter.nCurveResolution = static_cast< sal_Int32 >( m_aMF_SplineResolution.GetValue());
+ rParameter.nSplineOrder = static_cast< sal_Int32 >( m_aMF_SplineOrder.GetValue());
+}
+IMPL_LINK( SplinePropertiesDialog, SplineModeRadioHdl, RadioButton*, EMPTYARG )
+{
+ m_aFT_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
+ m_aMF_SplineOrder.Enable(m_aRB_Splines_B.IsChecked());
+ return 0;
+}
+
+//--------------------------------------------------------------------------
+
+class SplineResourceGroup : public ChangingResource
+{
+public:
+ SplineResourceGroup( Window* pWindow );
+ virtual ~SplineResourceGroup();
+
+ void showControls( bool bShow );
+ Point getPosition();
+ long getHeight();
+ void setPosition( const Point& rPoint );
+
+ void fillControls( const ChartTypeParameter& rParameter );
+ void fillParameter( ChartTypeParameter& rParameter );
+
+private:
+ DECL_LINK( SplineChangeHdl, void* );
+ DECL_LINK( SplineDetailsDialogHdl, void* );
+ SplinePropertiesDialog& getSplinePropertiesDialog();
+
+private:
+ CheckBox m_aCB_Splines;
+ PushButton m_aPB_DetailsDialog;
+ ::std::auto_ptr< SplinePropertiesDialog > m_pSplinePropertiesDialog;
+};
+SplineResourceGroup::SplineResourceGroup( Window* pWindow )
+ : ChangingResource()
+ , m_aCB_Splines( pWindow, SchResId( CB_SPLINES ) )
+ , m_aPB_DetailsDialog( pWindow, SchResId( PB_SPLINE_DIALOG ) )
+ , m_pSplinePropertiesDialog()
+{
+ m_aCB_Splines.SetToggleHdl( LINK( this, SplineResourceGroup, SplineChangeHdl ) );
+ m_aPB_DetailsDialog.SetClickHdl( LINK( this, SplineResourceGroup, SplineDetailsDialogHdl ) );
+ m_aPB_DetailsDialog.SetQuickHelpText( String( SchResId(STR_DLG_SMOOTH_LINE_PROPERTIES) ) );
+
+ Size aButtonSize( m_aPB_DetailsDialog.GetSizePixel() );
+ Size aMinSize( m_aPB_DetailsDialog.CalcMinimumSize() );
+ sal_Int32 nDistance = 10;
+ if( pWindow )
+ {
+ Size aDistanceSize( pWindow->LogicToPixel( Size(RSC_SP_CTRL_DESC_X,2), MapMode(MAP_APPFONT) ) );
+ nDistance = 2*aDistanceSize.Width();
+ }
+ aButtonSize.Width() = aMinSize.Width() + nDistance;
+ m_aPB_DetailsDialog.SetSizePixel( aButtonSize );
+}
+SplineResourceGroup::~SplineResourceGroup()
+{
+}
+SplinePropertiesDialog& SplineResourceGroup::getSplinePropertiesDialog()
+{
+ if( !m_pSplinePropertiesDialog.get() )
+ m_pSplinePropertiesDialog = ::std::auto_ptr< SplinePropertiesDialog >( new SplinePropertiesDialog( m_aPB_DetailsDialog.GetParent() ) );
+ return *m_pSplinePropertiesDialog;
+}
+void SplineResourceGroup::showControls( bool bShow )
+{
+ m_aCB_Splines.Show(bShow);
+ m_aPB_DetailsDialog.Show(bShow);
+}
+Point SplineResourceGroup::getPosition()
+{
+ return m_aCB_Splines.GetPosPixel();
+}
+long SplineResourceGroup::getHeight()
+{
+ return m_aCB_Splines.GetSizePixel().Height() + m_aPB_DetailsDialog.LogicToPixel( Size(0,2), MapMode(MAP_APPFONT) ).Height();
+}
+void SplineResourceGroup::setPosition( const Point& rPoint )
+{
+ Size aSize( m_aCB_Splines.CalcMinimumSize() );
+ Size aDistanceSize( m_aCB_Splines.LogicToPixel( Size(RSC_SP_CTRL_GROUP_X,1), MapMode(MAP_APPFONT) ) );
+ m_aCB_Splines.SetSizePixel( aSize );
+
+ Point aOld = this->getPosition();
+ long nDiffY = rPoint.Y() - aOld.Y();
+ long nDiffX = rPoint.X() - aOld.X();
+
+ Point aNew( aOld.X()+nDiffX, aOld.Y()+nDiffY );
+ m_aCB_Splines.SetPosPixel( aNew );
+
+ aNew.X() += ( aSize.Width() + aDistanceSize.Width() );
+ aNew.Y() -= 3*aDistanceSize.Height();
+ m_aPB_DetailsDialog.SetPosPixel( aNew );
+}
+
+void SplineResourceGroup::fillControls( const ChartTypeParameter& rParameter )
+{
+ m_aCB_Splines.Check( rParameter.eCurveStyle!=CurveStyle_LINES );
+ getSplinePropertiesDialog().fillControls( rParameter );
+}
+void SplineResourceGroup::fillParameter( ChartTypeParameter& rParameter )
+{
+ getSplinePropertiesDialog().fillParameter( rParameter, m_aCB_Splines.IsChecked() );
+}
+IMPL_LINK( SplineResourceGroup, SplineChangeHdl, void*, EMPTYARG )
+{
+ if( m_pChangeListener )
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+
+IMPL_LINK( SplineResourceGroup, SplineDetailsDialogHdl, void*, EMPTYARG )
+{
+
+ ChartTypeParameter aOldParameter;
+ getSplinePropertiesDialog().fillParameter( aOldParameter, m_aCB_Splines.IsChecked() );
+
+ BOOL bOldSmoothLines = m_aCB_Splines.IsChecked();
+ m_aCB_Splines.Check();
+ if( RET_OK == getSplinePropertiesDialog().Execute() )
+ {
+ if( m_pChangeListener )
+ m_pChangeListener->stateChanged(this);
+ }
+ else
+ {
+ //restore old state:
+ m_aCB_Splines.Check( bOldSmoothLines );
+ getSplinePropertiesDialog().fillControls( aOldParameter );
+ }
+ return 0;
+}
+
+//--------------------------------------------------------------------------
+
+class GeometryResourceGroup : public ChangingResource
+{
+public:
+ GeometryResourceGroup( Window* pWindow );
+ virtual ~GeometryResourceGroup();
+
+ void showControls( bool bShow );
+ long getHeight();
+ void setPosition( const Point& rPoint );
+
+ void fillControls( const ChartTypeParameter& rParameter );
+ void fillParameter( ChartTypeParameter& rParameter );
+
+private:
+ DECL_LINK( GeometryChangeHdl, void* );
+
+private:
+ BarGeometryResources m_aGeometryResources;
+};
+GeometryResourceGroup::GeometryResourceGroup( Window* pWindow )
+ : ChangingResource()
+ , m_aGeometryResources( pWindow )
+{
+ m_aGeometryResources.SetSelectHdl( LINK( this, GeometryResourceGroup, GeometryChangeHdl ) );
+}
+GeometryResourceGroup::~GeometryResourceGroup()
+{
+}
+void GeometryResourceGroup::showControls( bool bShow )
+{
+ m_aGeometryResources.Show(bShow);
+}
+long GeometryResourceGroup::getHeight()
+{
+ return m_aGeometryResources.GetSizePixel().Height();
+}
+void GeometryResourceGroup::setPosition( const Point& rPoint )
+{
+ m_aGeometryResources.SetPosPixel( rPoint );
+}
+
+void GeometryResourceGroup::fillControls( const ChartTypeParameter& rParameter )
+{
+ USHORT nGeometry3D = static_cast<USHORT>(rParameter.nGeometry3D);
+ m_aGeometryResources.SelectEntryPos(nGeometry3D);
+ m_aGeometryResources.Enable(rParameter.b3DLook);
+}
+void GeometryResourceGroup::fillParameter( ChartTypeParameter& rParameter )
+{
+ rParameter.nGeometry3D = 1;
+ if( m_aGeometryResources.GetSelectEntryCount() )
+ rParameter.nGeometry3D = m_aGeometryResources.GetSelectEntryPos();
+}
+IMPL_LINK( GeometryResourceGroup, GeometryChangeHdl, void*, EMPTYARG )
+{
+ if( m_pChangeListener )
+ m_pChangeListener->stateChanged(this);
+ return 0;
+}
+
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+
+ChartTypeTabPage::ChartTypeTabPage( Window* pParent
+ , const uno::Reference< XChartDocument >& xChartModel
+ , const uno::Reference< uno::XComponentContext >& xContext
+ , bool bDoLiveUpdate, bool bHideDescription )
+ : OWizardPage( pParent, SchResId(TP_CHARTTYPE) )
+ , m_aFT_ChooseType( this, SchResId( FT_CHARTTYPE ) )
+ , m_aMainTypeList( this, SchResId( LB_CHARTTYPE ) )
+ , m_aSubTypeList( this, SchResId( CT_CHARTVARIANT ) )
+ , m_pAxisTypeResourceGroup( new AxisTypeResourceGroup(this) )
+ , m_pDim3DLookResourceGroup( new Dim3DLookResourceGroup(this) )
+ , m_pStackingResourceGroup( new StackingResourceGroup(this) )
+ , m_pSplineResourceGroup( new SplineResourceGroup(this) )
+ , m_pGeometryResourceGroup( new GeometryResourceGroup( this ) )
+ , m_pSortByXValuesResourceGroup( new SortByXValuesResourceGroup( this ) )
+ , m_nYTopPos(0)
+ , m_xChartModel( xChartModel )
+ , m_xCC( xContext )
+ , m_aChartTypeDialogControllerList(0)
+ , m_pCurrentMainType(0)
+ , m_nChangingCalls(0)
+ , m_bDoLiveUpdate(bDoLiveUpdate)
+ , m_aTimerTriggeredControllerLock( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) )
+{
+ FreeResource();
+
+ if( bHideDescription )
+ {
+ m_aFT_ChooseType.Hide();
+ long nYDiff = m_aMainTypeList.GetPosPixel().Y() - m_aFT_ChooseType.GetPosPixel().Y();
+
+ Point aOldPos( m_aMainTypeList.GetPosPixel() );
+ m_aMainTypeList.SetPosPixel( Point( aOldPos.X(), aOldPos.Y() - nYDiff ) );
+
+ aOldPos = m_aSubTypeList.GetPosPixel();
+ m_aSubTypeList.SetPosPixel( Point( aOldPos.X(), aOldPos.Y() - nYDiff ) );
+
+ aOldPos = m_pAxisTypeResourceGroup->getPosition();
+ m_pAxisTypeResourceGroup->setPosition( Point( aOldPos.X(), aOldPos.Y() - nYDiff ) );
+
+ Size aSize( this->GetSizePixel() );
+ this->SetSizePixel( Size( aSize.Width(), aSize.Height()-nYDiff+3 ) );
+ }
+ else
+ {
+ Font aFont( m_aFT_ChooseType.GetControlFont() );
+ aFont.SetWeight( WEIGHT_BOLD );
+ m_aFT_ChooseType.SetControlFont( aFont );
+
+ m_aFT_ChooseType.SetStyle( m_aFT_ChooseType.GetStyle() | WB_NOLABEL );
+ }
+
+ this->SetText( String(SchResId(STR_PAGE_CHARTTYPE)) );
+
+ m_aMainTypeList.SetStyle(m_aMainTypeList.GetStyle() | WB_ITEMBORDER | WB_DOUBLEBORDER | WB_FLATVALUESET | WB_3DLOOK );
+ m_aMainTypeList.SetSelectHdl( LINK( this, ChartTypeTabPage, SelectMainTypeHdl ) );
+ m_aSubTypeList.SetSelectHdl( LINK( this, ChartTypeTabPage, SelectSubTypeHdl ) );
+
+ m_aSubTypeList.SetStyle(m_aSubTypeList.GetStyle() |
+ WB_ITEMBORDER | WB_DOUBLEBORDER | WB_NAMEFIELD | WB_FLATVALUESET | WB_3DLOOK );
+ m_aSubTypeList.SetColCount(4);
+ m_aSubTypeList.SetLineCount(1);
+
+ bool bIsHighContrast = ( true && GetSettings().GetStyleSettings().GetHighContrastMode() );
+
+ bool bDisableComplexChartTypes = false;
+ uno::Reference< beans::XPropertySet > xProps( m_xChartModel, uno::UNO_QUERY );
+ if ( xProps.is() )
+ {
+ try
+ {
+ xProps->getPropertyValue( C2U( "DisableComplexChartTypes" ) ) >>= bDisableComplexChartTypes;
+ }
+ catch( uno::Exception& e )
+ {
+ ASSERT_EXCEPTION( e );
+ }
+ }
+
+ m_aChartTypeDialogControllerList.push_back(new ColumnChartDialogController() );
+ m_aChartTypeDialogControllerList.push_back(new BarChartDialogController() );
+ m_aChartTypeDialogControllerList.push_back(new PieChartDialogController() );
+ m_aChartTypeDialogControllerList.push_back(new AreaChartDialogController() );
+ m_aChartTypeDialogControllerList.push_back(new LineChartDialogController() );
+ if ( !bDisableComplexChartTypes )
+ {
+ m_aChartTypeDialogControllerList.push_back(new XYChartDialogController() );
+ m_aChartTypeDialogControllerList.push_back(new BubbleChartDialogController() );
+ }
+ m_aChartTypeDialogControllerList.push_back(new NetChartDialogController() );
+ if ( !bDisableComplexChartTypes )
+ {
+ m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
+ }
+ m_aChartTypeDialogControllerList.push_back(new CombiColumnLineChartDialogController() );
+
+ ::std::vector< ChartTypeDialogController* >::const_iterator aIter = m_aChartTypeDialogControllerList.begin();
+ const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
+ for( ; aIter != aEnd; aIter++ )
+ {
+ m_aMainTypeList.InsertEntry( (*aIter)->getName(), (*aIter)->getImage( bIsHighContrast ) );
+ (*aIter)->setChangeListener( this );
+ }
+
+ m_nYTopPos = m_pAxisTypeResourceGroup->getPosition().Y();
+
+ m_pAxisTypeResourceGroup->setChangeListener( this );
+ m_pDim3DLookResourceGroup->setChangeListener( this );
+ m_pStackingResourceGroup->setChangeListener( this );
+ m_pSplineResourceGroup->setChangeListener( this );
+ m_pGeometryResourceGroup->setChangeListener( this );
+ m_pSortByXValuesResourceGroup->setChangeListener( this );
+}
+
+ChartTypeTabPage::~ChartTypeTabPage()
+{
+ //delete all dialog controller
+ ::std::vector< ChartTypeDialogController* >::const_iterator aIter = m_aChartTypeDialogControllerList.begin();
+ const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
+ for( ; aIter != aEnd; aIter++ )
+ {
+ delete *aIter;
+ }
+ m_aChartTypeDialogControllerList.clear();
+
+ //delete all resource helper
+ delete m_pAxisTypeResourceGroup;
+ delete m_pDim3DLookResourceGroup;
+ delete m_pStackingResourceGroup;
+ delete m_pSplineResourceGroup;
+ delete m_pGeometryResourceGroup;
+ delete m_pSortByXValuesResourceGroup;
+}
+ChartTypeParameter ChartTypeTabPage::getCurrentParamter() const
+{
+ ChartTypeParameter aParameter;
+ aParameter.nSubTypeIndex = static_cast<sal_Int32>( m_aSubTypeList.GetSelectItemId() );
+ m_pAxisTypeResourceGroup->fillParameter( aParameter );
+ m_pDim3DLookResourceGroup->fillParameter( aParameter );
+ m_pStackingResourceGroup->fillParameter( aParameter );
+ m_pSplineResourceGroup->fillParameter( aParameter );
+ m_pGeometryResourceGroup->fillParameter( aParameter );
+ m_pSortByXValuesResourceGroup->fillParameter( aParameter );
+ return aParameter;
+}
+void ChartTypeTabPage::commitToModel( const ChartTypeParameter& rParameter )
+{
+ if( !m_pCurrentMainType )
+ return;
+
+ m_aTimerTriggeredControllerLock.startTimer();
+ ControllerLockGuard aLockedControllers( uno::Reference< frame::XModel >( m_xChartModel, uno::UNO_QUERY ) );
+ m_pCurrentMainType->commitToModel( rParameter, m_xChartModel );
+}
+void ChartTypeTabPage::stateChanged( ChangingResource* /*pResource*/ )
+{
+ if(m_nChangingCalls)
+ return;
+ m_nChangingCalls++;
+
+ ChartTypeParameter aParameter( this->getCurrentParamter() );
+ if( m_pCurrentMainType )
+ {
+ m_pCurrentMainType->adjustParameterToSubType( aParameter );
+ m_pCurrentMainType->adjustSubTypeAndEnableControls( aParameter );
+ }
+ if( m_bDoLiveUpdate )
+ commitToModel( aParameter );
+
+ //detect the new ThreeDLookScheme
+ aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( ChartModelHelper::findDiagram( m_xChartModel ) );
+ aParameter.bSortByXValues = lcl_getSortByXValues( m_xChartModel );
+ //the controls have to be enabled/disabled accordingly
+ this->fillAllControls( aParameter );
+
+ m_nChangingCalls--;
+}
+ChartTypeDialogController* ChartTypeTabPage::getSelectedMainType()
+{
+ ChartTypeDialogController* pTypeController = 0;
+ ::std::vector< ChartTypeDialogController* >::size_type nM = static_cast< ::std::vector< ChartTypeDialogController* >::size_type >(
+ m_aMainTypeList.GetSelectEntryPos() );
+ if( nM<m_aChartTypeDialogControllerList.size() )
+ pTypeController = m_aChartTypeDialogControllerList[nM];
+ return pTypeController;
+}
+IMPL_LINK( ChartTypeTabPage, SelectSubTypeHdl, void *, EMPTYARG )
+{
+ if( m_pCurrentMainType )
+ {
+ ChartTypeParameter aParameter( this->getCurrentParamter() );
+ m_pCurrentMainType->adjustParameterToSubType( aParameter );
+ this->fillAllControls( aParameter, false );
+ if( m_bDoLiveUpdate )
+ commitToModel( aParameter );
+ }
+ return 0;
+}
+
+IMPL_LINK( ChartTypeTabPage, SelectMainTypeHdl, void *, EMPTYARG )
+{
+ ChartTypeParameter aParameter( this->getCurrentParamter() );
+
+ if( m_pCurrentMainType )
+ {
+ m_pCurrentMainType->adjustParameterToSubType( aParameter );
+ m_pCurrentMainType->hideExtraControls();
+ }
+
+ m_pCurrentMainType = this->getSelectedMainType();
+ if( m_pCurrentMainType )
+ {
+ this->showAllControls(*m_pCurrentMainType);
+
+ m_pCurrentMainType->adjustParameterToMainType( aParameter );
+ if( m_bDoLiveUpdate )
+ commitToModel( aParameter );
+ //detect the new ThreeDLookScheme
+ aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( ChartModelHelper::findDiagram( m_xChartModel ) );
+ if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
+ aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
+
+ aParameter.bSortByXValues = lcl_getSortByXValues( m_xChartModel );
+ this->fillAllControls( aParameter );
+ uno::Reference< beans::XPropertySet > xTemplateProps( this->getCurrentTemplate(), uno::UNO_QUERY );
+ m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
+ }
+ return 0;
+}
+
+void ChartTypeTabPage::showAllControls( ChartTypeDialogController& rTypeController )
+{
+ m_aSubTypeList.Show();
+
+ long nYPos = m_nYTopPos;
+
+ //------
+ bool bShow = rTypeController.shouldShow_XAxisTypeControl();
+ long nXPos = m_pAxisTypeResourceGroup->getPosition().X();
+ m_pAxisTypeResourceGroup->showControls( bShow );
+ if(bShow)
+ {
+ m_pAxisTypeResourceGroup->setPosition( Point( nXPos, nYPos ) );
+ nYPos += m_pAxisTypeResourceGroup->getHeight() + lcl_getDistance();
+ }
+ //------
+ bShow = rTypeController.shouldShow_3DLookControl();
+ m_pDim3DLookResourceGroup->showControls( bShow );
+ if(bShow)
+ {
+ m_pDim3DLookResourceGroup->setPosition( Point( nXPos, nYPos ) );
+ nYPos += m_pDim3DLookResourceGroup->getHeight() + lcl_getDistance();
+ }
+ //------
+ bShow = rTypeController.shouldShow_StackingControl();
+ m_pStackingResourceGroup->showControls( bShow, rTypeController.shouldShow_DeepStackingControl() );
+ if(bShow)
+ {
+ long nStackingXPos = nXPos;
+ if( rTypeController.shouldShow_XAxisTypeControl() )
+ nStackingXPos += this->LogicToPixel( Size(RSC_SP_CHK_TEXTINDENT,0), MapMode(MAP_APPFONT) ).Width();
+ m_pStackingResourceGroup->setPosition( Point( nStackingXPos, nYPos ) );
+ nYPos += m_pStackingResourceGroup->getHeight() + lcl_getDistance();
+ }
+ //------
+ bShow = rTypeController.shouldShow_SplineControl();
+ m_pSplineResourceGroup->showControls( bShow );
+ if(bShow)
+ {
+ m_pSplineResourceGroup->setPosition( Point( nXPos, nYPos ) );
+ nYPos += m_pSplineResourceGroup->getHeight() + lcl_getDistance();
+ }
+ //------
+ bShow = rTypeController.shouldShow_GeometryControl();
+ m_pGeometryResourceGroup->showControls( bShow );
+ if(bShow)
+ {
+ m_pGeometryResourceGroup->setPosition( Point( nXPos+17, nYPos ) );
+ nYPos += m_pGeometryResourceGroup->getHeight() + lcl_getDistance();
+ }
+ //------
+ bShow = rTypeController.shouldShow_SortByXValuesResourceGroup();
+ m_pSortByXValuesResourceGroup->showControls( bShow );
+ if(bShow)
+ {
+ m_pSortByXValuesResourceGroup->setPosition( Point( nXPos, nYPos ) );
+ nYPos += m_pSortByXValuesResourceGroup->getHeight() + lcl_getDistance();
+ }
+ //------
+ Size aPageSize( this->GetSizePixel() );
+ Size aRemainingSize = Size( aPageSize.Width()-nXPos, aPageSize.Height()-nYPos );
+ rTypeController.showExtraControls( this, Point( nXPos, nYPos ), aRemainingSize );
+}
+
+void ChartTypeTabPage::fillAllControls( const ChartTypeParameter& rParameter, bool bAlsoResetSubTypeList )
+{
+ m_nChangingCalls++;
+ if( m_pCurrentMainType && bAlsoResetSubTypeList )
+ {
+ bool bIsHighContrast = ( true && GetSettings().GetStyleSettings().GetHighContrastMode() );
+ m_pCurrentMainType->fillSubTypeList( m_aSubTypeList, bIsHighContrast, rParameter );
+ }
+ m_aSubTypeList.SelectItem( static_cast<USHORT>( rParameter.nSubTypeIndex) );
+ m_pAxisTypeResourceGroup->fillControls( rParameter );
+ m_pDim3DLookResourceGroup->fillControls( rParameter );
+ m_pStackingResourceGroup->fillControls( rParameter );
+ m_pSplineResourceGroup->fillControls( rParameter );
+ m_pGeometryResourceGroup->fillControls( rParameter );
+ m_pSortByXValuesResourceGroup->fillControls( rParameter );
+ m_nChangingCalls--;
+}
+
+void ChartTypeTabPage::initializePage()
+{
+ if( !m_xChartModel.is() )
+ return;
+ uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
+ uno::Reference< frame::XModel > xModel( m_xChartModel, uno::UNO_QUERY);
+ uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) );
+ DiagramHelper::tTemplateWithServiceName aTemplate =
+ DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager );
+ ::rtl::OUString aServiceName( aTemplate.second );
+
+ bool bFound = false;
+
+ ::std::vector< ChartTypeDialogController* >::iterator aIter = m_aChartTypeDialogControllerList.begin();
+ const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd = m_aChartTypeDialogControllerList.end();
+ for( USHORT nM=0; aIter != aEnd; aIter++, nM++ )
+ {
+ if( (*aIter)->isSubType(aServiceName) )
+ {
+ bFound = true;
+
+ m_aMainTypeList.SelectEntryPos( nM );
+ this->showAllControls( **aIter );
+ uno::Reference< beans::XPropertySet > xTemplateProps( aTemplate.first, uno::UNO_QUERY );
+ ChartTypeParameter aParameter = (*aIter)->getChartTypeParameterForService( aServiceName, xTemplateProps );
+ m_pCurrentMainType = this->getSelectedMainType();
+
+ //set ThreeDLookScheme
+ aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme( xDiagram );
+ if(!aParameter.b3DLook && aParameter.eThreeDLookScheme!=ThreeDLookScheme_Realistic )
+ aParameter.eThreeDLookScheme=ThreeDLookScheme_Realistic;
+
+ aParameter.bSortByXValues = lcl_getSortByXValues( m_xChartModel );
+
+ this->fillAllControls( aParameter );
+ if( m_pCurrentMainType )
+ m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
+ break;
+ }
+ }
+
+ if( !bFound )
+ {
+ m_aSubTypeList.Hide();
+ m_pAxisTypeResourceGroup->showControls( false );
+ m_pDim3DLookResourceGroup->showControls( false );
+ m_pStackingResourceGroup->showControls( false, false );
+ m_pSplineResourceGroup->showControls( false );
+ m_pGeometryResourceGroup->showControls( false );
+ m_pSortByXValuesResourceGroup->showControls( false );
+ }
+}
+
+sal_Bool ChartTypeTabPage::commitPage( ::svt::WizardTypes::CommitPageReason /*eReason*/ )
+{
+ //commit changes to model
+ if( !m_bDoLiveUpdate && m_pCurrentMainType )
+ {
+ ChartTypeParameter aParameter( this->getCurrentParamter() );
+ m_pCurrentMainType->adjustParameterToSubType( aParameter );
+ commitToModel( aParameter );
+ }
+
+ return sal_True;//return false if this page should not be left
+}
+
+uno::Reference< XChartTypeTemplate > ChartTypeTabPage::getCurrentTemplate() const
+{
+ if( m_pCurrentMainType && m_xChartModel.is() )
+ {
+ ChartTypeParameter aParameter( this->getCurrentParamter() );
+ m_pCurrentMainType->adjustParameterToSubType( aParameter );
+ uno::Reference< lang::XMultiServiceFactory > xTemplateManager( m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
+ return m_pCurrentMainType->getCurrentTemplate( aParameter, xTemplateManager );
+ }
+ return 0;
+}
+
+//.............................................................................
+} //namespace chart
+//.............................................................................