chart2/source/view/axes/VCartesianAxis.cxx | 2 chart2/source/view/inc/DataTableView.hxx | 6 +- chart2/source/view/main/DataTableView.cxx | 74 ++++++++++++++++++++++------- 3 files changed, 62 insertions(+), 20 deletions(-)
New commits: commit 7cb504bd5e2c49a73af3270d1ecefe1bd838b66f Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Thu May 19 21:52:15 2022 +0900 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Mon Jul 18 07:16:19 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 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137155 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> 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 cbb52ba02ccf..7b7fb60132ef 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; @@ -173,7 +213,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)); } }