summaryrefslogtreecommitdiff
path: root/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/source/controller/sidebar/ChartSeriesPanel.cxx')
-rw-r--r--chart2/source/controller/sidebar/ChartSeriesPanel.cxx226
1 files changed, 110 insertions, 116 deletions
diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
index 83a3251925f1..8795e691fbd7 100644
--- a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
+++ b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
@@ -18,23 +18,24 @@
*/
#include <com/sun/star/chart/ErrorBarStyle.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/chart/DataLabelPlacement.hpp>
-#include <com/sun/star/chart2/XChartDocument.hpp>
-#include <com/sun/star/chart2/XDataSeries.hpp>
-#include <com/sun/star/chart2/XChartTypeContainer.hpp>
-#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
-#include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
-#include <com/sun/star/util/XModifyBroadcaster.hpp>
#include <vcl/svapp.hxx>
+#include <sal/log.hxx>
#include "ChartSeriesPanel.hxx"
#include <ChartController.hxx>
-
+#include <ChartModel.hxx>
+#include <ChartType.hxx>
+#include <DataSeries.hxx>
#include <DataSeriesHelper.hxx>
+#include <Diagram.hxx>
#include <RegressionCurveHelper.hxx>
+#include <RegressionCurveModel.hxx>
#include <StatisticsHelper.hxx>
+#include <BaseCoordinateSystem.hxx>
+
+#include <comphelper/processfactory.hxx>
using namespace css;
using namespace css::uno;
@@ -43,29 +44,29 @@ namespace chart::sidebar {
namespace {
-bool isDataLabelVisible(const css::uno::Reference<css::frame::XModel>& xModel, const OUString& rCID)
+bool isDataLabelVisible(const rtl::Reference<::chart::ChartModel>& xModel, std::u16string_view rCID)
{
- css::uno::Reference< css::chart2::XDataSeries > xSeries =
+ rtl::Reference< DataSeries > xSeries =
ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
return false;
- return DataSeriesHelper::hasDataLabelsAtSeries(xSeries);
+ return xSeries->hasDataLabelsAtSeries();
}
-void setDataLabelVisible(const css::uno::Reference<css::frame::XModel>& xModel, const OUString& rCID, bool bVisible)
+void setDataLabelVisible(const rtl::Reference<::chart::ChartModel>& xModel, std::u16string_view rCID, bool bVisible)
{
- css::uno::Reference< css::chart2::XDataSeries > xSeries =
+ rtl::Reference< DataSeries > xSeries =
ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
return;
if (bVisible)
- DataSeriesHelper::insertDataLabelsToSeriesAndAllPoints(xSeries);
+ xSeries->insertDataLabelsToSeriesAndAllPoints();
else
- DataSeriesHelper::deleteDataLabelsFromSeriesAndAllPoints(xSeries);
+ xSeries->deleteDataLabelsFromSeriesAndAllPoints();
}
struct LabelPlacementMap
@@ -83,16 +84,16 @@ LabelPlacementMap const aLabelPlacementMap[] = {
{ 5, css::chart::DataLabelPlacement::NEAR_ORIGIN }
};
-sal_Int32 getDataLabelPlacement(const css::uno::Reference<css::frame::XModel>& xModel,
- const OUString& rCID)
+sal_Int32 getDataLabelPlacement(const rtl::Reference<::chart::ChartModel>& xModel,
+ std::u16string_view rCID)
{
- css::uno::Reference< css::beans::XPropertySet > xSeries(
- ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+ rtl::Reference< DataSeries > xSeries =
+ ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
return 0;
- css::uno::Any aAny = xSeries->getPropertyValue("LabelPlacement");
+ css::uno::Any aAny = xSeries->getPropertyValue(u"LabelPlacement"_ustr);
if (!aAny.hasValue())
return 0;
@@ -108,11 +109,11 @@ sal_Int32 getDataLabelPlacement(const css::uno::Reference<css::frame::XModel>& x
return 0;
}
-void setDataLabelPlacement(const css::uno::Reference<css::frame::XModel>& xModel,
- const OUString& rCID, sal_Int32 nPos)
+void setDataLabelPlacement(const rtl::Reference<::chart::ChartModel>& xModel,
+ std::u16string_view rCID, sal_Int32 nPos)
{
- css::uno::Reference< css::beans::XPropertySet > xSeries(
- ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+ rtl::Reference< DataSeries > xSeries =
+ ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
return;
@@ -127,26 +128,26 @@ void setDataLabelPlacement(const css::uno::Reference<css::frame::XModel>& xModel
}
}
- xSeries->setPropertyValue("LabelPlacement", css::uno::Any(nApi));
+ xSeries->setPropertyValue(u"LabelPlacement"_ustr, css::uno::Any(nApi));
}
-bool isTrendlineVisible(const css::uno::Reference<css::frame::XModel>& xModel,
- const OUString& rCID)
+bool isTrendlineVisible(const rtl::Reference<::chart::ChartModel>& xModel,
+ std::u16string_view rCID)
{
- css::uno::Reference< css::chart2::XRegressionCurveContainer > xRegressionCurveContainer(
- ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+ rtl::Reference< DataSeries > xRegressionCurveContainer =
+ ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xRegressionCurveContainer.is())
return false;
- return xRegressionCurveContainer->getRegressionCurves().hasElements();
+ return !xRegressionCurveContainer->getRegressionCurves2().empty();
}
-void setTrendlineVisible(const css::uno::Reference<css::frame::XModel>&
- xModel, const OUString& rCID, bool bVisible)
+void setTrendlineVisible(const rtl::Reference<::chart::ChartModel>&
+ xModel, std::u16string_view rCID, bool bVisible)
{
- css::uno::Reference< css::chart2::XRegressionCurveContainer > xRegressionCurveContainer(
- ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+ rtl::Reference< DataSeries > xRegressionCurveContainer =
+ ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xRegressionCurveContainer.is())
return;
@@ -163,10 +164,10 @@ void setTrendlineVisible(const css::uno::Reference<css::frame::XModel>&
}
-bool isErrorBarVisible(const css::uno::Reference<css::frame::XModel>& xModel,
- const OUString& rCID, bool bYError)
+bool isErrorBarVisible(const rtl::Reference<::chart::ChartModel>& xModel,
+ std::u16string_view rCID, bool bYError)
{
- css::uno::Reference< css::chart2::XDataSeries > xSeries =
+ rtl::Reference< DataSeries > xSeries =
ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
@@ -175,10 +176,10 @@ bool isErrorBarVisible(const css::uno::Reference<css::frame::XModel>& xModel,
return StatisticsHelper::hasErrorBars(xSeries, bYError);
}
-void setErrorBarVisible(const css::uno::Reference<css::frame::XModel>&
- xModel, const OUString& rCID, bool bYError, bool bVisible)
+void setErrorBarVisible(const rtl::Reference<::chart::ChartModel>&
+ xModel, std::u16string_view rCID, bool bYError, bool bVisible)
{
- css::uno::Reference< css::chart2::XDataSeries > xSeries =
+ rtl::Reference< DataSeries > xSeries =
ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
@@ -196,53 +197,48 @@ void setErrorBarVisible(const css::uno::Reference<css::frame::XModel>&
}
}
-bool isPrimaryAxis(const css::uno::Reference<css::frame::XModel>&
- xModel, const OUString& rCID)
+bool isPrimaryAxis(const rtl::Reference<::chart::ChartModel>&
+ xModel, std::u16string_view rCID)
{
- css::uno::Reference< css::chart2::XDataSeries > xSeries =
+ rtl::Reference< DataSeries > xSeries =
ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
return true;
- return DataSeriesHelper::getAttachedAxisIndex(xSeries) == 0;
+ return xSeries->getAttachedAxisIndex() == 0;
}
-void setAttachedAxisType(const css::uno::Reference<css::frame::XModel>&
- xModel, const OUString& rCID, bool bPrimary)
+void setAttachedAxisType(const rtl::Reference<::chart::ChartModel>&
+ xModel, std::u16string_view rCID, bool bPrimary)
{
- css::uno::Reference< css::beans::XPropertySet > xSeries(
- ObjectIdentifier::getDataSeriesForCID(rCID, xModel), uno::UNO_QUERY );
+ const rtl::Reference<DataSeries> xDataSeries = ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
- if (!xSeries.is())
+ if (!xDataSeries.is())
return;
- sal_Int32 nIndex = bPrimary ? 0 : 1;
- xSeries->setPropertyValue("AttachedAxisIndex", css::uno::Any(nIndex));
+ rtl::Reference<Diagram> xDiagram = xModel->getFirstChartDiagram();
+ xDiagram->attachSeriesToAxis(bPrimary, xDataSeries, comphelper::getProcessComponentContext());
}
-css::uno::Reference<css::chart2::XChartType> getChartType(
- const css::uno::Reference<css::frame::XModel>& xModel)
+rtl::Reference<ChartType> getChartType(
+ const rtl::Reference<::chart::ChartModel>& xModel)
{
- css::uno::Reference<css::chart2::XChartDocument> xChartDoc (xModel, css::uno::UNO_QUERY);
- css::uno::Reference<css::chart2::XDiagram> xDiagram = xChartDoc->getFirstDiagram();
- css::uno::Reference< css::chart2::XCoordinateSystemContainer > xCooSysContainer( xDiagram, UNO_QUERY_THROW );
- css::uno::Sequence< css::uno::Reference< css::chart2::XCoordinateSystem > > xCooSysSequence( xCooSysContainer->getCoordinateSystems());
- css::uno::Reference< css::chart2::XChartTypeContainer > xChartTypeContainer( xCooSysSequence[0], UNO_QUERY_THROW );
- css::uno::Sequence< css::uno::Reference< css::chart2::XChartType > > xChartTypeSequence( xChartTypeContainer->getChartTypes() );
- return xChartTypeSequence[0];
+ rtl::Reference<Diagram> xDiagram = xModel->getFirstChartDiagram();
+ const std::vector< rtl::Reference< BaseCoordinateSystem > > xCooSysSequence( xDiagram->getBaseCoordinateSystems());
+ return xCooSysSequence[0]->getChartTypes2()[0];
}
-OUString getSeriesLabel(const css::uno::Reference<css::frame::XModel>& xModel, const OUString& rCID)
+OUString getSeriesLabel(const rtl::Reference<::chart::ChartModel>& xModel, std::u16string_view rCID)
{
- css::uno::Reference< css::chart2::XDataSeries > xSeries =
+ rtl::Reference< DataSeries > xSeries =
ObjectIdentifier::getDataSeriesForCID(rCID, xModel);
if (!xSeries.is())
return OUString();
- css::uno::Reference<css::chart2::XChartType> xChartType = getChartType(xModel);
- return DataSeriesHelper::getDataSeriesLabel(xSeries, xChartType->getRoleOfSequenceForSeriesLabel());
+ rtl::Reference<ChartType> xChartType = getChartType(xModel);
+ return xSeries->getLabelForRole(xChartType->getRoleOfSequenceForSeriesLabel());
}
OUString getCID(const css::uno::Reference<css::frame::XModel>& xModel)
@@ -264,8 +260,10 @@ OUString getCID(const css::uno::Reference<css::frame::XModel>& xModel)
#if defined DBG_UTIL && !defined NDEBUG
ObjectType eType = ObjectIdentifier::getObjectType(aCID);
- assert(eType == OBJECTTYPE_DATA_SERIES || eType == OBJECTTYPE_DATA_POINT
- || eType == OBJECTTYPE_DATA_CURVE);
+ if (eType != OBJECTTYPE_DATA_SERIES &&
+ eType != OBJECTTYPE_DATA_POINT &&
+ eType != OBJECTTYPE_DATA_CURVE)
+ SAL_WARN("chart2","Selected item is not a chart series");
#endif
return aCID;
@@ -274,21 +272,20 @@ OUString getCID(const css::uno::Reference<css::frame::XModel>& xModel)
}
ChartSeriesPanel::ChartSeriesPanel(
- vcl::Window* pParent,
- const css::uno::Reference<css::frame::XFrame>& rxFrame,
+ weld::Widget* pParent,
ChartController* pController)
- : PanelLayout(pParent, "ChartSeriesPanel", "modules/schart/ui/sidebarseries.ui", rxFrame)
- , mxCBLabel(m_xBuilder->weld_check_button("checkbutton_label"))
- , mxCBTrendline(m_xBuilder->weld_check_button("checkbutton_trendline"))
- , mxCBXError(m_xBuilder->weld_check_button("checkbutton_x_error"))
- , mxCBYError(m_xBuilder->weld_check_button("checkbutton_y_error"))
- , mxRBPrimaryAxis(m_xBuilder->weld_radio_button("radiobutton_primary_axis"))
- , mxRBSecondaryAxis(m_xBuilder->weld_radio_button("radiobutton_secondary_axis"))
- , mxBoxLabelPlacement(m_xBuilder->weld_widget("datalabel_box"))
- , mxLBLabelPlacement(m_xBuilder->weld_combo_box("comboboxtext_label"))
- , mxFTSeriesName(m_xBuilder->weld_label("label_series_name"))
- , mxFTSeriesTemplate(m_xBuilder->weld_label("label_series_tmpl"))
- , mxModel(pController->getModel())
+ : PanelLayout(pParent, u"ChartSeriesPanel"_ustr, u"modules/schart/ui/sidebarseries.ui"_ustr)
+ , mxCBLabel(m_xBuilder->weld_check_button(u"checkbutton_label"_ustr))
+ , mxCBTrendline(m_xBuilder->weld_check_button(u"checkbutton_trendline"_ustr))
+ , mxCBXError(m_xBuilder->weld_check_button(u"checkbutton_x_error"_ustr))
+ , mxCBYError(m_xBuilder->weld_check_button(u"checkbutton_y_error"_ustr))
+ , mxRBPrimaryAxis(m_xBuilder->weld_radio_button(u"radiobutton_primary_axis"_ustr))
+ , mxRBSecondaryAxis(m_xBuilder->weld_radio_button(u"radiobutton_secondary_axis"_ustr))
+ , mxBoxLabelPlacement(m_xBuilder->weld_widget(u"datalabel_box"_ustr))
+ , mxLBLabelPlacement(m_xBuilder->weld_combo_box(u"comboboxtext_label"_ustr))
+ , mxFTSeriesName(m_xBuilder->weld_label(u"label_series_name"_ustr))
+ , mxFTSeriesTemplate(m_xBuilder->weld_label(u"label_series_tmpl"_ustr))
+ , mxModel(pController->getChartModel())
, mxListener(new ChartSidebarModifyListener(this))
, mxSelectionListener(new ChartSidebarSelectionListener(this, OBJECTTYPE_DATA_SERIES))
, mbModelValid(true)
@@ -298,16 +295,7 @@ ChartSeriesPanel::ChartSeriesPanel(
ChartSeriesPanel::~ChartSeriesPanel()
{
- disposeOnce();
-}
-
-void ChartSeriesPanel::dispose()
-{
- css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW);
- xBroadcaster->removeModifyListener(mxListener);
- css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY);
- if (xSelectionSupplier.is())
- xSelectionSupplier->removeSelectionChangeListener(mxSelectionListener);
+ doUpdateModel(nullptr);
mxCBLabel.reset();
mxCBTrendline.reset();
@@ -322,27 +310,24 @@ void ChartSeriesPanel::dispose()
mxFTSeriesName.reset();
mxFTSeriesTemplate.reset();
-
- PanelLayout::dispose();
}
void ChartSeriesPanel::Initialize()
{
- css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW);
- xBroadcaster->addModifyListener(mxListener);
+ mxModel->addModifyListener(mxListener);
css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY);
if (xSelectionSupplier.is())
xSelectionSupplier->addSelectionChangeListener(mxSelectionListener);
updateData();
- Link<weld::ToggleButton&,void> aLink = LINK(this, ChartSeriesPanel, CheckBoxHdl);
+ Link<weld::Toggleable&,void> aLink = LINK(this, ChartSeriesPanel, CheckBoxHdl);
mxCBLabel->connect_toggled(aLink);
mxCBTrendline->connect_toggled(aLink);
mxCBXError->connect_toggled(aLink);
mxCBYError->connect_toggled(aLink);
- Link<weld::ToggleButton&,void> aLink2 = LINK(this, ChartSeriesPanel, RadioBtnHdl);
+ Link<weld::Toggleable&,void> aLink2 = LINK(this, ChartSeriesPanel, RadioBtnHdl);
mxRBPrimaryAxis->connect_toggled(aLink2);
mxRBSecondaryAxis->connect_toggled(aLink2);
@@ -355,6 +340,12 @@ void ChartSeriesPanel::updateData()
return;
OUString aCID = getCID(mxModel);
+ ObjectType eType = ObjectIdentifier::getObjectType(aCID);
+ if (eType!=OBJECTTYPE_DATA_SERIES &&
+ eType != OBJECTTYPE_DATA_POINT &&
+ eType != OBJECTTYPE_DATA_CURVE)
+ return;
+
SolarMutexGuard aGuard;
bool bLabelVisible = isDataLabelVisible(mxModel, aCID);
mxCBLabel->set_active(bLabelVisible);
@@ -374,23 +365,19 @@ void ChartSeriesPanel::updateData()
mxFTSeriesName->set_label(aFrameLabel);
}
-VclPtr<vcl::Window> ChartSeriesPanel::Create (
- vcl::Window* pParent,
- const css::uno::Reference<css::frame::XFrame>& rxFrame,
+std::unique_ptr<PanelLayout> ChartSeriesPanel::Create (
+ weld::Widget* pParent,
ChartController* pController)
{
if (pParent == nullptr)
- throw lang::IllegalArgumentException("no parent Window given to ChartSeriesPanel::Create", nullptr, 0);
- if ( ! rxFrame.is())
- throw lang::IllegalArgumentException("no XFrame given to ChartSeriesPanel::Create", nullptr, 1);
+ throw lang::IllegalArgumentException(u"no parent Window given to ChartSeriesPanel::Create"_ustr, nullptr, 0);
- return VclPtr<ChartSeriesPanel>::Create(
- pParent, rxFrame, pController);
+ return std::make_unique<ChartSeriesPanel>(pParent, pController);
}
-void ChartSeriesPanel::DataChanged(
- const DataChangedEvent& )
+void ChartSeriesPanel::DataChanged(const DataChangedEvent& rEvent)
{
+ PanelLayout::DataChanged(rEvent);
updateData();
}
@@ -412,39 +399,46 @@ void ChartSeriesPanel::modelInvalid()
mbModelValid = false;
}
-void ChartSeriesPanel::updateModel(
- css::uno::Reference<css::frame::XModel> xModel)
+void ChartSeriesPanel::doUpdateModel(const rtl::Reference<::chart::ChartModel>& xModel)
{
if (mbModelValid)
{
- css::uno::Reference<css::util::XModifyBroadcaster> xBroadcaster(mxModel, css::uno::UNO_QUERY_THROW);
- xBroadcaster->removeModifyListener(mxListener);
+ mxModel->removeModifyListener(mxListener);
}
css::uno::Reference<css::view::XSelectionSupplier> oldSelectionSupplier(
mxModel->getCurrentController(), css::uno::UNO_QUERY);
if (oldSelectionSupplier.is()) {
- oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener.get());
+ oldSelectionSupplier->removeSelectionChangeListener(mxSelectionListener);
}
mxModel = xModel;
- mbModelValid = true;
+ mbModelValid = mxModel.is();
- css::uno::Reference<css::util::XModifyBroadcaster> xBroadcasterNew(mxModel, css::uno::UNO_QUERY_THROW);
- xBroadcasterNew->addModifyListener(mxListener);
+ if (!mbModelValid)
+ return;
+
+ mxModel->addModifyListener(mxListener);
css::uno::Reference<css::view::XSelectionSupplier> xSelectionSupplier(mxModel->getCurrentController(), css::uno::UNO_QUERY);
if (xSelectionSupplier.is())
xSelectionSupplier->addSelectionChangeListener(mxSelectionListener);
}
+void ChartSeriesPanel::updateModel(css::uno::Reference<css::frame::XModel> xModel)
+{
+ ::chart::ChartModel* pModel = dynamic_cast<::chart::ChartModel*>(xModel.get());
+ assert(!xModel || pModel);
+ doUpdateModel(pModel);
+}
+
void ChartSeriesPanel::selectionChanged(bool bCorrectType)
{
if (bCorrectType)
updateData();
}
-IMPL_LINK(ChartSeriesPanel, CheckBoxHdl, weld::ToggleButton&, rCheckBox, void)
+IMPL_LINK(ChartSeriesPanel, CheckBoxHdl, weld::Toggleable&, rCheckBox, void)
{
bool bChecked = rCheckBox.get_active();
OUString aCID = getCID(mxModel);
@@ -458,7 +452,7 @@ IMPL_LINK(ChartSeriesPanel, CheckBoxHdl, weld::ToggleButton&, rCheckBox, void)
setErrorBarVisible(mxModel, aCID, true, bChecked);
}
-IMPL_LINK_NOARG(ChartSeriesPanel, RadioBtnHdl, weld::ToggleButton&, void)
+IMPL_LINK_NOARG(ChartSeriesPanel, RadioBtnHdl, weld::Toggleable&, void)
{
OUString aCID = getCID(mxModel);
bool bChecked = mxRBPrimaryAxis->get_active();