diff options
Diffstat (limited to 'chart2/source/controller/dialogs/dlg_ChartType.cxx')
-rw-r--r-- | chart2/source/controller/dialogs/dlg_ChartType.cxx | 773 |
1 files changed, 480 insertions, 293 deletions
diff --git a/chart2/source/controller/dialogs/dlg_ChartType.cxx b/chart2/source/controller/dialogs/dlg_ChartType.cxx index 029663b0d9b7..1c47fc1541a3 100644 --- a/chart2/source/controller/dialogs/dlg_ChartType.cxx +++ b/chart2/source/controller/dialogs/dlg_ChartType.cxx @@ -2,9 +2,9 @@ * * $RCSfile: dlg_ChartType.cxx,v $ * - * $Revision: 1.1.1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: bm $ $Date: 2003-10-06 09:58:25 $ + * last change: $Author: bm $ $Date: 2003-11-04 12:37:12 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -93,14 +93,13 @@ #include "Bitmaps.hrc" #include "Bitmaps_HC.hrc" #include "Strings.hrc" +#include "DataSeriesTreeHelper.hxx" +#include "InlineContainer.hxx" +#include "macros.hxx" -#include "SchSfxItemIds.hxx" +#include <functional> -//#include "SchAllDefinesFor_svx_chrtitem.hxx" -#define ITEMID_CHARTSTYLE SCHATTR_DIAGRAM_STYLE -#ifndef _SVX_CHRTITEM_HXX -#include <svx/chrtitem.hxx> -#endif +#include "SchSfxItemIds.hxx" // header for class SfxInt32Item #ifndef _SFXINTITEM_HXX @@ -141,6 +140,175 @@ //#define CHTYPE_ADDIN 11 //............................................................................. +namespace +{ +typedef ::std::map< ::rtl::OUString, sal_Int32 > tTemplateServiceMap; + +const tTemplateServiceMap & lcl_GetChartTemplateServiceNameMap() +{ + static tTemplateServiceMap aTemplateMap( + ::comphelper::MakeMap< ::rtl::OUString, sal_Int32 > + ( C2U( "com.sun.star.chart2.template.Line" ), CHSTYLE_2D_LINE) + ( C2U( "com.sun.star.chart2.template.StackedLine" ), CHSTYLE_2D_STACKEDLINE) + ( C2U( "com.sun.star.chart2.template.PercentStackedLine" ), CHSTYLE_2D_PERCENTLINE) + ( C2U( "com.sun.star.chart2.template.LineSymbol" ), CHSTYLE_2D_LINESYMBOLS) + ( C2U( "com.sun.star.chart2.template.StackedLineSymbol" ), CHSTYLE_2D_STACKEDLINESYM) + ( C2U( "com.sun.star.chart2.template.PercentStackedLineSymbol" ), CHSTYLE_2D_PERCENTLINESYM) + ( C2U( "com.sun.star.chart2.template.CubicSpline" ), CHSTYLE_2D_CUBIC_SPLINE) + ( C2U( "com.sun.star.chart2.template.CubicSplineSymbol" ), CHSTYLE_2D_CUBIC_SPLINE_SYMBOL) + ( C2U( "com.sun.star.chart2.template.BSpline" ), CHSTYLE_2D_B_SPLINE) + ( C2U( "com.sun.star.chart2.template.BSplineSymbol" ), CHSTYLE_2D_B_SPLINE_SYMBOL) + ( C2U( "com.sun.star.chart2.template.ThreeDLine" ), CHSTYLE_3D_STRIPE) + ( C2U( "com.sun.star.chart2.template.Column" ), CHSTYLE_2D_COLUMN) + ( C2U( "com.sun.star.chart2.template.StackedColumn" ), CHSTYLE_2D_STACKEDCOLUMN) + ( C2U( "com.sun.star.chart2.template.PercentStackedColumn" ), CHSTYLE_2D_PERCENTCOLUMN) + ( C2U( "com.sun.star.chart2.template.Bar" ), CHSTYLE_2D_BAR) + ( C2U( "com.sun.star.chart2.template.StackedBar" ), CHSTYLE_2D_STACKEDBAR) + ( C2U( "com.sun.star.chart2.template.PercentStackedBar" ), CHSTYLE_2D_PERCENTBAR) + ( C2U( "com.sun.star.chart2.template.ThreeDColumnDeep" ), CHSTYLE_3D_COLUMN) + ( C2U( "com.sun.star.chart2.template.ThreeDColumnFlat" ), CHSTYLE_3D_FLATCOLUMN) + ( C2U( "com.sun.star.chart2.template.StackedThreeDColumnFlat" ), CHSTYLE_3D_STACKEDFLATCOLUMN) + ( C2U( "com.sun.star.chart2.template.PercentStackedThreeDColumnFlat" ), CHSTYLE_3D_PERCENTFLATCOLUMN) + ( C2U( "com.sun.star.chart2.template.ThreeDBarDeep" ), CHSTYLE_3D_BAR) + ( C2U( "com.sun.star.chart2.template.ThreeDBarFlat" ), CHSTYLE_3D_FLATBAR) + ( C2U( "com.sun.star.chart2.template.StackedThreeDBarFlat" ), CHSTYLE_3D_STACKEDFLATBAR) + ( C2U( "com.sun.star.chart2.template.PercentStackedThreeDBarFlat" ), CHSTYLE_3D_PERCENTFLATBAR) + ( C2U( "com.sun.star.chart2.template.ColumnWithLine" ), CHSTYLE_2D_LINE_COLUMN) + ( C2U( "com.sun.star.chart2.template.StackedColumnWithLine" ), CHSTYLE_2D_LINE_STACKEDCOLUMN) + ( C2U( "com.sun.star.chart2.template.Area" ), CHSTYLE_2D_AREA) + ( C2U( "com.sun.star.chart2.template.StackedArea" ), CHSTYLE_2D_STACKEDAREA) + ( C2U( "com.sun.star.chart2.template.PercentStackedArea" ), CHSTYLE_2D_PERCENTAREA) + ( C2U( "com.sun.star.chart2.template.ThreeDArea" ), CHSTYLE_3D_AREA) + ( C2U( "com.sun.star.chart2.template.StackedThreeDArea" ), CHSTYLE_3D_STACKEDAREA) + ( C2U( "com.sun.star.chart2.template.PercentStackedThreeDArea" ), CHSTYLE_3D_PERCENTAREA) + ( C2U( "com.sun.star.chart2.template.Pie" ), CHSTYLE_2D_PIE) + ( C2U( "com.sun.star.chart2.template.PieOneExploded" ), CHSTYLE_2D_PIE_SEGOF1) + ( C2U( "com.sun.star.chart2.template.PieAllExploded" ), CHSTYLE_2D_PIE_SEGOFALL) + ( C2U( "com.sun.star.chart2.template.Ring" ), CHSTYLE_2D_DONUT1) +// ( C2U( "com.sun.star.chart2.template.Ring" ), CHSTYLE_2D_DONUT2) + ( C2U( "com.sun.star.chart2.template.ThreeDPie" ), CHSTYLE_3D_PIE) + ( C2U( "com.sun.star.chart2.template.ScatterLineSymbol" ), CHSTYLE_2D_XY) + ( C2U( "com.sun.star.chart2.template.CubicSplineScatter" ), CHSTYLE_2D_CUBIC_SPLINE_XY) + ( C2U( "com.sun.star.chart2.template.CubicSplineScatterSymbol" ), CHSTYLE_2D_CUBIC_SPLINE_SYMBOL_XY) + ( C2U( "com.sun.star.chart2.template.BSplineScatter" ), CHSTYLE_2D_B_SPLINE_XY) + ( C2U( "com.sun.star.chart2.template.BSplineScatterSymbol" ), CHSTYLE_2D_B_SPLINE_SYMBOL_XY) + ( C2U( "com.sun.star.chart2.template.ScatterLine" ), CHSTYLE_2D_XY_LINE) + ( C2U( "com.sun.star.chart2.template.ScatterSymbol" ), CHSTYLE_2D_XYSYMBOLS) + ( C2U( "com.sun.star.chart2.template.Net" ), CHSTYLE_2D_NET) + ( C2U( "com.sun.star.chart2.template.NetSymbol" ), CHSTYLE_2D_NET_SYMBOLS) + ( C2U( "com.sun.star.chart2.template.StackedNet" ), CHSTYLE_2D_NET_STACK) + ( C2U( "com.sun.star.chart2.template.StackedNetSymbol" ), CHSTYLE_2D_NET_SYMBOLS_STACK) + ( C2U( "com.sun.star.chart2.template.PercentStackedNet" ), CHSTYLE_2D_NET_PERCENT) + ( C2U( "com.sun.star.chart2.template.PercentStackedNetSymbol" ), CHSTYLE_2D_NET_SYMBOLS_PERCENT) + ( C2U( "com.sun.star.chart2.template.StockLowHighClose" ), CHSTYLE_2D_STOCK_1) + ( C2U( "com.sun.star.chart2.template.StockOpenLowHighClose" ), CHSTYLE_2D_STOCK_2) + ( C2U( "com.sun.star.chart2.template.StockVolumeLowHighClose" ), CHSTYLE_2D_STOCK_3) + ( C2U( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose" ), CHSTYLE_2D_STOCK_4) + ( C2U( "com.sun.star.chart2.template.Surface" ), CHSTYLE_3D_SURFACE) + ( C2U( "com.sun.star.chart2.template.ThreeDScatter" ), CHSTYLE_3D_XYZ) + ( C2U( "com.sun.star.chart2.template.ThreeDScatterSymbol" ), CHSTYLE_3D_XYZSYMBOLS) + ( C2U( "com.sun.star.chart2.template.Addin" ), CHSTYLE_ADDIN) + ); + + return aTemplateMap; +} + +SvxChartStyle lcl_GetChartStyleForTemplateServiceName( const ::rtl::OUString & rServiceName ) +{ + const tTemplateServiceMap & rMap = lcl_GetChartTemplateServiceNameMap(); + tTemplateServiceMap::const_iterator aIt( rMap.find( rServiceName )); + if( aIt != rMap.end()) + return static_cast< SvxChartStyle >( (*aIt).second ); + + return CHSTYLE_ADDIN; +} + +::rtl::OUString lcl_GetTemplateServiceNameForChartStyle( SvxChartStyle eStyle ) +{ + const tTemplateServiceMap & rMap = lcl_GetChartTemplateServiceNameMap(); + tTemplateServiceMap::const_iterator aIt( + ::std::find_if( rMap.begin(), rMap.end(), + ::std::compose1( ::std::bind2nd( + ::std::equal_to< tTemplateServiceMap::data_type >(), + static_cast< sal_Int32 >( eStyle ) ), + ::std::select2nd< tTemplateServiceMap::value_type >()))); + if( aIt != rMap.end()) + return (*aIt).first; + + return ::rtl::OUString(); +} + +bool lcl_IsBSplineChart( SvxChartStyle eStyle ) +{ + switch( eStyle ) + { + case CHSTYLE_2D_B_SPLINE : + case CHSTYLE_2D_B_SPLINE_SYMBOL : + case CHSTYLE_2D_B_SPLINE_XY : + case CHSTYLE_2D_B_SPLINE_SYMBOL_XY : + return true; + + default: + return false; + } + return false; +} + +bool lcl_IsCubicSplineChart( SvxChartStyle eStyle ) +{ + switch( eStyle ) + { + case CHSTYLE_2D_CUBIC_SPLINE : + case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL : + case CHSTYLE_2D_CUBIC_SPLINE_XY : + case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL_XY : + return true; + + default: + return false; + } + return false; +} + +bool lcl_IsShapeStyleChartType( SvxChartStyle eStyle ) +{ + switch( eStyle ) + { + case CHSTYLE_3D_COLUMN: + case CHSTYLE_3D_FLATCOLUMN: + case CHSTYLE_3D_STACKEDFLATCOLUMN: + case CHSTYLE_3D_PERCENTFLATCOLUMN: + case CHSTYLE_3D_BAR: + case CHSTYLE_3D_FLATBAR: + case CHSTYLE_3D_STACKEDFLATBAR: + case CHSTYLE_3D_PERCENTFLATBAR: + return true; + + default: + return false; + } + return false; +} + +bool lcl_IsCombiChart( SvxChartStyle eStyle ) +{ + switch( eStyle ) + { + case CHSTYLE_2D_LINE_COLUMN: + case CHSTYLE_2D_LINE_STACKEDCOLUMN: + return true; + default: + return false; + } + return false; +} + +} // anonymous namespace + +using namespace ::com::sun::star; +using namespace ::drafts::com::sun::star; + +//............................................................................. namespace chart { //............................................................................. @@ -149,30 +317,33 @@ namespace chart // bIsHighContrast must exist and reflect the correct state #define SELECT_BITMAP(name) Bitmap( SchResId( bIsHighContrast ? name ## _HC : name )) -SchDiagramTypeDlg::SchDiagramTypeDlg(Window* pWindow, - const SfxItemSet& rInAttrs) : - ModalDialog(pWindow, SchResId(DLG_DIAGRAM_TYPE)), - - n3DGeometry(CHART_SHAPE3D_ANY), - aRbt2D(this, ResId(RBT_2D)), - aRbt3D(this, ResId(RBT_3D)), - aFlDimension(this, ResId(FL_DIMENSION)), - aFtDeep( this, ResId( FT_DEEP ) ), - aMtrFldDeep( this, ResId( MTR_FLD_DEEP ) ), - aFtGran( this, ResId( FT_GRAN ) ), - aMtrFldGran( this, ResId( MTR_FLD_GRAN ) ), - aFtNumLines( this, ResId( FT_NUM_OF_LINES ) ), - aMtrFldNumLines( this, ResId( MTR_FLD_NUM_OF_LINES ) ), - - aFtType(this, ResId(FT_TYPE)), - aCtlType(this, ResId(CTL_TYPE)), - aFtVariant(this, ResId(FT_VARIANT)), - aCtlVariant(this, ResId(CTL_VARIANT)), - aBtnOK(this, ResId(BTN_OK)), - aBtnCancel(this, ResId(BTN_CANCEL)), - aBtnHelp(this, ResId(BTN_HELP)), - eDimension(CHDIM_2D), - rOutAttrs(rInAttrs) +SchDiagramTypeDlg::SchDiagramTypeDlg( + Window* pWindow, + const uno::Reference< chart2::XDiagram > & xDiagram, + const uno::Reference< lang::XMultiServiceFactory > & xTemplateManager ) : + ModalDialog(pWindow, SchResId(DLG_DIAGRAM_TYPE)), + + n3DGeometry(CHART_SHAPE3D_ANY), + aRbt2D(this, ResId(RBT_2D)), + aRbt3D(this, ResId(RBT_3D)), + aFlDimension(this, ResId(FL_DIMENSION)), + aFtDeep( this, ResId( FT_DEEP ) ), + aMtrFldDeep( this, ResId( MTR_FLD_DEEP ) ), + aFtGran( this, ResId( FT_GRAN ) ), + aMtrFldGran( this, ResId( MTR_FLD_GRAN ) ), + aFtNumLines( this, ResId( FT_NUM_OF_LINES ) ), + aMtrFldNumLines( this, ResId( MTR_FLD_NUM_OF_LINES ) ), + + aFtType(this, ResId(FT_TYPE)), + aCtlType(this, ResId(CTL_TYPE)), + aFtVariant(this, ResId(FT_VARIANT)), + aCtlVariant(this, ResId(CTL_VARIANT)), + aBtnOK(this, ResId(BTN_OK)), + aBtnCancel(this, ResId(BTN_CANCEL)), + aBtnHelp(this, ResId(BTN_HELP)), + eDimension(CHDIM_2D), + m_xDiagram( xDiagram ), + m_xTemplateManager( xTemplateManager ) { FreeResource(); @@ -203,8 +374,8 @@ SchDiagramTypeDlg::SchDiagramTypeDlg(Window* pWindow, Reset(); - //ToDo: This is just to have some default - SetMaximumNumberOfLines( 12 ); + // "- 1": at least one bar should remain + SetMaximumNumberOfLines( helper::DataSeriesTreeHelper::getDataSeriesFromDiagram( m_xDiagram ).getLength() - 1 ); } /************************************************************************* @@ -224,180 +395,169 @@ SchDiagramTypeDlg::~SchDiagramTypeDlg() void SchDiagramTypeDlg::Reset() { - const SfxPoolItem *pPoolItem = NULL; - - if (rOutAttrs.GetItemState(SCHATTR_STYLE_SHAPE, TRUE, &pPoolItem) - == SFX_ITEM_SET) - n3DGeometry=((const SfxInt32Item*)pPoolItem)->GetValue(); + if( ! m_xDiagram.is()) + return; - if (rOutAttrs.GetItemState(SCHATTR_DIAGRAM_STYLE, TRUE, &pPoolItem) - == SFX_ITEM_SET) - { - USHORT nType; - ChartDimension eDim; + uno::Reference< chart2::XDataSeriesTreeParent > xTree( m_xDiagram->getTree()); + SvxChartStyle eStyle = lcl_GetChartStyleForTemplateServiceName( + helper::DataSeriesTreeHelper::getChartTypeTemplateServiceName( xTree )); - //Hier sollte demnaechst folgendes ersatzweise stehen: - //nType=pDoc->GetBaseType(); - //eDim=(pDoc->GetDisplayDimension()==3)?CHDIM_3D:CHDIM_2D; - - switch (((const SvxChartStyleItem*)pPoolItem)->GetValue()) - { - case CHSTYLE_2D_B_SPLINE : - case CHSTYLE_2D_B_SPLINE_SYMBOL : - case CHSTYLE_2D_LINE: - case CHSTYLE_2D_STACKEDLINE: - case CHSTYLE_2D_PERCENTLINE: - case CHSTYLE_2D_LINESYMBOLS: - case CHSTYLE_2D_STACKEDLINESYM: - case CHSTYLE_2D_PERCENTLINESYM: - case CHSTYLE_2D_CUBIC_SPLINE : - case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL : - nType = CHTYPE_LINE; - eDim = CHDIM_2D; - break; - - case CHSTYLE_2D_COLUMN: - case CHSTYLE_2D_STACKEDCOLUMN: - case CHSTYLE_2D_PERCENTCOLUMN: - case CHSTYLE_2D_LINE_COLUMN: - case CHSTYLE_2D_LINE_STACKEDCOLUMN: - - nType = CHTYPE_COLUMN; - eDim = CHDIM_2D; - break; + USHORT nType; + ChartDimension eDim; - case CHSTYLE_2D_BAR: - case CHSTYLE_2D_STACKEDBAR: - case CHSTYLE_2D_PERCENTBAR: - nType = CHTYPE_BAR; - eDim = CHDIM_2D; - break; - - case CHSTYLE_2D_AREA: - case CHSTYLE_2D_STACKEDAREA: - case CHSTYLE_2D_PERCENTAREA: - nType = CHTYPE_AREA; - eDim = CHDIM_2D; - break; + switch( eStyle ) + { + case CHSTYLE_2D_B_SPLINE : + case CHSTYLE_2D_B_SPLINE_SYMBOL : + case CHSTYLE_2D_LINE: + case CHSTYLE_2D_STACKEDLINE: + case CHSTYLE_2D_PERCENTLINE: + case CHSTYLE_2D_LINESYMBOLS: + case CHSTYLE_2D_STACKEDLINESYM: + case CHSTYLE_2D_PERCENTLINESYM: + case CHSTYLE_2D_CUBIC_SPLINE : + case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL : + nType = CHTYPE_LINE; + eDim = CHDIM_2D; + break; - case CHSTYLE_2D_PIE: - case CHSTYLE_2D_PIE_SEGOF1: - case CHSTYLE_2D_PIE_SEGOFALL: - case CHSTYLE_2D_DONUT1: - case CHSTYLE_2D_DONUT2: - nType = CHTYPE_CIRCLE; - eDim = CHDIM_2D; - break; + case CHSTYLE_2D_COLUMN: + case CHSTYLE_2D_STACKEDCOLUMN: + case CHSTYLE_2D_PERCENTCOLUMN: + case CHSTYLE_2D_LINE_COLUMN: + case CHSTYLE_2D_LINE_STACKEDCOLUMN: - case CHSTYLE_2D_B_SPLINE_XY : - case CHSTYLE_2D_XY_LINE : - case CHSTYLE_2D_B_SPLINE_SYMBOL_XY : - case CHSTYLE_2D_XYSYMBOLS: - case CHSTYLE_2D_XY: - case CHSTYLE_2D_CUBIC_SPLINE_XY : - case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL_XY : - nType = CHTYPE_XY; - eDim = CHDIM_2D; - break; + nType = CHTYPE_COLUMN; + eDim = CHDIM_2D; + break; - case CHSTYLE_2D_NET: - case CHSTYLE_2D_NET_SYMBOLS: - case CHSTYLE_2D_NET_STACK: - case CHSTYLE_2D_NET_SYMBOLS_STACK: - case CHSTYLE_2D_NET_PERCENT: - case CHSTYLE_2D_NET_SYMBOLS_PERCENT: - nType = CHTYPE_NET; - eDim = CHDIM_2D; - break; + case CHSTYLE_2D_BAR: + case CHSTYLE_2D_STACKEDBAR: + case CHSTYLE_2D_PERCENTBAR: + nType = CHTYPE_BAR; + eDim = CHDIM_2D; + break; - case CHSTYLE_3D_STRIPE: - nType = CHTYPE_LINE; - eDim = CHDIM_3D; - break; + case CHSTYLE_2D_AREA: + case CHSTYLE_2D_STACKEDAREA: + case CHSTYLE_2D_PERCENTAREA: + nType = CHTYPE_AREA; + eDim = CHDIM_2D; + break; - case CHSTYLE_3D_COLUMN: - case CHSTYLE_3D_FLATCOLUMN: - case CHSTYLE_3D_STACKEDFLATCOLUMN: - case CHSTYLE_3D_PERCENTFLATCOLUMN: - nType = CHTYPE_COLUMN; - eDim = CHDIM_3D; - break; + case CHSTYLE_2D_PIE: + case CHSTYLE_2D_PIE_SEGOF1: + case CHSTYLE_2D_PIE_SEGOFALL: + case CHSTYLE_2D_DONUT1: + case CHSTYLE_2D_DONUT2: + nType = CHTYPE_CIRCLE; + eDim = CHDIM_2D; + break; - case CHSTYLE_3D_BAR: - case CHSTYLE_3D_FLATBAR: - case CHSTYLE_3D_STACKEDFLATBAR: - case CHSTYLE_3D_PERCENTFLATBAR: - nType = CHTYPE_BAR; - eDim = CHDIM_3D; - break; + case CHSTYLE_2D_B_SPLINE_XY : + case CHSTYLE_2D_XY_LINE : + case CHSTYLE_2D_B_SPLINE_SYMBOL_XY : + case CHSTYLE_2D_XYSYMBOLS: + case CHSTYLE_2D_XY: + case CHSTYLE_2D_CUBIC_SPLINE_XY : + case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL_XY : + nType = CHTYPE_XY; + eDim = CHDIM_2D; + break; - case CHSTYLE_3D_AREA: - case CHSTYLE_3D_STACKEDAREA: - case CHSTYLE_3D_PERCENTAREA: - nType = CHTYPE_AREA; - eDim = CHDIM_3D; - break; + case CHSTYLE_2D_NET: + case CHSTYLE_2D_NET_SYMBOLS: + case CHSTYLE_2D_NET_STACK: + case CHSTYLE_2D_NET_SYMBOLS_STACK: + case CHSTYLE_2D_NET_PERCENT: + case CHSTYLE_2D_NET_SYMBOLS_PERCENT: + nType = CHTYPE_NET; + eDim = CHDIM_2D; + break; - case CHSTYLE_3D_PIE: - nType = CHTYPE_CIRCLE; - eDim = CHDIM_3D; - break; + case CHSTYLE_3D_STRIPE: + nType = CHTYPE_LINE; + eDim = CHDIM_3D; + break; - case CHSTYLE_2D_STOCK_1: - case CHSTYLE_2D_STOCK_2: - case CHSTYLE_2D_STOCK_3: - case CHSTYLE_2D_STOCK_4: - nType = CHTYPE_STOCK; - eDim = CHDIM_2D; - break; + case CHSTYLE_3D_COLUMN: + case CHSTYLE_3D_FLATCOLUMN: + case CHSTYLE_3D_STACKEDFLATCOLUMN: + case CHSTYLE_3D_PERCENTFLATCOLUMN: + nType = CHTYPE_COLUMN; + eDim = CHDIM_3D; + break; - default: - DBG_ERROR("Invalid chart style given!"); - return; - } + case CHSTYLE_3D_BAR: + case CHSTYLE_3D_FLATBAR: + case CHSTYLE_3D_STACKEDFLATBAR: + case CHSTYLE_3D_PERCENTFLATBAR: + nType = CHTYPE_BAR; + eDim = CHDIM_3D; + break; - if (eDim == CHDIM_3D) - { - aRbt3D.Check(TRUE); - eDimension = CHDIM_2D; - SelectDimensionHdl(&aRbt3D); - } - else - { - aRbt2D.Check(TRUE); - eDimension = CHDIM_3D; - SelectDimensionHdl(&aRbt2D); - } + case CHSTYLE_3D_AREA: + case CHSTYLE_3D_STACKEDAREA: + case CHSTYLE_3D_PERCENTAREA: + nType = CHTYPE_AREA; + eDim = CHDIM_3D; + break; - aCtlType.SelectItem(nType); - SelectTypeHdl(&aCtlType); + case CHSTYLE_3D_PIE: + nType = CHTYPE_CIRCLE; + eDim = CHDIM_3D; + break; - USHORT nItemChartType = static_cast< USHORT >( - static_cast< const SvxChartStyleItem * >( pPoolItem )->GetValue() ); + case CHSTYLE_2D_STOCK_1: + case CHSTYLE_2D_STOCK_2: + case CHSTYLE_2D_STOCK_3: + case CHSTYLE_2D_STOCK_4: + nType = CHTYPE_STOCK; + eDim = CHDIM_2D; + break; - SwitchDepth( nItemChartType ); - SwitchNumLines( nItemChartType ); + default: + DBG_ERROR("Invalid chart style given!"); + return; } - if (rOutAttrs.GetItemState(SCHATTR_NUM_OF_LINES_FOR_BAR, TRUE, &pPoolItem) - == SFX_ITEM_SET) + if (eDim == CHDIM_3D) { - aMtrFldNumLines.SetValue( - reinterpret_cast< const SfxInt32Item * >( pPoolItem )->GetValue()); + aRbt3D.Check(TRUE); + eDimension = CHDIM_2D; + SelectDimensionHdl(&aRbt3D); } + else + { + aRbt2D.Check(TRUE); + eDimension = CHDIM_3D; + SelectDimensionHdl(&aRbt2D); + } + + aCtlType.SelectItem(nType); + SelectTypeHdl(&aCtlType); - if (rOutAttrs.GetItemState(SCHATTR_SPLINE_RESOLUTION, TRUE, &pPoolItem) - == SFX_ITEM_SET) + SwitchDepth( eStyle ); + SwitchNumLines( eStyle ); + + if( lcl_IsCombiChart( eStyle )) { - aMtrFldGran.SetValue( - reinterpret_cast< const SfxInt32Item * >( pPoolItem )->GetValue()); + sal_Int32 nNumLines = helper::DataSeriesTreeHelper::getNumberOfSeriesForChartTypeByIndex( + xTree, 1 ); + aMtrFldNumLines.SetValue( nNumLines ); } - if (rOutAttrs.GetItemState(SCHATTR_SPLINE_ORDER, TRUE, &pPoolItem) - ==SFX_ITEM_SET) + if( lcl_IsBSplineChart( eStyle ) || + lcl_IsCubicSplineChart( eStyle )) { - aMtrFldDeep.SetValue( - reinterpret_cast< const SfxInt32Item * >( pPoolItem )->GetValue()); + // todo: take model value (XChartType) + SetGranularity( 20 ); + + if( lcl_IsBSplineChart( eStyle )) + { + // todo: take model value (XChartType) + SetDepth( 3 ); + } } } @@ -806,35 +966,40 @@ void SchDiagramTypeDlg::FillVariantSet(USHORT nType) aCtlVariant.Show(); USHORT nSelId = aCtlVariant.GetItemId(0); - const SfxPoolItem *pPoolItem = NULL; - if( rOutAttrs.GetItemState(SCHATTR_DIAGRAM_STYLE, TRUE, &pPoolItem) == SFX_ITEM_SET ) - { - USHORT nId = (USHORT)((const SvxChartStyleItem*)pPoolItem)->GetValue() + 1; + uno::Reference< chart2::XDataSeriesTreeParent > xTree( m_xDiagram->getTree()); + SvxChartStyle eStyle = lcl_GetChartStyleForTemplateServiceName( + helper::DataSeriesTreeHelper::getChartTypeTemplateServiceName( xTree )); - if( aCtlVariant.GetItemPos(nId) != VALUESET_ITEM_NOTFOUND ) - { - nSelId = nId; - nDefaultOffset = 0; - } + USHORT nId = static_cast< USHORT >( eStyle ) + 1; +// (USHORT)((const SvxChartStyleItem*)pPoolItem)->GetValue() + 1; + + if( aCtlVariant.GetItemPos( nId ) != VALUESET_ITEM_NOTFOUND ) + { + nSelId = nId; + nDefaultOffset = 0; } + long nShape3dOffset = 0; - if( rOutAttrs.GetItemState(SCHATTR_STYLE_SHAPE, TRUE, &pPoolItem) == SFX_ITEM_SET ) + if( lcl_IsShapeStyleChartType( eStyle )) { -// long nId3D = ((const SfxInt32Item*)&pPoolItem)->GetValue(); - switch( n3DGeometry ) - { - case CHART_SHAPE3D_CYLINDER: - nShape3dOffset = OFFSET_ROUND; - break; - case CHART_SHAPE3D_CONE: - nShape3dOffset = OFFSET_CONE; - break; - case CHART_SHAPE3D_PYRAMID: - nShape3dOffset = OFFSET_PYRAMID; - break; - } + nShape3dOffset = OFFSET_CONE; } + +// long nId3D = ((const SfxInt32Item*)&pPoolItem)->GetValue(); +// switch( n3DGeometry ) +// { +// case CHART_SHAPE3D_CYLINDER: +// nShape3dOffset = OFFSET_ROUND; +// break; +// case CHART_SHAPE3D_CONE: +// nShape3dOffset = OFFSET_CONE; +// break; +// case CHART_SHAPE3D_PYRAMID: +// nShape3dOffset = OFFSET_PYRAMID; +// break; +// } + if( aCtlVariant.GetItemPos( nSelId + nShape3dOffset + nDefaultOffset ) != VALUESET_ITEM_NOTFOUND ) nSelId += (nShape3dOffset + nDefaultOffset); @@ -843,8 +1008,9 @@ void SchDiagramTypeDlg::FillVariantSet(USHORT nType) // make selected Item visible aCtlVariant.SetFirstLine( aCtlVariant.GetItemPos( aCtlVariant.GetSelectItemId() ) / aCtlVariant.GetColCount() ); - SwitchDepth( nSelId - 1 ); - SwitchNumLines( nSelId - 1 ); + eStyle = static_cast< SvxChartStyle >( nSelId - 1 ); + SwitchDepth( eStyle ); + SwitchNumLines( eStyle ); } /************************************************************************* @@ -889,36 +1055,36 @@ IMPL_LINK( SchDiagramTypeDlg, DoubleClickHdl, void *, EMPTYARG ) |* \*************************************************************************/ -void SchDiagramTypeDlg::GetAttr(SfxItemSet& rOutAttrs) -{ - long nId=aCtlVariant.GetSelectItemId() - 1; - long nGeo=CHART_SHAPE3D_ANY; - if(nId>OFFSET_CONE) - { - nId-=OFFSET_CONE; - nGeo=CHART_SHAPE3D_CONE; - } - if(nId>OFFSET_ROUND) - { - nId-=OFFSET_ROUND; - nGeo=CHART_SHAPE3D_CYLINDER; - } - if(nId>OFFSET_PYRAMID) - { - nId-=OFFSET_PYRAMID; - nGeo=CHART_SHAPE3D_PYRAMID; - } - if(nGeo != n3DGeometry) - rOutAttrs.Put(SfxInt32Item(SCHATTR_STYLE_SHAPE,nGeo)); - else - rOutAttrs.ClearItem(SCHATTR_STYLE_SHAPE); - - rOutAttrs.Put(SvxChartStyleItem((SvxChartStyle) (nId))); - - rOutAttrs.Put( SfxInt32Item( SCHATTR_NUM_OF_LINES_FOR_BAR, aMtrFldNumLines.GetValue())); - rOutAttrs.Put( SfxInt32Item( SCHATTR_SPLINE_RESOLUTION, aMtrFldGran.GetValue())); - rOutAttrs.Put( SfxInt32Item( SCHATTR_SPLINE_ORDER, aMtrFldDeep.GetValue())); -} +// void SchDiagramTypeDlg::GetAttr(SfxItemSet& rOutAttrs) +// { +// long nId=aCtlVariant.GetSelectItemId() - 1; +// long nGeo=CHART_SHAPE3D_ANY; +// if(nId>OFFSET_CONE) +// { +// nId-=OFFSET_CONE; +// nGeo=CHART_SHAPE3D_CONE; +// } +// if(nId>OFFSET_ROUND) +// { +// nId-=OFFSET_ROUND; +// nGeo=CHART_SHAPE3D_CYLINDER; +// } +// if(nId>OFFSET_PYRAMID) +// { +// nId-=OFFSET_PYRAMID; +// nGeo=CHART_SHAPE3D_PYRAMID; +// } +// if(nGeo != n3DGeometry) +// rOutAttrs.Put(SfxInt32Item(SCHATTR_STYLE_SHAPE,nGeo)); +// else +// rOutAttrs.ClearItem(SCHATTR_STYLE_SHAPE); + +// rOutAttrs.Put(SvxChartStyleItem((SvxChartStyle) (nId))); + +// rOutAttrs.Put( SfxInt32Item( SCHATTR_NUM_OF_LINES_FOR_BAR, aMtrFldNumLines.GetValue())); +// rOutAttrs.Put( SfxInt32Item( SCHATTR_SPLINE_RESOLUTION, aMtrFldGran.GetValue())); +// rOutAttrs.Put( SfxInt32Item( SCHATTR_SPLINE_ORDER, aMtrFldDeep.GetValue())); +// } /************************************************************************* |* @@ -926,10 +1092,10 @@ void SchDiagramTypeDlg::GetAttr(SfxItemSet& rOutAttrs) |* \************************************************************************/ -// int SchDiagramTypeDlg::GetDepth() -// { -// return aMtrFldDeep.GetValue(); -// } +sal_Int32 SchDiagramTypeDlg::GetDepth() +{ + return aMtrFldDeep.GetValue(); +} /************************************************************************* |* @@ -937,10 +1103,10 @@ void SchDiagramTypeDlg::GetAttr(SfxItemSet& rOutAttrs) |* \************************************************************************/ -// void SchDiagramTypeDlg::SetDepth( int nDepth ) -// { -// aMtrFldDeep.SetValue( nDepth ); -// } +void SchDiagramTypeDlg::SetDepth( sal_Int32 nDepth ) +{ + aMtrFldDeep.SetValue( nDepth ); +} /************************************************************************* |* @@ -948,32 +1114,23 @@ void SchDiagramTypeDlg::GetAttr(SfxItemSet& rOutAttrs) |* \************************************************************************/ -void SchDiagramTypeDlg::SwitchDepth (USHORT nID) +void SchDiagramTypeDlg::SwitchDepth( SvxChartStyle eID ) { - aFtDeep.Hide (); - aMtrFldDeep.Hide (); - aFtGran.Hide (); - aMtrFldGran.Hide (); + aFtDeep.Hide(); + aMtrFldDeep.Hide(); + aFtGran.Hide(); + aMtrFldGran.Hide(); - switch (nID) + if( lcl_IsBSplineChart( eID )) { - case CHSTYLE_2D_B_SPLINE : - case CHSTYLE_2D_B_SPLINE_SYMBOL : - case CHSTYLE_2D_B_SPLINE_XY : - case CHSTYLE_2D_B_SPLINE_SYMBOL_XY : - aFtDeep.Show (); - aMtrFldDeep.Show (); - - case CHSTYLE_2D_CUBIC_SPLINE : - case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL : - case CHSTYLE_2D_CUBIC_SPLINE_XY : - case CHSTYLE_2D_CUBIC_SPLINE_SYMBOL_XY : - aFtGran.Show (); - aMtrFldGran.Show (); - break; + aFtDeep.Show (); + aMtrFldDeep.Show (); + } - default : - break; + if( lcl_IsCubicSplineChart( eID )) + { + aFtGran.Show (); + aMtrFldGran.Show (); } } @@ -985,8 +1142,11 @@ void SchDiagramTypeDlg::SwitchDepth (USHORT nID) IMPL_LINK( SchDiagramTypeDlg, ClickHdl, void *, EMPTYARG ) { - SwitchDepth (aCtlVariant.GetSelectItemId() - 1); - SwitchNumLines( aCtlVariant.GetSelectItemId() - 1 ); + SvxChartStyle eStyle = static_cast< SvxChartStyle >( + aCtlVariant.GetSelectItemId() - 1 ); + + SwitchDepth( eStyle ); + SwitchNumLines( eStyle ); return 0; } @@ -996,10 +1156,10 @@ IMPL_LINK( SchDiagramTypeDlg, ClickHdl, void *, EMPTYARG ) |* \************************************************************************/ -// int SchDiagramTypeDlg::GetGranularity() -// { -// return aMtrFldGran.GetValue(); -// } +sal_Int32 SchDiagramTypeDlg::GetGranularity() +{ + return aMtrFldGran.GetValue(); +} /************************************************************************* |* @@ -1007,10 +1167,10 @@ IMPL_LINK( SchDiagramTypeDlg, ClickHdl, void *, EMPTYARG ) |* \************************************************************************/ -// void SchDiagramTypeDlg::SetGranularity( int nGranularity ) -// { -// aMtrFldGran.SetValue( nGranularity ); -// } +void SchDiagramTypeDlg::SetGranularity( sal_Int32 nGranularity ) +{ + aMtrFldGran.SetValue( nGranularity ); +} void SchDiagramTypeDlg::FillValueSets() { @@ -1034,20 +1194,17 @@ void SchDiagramTypeDlg::DataChanged( const DataChangedEvent& rDCEvt ) } -void SchDiagramTypeDlg::SwitchNumLines( USHORT nID ) +void SchDiagramTypeDlg::SwitchNumLines( SvxChartStyle eID ) { - switch( nID ) + if( lcl_IsCombiChart( eID )) { - case CHSTYLE_2D_LINE_COLUMN: - case CHSTYLE_2D_LINE_STACKEDCOLUMN: - aFtNumLines.Show(); - aMtrFldNumLines.Show(); - break; - - default: - aFtNumLines.Hide(); - aMtrFldNumLines.Hide(); - break; + aFtNumLines.Show(); + aMtrFldNumLines.Show(); + } + else + { + aFtNumLines.Hide(); + aMtrFldNumLines.Hide(); } } @@ -1057,15 +1214,45 @@ void SchDiagramTypeDlg::SetMaximumNumberOfLines( long nMaxLines ) aMtrFldNumLines.SetMax( nMaxLines ); } +uno::Reference< chart2::XChartTypeTemplate > SchDiagramTypeDlg::getTemplate() const +{ + uno::Reference< chart2::XChartTypeTemplate > xResult; + + if( m_xTemplateManager.is()) + { + SvxChartStyle eStyle = static_cast< SvxChartStyle >( + aCtlVariant.GetSelectItemId() - 1 ); + + xResult.set( m_xTemplateManager->createInstance( + lcl_GetTemplateServiceNameForChartStyle( eStyle )), + uno::UNO_QUERY ); + + if( lcl_IsCombiChart( eStyle )) + { + try + { + uno::Reference< beans::XPropertySet > xProp( xResult, uno::UNO_QUERY_THROW ); + xProp->setPropertyValue( C2U( "NumberOfLines" ), uno::makeAny( GetNumberOfLines())); + } + catch( uno::Exception & ex ) + { + ASSERT_EXCEPTION( ex ); + } + } + } + + return xResult; +} + // void SchDiagramTypeDlg::SetNumberOfLines( long nLines ) // { // aMtrFldNumLines.SetValue( nLines ); // } -// long SchDiagramTypeDlg::GetNumberOfLines() const -// { -// return aMtrFldNumLines.GetValue(); -// } +sal_Int32 SchDiagramTypeDlg::GetNumberOfLines() const +{ + return aMtrFldNumLines.GetValue(); +} //............................................................................. } //namespace chart |