summaryrefslogtreecommitdiff
path: root/chart2/source/view
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2022-05-19 21:52:15 +0900
committerTomaž Vajngerl <quikee@gmail.com>2022-07-18 07:16:19 +0200
commit7cb504bd5e2c49a73af3270d1ecefe1bd838b66f (patch)
tree9d74744fb33e90e9633607495e42d1bb51980bfc /chart2/source/view
parentd69340d4d1e7f96f0633bebd5abcf20114fbef0f (diff)
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 <quikee@gmail.com>
Diffstat (limited to 'chart2/source/view')
-rw-r--r--chart2/source/view/axes/VCartesianAxis.cxx2
-rw-r--r--chart2/source/view/inc/DataTableView.hxx6
-rw-r--r--chart2/source/view/main/DataTableView.cxx74
3 files changed, 62 insertions, 20 deletions
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));
}
}