From 9009663deb8f0862f419fd99bf0b761c7f923eff Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Sun, 26 Feb 2017 22:48:06 +0100 Subject: tdf#83257 [API-CHANGE] Pivot chart implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a squashed commit of the pivot chart implementation. Some of the changes: - Add pivot chart specific (pivot table) data provider which provides the data from a pivot table to the associated chart. - When inserting a chart and the cursor is in a pivot table, in that case insert a pivot chart - Modify the pivot chart when the pivot table changes - Collect and set the number format for the values - isDataFromSpreadsheet check for the creation wizard - In ChartView (and VLegend) check if the data provider is a pivot chart data provider and get the pivot table field names to create the buttons on the UI. - Adds the functionallity to show a filter pop-up (from calc) when clicking on row / column / page field buttons. - Remove (X)PopupRequest as we won't need it. - Add ODF import/export for pivot charts: + Added loext:data-pilot-source attribute on chart:chart which is the internal name of the pivot table with which the pivot chart is associated with. If the element is present, then the it means the chart is a pivot chart, else it is a normal chart + Added service to create pivot chart data provider through UNO + Add new methods to XPivotChartDataProvider to create value and label data sequences separately from the data source, which is needed for pivot chart import + When importing defer setting the data provider until a later time when we know if we are creating a chart od a pivot chart - Pivot chart ODF round-trip test - Add table pivot chart supplier API: This adds the XTablePivotChartSupplier and related interfaces so we can access, create, delete pivot charts from UNO in a sheet document. With this we now distinguish between normal charts and pivot charts. This was mainly needed because we can't extend the "published" interfaces of TableChartSupplier. - Added an extensive test, which uses the API to create a new pivot chart when there was none, and checks that the pivot chart updates when the pivot table updates. Change-Id: Ia9ed96fd6b1d342e61c2f7f9fa33a5e03dda21af Reviewed-on: https://gerrit.libreoffice.org/36023 Reviewed-by: Tomaž Vajngerl Tested-by: Tomaž Vajngerl --- .../sun/star/chart2/data/PivotTableFieldEntry.idl | 43 +++++++++++ offapi/com/sun/star/chart2/data/PopupRequest.idl | 44 ----------- offapi/com/sun/star/chart2/data/XDataReceiver.idl | 2 +- .../star/chart2/data/XPivotTableDataProvider.idl | 90 ++++++++++++++++++++++ offapi/com/sun/star/chart2/data/XPopupRequest.idl | 42 ---------- offapi/com/sun/star/table/XTablePivotChart.idl | 36 +++++++++ offapi/com/sun/star/table/XTablePivotCharts.idl | 63 +++++++++++++++ .../sun/star/table/XTablePivotChartsSupplier.idl | 41 ++++++++++ 8 files changed, 274 insertions(+), 87 deletions(-) create mode 100644 offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl delete mode 100644 offapi/com/sun/star/chart2/data/PopupRequest.idl create mode 100644 offapi/com/sun/star/chart2/data/XPivotTableDataProvider.idl delete mode 100644 offapi/com/sun/star/chart2/data/XPopupRequest.idl create mode 100644 offapi/com/sun/star/table/XTablePivotChart.idl create mode 100644 offapi/com/sun/star/table/XTablePivotCharts.idl create mode 100644 offapi/com/sun/star/table/XTablePivotChartsSupplier.idl (limited to 'offapi/com') diff --git a/offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl b/offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl new file mode 100644 index 000000000000..4d8973ff355b --- /dev/null +++ b/offapi/com/sun/star/chart2/data/PivotTableFieldEntry.idl @@ -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/. + * + */ +#ifndef com_sun_star_chart2_data_PivotTableFieldEntry_idl +#define com_sun_star_chart2_data_PivotTableFieldEntry_idl + +module com +{ +module sun +{ +module star +{ +module chart2 +{ +module data +{ + +/** + * + * @since LibreOffice 5.4 + */ +struct PivotTableFieldEntry +{ + string Name; + + long DimensionIndex; +}; + +}; // data +}; // chart2 +}; // com +}; // sun +}; // star + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/offapi/com/sun/star/chart2/data/PopupRequest.idl b/offapi/com/sun/star/chart2/data/PopupRequest.idl deleted file mode 100644 index f83ccc09a56b..000000000000 --- a/offapi/com/sun/star/chart2/data/PopupRequest.idl +++ /dev/null @@ -1,44 +0,0 @@ -/* -*- 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/. - * - */ - -#ifndef com_sun_star_chart2_data_PopupRequest_idl -#define com_sun_star_chart2_data_PopupRequest_idl - -#include - -module com -{ -module sun -{ -module star -{ -module chart2 -{ -module data -{ - -/** @since LibreOffice 5.4 - */ -service PopupRequest -{ - /** - */ - interface XPopupRequest; -}; - -} ; // data -} ; // chart2 -} ; // com -} ; // sun -} ; // star - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/offapi/com/sun/star/chart2/data/XDataReceiver.idl b/offapi/com/sun/star/chart2/data/XDataReceiver.idl index abfbc830dd51..a7c853b1f9e6 100644 --- a/offapi/com/sun/star/chart2/data/XDataReceiver.idl +++ b/offapi/com/sun/star/chart2/data/XDataReceiver.idl @@ -92,7 +92,7 @@ interface XDataReceiver : ::com::sun::star::uno::XInterface @since LibreOffice 5.4 */ - XPopupRequest getPopupRequest(); + com::sun::star::awt::XRequestCallback getPopupRequest(); }; } ; // data diff --git a/offapi/com/sun/star/chart2/data/XPivotTableDataProvider.idl b/offapi/com/sun/star/chart2/data/XPivotTableDataProvider.idl new file mode 100644 index 000000000000..731988bc2167 --- /dev/null +++ b/offapi/com/sun/star/chart2/data/XPivotTableDataProvider.idl @@ -0,0 +1,90 @@ +/* -*- 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/. + */ + +#ifndef com_sun_star_chart2_data_XPivotTableDataProvider_idl +#define com_sun_star_chart2_data_XPivotTableDataProvider_idl + +#include +#include + +module com { module sun { module star { module chart2 { module data { + +/** + * Data provider specific for pivot chart data. + * + * @since LibreOffice 5.4 + */ +interface XPivotTableDataProvider : com::sun::star::uno::XInterface +{ + /** names of column fields from the associated pivot table + * + * @since LibreOffice 5.4 + */ + sequence getColumnFields(); + + /** names of row fields from the associated pivot table + * + * @since LibreOffice 5.4 + */ + sequence getRowFields(); + + /** names of page fields from the associated pivot table + * + * @since LibreOffice 5.4 + */ + sequence getPageFields(); + + /** names of data fields from the associated pivot table + * + * @since LibreOffice 5.4 + */ + sequence getDataFields(); + + /** get the associated pivot table name + * + * @since LibreOffice 5.4 + */ + string getPivotTableName(); + + /** set the associated pivot table name + * + * @since LibreOffice 5.4 + */ + void setPivotTableName([in] string sPivotTableName); + + /** creates a single data sequence of values for the given data series index. + * + * @param nIndex + * index of the data series + * + * @since LibreOffice 5.4 + */ + XDataSequence createDataSequenceOfValuesByIndex([in] long nIndex); + + /** creates a single data sequence of label(s) for the given data series index. + * + * @param nIndex + * index of the data series + * + * @since LibreOffice 5.4 + */ + XDataSequence createDataSequenceOfLabelsByIndex([in] long nIndex); + + /** creates a single data sequence of categories. + * + * @since LibreOffice 5.4 + */ + XDataSequence createDataSequenceOfCategories(); +}; + +};};};};}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/offapi/com/sun/star/chart2/data/XPopupRequest.idl b/offapi/com/sun/star/chart2/data/XPopupRequest.idl deleted file mode 100644 index 07116789b311..000000000000 --- a/offapi/com/sun/star/chart2/data/XPopupRequest.idl +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- 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/. - * - */ - -#ifndef com_sun_star_chart2_data_XPopupRequest_idl -#define com_sun_star_chart2_data_XPopupRequest_idl - -#include - -module com -{ -module sun -{ -module star -{ -module chart2 -{ -module data -{ - -/** - @since LibreOffice 5.4 - */ -interface XPopupRequest : com::sun::star::awt::XRequestCallback -{ -}; - -} ; // data -} ; // chart2 -} ; // com -} ; // sun -} ; // star - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/offapi/com/sun/star/table/XTablePivotChart.idl b/offapi/com/sun/star/table/XTablePivotChart.idl new file mode 100644 index 000000000000..b6c53d6fe97d --- /dev/null +++ b/offapi/com/sun/star/table/XTablePivotChart.idl @@ -0,0 +1,36 @@ +/* -*- 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/. + */ + +#ifndef __com_sun_star_table_XTablePivotChart_idl__ +#define __com_sun_star_table_XTablePivotChart_idl__ + +#include + +module com { module sun { module star { module table { + + +/** provides access to the settings of a pivot chart object in a + table or spreadsheet. + + @since LibreOffice 5.4 + */ +interface XTablePivotChart: com::sun::star::uno::XInterface +{ + /** returns the pivot table name of the associated pivot table + + @since LibreOffice 5.4 + */ + string getPivotTableName(); +}; + +}; }; }; }; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/offapi/com/sun/star/table/XTablePivotCharts.idl b/offapi/com/sun/star/table/XTablePivotCharts.idl new file mode 100644 index 000000000000..e16b74b0ceac --- /dev/null +++ b/offapi/com/sun/star/table/XTablePivotCharts.idl @@ -0,0 +1,63 @@ +/* -*- 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/. + */ + +#ifndef __com_sun_star_table_XTablePivotCharts_idl__ +#define __com_sun_star_table_XTablePivotCharts_idl__ + +#include +#include + + +module com { module sun { module star { module table { + + +/** provides methods to access pivot charts via name and to insert + and remove pivot charts. + + @since LibreOffice 5.4 + */ +interface XTablePivotCharts: com::sun::star::container::XNameAccess +{ + + /** creates a pivot chart and adds it to the collection. + + @param aName + is the name of the chart. This name is used to reference the + chart in the collection. + + @param aRect + contains the rectangular location of the chart within the table + (in 1/100th mm). + + @param aPivotTableName + the name of the pivot table (data pilot) to associate the pivot chart with + + @since LibreOffice 5.4 + */ + void addNewByName( + [in] string aName, + [in] com::sun::star::awt::Rectangle aRect, + [in] string aPivotTableName); + + + /** removes a pivot chart from the collection. + + @param aName + is the name of the chart to remove. + + @since LibreOffice 5.4 + */ + void removeByName([in] string aName); +}; + +}; }; }; }; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/offapi/com/sun/star/table/XTablePivotChartsSupplier.idl b/offapi/com/sun/star/table/XTablePivotChartsSupplier.idl new file mode 100644 index 000000000000..44017411c7b7 --- /dev/null +++ b/offapi/com/sun/star/table/XTablePivotChartsSupplier.idl @@ -0,0 +1,41 @@ +/* -*- 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/. + */ + +#ifndef __com_sun_star_table_XTablePivotChartsSupplier_idl__ +#define __com_sun_star_table_XTablePivotChartsSupplier_idl__ + +#include +#include + + +module com { module sun { module star { module table { + + +/** provides a method to access a collection of pivot charts in a table + or spreadsheet. + + @since LibreOffice 5.4 + */ +interface XTablePivotChartsSupplier: com::sun::star::uno::XInterface +{ + + /** returns the collection of pivot charts. + + @since LibreOffice 5.4 + */ + com::sun::star::table::XTablePivotCharts getPivotCharts(); + +}; + + +}; }; }; }; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit