summaryrefslogtreecommitdiff
path: root/chart2/source/controller/main/ImplDocumentActions.cxx
diff options
context:
space:
mode:
authorFrank Schoenheit [fs] <frank.schoenheit@oracle.com>2010-11-16 13:10:17 +0100
committerFrank Schoenheit [fs] <frank.schoenheit@oracle.com>2010-11-16 13:10:17 +0100
commit2f09474ea14bf08a33e0788905a2a68bf5f93b2d (patch)
tree3f6e98d0ea92b4857afcb3dea0fbfbae20503f85 /chart2/source/controller/main/ImplDocumentActions.cxx
parentfa0b1d6e1d2850cae0cd11e33d662c8d8fad20a9 (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.cxx211
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()