chart2/source/controller/dialogs/tp_DataTable.hxx | 1 chart2/source/controller/inc/DataTableItemConverter.hxx | 1 chart2/source/controller/inc/dlg_InsertDataTable.hxx | 5 +++ chart2/source/controller/inc/res_DataTableProperties.hxx | 1 chart2/source/controller/main/ChartController_Insert.cxx | 4 +- chart2/source/inc/ObjectIdentifier.hxx | 1 chart2/source/model/main/DataTable.cxx | 1 chart2/source/view/inc/DataTableView.hxx | 25 +++++++++++++++ chart2/source/view/main/DataTableView.cxx | 9 ++++- offapi/com/sun/star/chart2/XDataTable.idl | 4 ++ oox/inc/drawingml/chart/datatablecontext.hxx | 3 - oox/inc/drawingml/chart/datatableconverter.hxx | 4 ++ xmloff/source/chart/SchXMLDataTableContext.cxx | 4 +- xmloff/source/chart/SchXMLDataTableContext.hxx | 1 xmloff/source/chart/SchXMLExport.cxx | 2 - 15 files changed, 60 insertions(+), 6 deletions(-)
New commits: commit 23c01f82682469e25fa2a8407c55100e89ab86de Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Wed Sep 14 23:55:20 2022 +0200 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Thu Sep 15 12:38:22 2022 +0200 Add documentation for data table added classes and functions Change-Id: Idc9756bf5b468d8ed0d11e6a75703d96350e1273 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139960 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/chart2/source/controller/dialogs/tp_DataTable.hxx b/chart2/source/controller/dialogs/tp_DataTable.hxx index a4ef6d6cf436..00ab64cf89ce 100644 --- a/chart2/source/controller/dialogs/tp_DataTable.hxx +++ b/chart2/source/controller/dialogs/tp_DataTable.hxx @@ -14,6 +14,7 @@ namespace chart { +/** Tab page for the data table properties */ class DataTableTabPage : public SfxTabPage { private: diff --git a/chart2/source/controller/inc/DataTableItemConverter.hxx b/chart2/source/controller/inc/DataTableItemConverter.hxx index 5dbfaf60bba9..68c5790ba345 100644 --- a/chart2/source/controller/inc/DataTableItemConverter.hxx +++ b/chart2/source/controller/inc/DataTableItemConverter.hxx @@ -30,6 +30,7 @@ class SdrModel; namespace chart::wrapper { +/** Convert data table properties to and from ItemSet and UNO PropertySet */ class DataTableItemConverter final : public ItemConverter { public: diff --git a/chart2/source/controller/inc/dlg_InsertDataTable.hxx b/chart2/source/controller/inc/dlg_InsertDataTable.hxx index 346f7b651c24..cd77099864c4 100644 --- a/chart2/source/controller/inc/dlg_InsertDataTable.hxx +++ b/chart2/source/controller/inc/dlg_InsertDataTable.hxx @@ -14,6 +14,7 @@ namespace chart { +/** The data table properties (data) used by the dialog */ struct DataTableDialogData { bool mbShow = true; @@ -23,6 +24,7 @@ struct DataTableDialogData bool mbKeys = false; }; +/** The dialog to change the data table specific properties */ class InsertDataTableDialog final : public weld::GenericDialogController { private: @@ -38,7 +40,10 @@ private: public: InsertDataTableDialog(weld::Window* pParent); + /** Set the initial state of the data table properties */ void init(DataTableDialogData const& rData); + + /** Get the state of the data table properties from the dialog */ DataTableDialogData& getDataTableDialogData(); }; diff --git a/chart2/source/controller/inc/res_DataTableProperties.hxx b/chart2/source/controller/inc/res_DataTableProperties.hxx index 299934cb0211..4b2aaa4f2ef7 100644 --- a/chart2/source/controller/inc/res_DataTableProperties.hxx +++ b/chart2/source/controller/inc/res_DataTableProperties.hxx @@ -14,6 +14,7 @@ namespace chart { +/** The shared UI elements for the data table properties */ class DataTablePropertiesResources final { private: diff --git a/chart2/source/controller/main/ChartController_Insert.cxx b/chart2/source/controller/main/ChartController_Insert.cxx index 78005072a009..c75ac20457e5 100644 --- a/chart2/source/controller/main/ChartController_Insert.cxx +++ b/chart2/source/controller/main/ChartController_Insert.cxx @@ -235,6 +235,7 @@ void ChartController::executeDispatch_OpenInsertDataTableDialog() } } +/** Create and insert a data table to the chart */ void ChartController::executeDispatch_InsertDataTable() { auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Insert, SchResId(STR_DATA_TABLE)); @@ -254,16 +255,17 @@ void ChartController::executeDispatch_InsertDataTable() } } +/** Delete a data table from the chart */ void ChartController::executeDispatch_DeleteDataTable() { auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Delete, SchResId(STR_DATA_TABLE)); UndoGuard aUndoGuard(aUndoDescription, m_xUndoManager); - rtl::Reference<Diagram> xDiagram = getFirstDiagram(); auto xDataTable = xDiagram->getDataTable(); if (xDataTable.is()) { + // insert a empty data table reference xDiagram->setDataTable(uno::Reference<chart2::XDataTable>()); aUndoGuard.commit(); } diff --git a/chart2/source/inc/ObjectIdentifier.hxx b/chart2/source/inc/ObjectIdentifier.hxx index b79a5fe9ca1e..14b684f59f46 100644 --- a/chart2/source/inc/ObjectIdentifier.hxx +++ b/chart2/source/inc/ObjectIdentifier.hxx @@ -150,6 +150,7 @@ public: static OUString createParticleForLegend( const rtl::Reference<::chart::ChartModel>& xChartModel ); + /** Creates an identifier for the data table */ static OUString createParticleForDataTable( const rtl::Reference<::chart::ChartModel>& xChartModel ); diff --git a/chart2/source/model/main/DataTable.cxx b/chart2/source/model/main/DataTable.cxx index a81cc6dedf7a..d21febb14e47 100644 --- a/chart2/source/model/main/DataTable.cxx +++ b/chart2/source/model/main/DataTable.cxx @@ -25,6 +25,7 @@ using namespace css; namespace { +/** DataTable Properties */ enum { DataTableProperty_HorizontalBorder, diff --git a/chart2/source/view/inc/DataTableView.hxx b/chart2/source/view/inc/DataTableView.hxx index ba0a5f8d051d..0bccaaddde31 100644 --- a/chart2/source/view/inc/DataTableView.hxx +++ b/chart2/source/view/inc/DataTableView.hxx @@ -23,26 +23,43 @@ class VSeriesPlotter; class ChartModel; class LegendEntryProvider; +/** + * DataTableView is responsible to create the table object, set the cell + * properties accordingly to the model and fill it with the chart series + * data. + */ class DataTableView final { private: rtl::Reference<::chart::ChartModel> m_xChartModel; + // the target shape rtl::Reference<SvxShapeGroupAnyD> m_xTarget; + // the data table shape rtl::Reference<SvxTableShape> m_xTableShape; + // the data table model rtl::Reference<DataTable> m_xDataTableModel; css::uno::Reference<css::uno::XComponentContext> m_xComponentContext; css::uno::Reference<css::table::XTable> m_xTable; VLineProperties m_aLineProperties; std::vector<VSeriesPlotter*> m_pSeriesPlotterList; + // data series names std::vector<OUString> m_aDataSeriesNames; + // X axis names std::vector<OUString> m_aXValues; + // list of data series values std::vector<std::vector<OUString>> m_pDataSeriesValues; + + // if the header vales should be aligned with the x-axis vales bool m_bAlignAxisValuesWithColumns; + /** Set the char and paragraph properties for the input (value) cell */ void setCellCharAndParagraphProperties(css::uno::Reference<css::beans::XPropertySet>& xPropertySet); + /** Set the common cell properties (for all cells in the data table, + * including headers) + */ void setCellProperties(css::uno::Reference<css::beans::XPropertySet>& xPropertySet, bool bLeft, bool bTop, bool bRight, bool bBottom); @@ -51,10 +68,18 @@ public: rtl::Reference<DataTable> const& rDataTableModel, css::uno::Reference<css::uno::XComponentContext> const& rComponentContext, bool bAlignAxisValuesWithColumns); + + /** Initializes and prepares the target and data table shape */ void initializeShapes(const rtl::Reference<SvxShapeGroupAnyD>& xTarget); + + /** Prepares the values of the chart, which will be shown it the data table */ void initializeValues(std::vector<std::unique_ptr<VSeriesPlotter>>& rSeriesPlotterList); + + /** Creates the data table and fills the values */ void createShapes(basegfx::B2DVector const& rStart, basegfx::B2DVector const& rEnd, sal_Int32 nAxisStepWidth); + + /** Repositions the data table shape */ void changePosition(sal_Int32 x, sal_Int32 y); }; diff --git a/chart2/source/view/main/DataTableView.cxx b/chart2/source/view/main/DataTableView.cxx index 45b199b59d69..c3c807ca099b 100644 --- a/chart2/source/view/main/DataTableView.cxx +++ b/chart2/source/view/main/DataTableView.cxx @@ -239,11 +239,13 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV if (!m_xTarget.is()) return; + // Remove shapes first before we add the new ones ShapeFactory::removeSubShapes(m_xTarget); auto sParticle = ObjectIdentifier::createParticleForDataTable(m_xChartModel); auto sCID = ObjectIdentifier::createClassifiedIdentifierForParticle(sParticle); m_xTableShape = ShapeFactory::createTable(m_xTarget, sCID); + // calculate the table size auto rDelta = rEnd - rStart; sal_Int32 nTableSize = basegfx::fround(rDelta.getX()); m_xTableShape->setSize({ nTableSize, 0 }); @@ -269,6 +271,7 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV auto* pTableObject = static_cast<sdr::table::SdrTableObj*>(m_xTableShape->GetSdrObject()); + // get the data table properties from the model bool bHBorder = false; bool bVBorder = false; bool bOutline = false; @@ -281,6 +284,7 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV m_xDataTableModel->getPropertyValue("Outline") >>= bOutline; m_xDataTableModel->getPropertyValue("Keys") >>= bKeys; + // set the data table row and column size sal_Int32 nColumnCount = m_aXValues.size(); uno::Reference<table::XTableColumns> xTableColumns = m_xTable->getColumns(); xTableColumns->insertByIndex(0, nColumnCount); @@ -291,7 +295,8 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV sal_Int32 nColumnWidth = 0.0; - // If we don't align, we have to calculate the column width ourselves + // If we don't align, we have to calculate the column width ourselves, + // otherwise the column width is taken from the x-axis width if (m_bAlignAxisValuesWithColumns) nColumnWidth = nAxisStepWidth; else @@ -452,11 +457,13 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV xBroadcaster->unlockBroadcasts(); + // force recalculation of all cells in the table shape pTableObject->DistributeColumns(0, nColumnCount, true, true); pTableObject->DistributeRows(0, nRowCount, true, true); xBroadcaster->lockBroadcasts(); + // reposition the data table changePosition(basegfx::fround(rStart.getX()), basegfx::fround(rStart.getY())); sal_Int32 nTableX = m_xTableShape->getPosition().X; diff --git a/offapi/com/sun/star/chart2/XDataTable.idl b/offapi/com/sun/star/chart2/XDataTable.idl index 8431a586cf34..3903df2f848f 100644 --- a/offapi/com/sun/star/chart2/XDataTable.idl +++ b/offapi/com/sun/star/chart2/XDataTable.idl @@ -17,6 +17,10 @@ module chart2 { /** Interface for the data table of a diagram + + The data table of a chart is an chart element, that shows the + values used to visualize the chart in a table. + @since LibreOffice 7.5 */ interface XDataTable : ::com::sun::star::uno::XInterface diff --git a/oox/inc/drawingml/chart/datatablecontext.hxx b/oox/inc/drawingml/chart/datatablecontext.hxx index 01a75c6e634d..a5f6855f2ccf 100644 --- a/oox/inc/drawingml/chart/datatablecontext.hxx +++ b/oox/inc/drawingml/chart/datatablecontext.hxx @@ -25,8 +25,7 @@ namespace oox::drawingml::chart { struct DataTableModel; -/** Handler for a data table context (c:dTable element). - */ +/** Handler for a data table context (c:dTable element). */ class DataTableContext final : public ContextBase<DataTableModel> { public: diff --git a/oox/inc/drawingml/chart/datatableconverter.hxx b/oox/inc/drawingml/chart/datatableconverter.hxx index f49d908f4aa5..9df8a30c5746 100644 --- a/oox/inc/drawingml/chart/datatableconverter.hxx +++ b/oox/inc/drawingml/chart/datatableconverter.hxx @@ -30,6 +30,10 @@ namespace oox::drawingml::chart { struct DataTableModel; +/** + * Converts the data table element and properties from OOXML model to + * the internal chart implementation. + */ class DataTableConverter final : public ConverterBase<DataTableModel> { public: diff --git a/xmloff/source/chart/SchXMLDataTableContext.cxx b/xmloff/source/chart/SchXMLDataTableContext.cxx index a9a26d2e1d3d..20846c5d95a8 100644 --- a/xmloff/source/chart/SchXMLDataTableContext.cxx +++ b/xmloff/source/chart/SchXMLDataTableContext.cxx @@ -42,6 +42,7 @@ SchXMLDataTableContext::SchXMLDataTableContext(SchXMLImportHelper& rImpHelper, S void SchXMLDataTableContext::startFastElement( sal_Int32 /*nElement*/, const uno::Reference<xml::sax::XFastAttributeList>& xAttrList) { + // Check if we have all that is needed to create the data table instance auto xChartDocument = mrImportHelper.GetChartDocument(); if (!xChartDocument.is()) return; @@ -54,6 +55,7 @@ void SchXMLDataTableContext::startFastElement( if (!xDiagram.is()) return; + // Create a new DataTable instance uno::Reference<lang::XMultiServiceFactory> xFactory = comphelper::getProcessServiceFactory(); uno::Reference<chart2::XDataTable> xDataTable( xFactory->createInstance("com.sun.star.chart2.DataTable"), uno::UNO_QUERY); @@ -72,7 +74,7 @@ void SchXMLDataTableContext::startFastElement( XMLOFF_WARN_UNKNOWN("xmloff", aIter); } - // set properties + // Set the data table properties uno::Reference<beans::XPropertySet> xPropertySet(xDataTable, uno::UNO_QUERY); if (!sAutoStyleName.isEmpty() && xPropertySet.is()) diff --git a/xmloff/source/chart/SchXMLDataTableContext.hxx b/xmloff/source/chart/SchXMLDataTableContext.hxx index 716f445ed61e..fbf87fb44967 100644 --- a/xmloff/source/chart/SchXMLDataTableContext.hxx +++ b/xmloff/source/chart/SchXMLDataTableContext.hxx @@ -23,6 +23,7 @@ #include <xmloff/SchXMLImportHelper.hxx> #include <xmloff/xmlictxt.hxx> +/** Import the content of the data-table (XML_DATA_TABLE) element */ class SchXMLDataTableContext : public SvXMLImportContext { public: diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx index da27d1447368..e07fb6a77693 100644 --- a/xmloff/source/chart/SchXMLExport.cxx +++ b/xmloff/source/chart/SchXMLExport.cxx @@ -1493,7 +1493,7 @@ void SchXMLExportHelper_Impl::parseDocument( Reference< chart::XChartDocument > aPropertyStates.clear(); } - // Data table + // Export data table element and properties if (xNewDiagram.is() && nCurrentODFVersion & SvtSaveOptions::ODFSVER_EXTENDED) { auto xDataTable = xNewDiagram->getDataTable();