diff options
author | Thomas Benisch <tbe@openoffice.org> | 2009-07-24 13:02:58 +0000 |
---|---|---|
committer | Thomas Benisch <tbe@openoffice.org> | 2009-07-24 13:02:58 +0000 |
commit | e4cf17583a7184d359ed0200a671f9efc8746b41 (patch) | |
tree | afbf0fd3d26fda6f4ae74d37194343508884be38 /chart2 | |
parent | 8e536b500b7a545323a3a99b0ca618892d756e28 (diff) |
#i12587# Inserting/editing arbitrary text objects in chart
Diffstat (limited to 'chart2')
8 files changed, 55 insertions, 22 deletions
diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index 1d15b36348d1..c512f3826cc4 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -571,7 +571,7 @@ void SAL_CALL ChartController::modeChanged( const util::ModeChangeEvent& rEvent // set new model at dispatchers m_aDispatchContainer.setModel( aNewModelRef->getModel()); - ControllerCommandDispatch * pDispatch = new ControllerCommandDispatch( m_xCC, this ); + ControllerCommandDispatch * pDispatch = new ControllerCommandDispatch( m_xCC, this, &m_aDispatchContainer ); pDispatch->initialize(); // the dispatch container will return "this" for all commands returned by @@ -1063,7 +1063,7 @@ bool lcl_isFormatObjectCommand( const rtl::OString& aCommand ) void SAL_CALL ChartController ::dispatch( const util::URL& rURL - , const uno::Sequence< beans::PropertyValue >& /* rArgs */ ) + , const uno::Sequence< beans::PropertyValue >& rArgs ) throw (uno::RuntimeException) { //@todo avoid OString (see Mathias mail on bug #104387#) @@ -1125,7 +1125,21 @@ bool lcl_isFormatObjectCommand( const rtl::OString& aCommand ) else if( aCommand.equals("DiagramObjects")) this->executeDispatch_ObjectProperties(); else if( aCommand.equals("TransformDialog")) - this->executeDispatch_PositionAndSize(); + { + if ( isShapeContext() ) + { + // #i12587# support for shapes in chart + uno::Reference< frame::XDispatch > xDispatch( m_aDispatchContainer.getShapeController() ); + if ( xDispatch.is() ) + { + xDispatch->dispatch( rURL, rArgs ); + } + } + else + { + this->executeDispatch_PositionAndSize(); + } + } else if( lcl_isFormatObjectCommand(aCommand) ) this->executeDispatch_FormatObject(rURL.Path); //more format diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx index ab56829760f4..5dfdd4d9132c 100644 --- a/chart2/source/controller/main/ChartController_Tools.cxx +++ b/chart2/source/controller/main/ChartController_Tools.cxx @@ -523,7 +523,8 @@ bool ChartController::isObjectDeleteable( const uno::Any& rSelection ) bool ChartController::isShapeContext() const { if ( m_aSelection.isAdditionalShapeSelected() || - ( m_pDrawViewWrapper->AreObjectsMarked() && ( m_pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_TEXT ) ) ) + ( m_pDrawViewWrapper && m_pDrawViewWrapper->AreObjectsMarked() && + ( m_pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_TEXT ) ) ) { return true; } diff --git a/chart2/source/controller/main/CommandDispatchContainer.cxx b/chart2/source/controller/main/CommandDispatchContainer.cxx index 96707ac837a1..c5555c74405b 100644 --- a/chart2/source/controller/main/CommandDispatchContainer.cxx +++ b/chart2/source/controller/main/CommandDispatchContainer.cxx @@ -98,15 +98,6 @@ Reference< frame::XDispatch > CommandDispatchContainer::getDispatchForURL( const util::URL & rURL ) { Reference< frame::XDispatch > xResult; - - // #i12587# support for shapes in chart - if ( m_pChartController && m_pChartController->isShapeContext() && - rURL.Path.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "TransformDialog" ) ) ) - { - xResult.set( m_pShapeController ); - return xResult; - } - tDispatchMap::const_iterator aIt( m_aCachedDispatches.find( rURL.Complete )); if( aIt != m_aCachedDispatches.end()) { diff --git a/chart2/source/controller/main/CommandDispatchContainer.hxx b/chart2/source/controller/main/CommandDispatchContainer.hxx index 70825ff3930d..f95b54655762 100644 --- a/chart2/source/controller/main/CommandDispatchContainer.hxx +++ b/chart2/source/controller/main/CommandDispatchContainer.hxx @@ -126,6 +126,7 @@ public: void setDrawCommandDispatch( DrawCommandDispatch* pDispatch ); void setShapeController( ShapeController* pController ); + ShapeController* getShapeController() { return m_pShapeController; } private: typedef diff --git a/chart2/source/controller/main/ControllerCommandDispatch.cxx b/chart2/source/controller/main/ControllerCommandDispatch.cxx index bde946fac5b6..7531290c9714 100644 --- a/chart2/source/controller/main/ControllerCommandDispatch.cxx +++ b/chart2/source/controller/main/ControllerCommandDispatch.cxx @@ -45,6 +45,7 @@ #include "RegressionCurveHelper.hxx" #include "DataSeriesHelper.hxx" #include "StatisticsHelper.hxx" +#include "ShapeController.hxx" #include <com/sun/star/util/XModifyBroadcaster.hpp> #include <com/sun/star/frame/XStorable.hpp> @@ -421,13 +422,15 @@ DBG_NAME(ControllerCommandDispatch) ControllerCommandDispatch::ControllerCommandDispatch( const Reference< uno::XComponentContext > & xContext, - const Reference< frame::XController > & xController ) : + ChartController* pController, CommandDispatchContainer* pContainer ) : impl::ControllerCommandDispatch_Base( xContext ), - m_xController( xController ), - m_xSelectionSupplier( xController, uno::UNO_QUERY ), - m_xDispatch( xController, uno::UNO_QUERY ), + m_pChartController( pController ), + m_xController( Reference< frame::XController >( pController ) ), + m_xSelectionSupplier( Reference< view::XSelectionSupplier >( pController ) ), + m_xDispatch( Reference< frame::XDispatch >( pController ) ), m_apModelState( new impl::ModelState() ), - m_apControllerState( new impl::ControllerState() ) + m_apControllerState( new impl::ControllerState() ), + m_pDispatchContainer( pContainer ) { DBG_CTOR(ControllerCommandDispatch,NULL); } @@ -524,7 +527,23 @@ void ControllerCommandDispatch::updateCommandAvailability() m_aCommandAvailability[ C2U(".uno:Legend")] = bIsWritable && m_apModelState->bHasLegend; m_aCommandAvailability[ C2U(".uno:DiagramWall")] = bIsWritable && bModelStateIsValid && m_apModelState->bHasWall; m_aCommandAvailability[ C2U(".uno:DiagramArea")] = bIsWritable; - m_aCommandAvailability[ C2U(".uno:TransformDialog")] = bIsWritable && bControllerStateIsValid && m_apControllerState->bHasSelectedObject && m_apControllerState->bIsDraggableObject; + + bool bTransformDialog = false; + if ( m_pChartController && m_pChartController->isShapeContext() ) + { + // #i12587# support for shapes in chart + ShapeController* pShapeController = ( m_pDispatchContainer ? m_pDispatchContainer->getShapeController() : NULL ); + if ( pShapeController ) + { + FeatureState aFeatureState( pShapeController->getState( C2U( ".uno:TransformDialog" ) ) ); + bTransformDialog = aFeatureState.bEnabled; + } + } + else + { + bTransformDialog = ( bIsWritable && bControllerStateIsValid && m_apControllerState->bHasSelectedObject && m_apControllerState->bIsDraggableObject ); + } + m_aCommandAvailability[ C2U(".uno:TransformDialog")] = bTransformDialog; // 3d commands m_aCommandAvailability[ C2U(".uno:View3D")] = bIsWritable && bModelStateIsValid && m_apModelState->bIsThreeD; diff --git a/chart2/source/controller/main/ControllerCommandDispatch.hxx b/chart2/source/controller/main/ControllerCommandDispatch.hxx index 16dc12b89c9b..6483b389b323 100644 --- a/chart2/source/controller/main/ControllerCommandDispatch.hxx +++ b/chart2/source/controller/main/ControllerCommandDispatch.hxx @@ -41,6 +41,9 @@ namespace chart { +class ChartController; +class CommandDispatchContainer; + namespace impl { struct ModelState; @@ -67,8 +70,7 @@ public: explicit ControllerCommandDispatch( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & xContext, - const ::com::sun::star::uno::Reference< - ::com::sun::star::frame::XController > & xController ); + ChartController* pController, CommandDispatchContainer* pContainer ); virtual ~ControllerCommandDispatch(); // late initialisation, especially for adding as listener @@ -112,6 +114,7 @@ private: bool commandAvailable( const ::rtl::OUString & rCommand ); void updateCommandAvailability(); + ChartController* m_pChartController; ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > m_xController; ::com::sun::star::uno::Reference< @@ -124,6 +127,8 @@ private: mutable ::std::map< ::rtl::OUString, bool > m_aCommandAvailability; mutable ::std::map< ::rtl::OUString, ::com::sun::star::uno::Any > m_aCommandArguments; + + CommandDispatchContainer* m_pDispatchContainer; }; } // namespace chart diff --git a/chart2/source/controller/main/ShapeController.cxx b/chart2/source/controller/main/ShapeController.cxx index 8c867461b7a8..e2e0fb6d948a 100644 --- a/chart2/source/controller/main/ShapeController.cxx +++ b/chart2/source/controller/main/ShapeController.cxx @@ -61,7 +61,7 @@ namespace chart //............................................................................. ShapeController::ShapeController( const Reference< uno::XComponentContext >& rxContext, - ChartController* pController ) + ChartController* pController ) :FeatureCommandDispatchBase( rxContext ) ,m_pChartController( pController ) { diff --git a/chart2/source/controller/main/ShapeController.hxx b/chart2/source/controller/main/ShapeController.hxx index 134ca9d4dba3..a456d41a3855 100644 --- a/chart2/source/controller/main/ShapeController.hxx +++ b/chart2/source/controller/main/ShapeController.hxx @@ -46,6 +46,8 @@ class ChartController; */ class ShapeController: public FeatureCommandDispatchBase { + friend class ControllerCommandDispatch; + public: ShapeController( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, ChartController* pController ); |