Rebased ref, commits from common ancestor:
commit 6489f0fbea689118b7d3bd0795549e5de484cfdf
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Tue Jun 28 07:48:45 2022 +0200
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:12 2022 +0200
chart2: add UI to the data table
This adds a new object type "Data Table", with all the object
identifiers and converters of properties.
The data table is now shown in the drop-down of chart elements.
A properties dialog was added, which allows to change properties
of a data table. This contains the area, line and font tab pages
and a new tab page specific for data tables, to change if the
horiz. or vert. borders, key or the outline should be show.
Change-Id: I9b4cd58cffbcc952daaa2c0c8f8a5a17e38ac293
diff --git a/chart2/Library_chartcontroller.mk
b/chart2/Library_chartcontroller.mk
index b7c449cef582..4bc8c7497915 100644
--- a/chart2/Library_chartcontroller.mk
+++ b/chart2/Library_chartcontroller.mk
@@ -138,6 +138,7 @@ $(eval $(call
gb_Library_add_exception_objects,chartcontroller,\
chart2/source/controller/dialogs/tp_DataLabel \
chart2/source/controller/dialogs/tp_DataPointOption \
chart2/source/controller/dialogs/tp_DataSource \
+ chart2/source/controller/dialogs/tp_DataTable \
chart2/source/controller/dialogs/tp_ErrorBars \
chart2/source/controller/dialogs/tp_LegendPosition \
chart2/source/controller/dialogs/tp_PointGeometry \
@@ -153,6 +154,7 @@ $(eval $(call
gb_Library_add_exception_objects,chartcontroller,\
chart2/source/controller/itemsetwrapper/AxisItemConverter \
chart2/source/controller/itemsetwrapper/CharacterPropertyItemConverter \
chart2/source/controller/itemsetwrapper/DataPointItemConverter \
+ chart2/source/controller/itemsetwrapper/DataTableItemConverter \
chart2/source/controller/itemsetwrapper/ErrorBarItemConverter \
chart2/source/controller/itemsetwrapper/GraphicPropertyItemConverter \
chart2/source/controller/itemsetwrapper/ItemConverter \
diff --git a/chart2/UIConfig_chart2.mk b/chart2/UIConfig_chart2.mk
index 67d64b18b597..59af510c5845 100644
--- a/chart2/UIConfig_chart2.mk
+++ b/chart2/UIConfig_chart2.mk
@@ -68,6 +68,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/schart,\
chart2/uiconfig/ui/tp_DataLabel \
chart2/uiconfig/ui/tp_DataPointOption \
chart2/uiconfig/ui/tp_DataSource \
+ chart2/uiconfig/ui/tp_DataTable \
chart2/uiconfig/ui/tp_ErrorBars \
chart2/uiconfig/ui/tp_LegendPosition \
chart2/uiconfig/ui/tp_PolarOptions \
diff --git a/chart2/inc/strings.hrc b/chart2/inc/strings.hrc
index ab6ca48c8376..9a9943df1f3c 100644
--- a/chart2/inc/strings.hrc
+++ b/chart2/inc/strings.hrc
@@ -48,6 +48,7 @@
#define STR_PAGE_APPEARANCE NC_("STR_PAGE_APPEARANCE",
"Appearance")
#define STR_PAGE_ILLUMINATION
NC_("STR_PAGE_ILLUMINATION", "Illumination")
#define STR_PAGE_ASIAN NC_("STR_PAGE_ASIAN",
"Asian Typography")
+#define STR_PAGE_DATA_TABLE NC_("STR_PAGE_DATA_TABLE",
"Data Table")
#define STR_OBJECT_AVERAGE_LINE_WITH_PARAMETERS
NC_("STR_OBJECT_AVERAGE_LINE_WITH_PARAMETERS", "Mean value line with value
%AVERAGE_VALUE and standard deviation %STD_DEVIATION")
#define STR_OBJECT_AXIS NC_("STR_OBJECT_AXIS",
"Axis")
#define STR_OBJECT_AXIS_X NC_("STR_OBJECT_AXIS_X",
"X Axis")
@@ -97,6 +98,7 @@
#define STR_OBJECT_DIAGRAM_WALL
NC_("STR_OBJECT_DIAGRAM_WALL", "Chart Wall")
#define STR_OBJECT_DIAGRAM_FLOOR
NC_("STR_OBJECT_DIAGRAM_FLOOR", "Chart Floor")
#define STR_OBJECT_SHAPE NC_("STR_OBJECT_SHAPE",
"Drawing Object")
+#define STR_OBJECT_DATA_TABLE
NC_("STR_OBJECT_DATA_TABLE", "Data Table")
#define STR_TIP_DATASERIES NC_("STR_TIP_DATASERIES",
"Data Series '%SERIESNAME'")
#define STR_TIP_DATAPOINT_INDEX
NC_("STR_TIP_DATAPOINT_INDEX", "Data Point %POINTNUMBER")
#define STR_TIP_DATAPOINT_VALUES
NC_("STR_TIP_DATAPOINT_VALUES", "Values: %POINTVALUES")
diff --git a/chart2/source/controller/dialogs/ObjectNameProvider.cxx
b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
index 07b7f3503e92..b105ecc61211 100644
--- a/chart2/source/controller/dialogs/ObjectNameProvider.cxx
+++ b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
@@ -314,6 +314,9 @@ OUString ObjectNameProvider::getName( ObjectType
eObjectType, bool bPlural )
case OBJECTTYPE_DATA_CURVE_EQUATION:
aRet=SchResId(STR_OBJECT_CURVE_EQUATION);
break;
+ case OBJECTTYPE_DATA_TABLE:
+ aRet=SchResId(STR_OBJECT_DATA_TABLE);
+ break;
default: //OBJECTTYPE_UNKNOWN
;
}
diff --git a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
index c511ebb28527..0ba0b76518cb 100644
--- a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
+++ b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
@@ -35,6 +35,7 @@
#include "tp_TitleRotation.hxx"
#include "tp_PolarOptions.hxx"
#include "tp_DataPointOption.hxx"
+#include "tp_DataTable.hxx"
#include <ResId.hxx>
#include <ViewElementListProvider.hxx>
#include <ChartModelHelper.hxx>
@@ -458,6 +459,12 @@ SchAttribTabDlg::SchAttribTabDlg(weld::Window* pParent,
case OBJECTTYPE_UNKNOWN:
// nothing
break;
+ case OBJECTTYPE_DATA_TABLE:
+ AddTabPage("datatable", SchResId(STR_PAGE_DATA_TABLE),
DataTableTabPage::Create);
+ AddTabPage("border", SchResId(STR_PAGE_LINE), RID_SVXPAGE_LINE);
+ AddTabPage("area", SchResId(STR_PAGE_AREA), RID_SVXPAGE_AREA);
+ AddTabPage("fontname", SchResId(STR_PAGE_FONT),
RID_SVXPAGE_CHAR_NAME);
+ break;
case OBJECTTYPE_DATA_CURVE_EQUATION:
AddTabPage("border", SchResId(STR_PAGE_BORDER), RID_SVXPAGE_LINE);
AddTabPage("area", SchResId(STR_PAGE_AREA), RID_SVXPAGE_AREA);
diff --git a/chart2/source/controller/dialogs/tp_DataTable.cxx
b/chart2/source/controller/dialogs/tp_DataTable.cxx
new file mode 100644
index 000000000000..d7bed5a53900
--- /dev/null
+++ b/chart2/source/controller/dialogs/tp_DataTable.cxx
@@ -0,0 +1,113 @@
+/* -*- 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/.
+ */
+
+#include "tp_DataTable.hxx"
+
+#include <chartview/ChartSfxItemIds.hxx>
+#include <svl/eitem.hxx>
+
+namespace chart
+{
+DataTableTabPage::DataTableTabPage(weld::Container* pPage,
weld::DialogController* pController,
+ const SfxItemSet& rInAttrs)
+ : SfxTabPage(pPage, pController, "modules/schart/ui/tp_DataTable.ui",
"DataTableTabPage",
+ &rInAttrs)
+ ,
m_xCbHorizontalBorder(m_xBuilder->weld_check_button("horizontalBorderCB"))
+ , m_xCbVerticalBorder(m_xBuilder->weld_check_button("verticalBorderCB"))
+ , m_xCbOutilne(m_xBuilder->weld_check_button("outlineCB"))
+ , m_xCbKeys(m_xBuilder->weld_check_button("keysCB"))
+{
+}
+
+DataTableTabPage::~DataTableTabPage() = default;
+
+std::unique_ptr<SfxTabPage> DataTableTabPage::Create(weld::Container* pPage,
+ weld::DialogController*
pController,
+ const SfxItemSet* rAttrs)
+{
+ return std::make_unique<DataTableTabPage>(pPage, pController, *rAttrs);
+}
+
+bool DataTableTabPage::FillItemSet(SfxItemSet* rOutAttrs)
+{
+ if (m_xCbHorizontalBorder->get_state() != TRISTATE_INDET)
+ {
+ rOutAttrs->Put(
+ SfxBoolItem(SCHATTR_DATA_TABLE_HORIZONTAL_BORDER,
m_xCbHorizontalBorder->get_active()));
+ }
+ if (m_xCbVerticalBorder->get_state() != TRISTATE_INDET)
+ {
+ rOutAttrs->Put(
+ SfxBoolItem(SCHATTR_DATA_TABLE_VERTICAL_BORDER,
m_xCbVerticalBorder->get_active()));
+ }
+ if (m_xCbOutilne->get_state() != TRISTATE_INDET)
+ {
+ rOutAttrs->Put(SfxBoolItem(SCHATTR_DATA_TABLE_OUTLINE,
m_xCbOutilne->get_active()));
+ }
+ if (m_xCbKeys->get_state() != TRISTATE_INDET)
+ {
+ rOutAttrs->Put(SfxBoolItem(SCHATTR_DATA_TABLE_KEYS,
m_xCbKeys->get_active()));
+ }
+ return true;
+}
+
+void DataTableTabPage::Reset(const SfxItemSet* pInAttrs)
+{
+ const SfxPoolItem* pPoolItem = nullptr;
+ SfxItemState aState;
+
+ aState = pInAttrs->GetItemState(SCHATTR_DATA_TABLE_HORIZONTAL_BORDER,
false, &pPoolItem);
+ if (aState == SfxItemState::DONTCARE)
+ {
+ m_xCbHorizontalBorder->set_state(TRISTATE_INDET);
+ }
+ else
+ {
+ if (aState == SfxItemState::SET)
+ m_xCbHorizontalBorder->set_active(
+ static_cast<const SfxBoolItem*>(pPoolItem)->GetValue());
+ }
+
+ aState = pInAttrs->GetItemState(SCHATTR_DATA_TABLE_VERTICAL_BORDER, false,
&pPoolItem);
+ if (aState == SfxItemState::DONTCARE)
+ {
+ m_xCbVerticalBorder->set_state(TRISTATE_INDET);
+ }
+ else
+ {
+ if (aState == SfxItemState::SET)
+ m_xCbVerticalBorder->set_active(static_cast<const
SfxBoolItem*>(pPoolItem)->GetValue());
+ }
+
+ aState = pInAttrs->GetItemState(SCHATTR_DATA_TABLE_OUTLINE, false,
&pPoolItem);
+ if (aState == SfxItemState::DONTCARE)
+ {
+ m_xCbOutilne->set_state(TRISTATE_INDET);
+ }
+ else
+ {
+ if (aState == SfxItemState::SET)
+ m_xCbOutilne->set_active(static_cast<const
SfxBoolItem*>(pPoolItem)->GetValue());
+ }
+
+ aState = pInAttrs->GetItemState(SCHATTR_DATA_TABLE_KEYS, false,
&pPoolItem);
+ if (aState == SfxItemState::DONTCARE)
+ {
+ m_xCbKeys->set_state(TRISTATE_INDET);
+ }
+ else
+ {
+ if (aState == SfxItemState::SET)
+ m_xCbKeys->set_active(static_cast<const
SfxBoolItem*>(pPoolItem)->GetValue());
+ }
+}
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/dialogs/tp_DataTable.hxx
b/chart2/source/controller/dialogs/tp_DataTable.hxx
new file mode 100644
index 000000000000..11bcfb9203e1
--- /dev/null
+++ b/chart2/source/controller/dialogs/tp_DataTable.hxx
@@ -0,0 +1,43 @@
+/* -*- 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/.
+ */
+
+#pragma once
+
+#include <sfx2/tabdlg.hxx>
+
+namespace weld
+{
+class CheckButton;
+}
+
+namespace chart
+{
+class DataTableTabPage : public SfxTabPage
+{
+private:
+ std::unique_ptr<weld::CheckButton> m_xCbHorizontalBorder;
+ std::unique_ptr<weld::CheckButton> m_xCbVerticalBorder;
+ std::unique_ptr<weld::CheckButton> m_xCbOutilne;
+ std::unique_ptr<weld::CheckButton> m_xCbKeys;
+
+public:
+ DataTableTabPage(weld::Container* pPage, weld::DialogController*
pController,
+ const SfxItemSet& rInAttrs);
+ virtual ~DataTableTabPage() override;
+
+ static std::unique_ptr<SfxTabPage>
+ Create(weld::Container* pPage, weld::DialogController* pController, const
SfxItemSet* rInAttrs);
+
+ virtual bool FillItemSet(SfxItemSet* rOutAttrs) override;
+ virtual void Reset(const SfxItemSet* rInAttrs) override;
+};
+
+} //namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/inc/DataTableItemConverter.hxx
b/chart2/source/controller/inc/DataTableItemConverter.hxx
new file mode 100644
index 000000000000..ad5d1aed4fc4
--- /dev/null
+++ b/chart2/source/controller/inc/DataTableItemConverter.hxx
@@ -0,0 +1,60 @@
+/* -*- 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/.
+ */
+
+#pragma once
+
+#include "ItemConverter.hxx"
+#include <rtl/ref.hxx>
+#include <vector>
+
+namespace com::sun::star::awt
+{
+struct Size;
+}
+namespace com::sun::star::beans
+{
+class XPropertySet;
+}
+namespace chart
+{
+class ChartModel;
+}
+
+class SdrModel;
+
+namespace chart::wrapper
+{
+class DataTableItemConverter final : public ItemConverter
+{
+public:
+ DataTableItemConverter(const
css::uno::Reference<css::beans::XPropertySet>& rPropertySet,
+ SfxItemPool& rItemPool, SdrModel& rDrawModel,
+ const rtl::Reference<::chart::ChartModel>&
xChartDoc,
+ const css::awt::Size* pRefSize);
+
+ virtual ~DataTableItemConverter() override;
+
+ virtual void FillItemSet(SfxItemSet& rOutItemSet) const override;
+ virtual bool ApplyItemSet(const SfxItemSet& rItemSet) override;
+
+protected:
+ virtual const WhichRangesContainer& GetWhichPairs() const override;
+ virtual bool GetItemProperty(tWhichIdType nWhichId,
+ tPropertyNameWithMemberId& rOutProperty)
const override;
+
+ virtual void FillSpecialItem(sal_uInt16 nWhichId, SfxItemSet& rOutItemSet)
const override;
+ virtual bool ApplySpecialItem(sal_uInt16 nWhichId, const SfxItemSet&
rItemSet) override;
+
+private:
+ std::vector<std::unique_ptr<ItemConverter>> m_aConverters;
+ rtl::Reference<::chart::ChartModel> m_xChartDoc;
+};
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/itemsetwrapper/DataTableItemConverter.cxx
b/chart2/source/controller/itemsetwrapper/DataTableItemConverter.cxx
new file mode 100644
index 000000000000..103724816d42
--- /dev/null
+++ b/chart2/source/controller/itemsetwrapper/DataTableItemConverter.cxx
@@ -0,0 +1,119 @@
+/* -*- 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/.
+ */
+
+#include <DataTableItemConverter.hxx>
+#include <ItemPropertyMap.hxx>
+#include <CharacterPropertyItemConverter.hxx>
+#include <GraphicPropertyItemConverter.hxx>
+#include <chartview/ChartSfxItemIds.hxx>
+#include <chartview/ExplicitScaleValues.hxx>
+#include <chartview/ExplicitValueProvider.hxx>
+#include "SchWhichPairs.hxx"
+#include <ChartModelHelper.hxx>
+#include <ChartModel.hxx>
+#include <CommonConverters.hxx>
+#include <ChartType.hxx>
+#include <ChartTypeHelper.hxx>
+#include <Diagram.hxx>
+#include <unonames.hxx>
+#include <BaseCoordinateSystem.hxx>
+#include <memory>
+
+#include <osl/diagnose.h>
+#include <o3tl/any.hxx>
+#include <svl/eitem.hxx>
+#include <svx/chrtitem.hxx>
+#include <svx/sdangitm.hxx>
+#include <svl/intitem.hxx>
+#include <rtl/math.hxx>
+
+using namespace css;
+
+namespace chart::wrapper
+{
+namespace
+{
+ItemPropertyMapType& lclDataTablePropertyMap()
+{
+ static ItemPropertyMapType aPropertyMap{
+ { SCHATTR_DATA_TABLE_HORIZONTAL_BORDER, { "HBorder", 0 } },
+ { SCHATTR_DATA_TABLE_VERTICAL_BORDER, { "VBorder", 0 } },
+ { SCHATTR_DATA_TABLE_OUTLINE, { "Outline", 0 } },
+ { SCHATTR_DATA_TABLE_KEYS, { "Keys", 0 } },
+ };
+ return aPropertyMap;
+};
+}
+
+DataTableItemConverter::DataTableItemConverter(
+ const uno::Reference<beans::XPropertySet>& rPropertySet, SfxItemPool&
rItemPool,
+ SdrModel& rDrawModel, const rtl::Reference<::chart::ChartModel>& xChartDoc,
+ const awt::Size* pRefSize)
+ : ItemConverter(rPropertySet, rItemPool)
+ , m_xChartDoc(xChartDoc)
+{
+ m_aConverters.emplace_back(new GraphicPropertyItemConverter(
+ rPropertySet, rItemPool, rDrawModel, xChartDoc,
GraphicObjectType::LineProperties));
+ m_aConverters.emplace_back(
+ new CharacterPropertyItemConverter(rPropertySet, rItemPool, pRefSize,
"ReferencePageSize"));
+}
+
+DataTableItemConverter::~DataTableItemConverter() = default;
+
+void DataTableItemConverter::FillItemSet(SfxItemSet& rOutItemSet) const
+{
+ for (const auto& pConv : m_aConverters)
+ {
+ pConv->FillItemSet(rOutItemSet);
+ }
+
+ // own items
+ ItemConverter::FillItemSet(rOutItemSet);
+}
+
+bool DataTableItemConverter::ApplyItemSet(const SfxItemSet& rItemSet)
+{
+ bool bResult = false;
+
+ for (const auto& pConv : m_aConverters)
+ {
+ bResult = pConv->ApplyItemSet(rItemSet) || bResult;
+ }
+
+ // own items
+ return ItemConverter::ApplyItemSet(rItemSet) || bResult;
+}
+
+void DataTableItemConverter::FillSpecialItem(sal_uInt16 nWhichId, SfxItemSet&
rOutItemSet) const {}
+
+bool DataTableItemConverter::ApplySpecialItem(sal_uInt16 nWhichId, const
SfxItemSet& rItemSet)
+{
+ return false;
+}
+
+const WhichRangesContainer& DataTableItemConverter::GetWhichPairs() const
+{
+ return nDataTableWhichPairs;
+}
+
+bool DataTableItemConverter::GetItemProperty(tWhichIdType nWhichId,
+ tPropertyNameWithMemberId&
rOutProperty) const
+{
+ ItemPropertyMapType& rMap(lclDataTablePropertyMap());
+ auto aIt = rMap.find(nWhichId);
+ if (aIt == rMap.cend())
+ return false;
+
+ rOutProperty = (*aIt).second;
+
+ return true;
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx
b/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx
index 3c1387009afd..3b33a1b57b29 100644
--- a/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx
+++ b/chart2/source/controller/itemsetwrapper/SchWhichPairs.hxx
@@ -171,4 +171,12 @@ const WhichRangesContainer
nRegEquationWhichPairs(svl::Items<
SID_CHAR_DLG_PREVIEW_STRING, SID_CHAR_DLG_PREVIEW_STRING // Characters
>);
+const WhichRangesContainer nDataTableWhichPairs(svl::Items<
+ SCHATTR_TEXT_START, SCHATTR_TEXT_END,
+ SCHATTR_DATA_TABLE_START, SCHATTR_DATA_TABLE_END,
+ XATTR_LINE_FIRST, XATTR_LINE_LAST, // 1000 - 1016
svx/xdef.hxx
+ XATTR_FILL_FIRST, XATTR_FILL_LAST, // 1018 - 1046
svx/xdef.hxx
+ EE_ITEMS_START, EE_ITEMS_END
+>);
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/main/ChartController_Properties.cxx
b/chart2/source/controller/main/ChartController_Properties.cxx
index 1b72833f93bc..feb8cc6c8a59 100644
--- a/chart2/source/controller/main/ChartController_Properties.cxx
+++ b/chart2/source/controller/main/ChartController_Properties.cxx
@@ -33,6 +33,7 @@
#include <MultipleChartConverters.hxx>
#include <TitleItemConverter.hxx>
#include <LegendItemConverter.hxx>
+#include <DataTableItemConverter.hxx>
#include <RegressionCurveItemConverter.hxx>
#include <RegressionEquationItemConverter.hxx>
#include <ErrorBarItemConverter.hxx>
@@ -287,6 +288,17 @@ wrapper::ItemConverter* createItemConverter(
rDrawModel, xChartModel,
wrapper::GraphicObjectType::LineAndFillProperties );
break;
+ case OBJECTTYPE_DATA_TABLE:
+ {
+ std::unique_ptr<awt::Size> pRefSize;
+ if (pRefSizeProvider)
+ pRefSize.reset(new
awt::Size(pRefSizeProvider->getPageSize()));
+
+ pItemConverter = new wrapper::DataTableItemConverter(
+ xObjectProperties,
rDrawModel.GetItemPool(),
+ rDrawModel, xChartModel,
pRefSize.get());
+ }
+ break;
default: //OBJECTTYPE_UNKNOWN
break;
}
diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx
b/chart2/source/controller/main/ObjectHierarchy.cxx
index c696a94d8fcd..acf1417e3dc7 100644
--- a/chart2/source/controller/main/ObjectHierarchy.cxx
+++ b/chart2/source/controller/main/ObjectHierarchy.cxx
@@ -217,6 +217,14 @@ void ObjectHierarchy::createAxesTree(
if( !bSupportsAxesGrids )
return;
+ // Data Table
+ uno::Reference<chart2::XDataTable> xDataTable = xDiagram->getDataTable();
+ if (xDataTable.is())
+ {
+
rContainer.push_back(ObjectIdentifier::createClassifiedIdentifierForObject(xDataTable,
xChartDoc));
+ }
+
+ // Axes
std::vector< rtl::Reference< Axis > > aAxes =
AxisHelper::getAllAxesOfDiagram( xDiagram, /* bOnlyVisible = */ true );
if( !m_bOrderingForElementSelector )
{
diff --git a/chart2/source/inc/ObjectIdentifier.hxx
b/chart2/source/inc/ObjectIdentifier.hxx
index 0c64234fc68b..b79a5fe9ca1e 100644
--- a/chart2/source/inc/ObjectIdentifier.hxx
+++ b/chart2/source/inc/ObjectIdentifier.hxx
@@ -74,6 +74,7 @@ enum ObjectType
OBJECTTYPE_DATA_STOCK_RANGE,
OBJECTTYPE_DATA_STOCK_LOSS,
OBJECTTYPE_DATA_STOCK_GAIN,
+ OBJECTTYPE_DATA_TABLE,
OBJECTTYPE_SHAPE,
OBJECTTYPE_UNKNOWN
};
@@ -149,6 +150,9 @@ public:
static OUString createParticleForLegend(
const rtl::Reference<::chart::ChartModel>& xChartModel );
+ static OUString createParticleForDataTable(
+ const rtl::Reference<::chart::ChartModel>& xChartModel );
+
static OUString addChildParticle( std::u16string_view rParticle,
std::u16string_view rChildParticle );
static OUString createChildParticleWithIndex( ObjectType eObjectType,
sal_Int32 nIndex );
static sal_Int32 getIndexFromParticleOrCID( const OUString& rParticleOrCID
);
diff --git a/chart2/source/inc/chartview/ChartSfxItemIds.hxx
b/chart2/source/inc/chartview/ChartSfxItemIds.hxx
index 45773344f873..a5099cc0c31a 100644
--- a/chart2/source/inc/chartview/ChartSfxItemIds.hxx
+++ b/chart2/source/inc/chartview/ChartSfxItemIds.hxx
@@ -194,7 +194,14 @@ constexpr TypedWhichId<SfxStringItem>
SCHATTR_REGRESSION_YNAME
constexpr TypedWhichId<SfxInt32Item> SCHATTR_REGRESSION_MOVING_TYPE
(SCHATTR_REGRESSION_START + 12);
constexpr sal_uInt16 SCHATTR_REGRESSION_END
(SCHATTR_REGRESSION_MOVING_TYPE);
-constexpr sal_uInt16 SCHATTR_END (SCHATTR_REGRESSION_END);
+constexpr sal_uInt16 SCHATTR_DATA_TABLE_START
(SCHATTR_REGRESSION_END + 1);
+constexpr TypedWhichId<SfxBoolItem>
SCHATTR_DATA_TABLE_HORIZONTAL_BORDER (SCHATTR_DATA_TABLE_START + 0);
+constexpr TypedWhichId<SfxBoolItem> SCHATTR_DATA_TABLE_VERTICAL_BORDER
(SCHATTR_DATA_TABLE_START + 1);
+constexpr TypedWhichId<SfxBoolItem> SCHATTR_DATA_TABLE_OUTLINE
(SCHATTR_DATA_TABLE_START + 2);
+constexpr TypedWhichId<SfxBoolItem> SCHATTR_DATA_TABLE_KEYS
(SCHATTR_DATA_TABLE_START + 3);
+constexpr sal_uInt16 SCHATTR_DATA_TABLE_END
(SCHATTR_DATA_TABLE_KEYS);
+
+constexpr sal_uInt16 SCHATTR_END (SCHATTR_DATA_TABLE_END);
// values for Items
diff --git a/chart2/source/tools/ObjectIdentifier.cxx
b/chart2/source/tools/ObjectIdentifier.cxx
index 38bbdebe3aed..e6a375817a37 100644
--- a/chart2/source/tools/ObjectIdentifier.cxx
+++ b/chart2/source/tools/ObjectIdentifier.cxx
@@ -322,6 +322,12 @@ OUString
ObjectIdentifier::createClassifiedIdentifierForObject(
}
+ uno::Reference<chart2::XDataTable> xDataTable(xObject, uno::UNO_QUERY);
+ if (xDataTable.is())
+ {
+ return
createClassifiedIdentifierForParticle(createParticleForDataTable(xChartModel));
+ }
+
//axis
Reference< XAxis > xAxis( xObject, uno::UNO_QUERY );
if( xAxis.is() )
@@ -544,6 +550,11 @@ OUString ObjectIdentifier::createParticleForLegend(
return ObjectIdentifier::createParticleForDiagram() + ":" +
getStringForType( OBJECTTYPE_LEGEND ) + "=";
}
+OUString ObjectIdentifier::createParticleForDataTable(const
rtl::Reference<::chart::ChartModel>& /* xChartModel */)
+{
+ return ObjectIdentifier::createParticleForDiagram() + ":" +
getStringForType(OBJECTTYPE_DATA_TABLE) + "=";
+}
+
OUString ObjectIdentifier::createClassifiedIdentifier(
enum ObjectType eObjectType //e.g. OBJECTTYPE_DATA_SERIES
, std::u16string_view rParticleID )//e.g. SeriesID
@@ -870,6 +881,9 @@ OUString ObjectIdentifier::getStringForType( ObjectType
eObjectType )
case OBJECTTYPE_DATA_STOCK_GAIN:
aRet="StockGain";
break;
+ case OBJECTTYPE_DATA_TABLE:
+ aRet="DataTable";
+ break;
default: //OBJECTTYPE_UNKNOWN
;
}
@@ -941,6 +955,8 @@ ObjectType ObjectIdentifier::getObjectType(
std::u16string_view aCID )
eRet = OBJECTTYPE_DATA_STOCK_LOSS;
else if( o3tl::starts_with(aCID, u"StockGain") )
eRet = OBJECTTYPE_DATA_STOCK_GAIN;
+ else if( o3tl::starts_with(aCID, u"DataTable") )
+ eRet = OBJECTTYPE_DATA_TABLE;
else
eRet = OBJECTTYPE_UNKNOWN;
@@ -1240,6 +1256,13 @@ Reference< beans::XPropertySet >
ObjectIdentifier::getObjectPropertySet(
xChartType->getPropertyValue( "WhiteDay" ) >>=
xObjectProperties;
}
break;
+ case OBJECTTYPE_DATA_TABLE:
+ {
+ if (xDiagram.is())
+ xObjectProperties.set(xDiagram->getDataTable(),
uno::UNO_QUERY);
+ }
+ break;
+ break;
default: //OBJECTTYPE_UNKNOWN
break;
}
diff --git a/chart2/source/view/main/ChartItemPool.cxx
b/chart2/source/view/main/ChartItemPool.cxx
index 37e78c116b76..3cf5a99fc29d 100644
--- a/chart2/source/view/main/ChartItemPool.cxx
+++ b/chart2/source/view/main/ChartItemPool.cxx
@@ -175,6 +175,11 @@ ChartItemPool::ChartItemPool():
rPoolDefaults[SCHATTR_REGRESSION_YNAME - SCHATTR_START] =
new SfxStringItem(SCHATTR_REGRESSION_YNAME, "f(x)");
rPoolDefaults[SCHATTR_REGRESSION_MOVING_TYPE - SCHATTR_START] =
new SfxInt32Item(SCHATTR_REGRESSION_MOVING_TYPE,
css::chart2::MovingAverageType::Prior);
+ rPoolDefaults[SCHATTR_DATA_TABLE_HORIZONTAL_BORDER - SCHATTR_START] = new
SfxBoolItem(SCHATTR_DATA_TABLE_HORIZONTAL_BORDER, false);
+ rPoolDefaults[SCHATTR_DATA_TABLE_VERTICAL_BORDER - SCHATTR_START] = new
SfxBoolItem(SCHATTR_DATA_TABLE_VERTICAL_BORDER, false);
+ rPoolDefaults[SCHATTR_DATA_TABLE_OUTLINE - SCHATTR_START] = new
SfxBoolItem(SCHATTR_DATA_TABLE_OUTLINE, false);
+ rPoolDefaults[SCHATTR_DATA_TABLE_KEYS - SCHATTR_START] = new
SfxBoolItem(SCHATTR_DATA_TABLE_KEYS, false);
+
/**************************************************************************
* ItemInfos
**************************************************************************/
diff --git a/chart2/uiconfig/ui/tp_DataTable.ui
b/chart2/uiconfig/ui/tp_DataTable.ui
new file mode 100644
index 000000000000..b9544f7c3e4e
--- /dev/null
+++ b/chart2/uiconfig/ui/tp_DataTable.ui
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.2 -->
+<interface domain="chart">
+ <requires lib="gtk+" version="3.20"/>
+ <object class="GtkBox" id="DataTableTabPage">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="border-width">6</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="label-xalign">0</property>
+ <property name="shadow-type">none</property>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="margin-start">12</property>
+ <property name="margin-top">6</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="horizontalBorderCB">
+ <property name="label" translatable="yes"
context="tp_DataTable|horizontalBorderCB">Show Horizontal Border</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="verticalBorderCB">
+ <property name="label" translatable="yes"
context="tp_DataTable|verticalBorderCB">Show Vertical Border</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="outlineCB">
+ <property name="label" translatable="yes"
context="tp_DataTable|outlineCB">Show Outline</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="keysCB">
+ <property name="label" translatable="yes"
context="tp_DataTable|keysCB">Show Keys</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="dataTablePropertiesLabel">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes"
context="tp_axisLabel|textflowL">Data Table Properties</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+</interface>
commit 741b4c1841d13c3068b4d3be3e179dd83ddc3429
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Jun 17 16:38:54 2022 +0200
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:12 2022 +0200
chart2: remove unneeded class prefix in ObjectHierarchy.cxx
Change-Id: Iee007f7ff4d9665ee089712e7ba98090a8090609
diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx
b/chart2/source/controller/main/ObjectHierarchy.cxx
index ab1fa891377e..c696a94d8fcd 100644
--- a/chart2/source/controller/main/ObjectHierarchy.cxx
+++ b/chart2/source/controller/main/ObjectHierarchy.cxx
@@ -115,7 +115,7 @@ void ObjectHierarchy::createTree( const
rtl::Reference<::chart::ChartModel>& xCh
ObjectIdentifier aDiaOID;
if( xDiagram.is() )
aDiaOID = ObjectIdentifier(
ObjectIdentifier::createClassifiedIdentifierForObject(
static_cast<cppu::OWeakObject*>(xDiagram.get()), xChartDocument ) );
- ObjectHierarchy::tChildContainer aTopLevelContainer;
+ tChildContainer aTopLevelContainer;
// First Level
@@ -158,7 +158,7 @@ void ObjectHierarchy::createTree( const
rtl::Reference<::chart::ChartModel>& xCh
createDiagramTree( aTopLevelContainer, xChartDocument, xDiagram );
else
{
- ObjectHierarchy::tChildContainer aSubContainer;
+ tChildContainer aSubContainer;
createDiagramTree( aSubContainer, xChartDocument, xDiagram );
if( !aSubContainer.empty() )
m_aChildMap[ aDiaOID ] = aSubContainer;
@@ -179,11 +179,11 @@ void ObjectHierarchy::createTree( const
rtl::Reference<::chart::ChartModel>& xCh
aTopLevelContainer.emplace_back(
ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_PAGE, u"" ) );
if( ! aTopLevelContainer.empty())
- m_aChildMap[ ObjectHierarchy::getRootNodeOID() ] = aTopLevelContainer;
+ m_aChildMap[ObjectHierarchy::getRootNodeOID()] = aTopLevelContainer;
}
void ObjectHierarchy::createLegendTree(
- ObjectHierarchy::tChildContainer & rContainer,
+ tChildContainer & rContainer,
const rtl::Reference<::chart::ChartModel> & xChartDoc,
const rtl::Reference< Diagram > & xDiagram )
{
@@ -199,7 +199,7 @@ void ObjectHierarchy::createLegendTree(
rtl::Reference< SvxShapeGroupAnyD > xLegendShapeContainer =
dynamic_cast<SvxShapeGroupAnyD*>(
m_pExplicitValueProvider->getShapeForCID(
aLegendOID.getObjectCID() ).get() );
- ObjectHierarchy::tChildContainer aLegendEntryOIDs;
+ tChildContainer aLegendEntryOIDs;
lcl_getChildOIDs( aLegendEntryOIDs, xLegendShapeContainer );
m_aChildMap[ aLegendOID ] = aLegendEntryOIDs;
@@ -207,7 +207,7 @@ void ObjectHierarchy::createLegendTree(
}
void ObjectHierarchy::createAxesTree(
- ObjectHierarchy::tChildContainer & rContainer,
+ tChildContainer & rContainer,
const rtl::Reference<::chart::ChartModel> & xChartDoc,
const rtl::Reference< Diagram > & xDiagram )
{
@@ -271,7 +271,7 @@ void ObjectHierarchy::createAxesTree(
}
void ObjectHierarchy::createWallAndFloor(
- ObjectHierarchy::tChildContainer & rContainer,
+ tChildContainer & rContainer,
const rtl::Reference< Diagram > & xDiagram )
{
sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram );
@@ -289,7 +289,7 @@ void ObjectHierarchy::createWallAndFloor(
}
void ObjectHierarchy::createDiagramTree(
- ObjectHierarchy::tChildContainer & rContainer,
+ tChildContainer & rContainer,
const rtl::Reference<::chart::ChartModel> & xChartDoc,
const rtl::Reference< Diagram > & xDiagram )
{
@@ -307,7 +307,7 @@ void ObjectHierarchy::createDiagramTree(
}
void ObjectHierarchy::createDataSeriesTree(
- ObjectHierarchy::tChildContainer & rOutDiagramSubContainer,
+ tChildContainer & rOutDiagramSubContainer,
const rtl::Reference< Diagram > & xDiagram )
{
try
@@ -334,7 +334,7 @@ void ObjectHierarchy::createDataSeriesTree(
ObjectIdentifier(
ObjectIdentifier::createClassifiedIdentifierForParticle( aSeriesParticle ) ) );
rOutDiagramSubContainer.push_back( aSeriesOID );
- ObjectHierarchy::tChildContainer aSeriesSubContainer;
+ tChildContainer aSeriesSubContainer;
rtl::Reference< DataSeries > const & xSeries =
aSeriesSeq[nSeriesIdx];
@@ -406,7 +406,7 @@ void ObjectHierarchy::createDataSeriesTree(
}
}
-void ObjectHierarchy::createAdditionalShapesTree(
ObjectHierarchy::tChildContainer& rContainer )
+void ObjectHierarchy::createAdditionalShapesTree(tChildContainer& rContainer)
{
try
{
@@ -453,7 +453,7 @@ const ObjectHierarchy::tChildContainer &
ObjectHierarchy::getChildren( const Obj
if( aIt != m_aChildMap.end())
return aIt->second;
}
- static const ObjectHierarchy::tChildContainer EMPTY;
+ static const tChildContainer EMPTY;
return EMPTY;
}
@@ -463,13 +463,13 @@ const ObjectHierarchy::tChildContainer &
ObjectHierarchy::getSiblings( const Obj
{
for (auto const& child : m_aChildMap)
{
- ObjectHierarchy::tChildContainer::const_iterator aElemIt(
+ tChildContainer::const_iterator aElemIt(
std::find( child.second.begin(), child.second.end(), rNode ));
if( aElemIt != child.second.end())
return child.second;
}
}
- static const ObjectHierarchy::tChildContainer EMPTY;
+ static const tChildContainer EMPTY;
return EMPTY;
}
@@ -478,8 +478,8 @@ ObjectIdentifier ObjectHierarchy::getParentImpl(
const ObjectIdentifier & rOID ) const
{
// search children
- ObjectHierarchy::tChildContainer aChildren( getChildren( rParentOID ));
- ObjectHierarchy::tChildContainer::const_iterator aIt(
+ tChildContainer aChildren( getChildren( rParentOID ));
+ tChildContainer::const_iterator aIt(
std::find( aChildren.begin(), aChildren.end(), rOID ));
// recursion end
if( aIt != aChildren.end())
commit 8af6d4aae39a780b0ff089b8159012c5f1f199ee
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Jun 17 16:29:23 2022 +0200
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:12 2022 +0200
chart2: call clear instead of creating a new empty map
Change-Id: I8b21909e92b558240e84cffd9432e0d9e270284e
diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx
b/chart2/source/controller/main/ObjectHierarchy.cxx
index e1f3697e6250..ab1fa891377e 100644
--- a/chart2/source/controller/main/ObjectHierarchy.cxx
+++ b/chart2/source/controller/main/ObjectHierarchy.cxx
@@ -105,7 +105,7 @@ namespace chart
void ObjectHierarchy::createTree( const rtl::Reference<::chart::ChartModel>&
xChartDocument )
{
- m_aChildMap = tChildMap();//clear tree
+ m_aChildMap.clear();
if( !xChartDocument.is() )
return;
commit b73588f5fe5323525a858bf6c629c23ffdf894a5
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri Jun 17 16:28:38 2022 +0200
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:12 2022 +0200
chart2: remove unneeded class prefix in ObjectHierarchy.hxx
Change-Id: I1c851933e9b25dcd9a0dc29758baad8f3be7cb2e
diff --git a/chart2/source/controller/inc/ObjectHierarchy.hxx
b/chart2/source/controller/inc/ObjectHierarchy.hxx
index 1255b7ac9910..1531866aaf2b 100644
--- a/chart2/source/controller/inc/ObjectHierarchy.hxx
+++ b/chart2/source/controller/inc/ObjectHierarchy.hxx
@@ -52,11 +52,10 @@ public:
static bool isRootNode( const ObjectIdentifier& rOID );
/// equal to getChildren( getRootNodeOID())
- const tChildContainer & getTopLevelChildren() const;
- bool hasChildren( const ObjectIdentifier& rParent ) const;
- const tChildContainer & getChildren( const ObjectIdentifier& rParent )
const;
-
- const tChildContainer & getSiblings( const ObjectIdentifier& rNode )
const;
+ const tChildContainer& getTopLevelChildren() const;
+ bool hasChildren(const ObjectIdentifier& rParent) const;
+ const tChildContainer& getChildren(const ObjectIdentifier& rParent) const;
+ const tChildContainer& getSiblings(const ObjectIdentifier& rNode) const;
/// The result is empty, if the node cannot be found in the tree
ObjectIdentifier getParent( const ObjectIdentifier& rNode )
const;
@@ -66,30 +65,29 @@ public:
private:
void createTree( const rtl::Reference<::chart::ChartModel> &
xChartDocument );
void createAxesTree(
- ObjectHierarchy::tChildContainer & rContainer,
+ tChildContainer & rContainer,
const rtl::Reference<::chart::ChartModel> & xChartDoc,
const rtl::Reference< ::chart::Diagram > & xDiagram );
void createDiagramTree(
- ObjectHierarchy::tChildContainer& rContainer,
+ tChildContainer& rContainer,
const rtl::Reference<::chart::ChartModel>& xChartDoc,
const rtl::Reference< ::chart::Diagram >& xDiagram );
void createDataSeriesTree(
- ObjectHierarchy::tChildContainer & rOutDiagramSubContainer,
+ tChildContainer & rOutDiagramSubContainer,
const rtl::Reference< ::chart::Diagram > & xDiagram );
static void createWallAndFloor(
- ObjectHierarchy::tChildContainer & rContainer,
+ tChildContainer & rContainer,
const rtl::Reference< ::chart::Diagram > & xDiagram );
void createLegendTree(
- ObjectHierarchy::tChildContainer & rContainer,
+ tChildContainer & rContainer,
const rtl::Reference<::chart::ChartModel> & xChartDoc,
const rtl::Reference< ::chart::Diagram > & xDiagram );
- void createAdditionalShapesTree( ObjectHierarchy::tChildContainer&
rContainer );
+ void createAdditionalShapesTree(tChildContainer& rContainer);
ObjectIdentifier getParentImpl(
const ObjectIdentifier& rParentOID,
const ObjectIdentifier& rOID ) const;
- typedef std::map< ObjectIdentifier, ObjectHierarchy::tChildContainer >
- tChildMap;
+ typedef std::map<ObjectIdentifier, tChildContainer> tChildMap;
tChildMap m_aChildMap;
ExplicitValueProvider* m_pExplicitValueProvider;
bool m_bFlattenDiagram;
commit 95e3bf83fb950366a1658516af8e7a9d10df7f13
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Mon May 23 15:50:59 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:12 2022 +0200
oox export: export line/fill and text props. of a data table
Change-Id: I02a4c35693b599578e073d52a2d22ad59bc31786
diff --git a/oox/source/export/chartexport.cxx
b/oox/source/export/chartexport.cxx
index 988fe4413529..458f72112907 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -2066,6 +2066,9 @@ void ChartExport::exportDataTable( )
if (bShowKeys)
pFS->singleElement(FSNS(XML_c, XML_showKeys), XML_val, "1");
+ exportShapeProps(aPropSet);
+ exportTextProps(aPropSet);
+
pFS->endElement(FSNS(XML_c, XML_dTable));
}
commit 66ca41a2da2a64efae70ffc988974a9d218afa95
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Sat May 21 10:52:51 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:12 2022 +0200
chart2: set the char props. to the cells of a data table from model
This copies the char. properties from the model to the cells of
a data table, so the correct char width, font is used for text
when the table is rendered. Also add margin to the text, so it
looks better.
Change-Id: Ib74a8136459a31d64a86dec36a6ba14d2c313cf2
diff --git a/chart2/source/view/main/DataTableView.cxx
b/chart2/source/view/main/DataTableView.cxx
index 73f934867133..f899e724839e 100644
--- a/chart2/source/view/main/DataTableView.cxx
+++ b/chart2/source/view/main/DataTableView.cxx
@@ -5,7 +5,6 @@
* 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/.
- *
*/
#include <DataTableView.hxx>
@@ -59,11 +58,70 @@ void setTopCell(uno::Reference<beans::XPropertySet>&
xPropertySet)
xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine));
xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine));
}
+
+void copyProperty(uno::Reference<beans::XPropertySet>& xOut,
+ uno::Reference<beans::XPropertySet>& xIn, OUString const&
sPropertyName)
+{
+ xOut->setPropertyValue(sPropertyName,
xIn->getPropertyValue(sPropertyName));
+}
}
void DataTableView::setCellDefaults(uno::Reference<beans::XPropertySet>&
xPropertySet, bool bLeft,
bool bTop, bool bRight, bool bBottom)
{
+ uno::Reference<beans::XPropertySet> xDataTableProperties =
m_xDataTableModel.get();
+
+ copyProperty(xPropertySet, xDataTableProperties, "CharColor");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontFamily");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontFamilyAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontFamilyComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontCharSet");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontCharSetAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontCharSetComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontName");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontNameAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontNameComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontPitch");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontPitchAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontPitchComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontStyleName");
+ copyProperty(xPropertySet, xDataTableProperties, "CharFontStyleNameAsian");
+ copyProperty(xPropertySet, xDataTableProperties,
"CharFontStyleNameComplex");
+
+ copyProperty(xPropertySet, xDataTableProperties, "CharHeight");
+ copyProperty(xPropertySet, xDataTableProperties, "CharHeightAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharHeightComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharKerning");
+ copyProperty(xPropertySet, xDataTableProperties, "CharLocale");
+ copyProperty(xPropertySet, xDataTableProperties, "CharLocaleAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharLocaleComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharPosture");
+ copyProperty(xPropertySet, xDataTableProperties, "CharPostureAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharPostureComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharRelief");
+ copyProperty(xPropertySet, xDataTableProperties, "CharShadowed");
+ copyProperty(xPropertySet, xDataTableProperties, "CharStrikeout");
+ copyProperty(xPropertySet, xDataTableProperties, "CharUnderline");
+ copyProperty(xPropertySet, xDataTableProperties, "CharUnderlineColor");
+ copyProperty(xPropertySet, xDataTableProperties, "CharUnderlineHasColor");
+ copyProperty(xPropertySet, xDataTableProperties, "CharOverline");
+ copyProperty(xPropertySet, xDataTableProperties, "CharOverlineColor");
+ copyProperty(xPropertySet, xDataTableProperties, "CharOverlineHasColor");
+ copyProperty(xPropertySet, xDataTableProperties, "CharWeight");
+ copyProperty(xPropertySet, xDataTableProperties, "CharWeightAsian");
+ copyProperty(xPropertySet, xDataTableProperties, "CharWeightComplex");
+ copyProperty(xPropertySet, xDataTableProperties, "CharWordMode");
+
+ float fFontHeight = 0.0;
+ xDataTableProperties->getPropertyValue("CharHeight") >>= fFontHeight;
+ fFontHeight = o3tl::convert(fFontHeight, o3tl::Length::pt,
o3tl::Length::mm100);
+ uno::Any aXDistanceAny(sal_Int32(std::round(fFontHeight * 0.18f)));
+ uno::Any aYDistanceAny(sal_Int32(std::round(fFontHeight * 0.30f)));
+ xPropertySet->setPropertyValue("TextLeftDistance", aXDistanceAny);
+ xPropertySet->setPropertyValue("TextRightDistance", aXDistanceAny);
+ xPropertySet->setPropertyValue("TextUpperDistance", aYDistanceAny);
+ xPropertySet->setPropertyValue("TextLowerDistance", aYDistanceAny);
+
xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF)));
xPropertySet->setPropertyValue("TextVerticalAdjust",
uno::Any(drawing::TextVerticalAdjust_TOP));
xPropertySet->setPropertyValue("ParaAdjust",
uno::Any(style::ParagraphAdjust_CENTER));
commit 232561c0119ed08d22e8dc66d6b2dc35b984690e
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Sat May 21 10:51:55 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:11 2022 +0200
chart2: add char properties to the DataTable model
Change-Id: Ie4b49f36def7d20f89695157c3b95e6ee5d16d83
diff --git a/chart2/source/model/main/DataTable.cxx
b/chart2/source/model/main/DataTable.cxx
index 0b7fba3176e2..b57566005e83 100644
--- a/chart2/source/model/main/DataTable.cxx
+++ b/chart2/source/model/main/DataTable.cxx
@@ -95,8 +95,9 @@ private:
{
std::vector<beans::Property> aProperties;
lcl_AddPropertiesToVector(aProperties);
- chart::LinePropertiesHelper::AddPropertiesToVector(aProperties);
- chart::FillProperties::AddPropertiesToVector(aProperties);
+ ::chart::LinePropertiesHelper::AddPropertiesToVector(aProperties);
+ ::chart::FillProperties::AddPropertiesToVector(aProperties);
+ ::chart::CharacterProperties::AddPropertiesToVector(aProperties);
std::sort(aProperties.begin(), aProperties.end(),
chart::PropertyNameLess());
return comphelper::containerToSequence(aProperties);
@@ -214,7 +215,8 @@ sal_Bool SAL_CALL DataTable::supportsService(const
OUString& rServiceName)
uno::Sequence<OUString> SAL_CALL DataTable::getSupportedServiceNames()
{
return { "com.sun.star.chart2.DataTable", "com.sun.star.beans.PropertySet",
- "com.sun.star.drawing.FillProperties",
"com.sun.star.drawing.LineProperties" };
+ "com.sun.star.drawing.FillProperties",
"com.sun.star.drawing.LineProperties",
+ "com.sun.star.style.CharacterProperties" };
}
IMPLEMENT_FORWARD_XINTERFACE2(DataTable, DataTable_Base,
::property::OPropertySet)
commit d8ab833850ceac5b61c1a5e8d4f8e89303f659f6
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Sat May 21 00:00:30 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:11 2022 +0200
oox export: add export of basic properties of a data table
Change-Id: I2c8b76125fc788a9e4df164171d6cbd351bc1c4a
diff --git a/oox/source/export/chartexport.cxx
b/oox/source/export/chartexport.cxx
index 8a6d5fa7d298..988fe4413529 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -1732,6 +1732,7 @@ void ChartExport::exportPlotArea(const Reference<
css::chart::XChartDocument >&
}
//Axis Data
exportAxes( );
+
// Data Table
exportDataTable();
@@ -2033,35 +2034,41 @@ void ChartExport::exportGradientFill( const Reference<
XPropertySet >& xPropSet
void ChartExport::exportDataTable( )
{
+ auto xDataTable = mxNewDiagram->getDataTable();
+ if (!xDataTable.is())
+ return;
+
FSHelperPtr pFS = GetFS();
- Reference< beans::XPropertySet > aPropSet( mxDiagram, uno::UNO_QUERY );
+ uno::Reference<beans::XPropertySet> aPropSet(xDataTable, uno::UNO_QUERY);
bool bShowVBorder = false;
bool bShowHBorder = false;
bool bShowOutline = false;
+ bool bShowKeys = false;
- if (GetProperty( aPropSet, "DataTableHBorder"))
+ if (GetProperty(aPropSet, "HBorder"))
mAny >>= bShowHBorder;
- if (GetProperty( aPropSet, "DataTableVBorder"))
+ if (GetProperty(aPropSet, "VBorder"))
mAny >>= bShowVBorder;
- if (GetProperty( aPropSet, "DataTableOutline"))
+ if (GetProperty(aPropSet, "Outline"))
+ mAny >>= bShowOutline;
+ if (GetProperty(aPropSet, "Keys"))
mAny >>= bShowOutline;
-
- if (!(bShowVBorder || bShowHBorder || bShowOutline))
- return;
pFS->startElement(FSNS(XML_c, XML_dTable));
+
if (bShowHBorder)
- pFS->singleElement( FSNS( XML_c, XML_showHorzBorder ),
- XML_val, "1" );
+ pFS->singleElement(FSNS(XML_c, XML_showHorzBorder), XML_val, "1" );
if (bShowVBorder)
pFS->singleElement(FSNS(XML_c, XML_showVertBorder), XML_val, "1");
if (bShowOutline)
pFS->singleElement(FSNS(XML_c, XML_showOutline), XML_val, "1");
+ if (bShowKeys)
+ pFS->singleElement(FSNS(XML_c, XML_showKeys), XML_val, "1");
- pFS->endElement( FSNS( XML_c, XML_dTable));
-
+ pFS->endElement(FSNS(XML_c, XML_dTable));
}
+
void ChartExport::exportAreaChart( const Reference< chart2::XChartType >&
xChartType )
{
FSHelperPtr pFS = GetFS();
commit 9aef5ba6f87cc6d2ad114000b658095187a78319
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri May 20 23:55:45 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:11 2022 +0200
chart2: apply line props. to borders when rendering a data table
This sets the color, line width, line style to the borders of
the table when rendering the data table. We also need the
ChartModel inside DataTableView, so we can access the needed
line dashes.
Change-Id: Id3bef23b75e88517d6569ad87a716f178ed64343
diff --git a/chart2/source/view/axes/VAxisBase.cxx
b/chart2/source/view/axes/VAxisBase.cxx
index 95125beed1cf..7d985051a4a7 100644
--- a/chart2/source/view/axes/VAxisBase.cxx
+++ b/chart2/source/view/axes/VAxisBase.cxx
@@ -243,7 +243,8 @@ void VAxisBase::updateUnscaledValuesAtTicks( TickIter&
rIter )
}
void
VAxisBase::createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>&
/*rSeriesPlotterList*/,
-
uno::Reference<util::XNumberFormatsSupplier> const& /*xNumberFormatsSupplier*/)
+
uno::Reference<util::XNumberFormatsSupplier> const& /*xNumberFormatsSupplier*/,
+ rtl::Reference<::chart::ChartModel> const&
/*xChartDoc*/)
{
}
diff --git a/chart2/source/view/axes/VAxisBase.hxx
b/chart2/source/view/axes/VAxisBase.hxx
index 4da1936a452b..2c4123ba951d 100644
--- a/chart2/source/view/axes/VAxisBase.hxx
+++ b/chart2/source/view/axes/VAxisBase.hxx
@@ -29,6 +29,7 @@ namespace chart
class VSeriesPlotter;
class DataTableView;
+class ChartModel;
class VAxisBase : public VAxisOrGridBase
{
@@ -63,7 +64,8 @@ public:
void setExtraLinePositionAtOtherAxis( double fCrossingAt );
virtual void
createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>&
rSeriesPlotterList,
-
css::uno::Reference<css::util::XNumberFormatsSupplier> const&
xNumberFormatsSupplier);
+
css::uno::Reference<css::util::XNumberFormatsSupplier> const&
xNumberFormatsSupplier,
+ rtl::Reference<::chart::ChartModel>
const& xChartDoc);
std::shared_ptr<DataTableView> getDataTableView() { return
m_pDataTableView; }
diff --git a/chart2/source/view/axes/VCartesianAxis.cxx
b/chart2/source/view/axes/VCartesianAxis.cxx
index 096586279454..d7e78d5d2e85 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -37,6 +37,7 @@
#include <svx/unoshtxt.hxx>
#include <VSeriesPlotter.hxx>
#include <DataTableView.hxx>
+#include <ChartModel.hxx>
#include <comphelper/scopeguard.hxx>
@@ -1993,11 +1994,12 @@ void VCartesianAxis::createShapes()
}
void
VCartesianAxis::createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>&
rSeriesPlotterList,
-
Reference<util::XNumberFormatsSupplier> const& xNumberFormatsSupplier)
+
Reference<util::XNumberFormatsSupplier> const& xNumberFormatsSupplier,
+ rtl::Reference<::chart::ChartModel>
const& xChartDoc)
{
if (m_aAxisProperties.m_bDisplayDataTable)
{
- m_pDataTableView.reset(new
DataTableView(m_aAxisProperties.m_xDataTableModel));
+ m_pDataTableView.reset(new DataTableView(xChartDoc,
m_aAxisProperties.m_xDataTableModel));
m_pDataTableView->initializeValues(rSeriesPlotterList);
m_xNumberFormatsSupplier = xNumberFormatsSupplier;
}
diff --git a/chart2/source/view/axes/VCartesianAxis.hxx
b/chart2/source/view/axes/VCartesianAxis.hxx
index 9f396fef43b8..a9baca907bdd 100644
--- a/chart2/source/view/axes/VCartesianAxis.hxx
+++ b/chart2/source/view/axes/VCartesianAxis.hxx
@@ -100,7 +100,8 @@ public:
};
void createDataTableView(std::vector<std::unique_ptr<VSeriesPlotter>>&
rSeriesPlotterList,
-
css::uno::Reference<css::util::XNumberFormatsSupplier> const&
xNumberFormatsSupplier) override;
+
css::uno::Reference<css::util::XNumberFormatsSupplier> const&
xNumberFormatsSupplier,
+ rtl::Reference<::chart::ChartModel> const&
xChartDoc) override;
private: //methods
/**
* Go through all tick label positions and decide which labels to display
diff --git a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
index cd0d49188a1c..3ea42cb087a0 100644
--- a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
+++ b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
@@ -166,7 +166,7 @@ void VCartesianCoordinateSystem::createVAxisList(
apVAxis->set3DWallPositions( m_eLeftWallPos, m_eBackWallPos,
m_eBottomPos );
apVAxis->initAxisLabelProperties(rFontReferenceSize,rMaximumSpaceForLabels);
- apVAxis->createDataTableView(rSeriesPlotterList,
xNumberFormatsSupplier);
+ apVAxis->createDataTableView(rSeriesPlotterList,
xNumberFormatsSupplier, xChartDoc);
}
}
}
diff --git a/chart2/source/view/inc/DataTableView.hxx
b/chart2/source/view/inc/DataTableView.hxx
index 3f4d97629035..0a6ebe06f47d 100644
--- a/chart2/source/view/inc/DataTableView.hxx
+++ b/chart2/source/view/inc/DataTableView.hxx
@@ -13,23 +13,32 @@
#include <svx/unodraw/SvxTableShape.hxx>
#include <com/sun/star/awt/Rectangle.hpp>
#include <DataTable.hxx>
+#include <VLineProperties.hxx>
namespace chart
{
class VSeriesPlotter;
+class ChartModel;
class DataTableView final
{
+private:
+ rtl::Reference<::chart::ChartModel> m_xChartModel;
rtl::Reference<SvxShapeGroupAnyD> m_xTarget;
rtl::Reference<SvxTableShape> m_xTableShape;
rtl::Reference<DataTable> m_xDataTableModel;
+ VLineProperties m_aLineProperties;
std::vector<OUString> m_aDataSeriesNames;
std::vector<OUString> m_aXValues;
std::vector<std::vector<OUString>> m_pDataSeriesValues;
+ void setCellDefaults(css::uno::Reference<css::beans::XPropertySet>&
xPropertySet, bool bLeft,
+ bool bTop, bool bRight, bool bBottom);
+
public:
- DataTableView(rtl::Reference<DataTable> const& rDataTableModel);
+ DataTableView(rtl::Reference<::chart::ChartModel> const& xChartDoc,
+ rtl::Reference<DataTable> const& rDataTableModel);
void initializeShapes(const rtl::Reference<SvxShapeGroupAnyD>& xTarget);
void initializeValues(std::vector<std::unique_ptr<VSeriesPlotter>>&
rSeriesPlotterList);
void createShapes(basegfx::B2DVector const& rStart, basegfx::B2DVector
const& rEnd,
diff --git a/chart2/source/view/main/DataTableView.cxx
b/chart2/source/view/main/DataTableView.cxx
index 4a68f4a2bfa1..73f934867133 100644
--- a/chart2/source/view/main/DataTableView.cxx
+++ b/chart2/source/view/main/DataTableView.cxx
@@ -12,6 +12,7 @@
#include <VSeriesPlotter.hxx>
#include <ShapeFactory.hxx>
#include <ExplicitCategoriesProvider.hxx>
+#include <ChartModel.hxx>
#include <svx/svdotable.hxx>
@@ -19,10 +20,14 @@
#include <com/sun/star/table/BorderLine.hpp>
#include <com/sun/star/table/BorderLine2.hpp>
#include <com/sun/star/table/TableBorder.hpp>
+#include <com/sun/star/table/BorderLineStyle.hpp>
#include <com/sun/star/style/ParagraphAdjust.hpp>
#include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
+#include <com/sun/star/drawing/LineDash.hpp>
+#include <com/sun/star/drawing/LineStyle.hpp>
#include <com/sun/star/util/XBroadcaster.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
#include <o3tl/unit_conversion.hxx>
@@ -30,48 +35,97 @@ using namespace css;
namespace chart
{
-DataTableView::DataTableView(rtl::Reference<DataTable> const& rDataTableModel)
- : m_xDataTableModel(rDataTableModel)
+DataTableView::DataTableView(rtl::Reference<::chart::ChartModel> const&
xChartModel,
+ rtl::Reference<DataTable> const& rDataTableModel)
+ : m_xChartModel(xChartModel)
+ , m_xDataTableModel(rDataTableModel)
{
+ uno::Reference<beans::XPropertySet> xProp = m_xDataTableModel.get();
+ m_aLineProperties.initFromPropertySet(xProp);
}
namespace
{
-void setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet, bool
bLeft, bool bTop,
- bool bRight, bool bBottom)
+void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet)
{
xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF)));
xPropertySet->setPropertyValue("TextVerticalAdjust",
uno::Any(drawing::TextVerticalAdjust_TOP));
xPropertySet->setPropertyValue("ParaAdjust",
uno::Any(style::ParagraphAdjust_CENTER));
table::BorderLine2 aBorderLine;
- aBorderLine.LineWidth = o3tl::convert(0.5, o3tl::Length::pt,
o3tl::Length::mm100);
+ aBorderLine.LineWidth = 0;
aBorderLine.Color = 0x000000;
- if (bLeft)
- xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine));
- if (bTop)
- xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine));
- if (bRight)
- xPropertySet->setPropertyValue("RightBorder", uno::Any(aBorderLine));
- if (bBottom)
- xPropertySet->setPropertyValue("BottomBorder", uno::Any(aBorderLine));
+ xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine));
+ xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine));
+}
}
-void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet)
+void DataTableView::setCellDefaults(uno::Reference<beans::XPropertySet>&
xPropertySet, bool bLeft,
+ bool bTop, bool bRight, bool bBottom)
{
xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF)));
xPropertySet->setPropertyValue("TextVerticalAdjust",
uno::Any(drawing::TextVerticalAdjust_TOP));
xPropertySet->setPropertyValue("ParaAdjust",
uno::Any(style::ParagraphAdjust_CENTER));
- table::BorderLine2 aBorderLine;
- aBorderLine.LineWidth = 0;
- aBorderLine.Color = 0x000000;
+ drawing::LineStyle eStyle = drawing::LineStyle_NONE;
+ m_aLineProperties.LineStyle >>= eStyle;
- xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine));
- xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine));
-}
+ if (eStyle != drawing::LineStyle_NONE)
+ {
+ table::BorderLine2 aBorderLine;
+
+ sal_Int32 nWidth = 0;
+ m_aLineProperties.Width >>= nWidth;
+ aBorderLine.LineWidth = o3tl::convert(nWidth, o3tl::Length::mm100,
o3tl::Length::twip);
+
+ sal_Int32 nColor = 0;
+ m_aLineProperties.Color >>= nColor;
+ aBorderLine.Color = nColor;
+
+ aBorderLine.LineStyle = table::BorderLineStyle::SOLID;
+
+ if (eStyle == drawing::LineStyle_DASH)
+ {
+ OUString aDashName;
+ m_aLineProperties.DashName >>= aDashName;
+ if (!aDashName.isEmpty() && m_xChartModel.is())
+ {
+ uno::Reference<container::XNameContainer> xDashTable(
+
m_xChartModel->createInstance("com.sun.star.drawing.DashTable"),
+ uno::UNO_QUERY);
+ if (xDashTable.is() && xDashTable->hasByName(aDashName))
+ {
+ drawing::LineDash aLineDash;
+ xDashTable->getByName(aDashName) >>= aLineDash;
+
+ if (aLineDash.Dots == 0 && aLineDash.Dashes == 0)
+ aBorderLine.LineStyle = table::BorderLineStyle::SOLID;
+ else if (aLineDash.Dots == 1 && aLineDash.Dashes == 0)
+ aBorderLine.LineStyle = table::BorderLineStyle::DOTTED;
+ else if (aLineDash.Dots == 0 && aLineDash.Dashes == 1)
+ aBorderLine.LineStyle = table::BorderLineStyle::DASHED;
+ else if (aLineDash.Dots == 1 && aLineDash.Dashes == 1)
+ aBorderLine.LineStyle =
table::BorderLineStyle::DASH_DOT;
+ else if (aLineDash.Dots == 2 && aLineDash.Dashes == 1)
+ aBorderLine.LineStyle =
table::BorderLineStyle::DASH_DOT_DOT;
+ else
+ aBorderLine.LineStyle = table::BorderLineStyle::DASHED;
+ }
+ }
+ }
+
+ if (bLeft)
+ xPropertySet->setPropertyValue("LeftBorder",
uno::Any(aBorderLine));
+ if (bTop)
+ xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine));
+ if (bRight)
+ xPropertySet->setPropertyValue("RightBorder",
uno::Any(aBorderLine));
+ if (bBottom)
+ xPropertySet->setPropertyValue("BottomBorder",
uno::Any(aBorderLine));
+ }
}
+
void DataTableView::createShapes(basegfx::B2DVector const& rStart,
basegfx::B2DVector const& rEnd,
sal_Int32 nColumnWidth)
{
commit d37452c45f6d38ba1191e045fbc9443ea17df8b2
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri May 20 18:39:34 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:11 2022 +0200
chart2: better readable DataTable properties definition
Change-Id: Ib9cadee39f58b73782e6a3268d86b688183de1fb
diff --git a/chart2/source/model/main/DataTable.cxx
b/chart2/source/model/main/DataTable.cxx
index 12e08e28b3e4..0b7fba3176e2 100644
--- a/chart2/source/model/main/DataTable.cxx
+++ b/chart2/source/model/main/DataTable.cxx
@@ -34,23 +34,21 @@ enum
DataTableProperty_Keys,
};
-void lcl_AddPropertiesToVector(std::vector<beans::Property>& rOutProperties)
-{
- rOutProperties.emplace_back("Show", DataTableProperty_Show,
cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::MAYBEDEFAULT);
- rOutProperties.emplace_back(
- "HBorder", DataTableProperty_HorizontalBorder,
cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND |
beans::PropertyAttribute::MAYBEDEFAULT);
- rOutProperties.emplace_back(
- "VBorder", DataTableProperty_VerticalBorder,
cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND |
beans::PropertyAttribute::MAYBEDEFAULT);
- rOutProperties.emplace_back("Outline", DataTableProperty_Outilne,
cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::MAYBEDEFAULT);
- rOutProperties.emplace_back("Keys", DataTableProperty_Keys,
cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::MAYBEDEFAULT);
+void lcl_AddPropertiesToVector(std::vector<beans::Property>& rProps)
+{
+ auto const nBound = beans::PropertyAttribute::BOUND;
+ auto const nMaybeDefault = beans::PropertyAttribute::MAYBEDEFAULT;
+
+ rProps.emplace_back("Show", DataTableProperty_Show,
cppu::UnoType<bool>::get(),
+ nBound | nMaybeDefault);
+ rProps.emplace_back("HBorder", DataTableProperty_HorizontalBorder,
cppu::UnoType<bool>::get(),
+ nBound | nMaybeDefault);
+ rProps.emplace_back("VBorder", DataTableProperty_VerticalBorder,
cppu::UnoType<bool>::get(),
+ nBound | nMaybeDefault);
+ rProps.emplace_back("Outline", DataTableProperty_Outilne,
cppu::UnoType<bool>::get(),
+ nBound | nMaybeDefault);
+ rProps.emplace_back("Keys", DataTableProperty_Keys,
cppu::UnoType<bool>::get(),
+ nBound | nMaybeDefault);
}
struct StaticLegendDefaults_Initializer
commit bd487d0fa4410a1f9f9dea6a258bd63ac4204d60
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Fri May 20 18:20:51 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:11 2022 +0200
chart2: remove setting DataTable* props. from old chart::XDialog
No API change needed as the properties were not officialy part
of the API in the first place.
Change-Id: I8682087d13ab2e9eb1c619646b87cde59c3a8e45
diff --git a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
index db1abe739787..0fea6c4da7f9 100644
--- a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
@@ -137,9 +137,6 @@ enum
PROP_DIAGRAM_HAS_SECOND_Y_AXIS_TITLE,
PROP_DIAGRAM_AUTOMATIC_SIZE,
- PROP_DIAGRAM_DATATABLEHBORDER,
- PROP_DIAGRAM_DATATABLEVBORDER,
- PROP_DIAGRAM_DATATABLEOUTLINE,
PROP_DIAGRAM_EXTERNALDATA
};
@@ -381,21 +378,7 @@ void lcl_AddPropertiesToVector(
cppu::UnoType<bool>::get(),
beans::PropertyAttribute::BOUND
| beans::PropertyAttribute::MAYBEDEFAULT );
- rOutProperties.emplace_back( "DataTableHBorder",
- PROP_DIAGRAM_DATATABLEHBORDER,
- cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::MAYBEDEFAULT );
- rOutProperties.emplace_back( "DataTableVBorder",
- PROP_DIAGRAM_DATATABLEVBORDER,
- cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::MAYBEDEFAULT );
- rOutProperties.emplace_back( "DataTableOutline",
- PROP_DIAGRAM_DATATABLEOUTLINE,
- cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::MAYBEDEFAULT );
+
rOutProperties.emplace_back( "ExternalData",
PROP_DIAGRAM_EXTERNALDATA,
cppu::UnoType<OUString>::get(),
commit 39ffb3a7a9eff0b759d3c714f61bda29008e58d5
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Thu May 19 21:52:15 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:11 2022 +0200
chart2: use {V,H}Border, Outline Data Table props. at rendering
insert DataTable class into DataTableView, so it is possible to
take the properties into account when rendering.
Change rendering:
VBorder - draw vert. border of data table
HBorder - draw horiz. border of data table
Outline - draw the outline borders of a data table
Change-Id: I8348d0672d9c188014d664d667abddde8ebbc7c0
diff --git a/chart2/source/view/axes/VCartesianAxis.cxx
b/chart2/source/view/axes/VCartesianAxis.cxx
index 2266dd143d2e..096586279454 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -1997,7 +1997,7 @@ void
VCartesianAxis::createDataTableView(std::vector<std::unique_ptr<VSeriesPlot
{
if (m_aAxisProperties.m_bDisplayDataTable)
{
- m_pDataTableView.reset(new DataTableView);
+ m_pDataTableView.reset(new
DataTableView(m_aAxisProperties.m_xDataTableModel));
m_pDataTableView->initializeValues(rSeriesPlotterList);
m_xNumberFormatsSupplier = xNumberFormatsSupplier;
}
diff --git a/chart2/source/view/inc/DataTableView.hxx
b/chart2/source/view/inc/DataTableView.hxx
index 517de9699d9e..3f4d97629035 100644
--- a/chart2/source/view/inc/DataTableView.hxx
+++ b/chart2/source/view/inc/DataTableView.hxx
@@ -12,6 +12,7 @@
#include <svx/unoshape.hxx>
#include <svx/unodraw/SvxTableShape.hxx>
#include <com/sun/star/awt/Rectangle.hpp>
+#include <DataTable.hxx>
namespace chart
{
@@ -21,17 +22,18 @@ class DataTableView final
{
rtl::Reference<SvxShapeGroupAnyD> m_xTarget;
rtl::Reference<SvxTableShape> m_xTableShape;
+ rtl::Reference<DataTable> m_xDataTableModel;
std::vector<OUString> m_aDataSeriesNames;
std::vector<OUString> m_aXValues;
std::vector<std::vector<OUString>> m_pDataSeriesValues;
public:
- DataTableView();
+ DataTableView(rtl::Reference<DataTable> const& rDataTableModel);
void initializeShapes(const rtl::Reference<SvxShapeGroupAnyD>& xTarget);
void initializeValues(std::vector<std::unique_ptr<VSeriesPlotter>>&
rSeriesPlotterList);
void createShapes(basegfx::B2DVector const& rStart, basegfx::B2DVector
const& rEnd,
- sal_Int32 nDistance);
+ sal_Int32 nColumnWidth);
};
} //namespace chart
diff --git a/chart2/source/view/main/DataTableView.cxx
b/chart2/source/view/main/DataTableView.cxx
index 35dca6a85767..4a68f4a2bfa1 100644
--- a/chart2/source/view/main/DataTableView.cxx
+++ b/chart2/source/view/main/DataTableView.cxx
@@ -30,11 +30,15 @@ using namespace css;
namespace chart
{
-DataTableView::DataTableView() = default;
+DataTableView::DataTableView(rtl::Reference<DataTable> const& rDataTableModel)
+ : m_xDataTableModel(rDataTableModel)
+{
+}
namespace
{
-void setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet)
+void setCellDefaults(uno::Reference<beans::XPropertySet>& xPropertySet, bool
bLeft, bool bTop,
+ bool bRight, bool bBottom)
{
xPropertySet->setPropertyValue("FillColor", uno::Any(Color(0xFFFFFF)));
xPropertySet->setPropertyValue("TextVerticalAdjust",
uno::Any(drawing::TextVerticalAdjust_TOP));
@@ -44,10 +48,14 @@ void setCellDefaults(uno::Reference<beans::XPropertySet>&
xPropertySet)
aBorderLine.LineWidth = o3tl::convert(0.5, o3tl::Length::pt,
o3tl::Length::mm100);
aBorderLine.Color = 0x000000;
- xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine));
- xPropertySet->setPropertyValue("BottomBorder", uno::Any(aBorderLine));
- xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine));
- xPropertySet->setPropertyValue("RightBorder", uno::Any(aBorderLine));
+ if (bLeft)
+ xPropertySet->setPropertyValue("LeftBorder", uno::Any(aBorderLine));
+ if (bTop)
+ xPropertySet->setPropertyValue("TopBorder", uno::Any(aBorderLine));
+ if (bRight)
+ xPropertySet->setPropertyValue("RightBorder", uno::Any(aBorderLine));
+ if (bBottom)
+ xPropertySet->setPropertyValue("BottomBorder", uno::Any(aBorderLine));
}
void setTopCell(uno::Reference<beans::XPropertySet>& xPropertySet)
@@ -65,7 +73,7 @@ void setTopCell(uno::Reference<beans::XPropertySet>&
xPropertySet)
}
}
void DataTableView::createShapes(basegfx::B2DVector const& rStart,
basegfx::B2DVector const& rEnd,
- sal_Int32 nColumnSize)
+ sal_Int32 nColumnWidth)
{
if (!m_xTarget.is())
return;
@@ -74,7 +82,6 @@ void DataTableView::createShapes(basegfx::B2DVector const&
rStart, basegfx::B2DV
m_xTableShape = ShapeFactory::createTable(m_xTarget);
uno::Reference<table::XTable> xTable;
- uno::Reference<util::XBroadcaster> xBroadcaster;
try
{
auto rDelta = rEnd - rStart;
@@ -86,18 +93,31 @@ void DataTableView::createShapes(basegfx::B2DVector const&
rStart, basegfx::B2DV
return;
}
- if (xTable.is())
- xBroadcaster.set(xTable, uno::UNO_QUERY);
+ if (!xTable.is())
+ return;
+
+ uno::Reference<util::XBroadcaster> xBroadcaster(xTable, uno::UNO_QUERY);
if (!xBroadcaster.is())
return;
xBroadcaster->lockBroadcasts();
+
+ bool bHBorder = false;
+ bool bVBorder = false;
+ bool bOutline = false;
+
+ m_xDataTableModel->getPropertyValue("HBorder") >>= bHBorder;
+ m_xDataTableModel->getPropertyValue("VBorder") >>= bVBorder;
+ m_xDataTableModel->getPropertyValue("Outline") >>= bOutline;
+
+ sal_Int32 nColumnCount = m_aXValues.size();
uno::Reference<table::XTableColumns> xTableColumns = xTable->getColumns();
- xTableColumns->insertByIndex(0, m_aXValues.size());
+ xTableColumns->insertByIndex(0, nColumnCount);
+ sal_Int32 nRowCount = m_aDataSeriesNames.size();
uno::Reference<table::XTableRows> xTableRows = xTable->getRows();
- xTableRows->insertByIndex(0, m_aDataSeriesNames.size());
+ xTableRows->insertByIndex(0, nRowCount);
{
uno::Reference<table::XCell> xCell = xTable->getCellByPosition(0, 0);
@@ -120,7 +140,8 @@ void DataTableView::createShapes(basegfx::B2DVector const&
rStart, basegfx::B2DV
if (xCellTextRange.is())
{
xCellTextRange->setString(rString);
- setCellDefaults(xPropertySet);
+ bool bLeft = bOutline || (bVBorder && nColumn > 1);
+ setCellDefaults(xPropertySet, bLeft, bOutline, bOutline, bOutline);
}
nColumn++;
}
@@ -133,8 +154,9 @@ void DataTableView::createShapes(basegfx::B2DVector const&
rStart, basegfx::B2DV
uno::Reference<text::XTextRange> xCellTextRange(xCell, uno::UNO_QUERY);
if (xCellTextRange.is())
{
+ bool bTop = bOutline || (bHBorder && nRow > 1);
xCellTextRange->setString(rSeriesName);
- setCellDefaults(xPropertySet);
+ setCellDefaults(xPropertySet, bOutline, bTop, bOutline, bOutline);
}
nRow++;
}
@@ -151,7 +173,25 @@ void DataTableView::createShapes(basegfx::B2DVector const&
rStart, basegfx::B2DV
if (xCellTextRange.is())
{
xCellTextRange->setString(rValue);
- setCellDefaults(xPropertySet);
+
+ bool bLeft = false;
+ bool bTop = false;
+ bool bRight = false;
+ bool bBottom = false;
+
+ if (nColumn > 1 && bVBorder)
+ bLeft = true;
+
+ if (nRow > 1 && bHBorder)
+ bTop = true;
+
+ if (nRow == nRowCount && bOutline)
+ bBottom = true;
+
+ if (nColumn == nColumnCount && bOutline)
+ bRight = true;
+
+ setCellDefaults(xPropertySet, bLeft, bTop, bRight, bBottom);
}
nColumn++;
}
@@ -161,7 +201,7 @@ void DataTableView::createShapes(basegfx::B2DVector const&
rStart, basegfx::B2DV
xBroadcaster->unlockBroadcasts();
auto* pTableObject =
static_cast<sdr::table::SdrTableObj*>(m_xTableShape->GetSdrObject());
- pTableObject->DistributeColumns(0, pTableObject->getColumnCount() - 1,
true, true);
+ pTableObject->DistributeColumns(0, nColumnCount - 1, true, true);
uno::Reference<beans::XPropertySet>
xPropertySet(xTableColumns->getByIndex(0), uno::UNO_QUERY);
sal_Int32 nWidth = 0;
@@ -172,7 +212,7 @@ void DataTableView::createShapes(basegfx::B2DVector const&
rStart, basegfx::B2DV
for (sal_Int32 i = 1; i < xTableColumns->getCount(); ++i)
{
xPropertySet.set(xTableColumns->getByIndex(i), uno::UNO_QUERY);
- xPropertySet->setPropertyValue("Width", uno::Any(nColumnSize));
+ xPropertySet->setPropertyValue("Width", uno::Any(nColumnWidth));
}
}
commit cf331910412631044c349561bc3e3b4cc2de5eac
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Mon May 16 16:19:39 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:11 2022 +0200
oox: support reading text and shape properties for a data table
Change-Id: I740d3bd6af11457ecb54878be648ad1e22b9d4b8
diff --git a/oox/inc/drawingml/chart/datatablemodel.hxx
b/oox/inc/drawingml/chart/datatablemodel.hxx
index 5c7fe7901200..937dbb3c60a6 100644
--- a/oox/inc/drawingml/chart/datatablemodel.hxx
+++ b/oox/inc/drawingml/chart/datatablemodel.hxx
@@ -28,6 +28,9 @@ struct DataTableModel
bool mbShowOutline : 1; /// Show outline
bool mbShowKeys : 1;
+ ModelRef<Shape> mxShapeProp; /// frame formatting.
+ ModelRef<TextBody> mxTextProp; /// text formatting.
+
DataTableModel()
: mbShowHBorder(false)
, mbShowVBorder(false)
diff --git a/oox/source/drawingml/chart/datatablecontext.cxx
b/oox/source/drawingml/chart/datatablecontext.cxx
index 0813a6424312..c277dae5f4d6 100644
--- a/oox/source/drawingml/chart/datatablecontext.cxx
+++ b/oox/source/drawingml/chart/datatablecontext.cxx
@@ -18,7 +18,8 @@
*/
#include <drawingml/chart/datatablecontext.hxx>
-
+#include <drawingml/shapepropertiescontext.hxx>
+#include <drawingml/textbodycontext.hxx>
#include <drawingml/chart/plotareamodel.hxx>
#include <oox/core/xmlfilterbase.hxx>
#include <oox/helper/attributelist.hxx>
@@ -57,6 +58,10 @@ ContextHandlerRef
DataTableContext::onCreateContext(sal_Int32 nElement,
case C_TOKEN(showKeys):
mrModel.mbShowKeys = rAttribs.getBool(XML_val, false);
break;
+ case C_TOKEN(spPr):
+ return new ShapePropertiesContext(*this,
mrModel.mxShapeProp.create());
+ case C_TOKEN(txPr):
+ return new TextBodyContext(*this,
mrModel.mxTextProp.create());
}
break;
}
diff --git a/oox/source/drawingml/chart/datatableconverter.cxx
b/oox/source/drawingml/chart/datatableconverter.cxx
index 3c477c5d7507..4e42b7468ebc 100644
--- a/oox/source/drawingml/chart/datatableconverter.cxx
+++ b/oox/source/drawingml/chart/datatableconverter.cxx
@@ -55,6 +55,9 @@ void
DataTableConverter::convertFromModel(uno::Reference<chart2::XDiagram> const
aPropSet.setProperty(PROP_Outline, mrModel.mbShowOutline);
if (mrModel.mbShowKeys)
aPropSet.setProperty(PROP_Keys, mrModel.mbShowKeys);
+
+ getFormatter().convertFormatting(aPropSet, mrModel.mxShapeProp,
mrModel.mxTextProp,
+ OBJECTTYPE_DATATABLE);
}
catch (uno::Exception&)
{
commit 54e54c0b3ec3bd1054a38f271eb76bc570a921ae
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Mon May 16 16:10:02 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:10 2022 +0200
chart2: add DataTable to AxisProperties, take account at rendering
The Diagram model has the DataTable class, but now we need to
take this into account at rendering. First add the DataTable to
AxisProperties, to decide if the data table should be rendered or
not.
Change-Id: Ia18fcffccc632e4d36011544066072ae3cdfbfc7
diff --git a/chart2/source/view/axes/VAxisProperties.cxx
b/chart2/source/view/axes/VAxisProperties.cxx
index 8cb9e0eec7ee..f39420c9ce02 100644
--- a/chart2/source/view/axes/VAxisProperties.cxx
+++ b/chart2/source/view/axes/VAxisProperties.cxx
@@ -153,8 +153,9 @@ TickmarkProperties
AxisProperties::getBiggestTickmarkProperties()
return aTickmarkProperties;
}
-AxisProperties::AxisProperties( rtl::Reference< Axis > xAxisModel
- , ExplicitCategoriesProvider*
pExplicitCategoriesProvider )
+AxisProperties::AxisProperties(rtl::Reference<::chart::Axis> xAxisModel,
+ ExplicitCategoriesProvider*
pExplicitCategoriesProvider,
+ rtl::Reference<::chart::DataTable> const&
xDataTableModel)
: m_xAxisModel(std::move(xAxisModel))
, m_nDimensionIndex(0)
, m_bIsMainAxis(true)
@@ -174,6 +175,7 @@ AxisProperties::AxisProperties( rtl::Reference< Axis >
xAxisModel
, m_bComplexCategories(false)
, m_pExplicitCategoriesProvider(pExplicitCategoriesProvider)
, m_bLimitSpaceForLabels(false)
+ , m_xDataTableModel(xDataTableModel)
{
}
@@ -256,7 +258,9 @@ void AxisProperties::init( bool bCartesian )
if( bCartesian )
{
if (m_nDimensionIndex == 0)
- m_bDisplayDataTable = true;
+ {
+ m_bDisplayDataTable = m_xDataTableModel.is();
+ }
if( m_nDimensionIndex == 0 && m_nAxisType == AxisType::CATEGORY
&& m_pExplicitCategoriesProvider &&
m_pExplicitCategoriesProvider->hasComplexCategories() )
diff --git a/chart2/source/view/axes/VAxisProperties.hxx
b/chart2/source/view/axes/VAxisProperties.hxx
index d66b2f3a919e..6b6b7c361ea2 100644
--- a/chart2/source/view/axes/VAxisProperties.hxx
+++ b/chart2/source/view/axes/VAxisProperties.hxx
@@ -21,6 +21,7 @@
#include "TickmarkProperties.hxx"
#include <Axis.hxx>
#include <LabelAlignment.hxx>
+#include <DataTable.hxx>
#include <com/sun/star/chart/ChartAxisLabelPosition.hpp>
#include <com/sun/star/chart/ChartAxisMarkPosition.hpp>
@@ -139,10 +140,13 @@ struct AxisProperties final
bool m_bLimitSpaceForLabels;
+ rtl::Reference<::chart::DataTable> m_xDataTableModel;
+
//methods:
- AxisProperties( rtl::Reference< ::chart::Axis > xAxisModel
- , ExplicitCategoriesProvider* pExplicitCategoriesProvider );
+ AxisProperties(rtl::Reference<::chart::Axis> xAxisModel,
+ ExplicitCategoriesProvider* pExplicitCategoriesProvider,
+ rtl::Reference<::chart::DataTable> const& xDataTableModel);
void init(bool bCartesian=false);//init from model data (m_xAxisModel)
diff --git a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
index e1a2ba5046e3..cd0d49188a1c 100644
--- a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
+++ b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
@@ -23,6 +23,8 @@
#include <BaseCoordinateSystem.hxx>
#include <AxisIndexDefines.hxx>
#include <Axis.hxx>
+#include <DataTable.hxx>
+#include <Diagram.hxx>
#include <AxisHelper.hxx>
#include <cppuhelper/implbase.hxx>
#include <ChartModel.hxx>
@@ -130,7 +132,8 @@ void VCartesianCoordinateSystem::createVAxisList(
if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis,
m_xCooSysModel ))
continue;
- AxisProperties
aAxisProperties(xAxis,getExplicitCategoriesProvider());
+ rtl::Reference<Diagram>
xDiagram(xChartDoc->getFirstChartDiagram());
+ AxisProperties aAxisProperties(xAxis,
getExplicitCategoriesProvider(), xDiagram->getDataTableRef());
aAxisProperties.m_nDimensionIndex = nDimensionIndex;
aAxisProperties.m_bSwapXAndY = bSwapXAndY;
aAxisProperties.m_bIsMainAxis = (nAxisIndex==0);
diff --git a/chart2/source/view/axes/VPolarCoordinateSystem.cxx
b/chart2/source/view/axes/VPolarCoordinateSystem.cxx
index 3a3351a54fc3..338a1c4ab7ed 100644
--- a/chart2/source/view/axes/VPolarCoordinateSystem.cxx
+++ b/chart2/source/view/axes/VPolarCoordinateSystem.cxx
@@ -24,6 +24,8 @@
#include <AxisIndexDefines.hxx>
#include <Axis.hxx>
#include <AxisHelper.hxx>
+#include <Diagram.hxx>
+#include <DataTable.hxx>
#include <ChartModel.hxx>
namespace chart
@@ -90,7 +92,9 @@ void VPolarCoordinateSystem::createVAxisList(
rtl::Reference< Axis > xAxis =
getAxisByDimension(nDimensionIndex,nAxisIndex);
if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis,
m_xCooSysModel ))
continue;
- AxisProperties
aAxisProperties(xAxis,getExplicitCategoriesProvider());
+
+ rtl::Reference<Diagram>
xDiagram(xChartDoc->getFirstChartDiagram());
+ AxisProperties
aAxisProperties(xAxis,getExplicitCategoriesProvider(),
xDiagram->getDataTableRef());
aAxisProperties.init();
if(aAxisProperties.m_bDisplayLabels)
aAxisProperties.m_nNumberFormatKey =
getNumberFormatKeyForAxis(xAxis, xChartDoc);
commit 2bdc6d4e50ae9dee2170640cb4af364df254566e
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Mon May 16 15:53:59 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:10 2022 +0200
oox: add data table and props. with the new UNO DataTable service
Refactor filling of the old data table UNO properties to use the
new service DataTable and its properties.
Change-Id: Iee611c88bec6f58a50b5ae09d3acffd16e0b6dd9
diff --git a/oox/source/drawingml/chart/datatableconverter.cxx
b/oox/source/drawingml/chart/datatableconverter.cxx
index 802edc9464ac..3c477c5d7507 100644
--- a/oox/source/drawingml/chart/datatableconverter.cxx
+++ b/oox/source/drawingml/chart/datatableconverter.cxx
@@ -20,6 +20,7 @@
#include <drawingml/chart/datatableconverter.hxx>
#include <com/sun/star/chart2/XDiagram.hpp>
+#include <com/sun/star/chart2/XDataTable.hpp>
#include <drawingml/chart/plotareamodel.hxx>
#include <oox/token/properties.hxx>
@@ -36,13 +37,28 @@ DataTableConverter::~DataTableConverter() = default;
void DataTableConverter::convertFromModel(uno::Reference<chart2::XDiagram>
const& rxDiagram)
{
- PropertySet aPropSet(rxDiagram);
- if (mrModel.mbShowHBorder)
- aPropSet.setProperty(PROP_DataTableHBorder, mrModel.mbShowHBorder);
- if (mrModel.mbShowVBorder)
- aPropSet.setProperty(PROP_DataTableVBorder, mrModel.mbShowVBorder);
- if (mrModel.mbShowOutline)
- aPropSet.setProperty(PROP_DataTableOutline, mrModel.mbShowOutline);
+ if (!rxDiagram.is())
+ return;
+
+ try
+ {
+ uno::Reference<chart2::XDataTable> xDataTable(
+ createInstance("com.sun.star.chart2.DataTable"),
uno::UNO_QUERY_THROW);
+ rxDiagram->setDataTable(xDataTable);
+
+ PropertySet aPropSet(xDataTable);
+ if (mrModel.mbShowHBorder)
+ aPropSet.setProperty(PROP_HBorder, mrModel.mbShowHBorder);
+ if (mrModel.mbShowVBorder)
+ aPropSet.setProperty(PROP_VBorder, mrModel.mbShowVBorder);
+ if (mrModel.mbShowOutline)
+ aPropSet.setProperty(PROP_Outline, mrModel.mbShowOutline);
+ if (mrModel.mbShowKeys)
+ aPropSet.setProperty(PROP_Keys, mrModel.mbShowKeys);
+ }
+ catch (uno::Exception&)
+ {
+ }
}
} // namespace oox
diff --git a/oox/source/drawingml/chart/plotareaconverter.cxx
b/oox/source/drawingml/chart/plotareaconverter.cxx
index a30b3bdc6249..4b07cada3ef7 100644
--- a/oox/source/drawingml/chart/plotareaconverter.cxx
+++ b/oox/source/drawingml/chart/plotareaconverter.cxx
@@ -433,8 +433,11 @@ void PlotAreaConverter::convertFromModel( View3DModel&
rView3DModel )
nAxesSetIdx = 1 - nAxesSetIdx;
}
- DataTableConverter dataTableConverter (*this,
mrModel.mxDataTable.getOrCreate());
- dataTableConverter.convertFromModel(xDiagram);
+ if (mrModel.mxDataTable)
+ {
+ DataTableConverter dataTableConverter(*this,
*mrModel.mxDataTable.get());
+ dataTableConverter.convertFromModel(xDiagram);
+ }
// plot area formatting
if( xDiagram.is() && !mb3dChart )
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index 8f17d34dbe49..5df793846a50 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -127,9 +127,6 @@ D3DSceneLightOn2
D3DScenePerspective
D3DSceneShadeMode
DDELinks
-DataTableHBorder
-DataTableOutline
-DataTableVBorder
DatabaseRanges
Decoration
DefaultScrollValue
@@ -247,6 +244,7 @@ HasVerticalScrollBar
HasXAxisTitle
HasYAxisTitle
HasZAxisTitle
+HBorder
HeaderBodyDistance
HeaderHeight
HeaderIsDynamicHeight
@@ -294,6 +292,7 @@ IsVisible
IterationCount
IterationEpsilon
Japanese
+Keys
Label
LabelBorderColor
LabelBorderStyle
@@ -365,6 +364,7 @@ OpCodeMap
Opaque
Orientation
OutputPosition
+Outline
OverlapSequence
Overlay
PageScale
@@ -586,6 +586,7 @@ UseSelectedPage
VScroll
Validation
Value
+VBorder
VaryColorsByPoint
VertJustify
VertJustifyMethod
commit fd3c81db7d0de95fa668f94c1a63c310776fe35c
Author: Tomaž Vajngerl <[email protected]>
AuthorDate: Mon May 16 15:27:46 2022 +0900
Commit: Tomaž Vajngerl <[email protected]>
CommitDate: Tue Jun 28 08:06:10 2022 +0200
[API-CHANGE] chart data table implementation
Adds new service DataTable, which is reposible for the properties
of a data table for a chart. Also removes the existing properties
related to the data table from Diagram service, which were added
prematurely in the past, without a data table actually being
supported by the chart module.
Also adds an implementation of the DataTable service in chart2
module.
Change-Id: I0c6b32163745704c623d04baaf0ce0e208c107f5
diff --git a/chart2/Library_chartcore.mk b/chart2/Library_chartcore.mk
index 3d3806e14c27..4c93c6d2c3ec 100644
--- a/chart2/Library_chartcore.mk
+++ b/chart2/Library_chartcore.mk
@@ -130,6 +130,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcore,\
chart2/source/model/main/DataPointProperties \
chart2/source/model/main/DataSeries \
chart2/source/model/main/DataSeriesProperties \
+ chart2/source/model/main/DataTable \
chart2/source/model/main/Diagram \
chart2/source/model/main/FormattedString \
chart2/source/model/main/GridProperties \
diff --git a/chart2/source/chartcore.component
b/chart2/source/chartcore.component
index f58ba98ba3ac..d15c808919df 100644
--- a/chart2/source/chartcore.component
+++ b/chart2/source/chartcore.component
@@ -219,6 +219,13 @@
<service name="com.sun.star.drawing.LineProperties"/>
<service name="com.sun.star.layout.LayoutElement"/>
<service name="com.sun.star.style.CharacterProperties"/>
+ </implementation>
+ <implementation name="com.sun.star.comp.chart2.DataTable"
+ constructor="com_sun_star_comp_chart2_DataTable_get_implementation">
+ <service name="com.sun.star.beans.PropertySet"/>
+ <service name="com.sun.star.chart2.DataTable"/>
+ <service name="com.sun.star.drawing.FillProperties"/>
+ <service name="com.sun.star.drawing.LineProperties"/>
</implementation>
<implementation name="com.sun.star.comp.chart2.PageBackground"
constructor="com_sun_star_comp_chart2_PageBackground_get_implementation">
diff --git a/chart2/source/inc/DataTable.hxx b/chart2/source/inc/DataTable.hxx
new file mode 100644
index 000000000000..4a41a40a1cbf
--- /dev/null
+++ b/chart2/source/inc/DataTable.hxx
@@ -0,0 +1,89 @@
+/* -*- 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/.
+ */
+
+#pragma once
+
+#include "OPropertySet.hxx"
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/implbase.hxx>
+#include <comphelper/uno3.hxx>
+
+#include "charttoolsdllapi.hxx"
+#include <com/sun/star/chart2/XDataTable.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/util/XCloneable.hpp>
+#include "ModifyListenerHelper.hxx"
+
+namespace chart
+{
+typedef cppu::WeakImplHelper<css::chart2::XDataTable, css::lang::XServiceInfo,
+ css::util::XCloneable,
css::util::XModifyBroadcaster,
+ css::util::XModifyListener>
+ DataTable_Base;
+
+/** Data table implementation */
+class OOO_DLLPUBLIC_CHARTTOOLS DataTable final : public cppu::BaseMutex,
+ public DataTable_Base,
+ public
::property::OPropertySet
+{
+public:
+ explicit DataTable();
+ virtual ~DataTable() override;
+
+ /// XServiceInfo declarations
+ virtual OUString SAL_CALL getImplementationName() override;
+ virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName)
override;
+ virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames()
override;
+
+ /// merge XInterface implementations
+ DECLARE_XINTERFACE()
+
+ /// merge XTypeProvider implementations
+ DECLARE_XTYPEPROVIDER()
+
+ explicit DataTable(DataTable const& rOther);
+
+private:
+ // ____ OPropertySet ____
+ virtual void GetDefaultValue(sal_Int32 nHandle, css::uno::Any& rAny) const
override;
+
+ // ____ OPropertySet ____
+ virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
+
+public:
+ // ____ XPropertySet ____
+ virtual css::uno::Reference<css::beans::XPropertySetInfo>
+ SAL_CALL getPropertySetInfo() override;
+
+ // ____ XCloneable ____
+ virtual css::uno::Reference<css::util::XCloneable> SAL_CALL createClone()
override;
+
+ // ____ XModifyBroadcaster ____
+ virtual void SAL_CALL
+ addModifyListener(const css::uno::Reference<css::util::XModifyListener>&
aListener) override;
+ virtual void SAL_CALL
+ removeModifyListener(const
css::uno::Reference<css::util::XModifyListener>& aListener) override;
+
+private:
+ // ____ XModifyListener ____
+ virtual void SAL_CALL modified(const css::lang::EventObject& aEvent)
override;
+
+ // ____ XEventListener (base of XModifyListener) ____
+ virtual void SAL_CALL disposing(const css::lang::EventObject& Source)
override;
+
+ // ____ OPropertySet ____
+ virtual void firePropertyChangeEvent() override;
+ using OPropertySet::disposing;
+
+ rtl::Reference<ModifyEventForwarder> m_xModifyEventForwarder;
+};
+
+} // namespace chart
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
... etc. - the rest is truncated