From 3a3b312b88d88913108706c2bc4da939f1a72f9b Mon Sep 17 00:00:00 2001 From: Vladimir Glazounov Date: Tue, 22 May 2007 18:05:41 +0000 Subject: INTEGRATION: CWS chart2mst3 (1.4.4); FILE MERGED 2006/10/18 17:19:56 bm 1.4.4.15: RESYNC: (1.5-1.6); FILE MERGED 2006/04/10 15:03:36 iha 1.4.4.14: api restructure axis, grids, scales and increments 2006/01/24 10:54:04 bm 1.4.4.13: use ReferenceSizeProvider to adapt auto-scale settings for newly created objects 2005/12/21 21:29:30 iha 1.4.4.12: remove identifiers from model objects and create an index based CID protocol instead for selection purposes 2005/12/07 14:01:21 iha 1.4.4.11: remove dependendy from special title identifiers 2005/12/01 18:52:01 iha 1.4.4.10: create axis title with correct rotation default + don't mix x and y in barcharts 2005/11/18 15:18:30 bm 1.4.4.9: unnecessary include removed 2005/11/18 13:18:29 bm 1.4.4.8: use XInitialization for passing the identifier when creating titles (do not use context) 2005/10/07 12:14:05 bm 1.4.4.7: RESYNC: (1.4-1.5); FILE MERGED 2005/08/18 15:20:45 bm 1.4.4.6: (gs)etDiagram -> (gs)etFirstDiagram to avoid name clashes with old API 2005/07/13 11:43:28 iha 1.4.4.5: added method getTitleType() 2005/04/11 09:31:08 iha 1.4.4.4: avoid crash when context is missing 2004/05/26 16:26:58 bm 1.4.4.3: default font sizes adapted 2004/05/07 13:42:59 bm 1.4.4.2: lcl_createTitle: create title even if string is empty 2004/04/27 13:32:58 bm 1.4.4.1: +createTitle method for creating a title, if you only have an XDiagram (creation of main-title not possible there) --- chart2/source/tools/TitleHelper.cxx | 209 +++++++++++++++++++++++++++++------- 1 file changed, 169 insertions(+), 40 deletions(-) (limited to 'chart2/source/tools/TitleHelper.cxx') diff --git a/chart2/source/tools/TitleHelper.cxx b/chart2/source/tools/TitleHelper.cxx index d44b2d076df0..e1bdc52007ff 100644 --- a/chart2/source/tools/TitleHelper.cxx +++ b/chart2/source/tools/TitleHelper.cxx @@ -4,9 +4,9 @@ * * $RCSfile: TitleHelper.cxx,v $ * - * $Revision: 1.6 $ + * $Revision: 1.7 $ * - * last change: $Author: obo $ $Date: 2006-09-17 13:30:07 $ + * last change: $Author: vg $ $Date: 2007-05-22 19:05:41 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -38,8 +38,8 @@ #include "TitleHelper.hxx" #include "ChartModelHelper.hxx" #include "macros.hxx" -#include "ContextHelper.hxx" -#include "MeterHelper.hxx" +#include "AxisHelper.hxx" +#include "DiagramHelper.hxx" #ifndef _COM_SUN_STAR_CHART2_XCHARTDOCUMENT_HPP_ #include @@ -52,32 +52,36 @@ namespace chart using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; +using ::com::sun::star::uno::Reference; -rtl::OUString TitleHelper::getIdentifierForTitle( TitleHelper::eTitleType nTitleIndex ) +namespace +{ + +rtl::OUString lcl_getIdentifierForTitle( TitleHelper::eTitleType nTitleIndex ) { switch( nTitleIndex ) { - case MAIN_TITLE: + case TitleHelper::MAIN_TITLE: { static rtl::OUString m_aIdentifier( C2U( "@main-title" ) ); return m_aIdentifier; } - case SUB_TITLE: + case TitleHelper::SUB_TITLE: { static rtl::OUString m_aIdentifier( C2U( "@sub-title" ) ); return m_aIdentifier; } - case X_AXIS_TITLE: + case TitleHelper::X_AXIS_TITLE: { static rtl::OUString m_aIdentifier( C2U( "@xaxis-title" ) ); return m_aIdentifier; } - case Y_AXIS_TITLE: + case TitleHelper::Y_AXIS_TITLE: { static rtl::OUString m_aIdentifier( C2U( "@yaxis-title" ) ); return m_aIdentifier; } - case Z_AXIS_TITLE: + case TitleHelper::Z_AXIS_TITLE: { static rtl::OUString m_aIdentifier( C2U( "@zaxis-title" ) ); return m_aIdentifier; @@ -88,35 +92,76 @@ rtl::OUString TitleHelper::getIdentifierForTitle( TitleHelper::eTitleType nTitle } } -uno::Reference< XTitled > lcl_getTitleParent( TitleHelper::eTitleType nTitleIndex - , const uno::Reference< frame::XModel >& xModel ) +} //anonymous namespace + +uno::Reference< XTitled > lcl_getTitleParentFromDiagram( + TitleHelper::eTitleType nTitleIndex + , const uno::Reference< XDiagram >& xDiagram ) { uno::Reference< XTitled > xResult; - uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); - uno::Reference< XDiagram > xDiagram; - if( xChartDoc.is()) - xDiagram.set( xChartDoc->getDiagram()); + + if( nTitleIndex == TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION || + nTitleIndex == TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION ) + { + bool bDummy = false; + bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy ); + + if( nTitleIndex == TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION ) + nTitleIndex = bIsVertical ? TitleHelper::X_AXIS_TITLE : TitleHelper::Y_AXIS_TITLE; + else + nTitleIndex = bIsVertical ? TitleHelper::Y_AXIS_TITLE : TitleHelper::X_AXIS_TITLE; + } + switch( nTitleIndex ) { - case TitleHelper::MAIN_TITLE: - xResult.set( xModel, uno::UNO_QUERY ); - break; case TitleHelper::SUB_TITLE: if( xDiagram.is()) xResult.set( xDiagram, uno::UNO_QUERY ); break; case TitleHelper::X_AXIS_TITLE: if( xDiagram.is()) - xResult.set( MeterHelper::getAxis( 0, true, xDiagram ), uno::UNO_QUERY ); + xResult.set( AxisHelper::getAxis( 0, true, xDiagram ), uno::UNO_QUERY ); break; case TitleHelper::Y_AXIS_TITLE: if( xDiagram.is()) - xResult.set( MeterHelper::getAxis( 1, true, xDiagram ), uno::UNO_QUERY ); + xResult.set( AxisHelper::getAxis( 1, true, xDiagram ), uno::UNO_QUERY ); break; case TitleHelper::Z_AXIS_TITLE: if( xDiagram.is()) - xResult.set( MeterHelper::getAxis( 2, true, xDiagram ), uno::UNO_QUERY ); + xResult.set( AxisHelper::getAxis( 2, true, xDiagram ), uno::UNO_QUERY ); + break; + + case TitleHelper::MAIN_TITLE: + default: + OSL_ENSURE( false, "Unsupported Title-Type requested" ); + break; + } + + return xResult; +} + +uno::Reference< XTitled > lcl_getTitleParent( TitleHelper::eTitleType nTitleIndex + , const uno::Reference< frame::XModel >& xModel ) +{ + uno::Reference< XTitled > xResult; + uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); + uno::Reference< XDiagram > xDiagram; + if( xChartDoc.is()) + xDiagram.set( xChartDoc->getFirstDiagram()); + + switch( nTitleIndex ) + { + case TitleHelper::MAIN_TITLE: + xResult.set( xModel, uno::UNO_QUERY ); + break; + case TitleHelper::SUB_TITLE: + case TitleHelper::X_AXIS_TITLE: + case TitleHelper::Y_AXIS_TITLE: + case TitleHelper::Z_AXIS_TITLE: + case TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION: + case TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION: + xResult.set( lcl_getTitleParentFromDiagram( nTitleIndex, xDiagram )); break; default: OSL_ENSURE( false, "Unsupported Title-Type requested" ); @@ -136,36 +181,80 @@ uno::Reference< XTitle > TitleHelper::getTitle( TitleHelper::eTitleType nTitleIn } uno::Reference< XTitle > TitleHelper::createTitle( - TitleHelper::eTitleType nTitleIndex + TitleHelper::eTitleType eTitleType , const rtl::OUString& rTitleText , const uno::Reference< frame::XModel >& xModel - , const uno::Reference< uno::XComponentContext > & xContext ) + , const uno::Reference< uno::XComponentContext > & xContext + , ReferenceSizeProvider * pRefSizeProvider ) { - if( !rTitleText.getLength() ) - return NULL; - - uno::Reference< XTitle > xTitle(NULL); - uno::Reference< XTitled > xTitled( lcl_getTitleParent( nTitleIndex, xModel ) ); - - ContextHelper::tContextEntryMapType aContextValues( - ContextHelper::MakeContextEntryMap( C2U( "Identifier" ) - , uno::makeAny( TitleHelper::getIdentifierForTitle(nTitleIndex) )) ); - uno::Reference< uno::XComponentContext > xNewContext( - ContextHelper::createContext( aContextValues, xContext ) ); + uno::Reference< XTitle > xTitle; + uno::Reference< XTitled > xTitled( lcl_getTitleParent( eTitleType, xModel ) ); - if(xNewContext.is() && xTitled.is()) + if(xTitled.is()) { + uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) ); + xTitle.set( xContext->getServiceManager()->createInstanceWithContext( - C2U( "com.sun.star.chart2.Title" ), - xNewContext ), uno::UNO_QUERY ); + C2U( "com.sun.star.chart2.Title" ), + xContext ), uno::UNO_QUERY ); if(xTitle.is()) { - setCompleteString( rTitleText, xTitle, xNewContext ); + // default char height (main: 13.0 == default) + float fDefaultCharHeightSub = 11.0; + float fDefaultCharHeightAxis = 9.0; + switch( eTitleType ) + { + case TitleHelper::SUB_TITLE: + chart::TitleHelper::setCompleteString( + rTitleText, xTitle, xContext, & fDefaultCharHeightSub ); + break; + case TitleHelper::X_AXIS_TITLE: + case TitleHelper::Y_AXIS_TITLE: + case TitleHelper::Z_AXIS_TITLE: + case TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION: + case TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION: + chart::TitleHelper::setCompleteString( + rTitleText, xTitle, xContext, & fDefaultCharHeightAxis ); + break; + default: + chart::TitleHelper::setCompleteString( rTitleText, xTitle, xContext ); + break; + } + + // set/clear autoscale + if( pRefSizeProvider ) + pRefSizeProvider->setValuesAtTitle( xTitle ); + xTitled->setTitle( xTitle ); + + //default rotation 90 degree for y axis title in normal coordinatesystems or for x axis title for swapped coordinatesystems + if( eTitleType == TitleHelper::X_AXIS_TITLE || + eTitleType == TitleHelper::Y_AXIS_TITLE ) + { + try + { + bool bDummy = false; + bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy ); + + Reference< beans::XPropertySet > xTitleProps( xTitle, uno::UNO_QUERY ); + if( xTitleProps.is() ) + { + double fNewAngleDegree = 90.0; + if( (!bIsVertical && eTitleType == TitleHelper::Y_AXIS_TITLE) + || (bIsVertical && eTitleType == TitleHelper::X_AXIS_TITLE) ) + xTitleProps->setPropertyValue( C2U( "TextRotation" ), uno::makeAny( fNewAngleDegree )); + } + } + catch( uno::Exception & ex ) + { + ASSERT_EXCEPTION( ex ); + } + } } } return xTitle; + } rtl::OUString TitleHelper::getCompleteString( const uno::Reference< XTitle >& xTitle ) @@ -181,7 +270,8 @@ rtl::OUString TitleHelper::getCompleteString( const uno::Reference< XTitle >& xT void TitleHelper::setCompleteString( const rtl::OUString& rNewText , const uno::Reference< XTitle >& xTitle - , const uno::Reference< uno::XComponentContext > & xContext ) + , const uno::Reference< uno::XComponentContext > & xContext + , float * pDefaultCharHeight /* = 0 */ ) { //the format of the first old text portion will be maintained if there is any if(!xTitle.is()) @@ -206,6 +296,22 @@ void TitleHelper::setCompleteString( const rtl::OUString& rNewText { xFormattedString->setString( rNewText ); aNewStringList[0].set( xFormattedString ); + if( pDefaultCharHeight != 0 ) + { + try + { + uno::Reference< beans::XPropertySet > xProp( xFormattedString, uno::UNO_QUERY_THROW ); + + uno::Any aFontSize( uno::makeAny( *pDefaultCharHeight )); + xProp->setPropertyValue( C2U("CharHeight"), aFontSize ); + xProp->setPropertyValue( C2U("CharHeightAsian"), aFontSize ); + xProp->setPropertyValue( C2U("CharHeightComplex"), aFontSize ); + } + catch( uno::Exception & ex ) + { + ASSERT_EXCEPTION( ex ); + } + } } } xTitle->setText( aNewStringList ); @@ -222,6 +328,29 @@ void TitleHelper::removeTitle( TitleHelper::eTitleType nTitleIndex } } +bool TitleHelper::getTitleType( eTitleType& rType + , const ::com::sun::star::uno::Reference< + ::com::sun::star::chart2::XTitle >& xTitle + , const ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XModel >& xModel ) +{ + if( !xTitle.is() || !xModel.is() ) + return false; + + Reference< chart2::XTitle > xCurrentTitle; + for( sal_Int32 nTitleType = TITLE_BEGIN; nTitleType < NORMAL_TITLE_END; nTitleType++ ) + { + xCurrentTitle = TitleHelper::getTitle( static_cast(nTitleType), xModel ); + if( xCurrentTitle == xTitle ) + { + rType = static_cast(nTitleType); + return true; + } + } + + return false; +} + //............................................................................. } //namespace chart //............................................................................. -- cgit