From 8666f3670c8e32228cdaf59ee9b879a796bbb308 Mon Sep 17 00:00:00 2001 From: Manuj Vashist Date: Sun, 8 Jul 2018 05:11:59 +0530 Subject: Added Aggregate functions to data provider dlg Change-Id: Ic6de5319f936095fa1d165fc5901f13d0e7776f5 Reviewed-on: https://gerrit.libreoffice.org/57027 Tested-by: Jenkins Reviewed-by: Markus Mohrhard --- sc/source/ui/miscdlgs/dataproviderdlg.cxx | 80 ++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) (limited to 'sc/source/ui/miscdlgs/dataproviderdlg.cxx') diff --git a/sc/source/ui/miscdlgs/dataproviderdlg.cxx b/sc/source/ui/miscdlgs/dataproviderdlg.cxx index e07f789b1269..e30b3505d3bd 100644 --- a/sc/source/ui/miscdlgs/dataproviderdlg.cxx +++ b/sc/source/ui/miscdlgs/dataproviderdlg.cxx @@ -223,7 +223,8 @@ MenuData aColumnData[] = { { 1, "Split Column", &ScDataProviderDlg::splitColumn }, { 2, "Merge Columns", &ScDataProviderDlg::mergeColumns }, { 3, "Text Transformation", &ScDataProviderDlg::textTransformation }, - { 4, "Sort Columns", &ScDataProviderDlg::sortTransformation } + { 4, "Sort Columns", &ScDataProviderDlg::sortTransformation }, + { 5, "Aggregate Functions", &ScDataProviderDlg::aggregateFunction} }; class ScDataTransformationBaseControl : public VclContainer, @@ -563,6 +564,77 @@ std::shared_ptr ScColumnTextTransformation::getTransform return nullptr; } +class ScAggregateFunction : public ScDataTransformationBaseControl +{ +private: + VclPtr maColumnNums; + VclPtr maType; + +public: + + ScAggregateFunction(vcl::Window* pParent); + ~ScAggregateFunction() override; + + virtual void dispose() override; + + virtual std::shared_ptr getTransformation() override; + +}; + +ScAggregateFunction::ScAggregateFunction(vcl::Window* pParent): + ScDataTransformationBaseControl(pParent,"modules/scalc/ui/aggregatefunctionentry.ui") +{ + get(maColumnNums, "ed_columns"); + get(maType, "ed_lst"); +} + +ScAggregateFunction::~ScAggregateFunction() +{ + disposeOnce(); +} + +void ScAggregateFunction::dispose() +{ + maColumnNums.clear(); + maType.clear(); + ScDataTransformationBaseControl::dispose(); +} + +std::shared_ptr ScAggregateFunction::getTransformation() +{ + OUString aColumnString = maColumnNums->GetText(); + sal_Int32 nPos = maType->GetSelectedEntryPos(); + std::vector aSplitColumns = comphelper::string::split(aColumnString, ';'); + std::set aColumns; + for (auto& rColStr : aSplitColumns) + { + sal_Int32 nCol = rColStr.toInt32(); + if (nCol <= 0) + continue; + + if (nCol > MAXCOL) + continue; + + // translate from 1-based column notations to internal Calc one + aColumns.insert(nCol - 1); + } + switch (nPos) + { + case 0: + return std::make_shared(aColumns,sc::AGGREGATE_FUNCTION::SUM); + case 1: + return std::make_shared(aColumns,sc::AGGREGATE_FUNCTION::AVERAGE); + case 2: + return std::make_shared(aColumns,sc::AGGREGATE_FUNCTION::MIN); + case 3: + return std::make_shared(aColumns,sc::AGGREGATE_FUNCTION::MAX); + default: + assert(false); + } + + return nullptr; +} + } ScDataProviderDlg::ScDataProviderDlg(vcl::Window* pParent, std::shared_ptr pDoc, ScDocument* pDocument): @@ -721,6 +793,12 @@ void ScDataProviderDlg::sortTransformation() mpList->addEntry(pSortTransforamtionEntry); } +void ScDataProviderDlg::aggregateFunction() +{ + VclPtr pAggregateFuntionEntry = VclPtr::Create(mpList); + mpList->addEntry(pAggregateFuntionEntry); +} + void ScDataProviderDlg::import(ScDocument* pDoc, bool bInternal) { sc::ExternalDataSource aSource = mpDataProviderCtrl->getDataSource(pDoc); -- cgit