*** orig/chart2/source/view/axes/ScaleAutomatism.cxx Fri Jun 6 17:17:48 2008 --- new/chart2/source/view/axes/ScaleAutomatism.cxx Tue Sep 9 09:39:18 2008 *************** *** 185,190 **** --- 185,209 ---- } } + void ScaleAutomatism::getExplicitScaleAndIncrementState( bool& rbAutoMinimum, + bool& rbAutoMaximum, + bool& rbAutoOrigin, + bool& rbAutoMajorInterval, + bool& rbAutoMinorInterval ) const + { + ExplicitScaleData aExplicitScale; + rbAutoMinimum = !( m_aSourceScale.Minimum >>= aExplicitScale.Minimum ); + rbAutoMaximum = !( m_aSourceScale.Maximum >>= aExplicitScale.Maximum ); + rbAutoOrigin = !(m_aSourceScale.Origin >>= aExplicitScale.Origin); + + ExplicitIncrementData aExplicitIncrement; + rbAutoMajorInterval = !( m_aSourceScale.IncrementData.Distance >>= aExplicitIncrement.Distance ); + if( m_aSourceScale.IncrementData.SubIncrements.getLength() ) + rbAutoMinorInterval = !( m_aSourceScale.IncrementData.SubIncrements[0].IntervalCount.hasValue() ); + else + rbAutoMinorInterval = true; + } + // private -------------------------------------------------------------------- void ScaleAutomatism::calculateExplicitIncrementAndScaleForCategory( *** orig/chart2/source/view/inc/ScaleAutomatism.hxx Fri Apr 11 06:42:46 2008 --- new/chart2/source/view/inc/ScaleAutomatism.hxx Tue Sep 9 09:39:29 2008 *************** *** 83,88 **** --- 83,94 ---- ::com::sun::star::chart2::ExplicitScaleData& rExplicitScale, ::com::sun::star::chart2::ExplicitIncrementData& rExplicitIncrement ) const; + void getExplicitScaleAndIncrementState( bool& rbAutoMinimum, + bool& rbAutoMaximum, + bool& rbAutoOrigin, + bool& rbAutoMajorInterval, + bool& rbAutoMinorInterval ) const; + private: /** Fills the passed scale data and increment data for category scaling. */ void calculateExplicitIncrementAndScaleForCategory( *** orig/chart2/source/view/main/ChartView.cxx Fri Jun 6 17:19:10 2008 --- new/chart2/source/view/main/ChartView.cxx Tue Sep 9 09:39:55 2008 *************** *** 550,556 **** void initializeCooSysAndSeriesPlotter( const uno::Reference< frame::XModel >& xChartModel ); void initAxisUsageList(); ! void doAutoScaling(); void updateScalesAndIncrementsOnAxes(); void setScalesFromCooSysToPlotter(); void setNumberFormatsFromAxes(); --- 550,556 ---- void initializeCooSysAndSeriesPlotter( const uno::Reference< frame::XModel >& xChartModel ); void initAxisUsageList(); ! void doAutoScaling( const uno::Reference< frame::XModel >& xChartModel ); void updateScalesAndIncrementsOnAxes(); void setScalesFromCooSysToPlotter(); void setNumberFormatsFromAxes(); *************** *** 561,566 **** --- 561,568 ---- std::vector< VCoordinateSystem* >& getCooSysList() { return m_rVCooSysList; } std::vector< LegendEntryProvider* > getLegendEntryProviderList(); + void AdaptExplicitScaleAndIncrement( const uno::Reference< frame::XModel >& xChartModel ); + private: std::vector< VSeriesPlotter* > m_aSeriesPlotterList; std::vector< VCoordinateSystem* >& m_rVCooSysList; *************** *** 878,884 **** m_rVCooSysList[nC]->updateScalesAndIncrementsOnAxes(); } ! void SeriesPlotterContainer::doAutoScaling() { //precondition: need a initialized m_aSeriesPlotterList //precondition: need a initialized m_aAxisUsageList --- 880,886 ---- m_rVCooSysList[nC]->updateScalesAndIncrementsOnAxes(); } ! void SeriesPlotterContainer::doAutoScaling( const uno::Reference< frame::XModel >& xChartModel ) { //precondition: need a initialized m_aSeriesPlotterList //precondition: need a initialized m_aAxisUsageList *************** *** 943,948 **** --- 945,1016 ---- aVCooSysList_Z[nC]->setExplicitScaleAndIncrement( 2, nAxisIndex, aExplicitScale, aExplicitIncrement ); } } + AdaptExplicitScaleAndIncrement( xChartModel ); + } + + void SeriesPlotterContainer::AdaptExplicitScaleAndIncrement( const uno::Reference< frame::XModel >& xChartModel ) + { + ::std::map< uno::Reference< XAxis >, AxisUsage >::iterator aAxisIter = m_aAxisUsageList.begin(); + const ::std::map< uno::Reference< XAxis >, AxisUsage >::const_iterator aAxisEndIter = m_aAxisUsageList.end(); + + for( sal_Int32 nAxisIndex=0; nAxisIndex<=m_nMaxAxisIndex; nAxisIndex++ ) + { + for( aAxisIter = m_aAxisUsageList.begin(); aAxisIter != aAxisEndIter; aAxisIter++ ) + { + AxisUsage& rAxisUsage = (*aAxisIter).second; + ::std::vector< VCoordinateSystem* > aVCooSysList_Y = rAxisUsage.getCoordinateSystems( 1, nAxisIndex ); + + uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel ) ); + if( xDiagram.is() ) + { + sal_Int32 nAttachedAxisIndex; + Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ); + bool bAttachedToSameAxis = ChartTypeHelper::allSeriesAttachedToSameAxis( xChartType, nAttachedAxisIndex ); + + if( bAttachedToSameAxis && nAttachedAxisIndex != nAxisIndex ) + { + for( size_t nC = 0; nC < aVCooSysList_Y.size(); ++nC ) + { + aVCooSysList_Y[nC]->prepareScaleAutomatismForDimensionAndIndex( rAxisUsage.aScaleAutomatism, 1, nAttachedAxisIndex ); + + ExplicitScaleData aExplicitScaleSource = aVCooSysList_Y[nC]->getExplicitScale( 1,nAttachedAxisIndex ); + ExplicitIncrementData aExplicitIncrementSource = aVCooSysList_Y[nC]->getExplicitIncrement( 1,nAttachedAxisIndex ); + + bool bAutoMinimum, bAutoMaximum, bAutoOrigin, bAutoMajorInterval, bAutoMinorInterval; + rAxisUsage.aScaleAutomatism.getExplicitScaleAndIncrementState( bAutoMinimum, bAutoMaximum,bAutoOrigin, + bAutoMajorInterval, bAutoMinorInterval ); + + ExplicitScaleData aExplicitScaleDest = aVCooSysList_Y[nC]->getExplicitScale( 1,nAxisIndex );; + ExplicitIncrementData aExplicitIncrementDest = aVCooSysList_Y[nC]->getExplicitIncrement( 1,nAxisIndex );; + + aExplicitScaleDest.Breaks = aExplicitScaleSource.Breaks; + aExplicitIncrementDest.BaseValue = aExplicitIncrementSource.BaseValue; + + if( bAutoMinimum ) + aExplicitScaleDest.Minimum = aExplicitScaleSource.Minimum; + else + aExplicitIncrementDest.BaseValue = aExplicitScaleDest.Minimum; + + if( bAutoMaximum ) + aExplicitScaleDest.Maximum = aExplicitScaleSource.Maximum; + if( bAutoOrigin ) + aExplicitScaleDest.Origin = aExplicitScaleSource.Origin; + + if( bAutoMajorInterval ) + aExplicitIncrementDest.Distance = aExplicitIncrementSource.Distance; + if( bAutoMinorInterval ) + { + if( aExplicitIncrementDest.SubIncrements.getLength() && aExplicitIncrementSource.SubIncrements.getLength() ) + aExplicitIncrementDest.SubIncrements[0].IntervalCount = + aExplicitIncrementSource.SubIncrements[0].IntervalCount; + } + + aVCooSysList_Y[nC]->setExplicitScaleAndIncrement( 1, nAxisIndex, aExplicitScaleDest, aExplicitIncrementDest ); + } + } + } + } + } } drawing::Direction3D SeriesPlotterContainer::getPreferredAspectRatio() *************** *** 1069,1075 **** // - prepare list of all axis and how they are used rSeriesPlotterContainer.initAxisUsageList(); ! rSeriesPlotterContainer.doAutoScaling(); rSeriesPlotterContainer.setScalesFromCooSysToPlotter(); rSeriesPlotterContainer.setNumberFormatsFromAxes(); --- 1137,1143 ---- // - prepare list of all axis and how they are used rSeriesPlotterContainer.initAxisUsageList(); ! rSeriesPlotterContainer.doAutoScaling( m_xChartModel ); rSeriesPlotterContainer.setScalesFromCooSysToPlotter(); rSeriesPlotterContainer.setNumberFormatsFromAxes(); *************** *** 1127,1133 **** createTransformationSceneToScreen( aNewInnerRect ) )); //redo autoscaling to get size and text dependent automatic main increment count ! rSeriesPlotterContainer.doAutoScaling(); rSeriesPlotterContainer.updateScalesAndIncrementsOnAxes(); rSeriesPlotterContainer.setScalesFromCooSysToPlotter(); --- 1195,1201 ---- createTransformationSceneToScreen( aNewInnerRect ) )); //redo autoscaling to get size and text dependent automatic main increment count ! rSeriesPlotterContainer.doAutoScaling( m_xChartModel ); rSeriesPlotterContainer.updateScalesAndIncrementsOnAxes(); rSeriesPlotterContainer.setScalesFromCooSysToPlotter();