summaryrefslogtreecommitdiff
path: root/sc/source/filter/excel/xichart.cxx
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2010-02-26 15:31:46 +0100
committerKohei Yoshida <kyoshida@novell.com>2010-02-26 15:31:46 +0100
commit8c3ce6044a3a250a65eaa39c976ba0c03f3e09db (patch)
tree2a4f8677621076e780a8348d7ebd74ddf9abe8e4 /sc/source/filter/excel/xichart.cxx
parentb9fce326449160ed0c6f5c07446baa64d38fa3d3 (diff)
parent22e99ad710239c0604f883f303d91b8c43a71f16 (diff)
calctabcolor: rebased to m72.
Diffstat (limited to 'sc/source/filter/excel/xichart.cxx')
-rw-r--r--sc/source/filter/excel/xichart.cxx66
1 files changed, 59 insertions, 7 deletions
diff --git a/sc/source/filter/excel/xichart.cxx b/sc/source/filter/excel/xichart.cxx
index 9bdeaf8ee432..5ec414a82ebe 100644
--- a/sc/source/filter/excel/xichart.cxx
+++ b/sc/source/filter/excel/xichart.cxx
@@ -2,13 +2,10 @@
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2008 by Sun Microsystems, Inc.
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: xichart.cxx,v $
- * $Revision: 1.20.62.14 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -34,6 +31,7 @@
#include "xichart.hxx"
#include <algorithm>
+#include <memory>
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/drawing/Direction3D.hpp>
@@ -72,6 +70,8 @@
#include "tokenarray.hxx"
#include "token.hxx"
#include "compiler.hxx"
+#include "reftokenhelper.hxx"
+#include "chartlis.hxx"
#include "fprogressbar.hxx"
#include "xltracer.hxx"
#include "xistream.hxx"
@@ -123,6 +123,8 @@ using ::com::sun::star::chart2::data::XDataSequence;
using ::formula::FormulaToken;
using ::formula::StackVar;
+using ::std::vector;
+
// Helpers ====================================================================
namespace {
@@ -791,6 +793,22 @@ Sequence< Reference< XFormattedString > > XclImpChSourceLink::CreateStringSequen
return ScfApiHelper::VectorToSequence( aStringVec );
}
+void XclImpChSourceLink::FillSourceLink(vector<ScSharedTokenRef>& rTokens) const
+{
+ if (!mxTokenArray.is())
+ // no links to fill.
+ return;
+
+ mxTokenArray->Reset();
+ for (FormulaToken* p = mxTokenArray->First(); p; p = mxTokenArray->Next())
+ {
+ ScSharedTokenRef pToken(static_cast<ScToken*>(p->Clone()));
+ if (ScRefTokenHelper::isRef(pToken))
+ // This is a reference token. Store it.
+ ScRefTokenHelper::join(rTokens, pToken);
+ }
+}
+
// Text =======================================================================
XclImpChFontBase::~XclImpChFontBase()
@@ -1837,6 +1855,18 @@ Reference< XDataSeries > XclImpChSeries::CreateDataSeries() const
return xDataSeries;
}
+void XclImpChSeries::FillAllSourceLinks(vector<ScSharedTokenRef>& rTokens) const
+{
+ if (mxValueLink.is())
+ mxValueLink->FillSourceLink(rTokens);
+ if (mxCategLink.is())
+ mxCategLink->FillSourceLink(rTokens);
+ if (mxTitleLink.is())
+ mxTitleLink->FillSourceLink(rTokens);
+ if (mxBubbleLink.is())
+ mxBubbleLink->FillSourceLink(rTokens);
+}
+
void XclImpChSeries::ReadChSourceLink( XclImpStream& rStrm )
{
XclImpChSourceLinkRef xSrcLink( new XclImpChSourceLink( GetChRoot() ) );
@@ -3483,7 +3513,7 @@ XclImpChTextRef XclImpChChart::GetDefaultText( XclChTextType eTextType ) const
return maDefTexts.get( nDefTextId );
}
-void XclImpChChart::Convert( Reference< XChartDocument > xChartDoc, ScfProgressBar& rProgress ) const
+void XclImpChChart::Convert( Reference< XChartDocument > xChartDoc, ScfProgressBar& rProgress, const OUString& rObjName ) const
{
// initialize conversion (locks the model to suppress any internal updates)
InitConversion( xChartDoc );
@@ -3526,6 +3556,28 @@ void XclImpChChart::Convert( Reference< XChartDocument > xChartDoc, ScfProgressB
// unlock the model
FinishConversion( rProgress );
+
+ ScDocument* pDoc = &GetRoot().GetDoc();
+ ScChartListenerCollection* pChartCollection = pDoc->GetChartListenerCollection();
+ if (pChartCollection)
+ {
+ // Now, start listening to this chart.
+ ::std::auto_ptr< vector<ScSharedTokenRef> > pRefTokens(new vector<ScSharedTokenRef>);
+ for (XclImpChSeriesVec::const_iterator itr = maSeries.begin(), itrEnd = maSeries.end(); itr != itrEnd; ++itr)
+ {
+ const XclImpChSeriesRef& rSeries = *itr;
+ rSeries->FillAllSourceLinks(*pRefTokens);
+ }
+ if (!pRefTokens->empty())
+ {
+ ::std::auto_ptr<ScChartListener> pListener(
+ new ScChartListener(rObjName, pDoc, pRefTokens.release()));
+ pListener->SetUsed(true);
+ pListener->StartListeningTo();
+ pChartCollection->Insert(pListener.release());
+
+ }
+ }
}
void XclImpChChart::ReadChSeries( XclImpStream& rStrm )
@@ -3757,11 +3809,11 @@ sal_Size XclImpChart::GetProgressSize() const
return mxChartData.is() ? mxChartData->GetProgressSize() : 0;
}
-void XclImpChart::Convert( Reference< XModel > xModel, ScfProgressBar& rProgress ) const
+void XclImpChart::Convert( Reference< XModel > xModel, ScfProgressBar& rProgress, const OUString& rObjName ) const
{
Reference< XChartDocument > xChartDoc( xModel, UNO_QUERY );
if( mxChartData.is() && xChartDoc.is() )
- mxChartData->Convert( xChartDoc, rProgress );
+ mxChartData->Convert( xChartDoc, rProgress, rObjName );
}
void XclImpChart::ReadChChart( XclImpStream& rStrm )