Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2820

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/20/2820/1

error bar range is also part of chart range, related fdo#52159

Change-Id: I344448db559de8435dcc26e2be4597c385724a7b
(cherry picked from commit e15d8ef44fbf9fc23da58648e4d288782a81c7c1)
---
M sc/source/ui/view/drawvie4.cxx
1 file changed, 70 insertions(+), 17 deletions(-)



diff --git a/sc/source/ui/view/drawvie4.cxx b/sc/source/ui/view/drawvie4.cxx
index ceebfbd..adf45ee 100644
--- a/sc/source/ui/view/drawvie4.cxx
+++ b/sc/source/ui/view/drawvie4.cxx
@@ -46,6 +46,9 @@
 #include <com/sun/star/embed/Aspects.hpp>
 #include <com/sun/star/embed/XEmbeddedObject.hpp>
 #include <com/sun/star/embed/XComponentSupplier.hpp>
+#include <com/sun/star/chart2/XChartTypeContainer.hpp>
+#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
+#include <com/sun/star/chart2/XDataSeriesContainer.hpp>
 
 using namespace com::sun::star;
 
@@ -151,6 +154,70 @@
 
 namespace {
 
+void getRangeFromDataSource( uno::Reference< chart2::data::XDataSource > xDataSource, 
std::vector<OUString>& rRangeRep)
+{
+    uno::Sequence<uno::Reference<chart2::data::XLabeledDataSequence> > xSeqs = 
xDataSource->getDataSequences();
+    for (sal_Int32 i = 0, n = xSeqs.getLength(); i < n; ++i)
+    {
+        uno::Reference<chart2::data::XLabeledDataSequence> xLS = xSeqs[i];
+        uno::Reference<chart2::data::XDataSequence> xSeq = xLS->getValues();
+        if (xSeq.is())
+        {
+            OUString aRep = xSeq->getSourceRangeRepresentation();
+            rRangeRep.push_back(aRep);
+        }
+        xSeq = xLS->getLabel();
+        if (xSeq.is())
+        {
+            OUString aRep = xSeq->getSourceRangeRepresentation();
+            rRangeRep.push_back(aRep);
+        }
+    }
+}
+
+
+void getRangeFromErrorBar(const uno::Reference< chart2::XChartDocument > xChartDoc, 
std::vector<OUString>& rRangeRep)
+{
+    uno::Reference <chart2::XDiagram > xDiagram = xChartDoc->getFirstDiagram();
+    if(!xDiagram.is())
+        return;
+
+    uno::Reference< chart2::XCoordinateSystemContainer > xCooSysContainer( xDiagram, 
uno::UNO_QUERY);
+    if(!xCooSysContainer.is())
+        return;
+
+    uno::Sequence< uno::Reference< chart2::XCoordinateSystem > > xCooSysSequence( 
xCooSysContainer->getCoordinateSystems());
+    for(sal_Int32 i = 0; i < xCooSysSequence.getLength(); ++i)
+    {
+        uno::Reference< chart2::XChartTypeContainer > xChartTypeContainer( xCooSysSequence[i], 
uno::UNO_QUERY);
+        if(!xChartTypeContainer.is())
+            continue;
+
+        uno::Sequence< uno::Reference< chart2::XChartType > > xChartTypeSequence( 
xChartTypeContainer->getChartTypes() );
+        for(sal_Int32 nChartType = 0; nChartType < xChartTypeSequence.getLength(); ++nChartType)
+        {
+            uno::Reference< chart2::XDataSeriesContainer > xDataSequenceContainer( 
xChartTypeSequence[nChartType], uno::UNO_QUERY);
+            if(!xDataSequenceContainer.is())
+                continue;
+
+            uno::Sequence< uno::Reference< chart2::XDataSeries > > xSeriesSequence( 
xDataSequenceContainer->getDataSeries() );
+            for(sal_Int32 nDataSeries = 0; nDataSeries < xSeriesSequence.getLength(); 
++nDataSeries)
+            {
+                uno::Reference< chart2::XDataSeries > xSeries = xSeriesSequence[nDataSeries];
+                uno::Reference< beans::XPropertySet > xPropSet( xSeries, uno::UNO_QUERY);
+                uno::Reference< chart2::data::XDataSource > xErrorBarY;
+                xPropSet->getPropertyValue("ErrorBarY") >>= xErrorBarY;
+                if(xErrorBarY.is())
+                    getRangeFromDataSource(xErrorBarY, rRangeRep);
+                uno::Reference< chart2::data::XDataSource > xErrorBarX;
+                xPropSet->getPropertyValue("ErrorBarX") >>= xErrorBarX;
+                if(xErrorBarX.is())
+                    getRangeFromDataSource(xErrorBarX, rRangeRep);
+            }
+        }
+    }
+}
+
 void getRangeFromOle2Object(const SdrOle2Obj& rObj, std::vector<OUString>& rRangeRep)
 {
     if (!rObj.IsChart())
@@ -172,28 +239,14 @@
     if(xChartDoc->hasInternalDataProvider())
         return;
 
+    getRangeFromErrorBar(xChartDoc, rRangeRep);
+
     uno::Reference<chart2::data::XDataSource> xDataSource(xChartDoc, uno::UNO_QUERY);
     if (!xDataSource.is())
         return;
 
     // Get all data sources used in this chart.
-    uno::Sequence<uno::Reference<chart2::data::XLabeledDataSequence> > xSeqs = 
xDataSource->getDataSequences();
-    for (sal_Int32 i = 0, n = xSeqs.getLength(); i < n; ++i)
-    {
-        uno::Reference<chart2::data::XLabeledDataSequence> xLS = xSeqs[i];
-        uno::Reference<chart2::data::XDataSequence> xSeq = xLS->getValues();
-        if (xSeq.is())
-        {
-            OUString aRep = xSeq->getSourceRangeRepresentation();
-            rRangeRep.push_back(aRep);
-        }
-        xSeq = xLS->getLabel();
-        if (xSeq.is())
-        {
-            OUString aRep = xSeq->getSourceRangeRepresentation();
-            rRangeRep.push_back(aRep);
-        }
-    }
+    getRangeFromDataSource(xDataSource, rRangeRep);
 }
 
 /**

-- 
To view, visit https://gerrit.libreoffice.org/2820
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I344448db559de8435dcc26e2be4597c385724a7b
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Markus Mohrhard <markus.mohrhard@googlemail.com>


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.