diff options
author | Frank Schoenheit [fs] <frank.schoenheit@oracle.com> | 2010-11-16 13:10:17 +0100 |
---|---|---|
committer | Frank Schoenheit [fs] <frank.schoenheit@oracle.com> | 2010-11-16 13:10:17 +0100 |
commit | 2f09474ea14bf08a33e0788905a2a68bf5f93b2d (patch) | |
tree | 3f6e98d0ea92b4857afcb3dea0fbfbae20503f85 /chart2/source/controller/main/ImplDocumentActions.cxx | |
parent | fa0b1d6e1d2850cae0cd11e33d662c8d8fad20a9 (diff) |
undoapi: some cleanups after the previos refactoring (more to come)
Diffstat (limited to 'chart2/source/controller/main/ImplDocumentActions.cxx')
-rw-r--r-- | chart2/source/controller/main/ImplDocumentActions.cxx | 211 |
1 files changed, 1 insertions, 210 deletions
diff --git a/chart2/source/controller/main/ImplDocumentActions.cxx b/chart2/source/controller/main/ImplDocumentActions.cxx index f477052908ff..a565c81dad56 100644 --- a/chart2/source/controller/main/ImplDocumentActions.cxx +++ b/chart2/source/controller/main/ImplDocumentActions.cxx @@ -31,17 +31,11 @@ #include "ImplDocumentActions.hxx" #include "DisposeHelper.hxx" #include "CommonFunctors.hxx" -#include "ControllerLockGuard.hxx" #include "PropertyHelper.hxx" -#include "DataSourceHelper.hxx" -#include "ChartModelHelper.hxx" +#include "ChartModelClone.hxx" -#include <com/sun/star/chart/XComplexDescriptionAccess.hpp> #include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XInternalDataProvider.hpp> -#include <com/sun/star/chart2/XTitled.hpp> #include <com/sun/star/util/XCloneable.hpp> -#include <com/sun/star/util/XModifiable.hpp> #include <com/sun/star/view/XSelectionSupplier.hpp> #include <com/sun/star/lang/DisposedException.hpp> @@ -78,212 +72,9 @@ namespace impl using ::com::sun::star::lang::DisposedException; using ::com::sun::star::view::XSelectionSupplier; using ::com::sun::star::chart2::XChartDocument; - using ::com::sun::star::chart::XComplexDescriptionAccess; - using ::com::sun::star::chart2::XTitled; - using ::com::sun::star::chart2::XInternalDataProvider; - using ::com::sun::star::util::XModifiable; using ::com::sun::star::document::UndoFailedException; /** === end UNO using === **/ -// ===================================================================================================================== -// = helper -// ===================================================================================================================== -namespace -{ - Reference< XModel > lcl_cloneModel( const Reference< XModel > & xModel ) - { - Reference< XModel > xResult; - try - { - const Reference< XCloneable > xCloneable( xModel, UNO_QUERY_THROW ); - xResult.set( xCloneable->createClone(), UNO_QUERY_THROW ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return xResult; - } - -} - -// ===================================================================================================================== -// = ChartModelClone -// ===================================================================================================================== - -// --------------------------------------------------------------------------------------------------------------------- -ChartModelClone::ChartModelClone( const Reference< XModel >& i_model, const ModelFacet i_facet ) -{ - m_xModelClone.set( lcl_cloneModel( i_model ) ); - - try - { - if ( i_facet == E_MODEL_WITH_DATA ) - { - const Reference< XChartDocument > xChartDoc( m_xModelClone, UNO_QUERY_THROW ); - ENSURE_OR_THROW( xChartDoc->hasInternalDataProvider(), "invalid chart model" ); - - const Reference< XCloneable > xCloneable( xChartDoc->getDataProvider(), UNO_QUERY_THROW ); - m_xDataClone.set( xCloneable->createClone(), UNO_QUERY_THROW ); - } - - if ( i_facet == E_MODEL_WITH_SELECTION ) - { - const Reference< XSelectionSupplier > xSelSupp( m_xModelClone->getCurrentController(), UNO_QUERY_THROW ); - m_aSelection = xSelSupp->getSelection(); - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - - -// --------------------------------------------------------------------------------------------------------------------- -ChartModelClone::~ChartModelClone() -{ - if ( !impl_isDisposed() ) - dispose(); -} - -// --------------------------------------------------------------------------------------------------------------------- -void ChartModelClone::dispose() -{ - if ( impl_isDisposed() ) - return; - - try - { - Reference< XComponent > xComp( m_xModelClone, UNO_QUERY_THROW ); - xComp->dispose(); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - m_xModelClone.clear(); - m_xDataClone.clear(); - m_aSelection.clear(); -} - -// --------------------------------------------------------------------------------------------------------------------- -ModelFacet ChartModelClone::getFacet() const -{ - if ( m_aSelection.hasValue() ) - return E_MODEL_WITH_SELECTION; - if ( m_xDataClone.is() ) - return E_MODEL_WITH_DATA; - return E_MODEL; -} - -// --------------------------------------------------------------------------------------------------------------------- -void ChartModelClone::applyToModel( const Reference< XModel >& i_model ) const -{ - applyModelContentToModel( i_model, m_xModelClone, m_xDataClone ); - - if ( m_aSelection.hasValue() ) - { - try - { - Reference< XSelectionSupplier > xCurrentSelectionSuppl( i_model->getCurrentController(), UNO_QUERY_THROW ); - xCurrentSelectionSuppl->select( m_aSelection ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } -} - -// --------------------------------------------------------------------------------------------------------------------- -namespace -{ - void ImplApplyDataToModel( const Reference< XModel >& i_model, const Reference< XInternalDataProvider > & i_data ) - { - Reference< XChartDocument > xDoc( i_model, UNO_QUERY ); - OSL_ASSERT( xDoc.is() && xDoc->hasInternalDataProvider() ); - - // copy data from stored internal data provider - if( xDoc.is() && xDoc->hasInternalDataProvider()) - { - Reference< XComplexDescriptionAccess > xCurrentData( xDoc->getDataProvider(), UNO_QUERY ); - Reference< XComplexDescriptionAccess > xSavedData( i_data, UNO_QUERY ); - if ( xCurrentData.is() && xSavedData.is() ) - { - xCurrentData->setData( xSavedData->getData() ); - xCurrentData->setComplexRowDescriptions( xSavedData->getComplexRowDescriptions() ); - xCurrentData->setComplexColumnDescriptions( xSavedData->getComplexColumnDescriptions() ); - } - } - } -} - -// --------------------------------------------------------------------------------------------------------------------- -void ChartModelClone::applyModelContentToModel( const Reference< XModel >& i_model, - const Reference< XModel >& i_modelToCopyFrom, const Reference< XInternalDataProvider >& i_data ) -{ - ENSURE_OR_RETURN_VOID( i_model.is(), "ChartModelElement::applyModelContentToModel: invalid source model!" ); - ENSURE_OR_RETURN_VOID( i_modelToCopyFrom.is(), "ChartModelElement::applyModelContentToModel: invalid source model!" ); - try - { - // /-- loccked controllers of destination - ControllerLockGuard aLockedControllers( i_model ); - Reference< XChartDocument > xSource( i_modelToCopyFrom, UNO_QUERY_THROW ); - Reference< XChartDocument > xDestination( i_model, UNO_QUERY_THROW ); - - // propagate the correct flag for plotting of hidden values to the data provider and all used sequences - ChartModelHelper::setIncludeHiddenCells( ChartModelHelper::isIncludeHiddenCells( i_modelToCopyFrom ) , i_model ); - - // diagram - xDestination->setFirstDiagram( xSource->getFirstDiagram() ); - - // main title - Reference< XTitled > xDestinationTitled( xDestination, UNO_QUERY_THROW ); - Reference< XTitled > xSourceTitled( xSource, UNO_QUERY_THROW ); - xDestinationTitled->setTitleObject( xSourceTitled->getTitleObject() ); - - // page background - ::comphelper::copyProperties( - xSource->getPageBackground(), - xDestination->getPageBackground() ); - - // apply data (not applied in standard Undo) - if ( i_data.is() ) - ImplApplyDataToModel( i_model, i_data ); - - // register all sequences at the internal data provider to get adapted - // indexes when columns are added/removed - if ( xDestination->hasInternalDataProvider() ) - { - Reference< XInternalDataProvider > xNewDataProvider( xDestination->getDataProvider(), UNO_QUERY ); - Reference< chart2::data::XDataSource > xUsedData( DataSourceHelper::getUsedData( i_model ) ); - if ( xUsedData.is() && xNewDataProvider.is() ) - { - Sequence< Reference< chart2::data::XLabeledDataSequence > > aData( xUsedData->getDataSequences() ); - for( sal_Int32 i=0; i<aData.getLength(); ++i ) - { - xNewDataProvider->registerDataSequenceForChanges( aData[i]->getValues() ); - xNewDataProvider->registerDataSequenceForChanges( aData[i]->getLabel() ); - } - } - } - - // restore modify status - Reference< XModifiable > xSourceMod( xSource, UNO_QUERY ); - Reference< XModifiable > xDestMod( xDestination, UNO_QUERY ); - if ( xSourceMod.is() && xDestMod.is() && !xSourceMod->isModified() ) - { - xDestMod->setModified( sal_False ); - } - // \-- loccked controllers of destination - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } -} - // --------------------------------------------------------------------------------------------------------------------- UndoElement::UndoElement( const OUString& i_actionString, const Reference< XModel >& i_documentModel, const ::boost::shared_ptr< ChartModelClone >& i_modelClone ) :UndoElement_MBase() |