[Libreoffice-commits] core.git: Branch 'private/moggi/chart-opengl2' - 7 commits - chart2/inc chart2/source offapi/com offapi/UnoApi_offapi.mk sc/inc sc/source

Markus Mohrhard markus.mohrhard at googlemail.com
Tue Dec 31 04:37:15 PST 2013


 chart2/inc/ChartModel.hxx                 |    7 ++
 chart2/inc/ChartView.hxx                  |   17 +++++
 chart2/source/model/main/ChartModel.cxx   |   19 ++++++
 chart2/source/view/inc/VDataSeries.hxx    |   19 +++++-
 chart2/source/view/inc/VSeriesPlotter.hxx |    4 -
 chart2/source/view/main/ChartView.cxx     |   51 +++++++++++++++++
 chart2/source/view/main/VDataSeries.cxx   |   52 +++++++++++++++++
 offapi/UnoApi_offapi.mk                   |    1 
 offapi/com/sun/star/chart2/XTimeBased.idl |   30 ++++++++++
 sc/inc/chart2uno.hxx                      |   25 +++++++-
 sc/source/ui/unoobj/chart2uno.cxx         |   88 ++++++++++++++++++++++++++++--
 11 files changed, 299 insertions(+), 14 deletions(-)

New commits:
commit 7e8664eb332a571c7459ba04e26e1cbe2f1135c2
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Dec 30 08:58:18 2013 +0100

    simlplify
    
    Change-Id: I8ff774d9f26ff0c9a2241ee14935a86085a3209d

diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 75ce9b3..9a887fa 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -1540,8 +1540,8 @@ ScChart2DataProvider::createDataSource(
             pValueTokens.reset(pChartMap->getAllColHeaderRanges());
 
         SAL_WNODEPRECATED_DECLARATIONS_PUSH
-        auto_ptr< vector<ScTokenRef> > pLabelTokens(NULL);
-            pLabelTokens.reset(pChartMap->getLeftUpperCornerRanges());
+        auto_ptr< vector<ScTokenRef> > pLabelTokens(
+                pChartMap->getLeftUpperCornerRanges());
         SAL_WNODEPRECATED_DECLARATIONS_POP
 
         Reference< chart2::data::XLabeledDataSequence > xCategories = lcl_createLabeledDataSequenceFromTokens(
commit 1737c4572e5224dd220a41efe520f6ae1259359a
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Dec 30 08:39:19 2013 +0100

    remaining chart work for time based charting
    
    Change-Id: Iac33c81df199a942ddf073f9eb1b34e147a34f3c

diff --git a/chart2/inc/ChartModel.hxx b/chart2/inc/ChartModel.hxx
index 748e5f6..b251920 100644
--- a/chart2/inc/ChartModel.hxx
+++ b/chart2/inc/ChartModel.hxx
@@ -585,6 +585,8 @@ public:
 
     bool isTimeBased() const;
     void setTimeBased(bool bTimeBased);
+
+    void getNextTimePoint();
 };
 
 }  // namespace chart
diff --git a/chart2/inc/ChartView.hxx b/chart2/inc/ChartView.hxx
index 80f0d27..66925ab 100644
--- a/chart2/inc/ChartView.hxx
+++ b/chart2/inc/ChartView.hxx
@@ -43,6 +43,7 @@
 
 #include <vector>
 #include <boost/shared_ptr.hpp>
+#include <boost/ptr_container/ptr_vector.hpp>
 
 class SdrPage;
 
@@ -51,20 +52,19 @@ namespace chart {
 class VCoordinateSystem;
 class DrawModelWrapper;
 class SeriesPlotterContainer;
-class VDataSeriesGroup;
+class VDataSeries;
 
 struct TimeBasedInfo
 {
     TimeBasedInfo():
         bTimeBased(false),
-        nFrame(0),
-        m_pZSlots(NULL) {}
+        nFrame(0) {}
 
     bool bTimeBased;
     size_t nFrame;
 
     // only valid when we are in the time based mode
-    ::std::vector< ::std::vector< VDataSeriesGroup > >* m_pZSlots;
+    ::std::vector< std::vector< VDataSeries* > > m_aDataSeriesList;
 };
 
 /**
diff --git a/chart2/source/model/main/ChartModel.cxx b/chart2/source/model/main/ChartModel.cxx
index 842501f..4e6d245 100644
--- a/chart2/source/model/main/ChartModel.cxx
+++ b/chart2/source/model/main/ChartModel.cxx
@@ -58,6 +58,7 @@
 #include <com/sun/star/drawing/LineDash.hpp>
 #include <com/sun/star/drawing/XShapes.hpp>
 #include <com/sun/star/document/DocumentProperties.hpp>
+#include <com/sun/star/chart2/XTimeBased.hpp>
 
 // header for class SvNumberFormatter
 #include <svl/zforlist.hxx>
@@ -1356,6 +1357,14 @@ void ChartModel::setTimeBased(bool bTimeBased)
     mbTimeBased = bTimeBased;
 }
 
+void ChartModel::getNextTimePoint()
+{
+    uno::Reference< chart2::XTimeBased > xTimeBased(getUsedData(), uno::UNO_QUERY);
+    SAL_WARN_IF(!xTimeBased.is(), "chart2", "does not support time based charting");
+    if(xTimeBased.is())
+        xTimeBased->switchToNext();
+}
+
 }  // namespace chart
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/view/inc/VDataSeries.hxx b/chart2/source/view/inc/VDataSeries.hxx
index 94827d1..7989b3e 100644
--- a/chart2/source/view/inc/VDataSeries.hxx
+++ b/chart2/source/view/inc/VDataSeries.hxx
@@ -40,7 +40,7 @@
 namespace chart
 {
 
-class VDataSequence : boost::noncopyable
+class VDataSequence
 {
 public:
     void init( const ::com::sun::star::uno::Reference<
@@ -62,10 +62,6 @@ class VDataSeries SAL_FINAL : boost::noncopyable
 public:
     VDataSeries( const ::com::sun::star::uno::Reference<
         ::com::sun::star::chart2::XDataSeries >& xDataSeries );
-    // for time based charting
-    VDataSeries( const ::com::sun::star::uno::Reference<
-        ::com::sun::star::chart2::XDataSeries >& xDataSeries,
-        VDataSeries* pOldSeries, double nPercent);
 
     ~VDataSeries();
 
@@ -176,11 +172,17 @@ public:
     void setMissingValueTreatment( sal_Int32 nMissingValueTreatment );
     sal_Int32 getMissingValueTreatment() const;
 
+    void setOldTimeBased( VDataSeries* pOldSeries, double nPercent );
+    VDataSeries* createCopyForTimeBased() const;
+
 private: //methods
     ::com::sun::star::chart2::DataPointLabel*
                         getDataPointLabel( sal_Int32 index ) const;
     void adaptPointCache( sal_Int32 nNewPointIndex ) const;
 
+    // for copies for time based charting
+    VDataSeries();
+
 public: //member
     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > m_xGroupShape;
     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > m_xLabelsGroupShape;
diff --git a/chart2/source/view/inc/VSeriesPlotter.hxx b/chart2/source/view/inc/VSeriesPlotter.hxx
index 521903e..098bbe1 100644
--- a/chart2/source/view/inc/VSeriesPlotter.hxx
+++ b/chart2/source/view/inc/VSeriesPlotter.hxx
@@ -384,9 +384,6 @@ protected:
 
     VDataSeries* getFirstSeries() const;
 
-    // ugly hack to cache the data for the next turn
-    const std::vector< std::vector< VDataSeriesGroup > >& getData();
-
 protected:
     PlottingPositionHelper*    m_pMainPosHelper;
 
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 3e23991..c7db1b1 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2444,6 +2444,25 @@ void ChartView::createShapes()
 
         SeriesPlotterContainer aSeriesPlotterContainer( m_aVCooSysList );
         aSeriesPlotterContainer.initializeCooSysAndSeriesPlotter( mrChartModel );
+        if(maTimeBased.bTimeBased)
+        {
+            std::vector<VSeriesPlotter*>& rSeriesPlotter =
+                aSeriesPlotterContainer.getSeriesPlotterList();
+            size_t n = rSeriesPlotter.size();
+            for(size_t i = 0; i < n; ++i)
+            {
+                std::vector< VDataSeries* > aAllNewDataSeries =
+                    rSeriesPlotter[i]->getAllSeries();
+                std::vector< VDataSeries* >& rAllOldDataSeries =
+                    maTimeBased.m_aDataSeriesList[i];
+                size_t m = std::min(aAllNewDataSeries.size(), rAllOldDataSeries.size());
+                for(size_t j = 0; j < m; ++j)
+                {
+                    aAllNewDataSeries[j]->setOldTimeBased(
+                            rAllOldDataSeries[j], (maTimeBased.nFrame % 60)/60.0);
+                }
+            }
+        }
 
         lcl_createLegend( LegendHelper::getLegend( mrChartModel ), mxRootShape, m_xShapeFactory, m_xCC
                     , aRemainingSpace, aPageSize, mrChartModel, aSeriesPlotterContainer.getLegendEntryProviderList()
@@ -2529,6 +2548,31 @@ void ChartView::createShapes()
 
         //cleanup: remove all empty group shapes to avoid grey border lines:
         lcl_removeEmptyGroupShapes( mxRootShape );
+
+        if(maTimeBased.bTimeBased && maTimeBased.nFrame % 60 == 0)
+        {
+            // create copy of the data for next frame
+            std::vector<VSeriesPlotter*>& rSeriesPlotter =
+                aSeriesPlotterContainer.getSeriesPlotterList();
+            size_t n = rSeriesPlotter.size();
+            maTimeBased.m_aDataSeriesList.clear();
+            maTimeBased.m_aDataSeriesList.resize(n);
+            for(size_t i = 0; i < n; ++i)
+            {
+                std::vector< VDataSeries* > aAllNewDataSeries =
+                    rSeriesPlotter[i]->getAllSeries();
+                std::vector< VDataSeries* >& rAllOldDataSeries =
+                    maTimeBased.m_aDataSeriesList[i];
+                size_t m = std::min(aAllNewDataSeries.size(), rAllOldDataSeries.size());
+                for(size_t j = 0; j < m; ++j)
+                {
+                    rAllOldDataSeries.push_back( aAllNewDataSeries[j]->
+                            createCopyForTimeBased() );
+                }
+            }
+
+            mrChartModel.getNextTimePoint();
+        }
     }
 
     // #i12587# support for shapes in chart
@@ -2540,11 +2584,6 @@ void ChartView::createShapes()
 
     pShapeFactory->render( mxRootShape );
 
-    if(maTimeBased.bTimeBased && maTimeBased.nFrame % 60 == 0)
-    {
-        // create copy of the data for next frame
-
-    }
     if(maTimeBased.bTimeBased)
     {
         maTimeBased.nFrame++;
diff --git a/chart2/source/view/main/VDataSeries.cxx b/chart2/source/view/main/VDataSeries.cxx
index 2f170eb..981d832 100644
--- a/chart2/source/view/main/VDataSeries.cxx
+++ b/chart2/source/view/main/VDataSeries.cxx
@@ -182,6 +182,8 @@ VDataSeries::VDataSeries( const uno::Reference< XDataSeries >& xDataSeries )
     , m_nCurrentAttributedPoint(-1)
     , m_nMissingValueTreatment(::com::sun::star::chart::MissingValueTreatment::LEAVE_GAP)
     , m_bAllowPercentValueInDataLabel(false)
+    , mpOldSeries(NULL)
+    , mnPercent(0.0)
 {
     ::rtl::math::setNan( & m_fXMeanValue );
     ::rtl::math::setNan( & m_fYMeanValue );
@@ -1053,6 +1055,33 @@ sal_Int32 VDataSeries::getMissingValueTreatment() const
     return m_nMissingValueTreatment;
 }
 
+VDataSeries::VDataSeries()
+{
+}
+
+void VDataSeries::setOldTimeBased( VDataSeries* pOldSeries, double nPercent )
+{
+    mnPercent = nPercent;
+    mpOldSeries = pOldSeries;
+}
+
+VDataSeries* VDataSeries::createCopyForTimeBased() const
+{
+    VDataSeries* pNew = new VDataSeries();
+    pNew->m_aValues_X = m_aValues_X;
+    pNew->m_aValues_Y = m_aValues_Y;
+    pNew->m_aValues_Z = m_aValues_Z;
+    pNew->m_aValues_Y_Min = m_aValues_Y_Min;
+    pNew->m_aValues_Y_Max = m_aValues_Y_Max;
+    pNew->m_aValues_Y_First = m_aValues_Y_First;
+    pNew->m_aValues_Y_Last = m_aValues_Y_Last;
+    pNew->m_aValues_Bubble_Size = m_aValues_Bubble_Size;
+
+    pNew->m_nPointCount = m_nPointCount;
+
+    return pNew;
+}
+
 } //namespace chart
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 63dc12de012221e10ccaf0e82d4fd3f2703f17b9
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue Dec 31 15:15:19 2013 +0100

    time based charting calc side
    
    Change-Id: I0d5963a691e4495ee14e4d1228ea0ba2b1dd66d7

diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk
index a1ad831..48eb8de 100755
--- a/offapi/UnoApi_offapi.mk
+++ b/offapi/UnoApi_offapi.mk
@@ -2023,6 +2023,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/chart2,\
 	XRegressionCurveContainer \
 	XScaling \
 	XTarget \
+	XTimeBased \
 	XTitle \
 	XTitled \
 	XTransformation \
diff --git a/offapi/com/sun/star/chart2/XTimeBased.idl b/offapi/com/sun/star/chart2/XTimeBased.idl
new file mode 100644
index 0000000..70ce701
--- /dev/null
+++ b/offapi/com/sun/star/chart2/XTimeBased.idl
@@ -0,0 +1,30 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#ifndef com_sun_star_chart2_XTimeBased_idl
+#define com_sun_star_chart2_XTimeBased_idl
+
+#include <com/sun/star/uno/XInterface.idl>
+
+module com { module sun { module star { module chart2 {
+
+interface XTimeBased : com::sun::star::uno::XInterface
+{
+
+    /**
+     * @return
+     *      FALSE if the data wrapped around
+     */
+    boolean switchToNext();
+};
+
+}; }; }; };
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/inc/chart2uno.hxx b/sc/inc/chart2uno.hxx
index 4f54357..81a23dc 100644
--- a/sc/inc/chart2uno.hxx
+++ b/sc/inc/chart2uno.hxx
@@ -37,13 +37,14 @@
 #include <com/sun/star/chart2/data/XNumericalDataSequence.hpp>
 #include <com/sun/star/chart2/data/XLabeledDataSequence.hpp>
 #include <com/sun/star/chart2/data/DataSequenceRole.hpp>
+#include <com/sun/star/chart2/XTimeBased.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/util/XCloneable.hpp>
 #include <com/sun/star/util/XModifyBroadcaster.hpp>
-#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
 #include <cppuhelper/implbase5.hxx>
-#include <cppuhelper/implbase7.hxx>
+#include <cppuhelper/implbase8.hxx>
 #include <rtl/ustring.hxx>
 #include <svl/itemprop.hxx>
 
@@ -189,8 +190,9 @@ private:
 
 // DataSource
 class ScChart2DataSource : public
-                ::cppu::WeakImplHelper2<
+                ::cppu::WeakImplHelper3<
                     ::com::sun::star::chart2::data::XDataSource,
+                    com::sun::star::chart2::XTimeBased,
                     ::com::sun::star::lang::XServiceInfo>,
                 SfxListener
 {
@@ -205,6 +207,10 @@ public:
             ::com::sun::star::chart2::data::XLabeledDataSequence > > SAL_CALL
         getDataSequences() throw (::com::sun::star::uno::RuntimeException);
 
+    // XTimeBased
+    virtual sal_Bool switchToNext() throw(
+            ::com::sun::star::uno::RuntimeException);
+
     // XServiceInfo
     virtual OUString SAL_CALL getImplementationName() throw(
             ::com::sun::star::uno::RuntimeException);
@@ -220,20 +226,28 @@ public:
 
     void AddLabeledSequence(const com::sun::star::uno::Reference < com::sun::star::chart2::data::XLabeledDataSequence >& xNew);
 
+    void SetTimeBased(SCTAB nTimeBasedStart, SCTAB nTimeBasedEnd);
+
 private:
 
     ScDocument*                 m_pDocument;
     typedef std::list < com::sun::star::uno::Reference< com::sun::star::chart2::data::XLabeledDataSequence > >  LabeledList;
     LabeledList                 m_aLabeledSequences;
 
+    bool bTimeBased;
+    SCTAB mnTimeBasedStart;
+    SCTAB mnTimeBasedEnd;
+    SCTAB mnCurrentTab;
+
 };
 
 // DataSequence
 class ScChart2DataSequence : public
-                ::cppu::WeakImplHelper7<
+                ::cppu::WeakImplHelper8<
                     ::com::sun::star::chart2::data::XDataSequence,
                     ::com::sun::star::chart2::data::XTextualDataSequence,
                     ::com::sun::star::chart2::data::XNumericalDataSequence,
+                    com::sun::star::chart2::XTimeBased,
                     ::com::sun::star::util::XCloneable,
                     ::com::sun::star::util::XModifyBroadcaster,
                     ::com::sun::star::beans::XPropertySet,
@@ -269,6 +283,9 @@ public:
     virtual ::com::sun::star::uno::Sequence< OUString >
         SAL_CALL getTextualData(  ) throw (::com::sun::star::uno::RuntimeException);
 
+    // XTimeBased
+    virtual sal_Bool switchToNext() throw (::com::sun::star::uno::RuntimeException);
+
     // XPropertySet
     virtual ::com::sun::star::uno::Reference<
         ::com::sun::star::beans::XPropertySetInfo> SAL_CALL
diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 1057fb5..75ce9b3 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -1441,6 +1441,7 @@ ScChart2DataProvider::createDataSource(
     bool bOrientCol = true;
     OUString aRangeRepresentation;
     uno::Sequence< sal_Int32 > aSequenceMapping;
+    sal_Bool bTimeBased = false;
     for(sal_Int32 i = 0; i < aArguments.getLength(); ++i)
     {
         if ( aArguments[i].Name == "DataRowSource" )
@@ -1470,6 +1471,10 @@ ScChart2DataProvider::createDataSource(
         {
             aArguments[i].Value >>= aSequenceMapping;
         }
+        else if ( aArguments[i].Name == "TimeBased" )
+        {
+            aArguments[i].Value >>= bTimeBased;
+        }
     }
 
     vector<ScTokenRef> aRefTokens;
@@ -1480,7 +1485,31 @@ ScChart2DataProvider::createDataSource(
         // Invalid range representation.  Bail out.
         throw lang::IllegalArgumentException();
 
-    shrinkToDataRange(m_pDocument, aRefTokens);
+    SCTAB nTimeBasedStart = MAXTAB;
+    SCTAB nTimeBasedEnd = 0;
+    if(bTimeBased)
+    {
+        // limit to first sheet
+        for(vector<ScTokenRef>::iterator itr = aRefTokens.begin(),
+                itrEnd = aRefTokens.end(); itr != itrEnd; ++itr)
+        {
+            if ((*itr)->GetType() != svDoubleRef)
+                continue;
+
+            ScComplexRefData& rData = (*itr)->GetDoubleRef();
+            ScSingleRefData& s = rData.Ref1;
+            ScSingleRefData& e = rData.Ref2;
+
+            nTimeBasedStart = std::min(nTimeBasedStart, s.Tab());
+            nTimeBasedEnd = std::min(nTimeBasedEnd, e.Tab());
+
+            if(s.Tab() != e.Tab())
+                e.SetAbsTab(s.Tab());
+        }
+    }
+
+    if(!bTimeBased)
+        shrinkToDataRange(m_pDocument, aRefTokens);
 
     if (bLabel)
         lcl_addUpperLeftCornerIfMissing(aRefTokens); //#i90669#
@@ -1550,6 +1579,8 @@ ScChart2DataProvider::createDataSource(
     }
 
     pDS = new ScChart2DataSource(m_pDocument);
+    if(bTimeBased)
+        pDS->SetTimeBased(nTimeBasedStart, nTimeBasedEnd);
     ::std::list< Reference< chart2::data::XLabeledDataSequence > >::iterator aItr( aSeqs.begin() );
     ::std::list< Reference< chart2::data::XLabeledDataSequence > >::iterator aEndItr( aSeqs.end() );
 
@@ -2424,6 +2455,32 @@ void ScChart2DataSource::AddLabeledSequence(const uno::Reference < chart2::data:
     m_aLabeledSequences.push_back(xNew);
 }
 
+sal_Bool ScChart2DataSource::switchToNext() throw ( uno::RuntimeException)
+{
+    if(mnCurrentTab != mnTimeBasedEnd)
+    {
+        for(LabeledList::iterator itr = m_aLabeledSequences.begin(),
+                itrEnd = m_aLabeledSequences.end(); itr != itrEnd; ++itr)
+        {
+            uno::Reference< chart2::XTimeBased> xTimeBased(*itr, uno::UNO_QUERY);
+            if(xTimeBased.is())
+                xTimeBased->switchToNext();
+        }
+        ++mnCurrentTab;
+        return sal_True;
+    }
+
+    return sal_False;
+}
+
+void ScChart2DataSource::SetTimeBased(SCTAB nTimeBasedStart, SCTAB nTimeBasedEnd)
+{
+    mnCurrentTab = nTimeBasedStart;
+    mnTimeBasedStart = nTimeBasedStart;
+    mnTimeBasedEnd = nTimeBasedEnd;
+    bTimeBased = true;
+}
+
 
 // DataSequence ==============================================================
 
@@ -3549,4 +3606,29 @@ void ScChart2DataSequence::setDataChangedHint(bool b)
     m_bGotDataChangedHint = b;
 }
 
+sal_Bool ScChart2DataSequence::switchToNext()
+    throw (uno::RuntimeException)
+{
+    if(!m_pTokens)
+        return sal_True;
+
+    for(vector<ScTokenRef>::iterator itr = m_pTokens->begin(),
+            itrEnd = m_pTokens->end(); itr != itrEnd; ++itr)
+    {
+        if ((*itr)->GetType() != svDoubleRef)
+            continue;
+
+        ScComplexRefData& rData = (*itr)->GetDoubleRef();
+        ScSingleRefData& s = rData.Ref1;
+        ScSingleRefData& e = rData.Ref2;
+
+        s.IncTab(1);
+        e.IncTab(1);
+    }
+
+    RebuildDataCache();
+
+    return sal_True;
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 71937296cc9bc0a4d1e7eaddca10b6484b161e84
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Dec 30 06:47:30 2013 +0100

    kill two virtual destructors
    
    we know that there are no subclasses so the virtual destructors are
    unnecessary
    
    Change-Id: Idad45370035004224d4128fb095aefac6b9acad0

diff --git a/chart2/source/view/inc/VDataSeries.hxx b/chart2/source/view/inc/VDataSeries.hxx
index 37d512f..94827d1 100644
--- a/chart2/source/view/inc/VDataSeries.hxx
+++ b/chart2/source/view/inc/VDataSeries.hxx
@@ -67,7 +67,7 @@ public:
         ::com::sun::star::chart2::XDataSeries >& xDataSeries,
         VDataSeries* pOldSeries, double nPercent);
 
-    virtual ~VDataSeries();
+    ~VDataSeries();
 
     ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries >
         getModel() const;
diff --git a/chart2/source/view/inc/VSeriesPlotter.hxx b/chart2/source/view/inc/VSeriesPlotter.hxx
index e685700..521903e 100644
--- a/chart2/source/view/inc/VSeriesPlotter.hxx
+++ b/chart2/source/view/inc/VSeriesPlotter.hxx
@@ -78,7 +78,7 @@ class VDataSeriesGroup SAL_FINAL
 public:
     VDataSeriesGroup();
     VDataSeriesGroup( VDataSeries* pSeries );
-    virtual ~VDataSeriesGroup();
+    ~VDataSeriesGroup();
 
     void addSeries( VDataSeries* pSeries );//takes ownership of pSeries
     sal_Int32 getSeriesCount() const;
commit 51aa09045652425e414c19f3dde9e8386ba948df
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Dec 30 06:45:50 2013 +0100

    one more place for time based charting
    
    Change-Id: I977c02af8517fb747d526535bb1dc5aa0f3e485c

diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 9a2a949..3e23991 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2369,6 +2369,8 @@ void ChartView::createShapes()
     clock_t nStart = clock();
     OSL_TRACE( "\nPPPPPPPPP>>>>>>>>>>>> chart view :: createShapes()" );
 #endif
+    if(mrChartModel.isTimeBased())
+        maTimeBased.bTimeBased = true;
 
     //make sure add-in is refreshed after creating the shapes
     const ::comphelper::ScopeGuard aGuard( boost::bind( &ChartView::impl_refreshAddIn, this ) );
@@ -2538,6 +2540,16 @@ void ChartView::createShapes()
 
     pShapeFactory->render( mxRootShape );
 
+    if(maTimeBased.bTimeBased && maTimeBased.nFrame % 60 == 0)
+    {
+        // create copy of the data for next frame
+
+    }
+    if(maTimeBased.bTimeBased)
+    {
+        maTimeBased.nFrame++;
+    }
+
 #if OSL_DEBUG_LEVEL > 0
     clock_t nEnd = clock();
     double fDuration =(double(nEnd-nStart)*1000.0)/double(CLOCKS_PER_SEC);
commit ceaf08a3e12645502ccf850743895f6e3c7c7bac
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Dec 30 06:45:14 2013 +0100

    add SAL_FINAL to assert that there are no subclasses
    
    we can now remove all the virtual keywords
    
    Change-Id: I494b25d7a1ba7f30d319025c92040d0f882d6c63

diff --git a/chart2/source/view/inc/VDataSeries.hxx b/chart2/source/view/inc/VDataSeries.hxx
index bbd903c..37d512f 100644
--- a/chart2/source/view/inc/VDataSeries.hxx
+++ b/chart2/source/view/inc/VDataSeries.hxx
@@ -57,7 +57,7 @@ public:
     mutable ::com::sun::star::uno::Sequence< double > Doubles;
 };
 
-class VDataSeries : boost::noncopyable
+class VDataSeries SAL_FINAL : boost::noncopyable
 {
 public:
     VDataSeries( const ::com::sun::star::uno::Reference<
diff --git a/chart2/source/view/inc/VSeriesPlotter.hxx b/chart2/source/view/inc/VSeriesPlotter.hxx
index 0d68cdf..e685700 100644
--- a/chart2/source/view/inc/VSeriesPlotter.hxx
+++ b/chart2/source/view/inc/VSeriesPlotter.hxx
@@ -73,7 +73,7 @@ private:
  * A list of series that have the same CoordinateSystem. They are used to be
  * plotted maybe in a stacked manner by a plotter.
  */
-class VDataSeriesGroup
+class VDataSeriesGroup SAL_FINAL
 {
 public:
     VDataSeriesGroup();
commit 8c7a4232246b389f680c2699ccb613866bac8f7c
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Dec 30 06:22:04 2013 +0100

    implement time based charting based on new approach
    
    The old approach does not work with the current implementation of the
    OpenGL backend. We now need to repaing every time the whole chart.
    
    Change-Id: I2151a3f016c6ceecaec2d45db0cb967cfee59af6

diff --git a/chart2/inc/ChartModel.hxx b/chart2/inc/ChartModel.hxx
index 7d61d1d..748e5f6 100644
--- a/chart2/inc/ChartModel.hxx
+++ b/chart2/inc/ChartModel.hxx
@@ -120,6 +120,8 @@ private:
     sal_Int32               m_nInLoad;
     sal_Bool volatile       m_bUpdateNotificationsPending;
 
+    bool mbTimeBased;
+
     com::sun::star::uno::Reference< com::sun::star::uno::XInterface > xChartView; // for the ref count
     ChartView* mpChartView;
 
@@ -580,6 +582,9 @@ public:
     // normal methods
     ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >
         getNumberFormatsSupplier();
+
+    bool isTimeBased() const;
+    void setTimeBased(bool bTimeBased);
 };
 
 }  // namespace chart
diff --git a/chart2/inc/ChartView.hxx b/chart2/inc/ChartView.hxx
index 80ef459..80f0d27 100644
--- a/chart2/inc/ChartView.hxx
+++ b/chart2/inc/ChartView.hxx
@@ -51,6 +51,21 @@ namespace chart {
 class VCoordinateSystem;
 class DrawModelWrapper;
 class SeriesPlotterContainer;
+class VDataSeriesGroup;
+
+struct TimeBasedInfo
+{
+    TimeBasedInfo():
+        bTimeBased(false),
+        nFrame(0),
+        m_pZSlots(NULL) {}
+
+    bool bTimeBased;
+    size_t nFrame;
+
+    // only valid when we are in the time based mode
+    ::std::vector< ::std::vector< VDataSeriesGroup > >* m_pZSlots;
+};
 
 /**
  * The ChartView is responsible to manage the generation of Drawing Objects
@@ -237,6 +252,8 @@ private: //member
     sal_Bool m_bSdrViewIsInEditMode;
 
     ::com::sun::star::awt::Rectangle m_aResultingDiagramRectangleExcludingAxes;
+
+    TimeBasedInfo maTimeBased;
 };
 
 }
diff --git a/chart2/source/model/main/ChartModel.cxx b/chart2/source/model/main/ChartModel.cxx
index c29a10e..842501f 100644
--- a/chart2/source/model/main/ChartModel.cxx
+++ b/chart2/source/model/main/ChartModel.cxx
@@ -1346,6 +1346,16 @@ OUString SAL_CALL ChartModel::dump()
     return OUString();
 }
 
+bool ChartModel::isTimeBased() const
+{
+    return mbTimeBased;
+}
+
+void ChartModel::setTimeBased(bool bTimeBased)
+{
+    mbTimeBased = bTimeBased;
+}
+
 }  // namespace chart
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/view/inc/VDataSeries.hxx b/chart2/source/view/inc/VDataSeries.hxx
index be0fab6..bbd903c 100644
--- a/chart2/source/view/inc/VDataSeries.hxx
+++ b/chart2/source/view/inc/VDataSeries.hxx
@@ -62,6 +62,11 @@ class VDataSeries : boost::noncopyable
 public:
     VDataSeries( const ::com::sun::star::uno::Reference<
         ::com::sun::star::chart2::XDataSeries >& xDataSeries );
+    // for time based charting
+    VDataSeries( const ::com::sun::star::uno::Reference<
+        ::com::sun::star::chart2::XDataSeries >& xDataSeries,
+        VDataSeries* pOldSeries, double nPercent);
+
     virtual ~VDataSeries();
 
     ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries >
@@ -140,7 +145,7 @@ public:
 
     void setRoleOfSequenceForDataLabelNumberFormatDetection( const OUString& rRole );
 
-    //this is only temporarily here for area chart:
+    //this is only tempohttps://www.google.de/search?q=minka+kelly&safe=off&tbm=isch&tbo=u&source=univ&sa=X&ei=x36_Uv6ZF9Kf7ga-rYGIAg&ved=0CK4BEIke&biw=1920&bih=1043#q=minka+kelly&safe=off&tbm=isch&tbs=isz:lrarily here for area chart:
     ::com::sun::star::drawing::PolyPolygonShape3D       m_aPolyPolygonShape3D;
     sal_Int32   m_nPolygonIndex;
     double m_fLogicMinX;
@@ -250,6 +255,10 @@ private: //member
 
     sal_Int32   m_nMissingValueTreatment;
     bool        m_bAllowPercentValueInDataLabel;
+
+    // for time based charting
+    VDataSeries* mpOldSeries;
+    double mnPercent;
 };
 
 } //namespace chart
diff --git a/chart2/source/view/inc/VSeriesPlotter.hxx b/chart2/source/view/inc/VSeriesPlotter.hxx
index 6a087de..0d68cdf 100644
--- a/chart2/source/view/inc/VSeriesPlotter.hxx
+++ b/chart2/source/view/inc/VSeriesPlotter.hxx
@@ -384,6 +384,9 @@ protected:
 
     VDataSeries* getFirstSeries() const;
 
+    // ugly hack to cache the data for the next turn
+    const std::vector< std::vector< VDataSeriesGroup > >& getData();
+
 protected:
     PlottingPositionHelper*    m_pMainPosHelper;
 
diff --git a/chart2/source/view/main/VDataSeries.cxx b/chart2/source/view/main/VDataSeries.cxx
index 72cefde..2f170eb 100644
--- a/chart2/source/view/main/VDataSeries.cxx
+++ b/chart2/source/view/main/VDataSeries.cxx
@@ -465,7 +465,14 @@ double VDataSeries::getXValue( sal_Int32 index ) const
     if(m_aValues_X.is())
     {
         if( 0<=index && index<m_aValues_X.getLength() )
+        {
             fRet = m_aValues_X.Doubles[index];
+            if(mpOldSeries)
+            {
+                double nOldVal = mpOldSeries->m_aValues_X.Doubles[index];
+                fRet = nOldVal + (fRet - nOldVal) * mnPercent;
+            }
+        }
         else
             ::rtl::math::setNan( &fRet );
     }
@@ -487,7 +494,14 @@ double VDataSeries::getYValue( sal_Int32 index ) const
     if(m_aValues_Y.is())
     {
         if( 0<=index && index<m_aValues_Y.getLength() )
+        {
             fRet = m_aValues_Y.Doubles[index];
+            if(mpOldSeries)
+            {
+                double nOldVal = mpOldSeries->m_aValues_Y.Doubles[index];
+                fRet = nOldVal + (fRet - nOldVal) * mnPercent;
+            }
+        }
         else
             ::rtl::math::setNan( &fRet );
     }
@@ -548,7 +562,14 @@ double VDataSeries::getY_Last( sal_Int32 index ) const
 }
 double VDataSeries::getBubble_Size( sal_Int32 index ) const
 {
-    return m_aValues_Bubble_Size.getValue( index );
+    double nNewVal = m_aValues_Bubble_Size.getValue( index );
+    if(mpOldSeries)
+    {
+        double nOldVal = mpOldSeries->m_aValues_Bubble_Size.getValue( index );
+        nNewVal = nOldVal + (nNewVal - nOldVal) * mnPercent;
+    }
+
+    return nNewVal;
 }
 
 bool VDataSeries::hasExplicitNumberFormat( sal_Int32 nPointIndex, bool bForPercentage ) const


More information about the Libreoffice-commits mailing list