[Libreoffice-commits] core.git: 2 commits - chart2/source chart2/uiconfig

Markus Mohrhard markus.mohrhard at googlemail.com
Thu Jul 16 16:45:07 PDT 2015


 chart2/source/controller/sidebar/ChartSeriesPanel.cxx |  160 +++++++++++++++++-
 chart2/source/controller/sidebar/ChartSeriesPanel.hxx |    7 
 chart2/uiconfig/ui/sidebarseries.ui                   |    2 
 3 files changed, 167 insertions(+), 2 deletions(-)

New commits:
commit 07ff2841ccf6d4f93941838305248f7048fec803
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jul 17 01:41:10 2015 +0200

    add data label handling to series panel
    
    Change-Id: I37415b5effb6ac320184008b9b25988804387715

diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
index 389ec28..b8b1b5a 100644
--- a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
+++ b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
@@ -24,6 +24,7 @@
 #include <com/sun/star/chart2/DataPointLabel.hpp>
 #include <com/sun/star/chart/ErrorBarStyle.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/chart/DataLabelPlacement.hpp>
 
 #include "ChartSeriesPanel.hxx"
 #include "ChartController.hxx"
@@ -76,6 +77,68 @@ void setDataLabelVisible(css::uno::Reference<css::frame::XModel> xModel, const O
         DataSeriesHelper::deleteDataLabelsFromSeriesAndAllPoints(xSeries);
 }
 
+struct LabelPlacementMap
+{
+    sal_Int32 nPos;
+    sal_Int32 nApi;
+};
+
+LabelPlacementMap aLabelPlacementMap[] = {
+    { 0, css::chart::DataLabelPlacement::TOP },
+    { 1, css::chart::DataLabelPlacement::BOTTOM },
+    { 2, css::chart::DataLabelPlacement::CENTER },
+    { 3, css::chart::DataLabelPlacement::OUTSIDE },
+    { 4, css::chart::DataLabelPlacement::INSIDE  },
+    { 5, css::chart::DataLabelPlacement::NEAR_ORIGIN }
+};
+
+sal_Int32 getDataLabelPlacement(css::uno::Reference<css::frame::XModel> xModel,
+        const OUString& rCID)
+{
+    css::uno::Reference< css::beans::XPropertySet > xSeries(
+        ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+
+    if (!xSeries.is())
+        return false;
+
+    css::uno::Any aAny = xSeries->getPropertyValue("LabelPlacement");
+    if (!aAny.hasValue())
+        return 0;
+
+    sal_Int32 nPlacement = 0;
+    aAny >>= nPlacement;
+
+    for (size_t i = 0; i < SAL_N_ELEMENTS(aLabelPlacementMap); ++i)
+    {
+        if (aLabelPlacementMap[i].nApi == nPlacement)
+            return aLabelPlacementMap[i].nPos;
+    }
+
+    return 0;
+}
+
+void setDataLabelPlacement(css::uno::Reference<css::frame::XModel> xModel,
+        const OUString& rCID, sal_Int32 nPos)
+{
+    css::uno::Reference< css::beans::XPropertySet > xSeries(
+        ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+
+    if (!xSeries.is())
+        return;
+
+    sal_Int32 nApi = 0;
+    for (size_t i = 0; i < SAL_N_ELEMENTS(aLabelPlacementMap); ++i)
+    {
+        if (aLabelPlacementMap[i].nPos == nPos)
+        {
+            nApi = aLabelPlacementMap[i].nApi;
+            break;
+        }
+    }
+
+    xSeries->setPropertyValue("LabelPlacement", css::uno::makeAny(nApi));
+}
+
 bool isTrendlineVisible(css::uno::Reference<css::frame::XModel> xModel,
         const OUString& rCID)
 {
@@ -192,6 +255,8 @@ ChartSeriesPanel::ChartSeriesPanel(
     get(mpRBPrimaryAxis, "radiobutton_primary_axis");
     get(mpRBSecondaryAxis, "radiobutton_secondary_axis");
 
+    get(mpLBLabelPlacement, "comboboxtext_label");
+
     Initialize();
 }
 
@@ -213,6 +278,8 @@ void ChartSeriesPanel::dispose()
     mpRBPrimaryAxis.clear();
     mpRBSecondaryAxis.clear();
 
+    mpLBLabelPlacement.clear();
+
     PanelLayout::dispose();
 }
 
@@ -232,6 +299,8 @@ void ChartSeriesPanel::Initialize()
     aLink = LINK(this, ChartSeriesPanel, RadioBtnHdl);
     mpRBPrimaryAxis->SetToggleHdl(aLink);
     mpRBSecondaryAxis->SetToggleHdl(aLink);
+
+    mpLBLabelPlacement->SetSelectHdl(LINK(this, ChartSeriesPanel, ListBoxHdl));
 }
 
 void ChartSeriesPanel::updateData()
@@ -250,7 +319,8 @@ void ChartSeriesPanel::updateData()
     assert(eType == OBJECTTYPE_DATA_SERIES);
 #endif
     SolarMutexGuard aGuard;
-    mpCBLabel->Check(isDataLabelVisible(mxModel, aCID));
+    bool bLabelVisible = isDataLabelVisible(mxModel, aCID);
+    mpCBLabel->Check(bLabelVisible);
     mpCBTrendline->Check(isTrendlineVisible(mxModel, aCID));
     mpCBXError->Check(isErrorBarVisible(mxModel, aCID, false));
     mpCBYError->Check(isErrorBarVisible(mxModel, aCID, true));
@@ -258,6 +328,9 @@ void ChartSeriesPanel::updateData()
     bool bPrimaryAxis = isPrimaryAxis(mxModel, aCID);
     mpRBPrimaryAxis->Check(bPrimaryAxis);
     mpRBSecondaryAxis->Check(!bPrimaryAxis);
+
+    mpLBLabelPlacement->Enable(bLabelVisible);
+    mpLBLabelPlacement->SelectEntryPos(getDataLabelPlacement(mxModel, aCID));
 }
 
 VclPtr<vcl::Window> ChartSeriesPanel::Create (
@@ -353,6 +426,28 @@ IMPL_LINK_NOARG(ChartSeriesPanel, RadioBtnHdl)
     return 0;
 }
 
+IMPL_LINK_NOARG(ChartSeriesPanel, ListBoxHdl)
+{
+    css::uno::Reference<css::frame::XController> xController(mxModel->getCurrentController());
+    css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(xController, css::uno::UNO_QUERY);
+    if (!xSelectionSupplier.is())
+        return 0;
+
+    uno::Any aAny = xSelectionSupplier->getSelection();
+    assert(aAny.hasValue());
+    OUString aCID;
+    aAny >>= aCID;
+#ifdef DBG_UTIL
+    ObjectType eType = ObjectIdentifier::getObjectType(aCID);
+    assert(eType == OBJECTTYPE_DATA_SERIES);
+#endif
+
+    sal_Int32 nPos = mpLBLabelPlacement->GetSelectEntryPos();
+    setDataLabelPlacement(mxModel, aCID, nPos);
+
+    return 0;
+}
+
 }} // end of namespace ::chart::sidebar
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx
index a0c773b..32cce955 100644
--- a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx
+++ b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx
@@ -83,6 +83,8 @@ private:
     VclPtr<RadioButton> mpRBPrimaryAxis;
     VclPtr<RadioButton> mpRBSecondaryAxis;
 
+    VclPtr<ListBox> mpLBLabelPlacement;
+
     css::uno::Reference<css::frame::XFrame> mxFrame;
     ::sfx2::sidebar::EnumContext            maContext;
     SfxBindings*                            mpBindings;
@@ -94,6 +96,7 @@ private:
 
     DECL_LINK(CheckBoxHdl, CheckBox*);
     DECL_LINK(RadioBtnHdl, void*);
+    DECL_LINK(ListBoxHdl, void*);
 };
 
 } } // end of namespace ::chart::sidebar
commit d84f954cc0ad22cf62e279da2e473f79d1fb889b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Fri Jul 17 01:08:12 2015 +0200

    also handle primary vs secondary axis in series panel
    
    Change-Id: Ieed69e1e7ebd88b15dd6a6fb51863fab4f57479c

diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
index b318f59..389ec28 100644
--- a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
+++ b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
@@ -23,6 +23,7 @@
 
 #include <com/sun/star/chart2/DataPointLabel.hpp>
 #include <com/sun/star/chart/ErrorBarStyle.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
 
 #include "ChartSeriesPanel.hxx"
 #include "ChartController.hxx"
@@ -144,6 +145,31 @@ void setErrorBarVisible(css::uno::Reference<css::frame::XModel>
     }
 }
 
+bool isPrimaryAxis(css::uno::Reference<css::frame::XModel>
+        xModel, const OUString& rCID)
+{
+    css::uno::Reference< css::chart2::XDataSeries > xSeries(
+        ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+
+    if (!xSeries.is())
+        return true;
+
+    return DataSeriesHelper::getAttachedAxisIndex(xSeries) == 0;
+}
+
+void setAttachedAxisType(css::uno::Reference<css::frame::XModel>
+        xModel, const OUString& rCID, bool bPrimary)
+{
+    css::uno::Reference< css::beans::XPropertySet > xSeries(
+        ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+
+    if (!xSeries.is())
+        return;
+
+    sal_Int32 nIndex = bPrimary ? 0 : 1;
+    xSeries->setPropertyValue("AttachedAxisIndex", css::uno::makeAny(nIndex));
+}
+
 }
 
 ChartSeriesPanel::ChartSeriesPanel(
@@ -163,6 +189,9 @@ ChartSeriesPanel::ChartSeriesPanel(
     get(mpCBXError, "checkbutton_x_error");
     get(mpCBYError, "checkbutton_y_error");
 
+    get(mpRBPrimaryAxis, "radiobutton_primary_axis");
+    get(mpRBSecondaryAxis, "radiobutton_secondary_axis");
+
     Initialize();
 }
 
@@ -181,6 +210,9 @@ void ChartSeriesPanel::dispose()
     mpCBXError.clear();
     mpCBYError.clear();
 
+    mpRBPrimaryAxis.clear();
+    mpRBSecondaryAxis.clear();
+
     PanelLayout::dispose();
 }
 
@@ -196,6 +228,10 @@ void ChartSeriesPanel::Initialize()
     mpCBTrendline->SetClickHdl(aLink);
     mpCBXError->SetClickHdl(aLink);
     mpCBYError->SetClickHdl(aLink);
+
+    aLink = LINK(this, ChartSeriesPanel, RadioBtnHdl);
+    mpRBPrimaryAxis->SetToggleHdl(aLink);
+    mpRBSecondaryAxis->SetToggleHdl(aLink);
 }
 
 void ChartSeriesPanel::updateData()
@@ -218,6 +254,10 @@ void ChartSeriesPanel::updateData()
     mpCBTrendline->Check(isTrendlineVisible(mxModel, aCID));
     mpCBXError->Check(isErrorBarVisible(mxModel, aCID, false));
     mpCBYError->Check(isErrorBarVisible(mxModel, aCID, true));
+
+    bool bPrimaryAxis = isPrimaryAxis(mxModel, aCID);
+    mpRBPrimaryAxis->Check(bPrimaryAxis);
+    mpRBSecondaryAxis->Check(!bPrimaryAxis);
 }
 
 VclPtr<vcl::Window> ChartSeriesPanel::Create (
@@ -290,6 +330,29 @@ IMPL_LINK(ChartSeriesPanel, CheckBoxHdl, CheckBox*, pCheckBox)
     return 0;
 }
 
+IMPL_LINK_NOARG(ChartSeriesPanel, RadioBtnHdl)
+{
+    css::uno::Reference<css::frame::XController> xController(mxModel->getCurrentController());
+    css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(xController, css::uno::UNO_QUERY);
+    if (!xSelectionSupplier.is())
+        return 0;
+
+    uno::Any aAny = xSelectionSupplier->getSelection();
+    assert(aAny.hasValue());
+    OUString aCID;
+    aAny >>= aCID;
+#ifdef DBG_UTIL
+    ObjectType eType = ObjectIdentifier::getObjectType(aCID);
+    assert(eType == OBJECTTYPE_DATA_SERIES);
+#endif
+
+    bool bChecked = mpRBPrimaryAxis->IsChecked();
+
+    setAttachedAxisType(mxModel, aCID, bChecked);
+
+    return 0;
+}
+
 }} // end of namespace ::chart::sidebar
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx
index 7594e28..a0c773b 100644
--- a/chart2/source/controller/sidebar/ChartSeriesPanel.hxx
+++ b/chart2/source/controller/sidebar/ChartSeriesPanel.hxx
@@ -80,6 +80,9 @@ private:
     VclPtr<CheckBox> mpCBXError;
     VclPtr<CheckBox> mpCBYError;
 
+    VclPtr<RadioButton> mpRBPrimaryAxis;
+    VclPtr<RadioButton> mpRBSecondaryAxis;
+
     css::uno::Reference<css::frame::XFrame> mxFrame;
     ::sfx2::sidebar::EnumContext            maContext;
     SfxBindings*                            mpBindings;
@@ -90,6 +93,7 @@ private:
     void Initialize();
 
     DECL_LINK(CheckBoxHdl, CheckBox*);
+    DECL_LINK(RadioBtnHdl, void*);
 };
 
 } } // end of namespace ::chart::sidebar
diff --git a/chart2/uiconfig/ui/sidebarseries.ui b/chart2/uiconfig/ui/sidebarseries.ui
index afcc7a9..88180b5 100644
--- a/chart2/uiconfig/ui/sidebarseries.ui
+++ b/chart2/uiconfig/ui/sidebarseries.ui
@@ -2,7 +2,7 @@
 <!-- Generated with glade 3.18.3 -->
 <interface>
   <requires lib="gtk+" version="3.12"/>
-  <object class="GtkGrid" id="DataSeriesPanel">
+  <object class="GtkGrid" id="ChartSeriesPanel">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <child>


More information about the Libreoffice-commits mailing list