sc/UIConfig_scalc.mk | 2 sc/source/ui/dataprovider/datatransformation.cxx | 2 sc/source/ui/inc/dataproviderdlg.hxx | 2 sc/source/ui/miscdlgs/dataproviderdlg.cxx | 141 ++++++++++++++++++++++- sc/uiconfig/scalc/ui/aggregatefunctionentry.ui | 109 +++++++++++++++++ sc/uiconfig/scalc/ui/sorttransformationentry.ui | 85 +++++++++++++ 6 files changed, 339 insertions(+), 2 deletions(-)
New commits: commit 8666f3670c8e32228cdaf59ee9b879a796bbb308 Author: Manuj Vashist <manujvash...@gmail.com> Date: Sun Jul 8 05:11:59 2018 +0530 Added Aggregate functions to data provider dlg Change-Id: Ic6de5319f936095fa1d165fc5901f13d0e7776f5 Reviewed-on: https://gerrit.libreoffice.org/57027 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk index 424d630d08de..3b79d5d6b225 100644 --- a/sc/UIConfig_scalc.mk +++ b/sc/UIConfig_scalc.mk @@ -158,6 +158,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\ sc/uiconfig/scalc/ui/mergecolumnentry \ sc/uiconfig/scalc/ui/texttransformationentry \ sc/uiconfig/scalc/ui/sorttransformationentry \ + sc/uiconfig/scalc/ui/aggregatefunctionentry \ sc/uiconfig/scalc/ui/movecopysheet \ sc/uiconfig/scalc/ui/movingaveragedialog \ sc/uiconfig/scalc/ui/multipleoperationsdialog \ diff --git a/sc/source/ui/dataprovider/datatransformation.cxx b/sc/source/ui/dataprovider/datatransformation.cxx index c1bfac0895ef..aa14563985dd 100644 --- a/sc/source/ui/dataprovider/datatransformation.cxx +++ b/sc/source/ui/dataprovider/datatransformation.cxx @@ -8,7 +8,7 @@ */ #include <datatransformation.hxx> - +#include <limits> #include <document.hxx> #include <limits> #include <rtl/math.hxx> diff --git a/sc/source/ui/inc/dataproviderdlg.hxx b/sc/source/ui/inc/dataproviderdlg.hxx index b39254ddf70a..d41d9a141604 100644 --- a/sc/source/ui/inc/dataproviderdlg.hxx +++ b/sc/source/ui/inc/dataproviderdlg.hxx @@ -63,6 +63,7 @@ public: void mergeColumns(); void textTransformation(); void sortTransformation(); + void aggregateFunction(); void import(ScDocument* pDoc, bool bInternal = false); }; 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<sc::DataTransformation> ScColumnTextTransformation::getTransform return nullptr; } +class ScAggregateFunction : public ScDataTransformationBaseControl +{ +private: + VclPtr<Edit> maColumnNums; + VclPtr<ListBox> maType; + +public: + + ScAggregateFunction(vcl::Window* pParent); + ~ScAggregateFunction() override; + + virtual void dispose() override; + + virtual std::shared_ptr<sc::DataTransformation> 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<sc::DataTransformation> ScAggregateFunction::getTransformation() +{ + OUString aColumnString = maColumnNums->GetText(); + sal_Int32 nPos = maType->GetSelectedEntryPos(); + std::vector<OUString> aSplitColumns = comphelper::string::split(aColumnString, ';'); + std::set<SCCOL> 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<sc::AggregateFunction>(aColumns,sc::AGGREGATE_FUNCTION::SUM); + case 1: + return std::make_shared<sc::AggregateFunction>(aColumns,sc::AGGREGATE_FUNCTION::AVERAGE); + case 2: + return std::make_shared<sc::AggregateFunction>(aColumns,sc::AGGREGATE_FUNCTION::MIN); + case 3: + return std::make_shared<sc::AggregateFunction>(aColumns,sc::AGGREGATE_FUNCTION::MAX); + default: + assert(false); + } + + return nullptr; +} + } ScDataProviderDlg::ScDataProviderDlg(vcl::Window* pParent, std::shared_ptr<ScDocument> pDoc, ScDocument* pDocument): @@ -721,6 +793,12 @@ void ScDataProviderDlg::sortTransformation() mpList->addEntry(pSortTransforamtionEntry); } +void ScDataProviderDlg::aggregateFunction() +{ + VclPtr<ScAggregateFunction> pAggregateFuntionEntry = VclPtr<ScAggregateFunction>::Create(mpList); + mpList->addEntry(pAggregateFuntionEntry); +} + void ScDataProviderDlg::import(ScDocument* pDoc, bool bInternal) { sc::ExternalDataSource aSource = mpDataProviderCtrl->getDataSource(pDoc); diff --git a/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui b/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui new file mode 100644 index 000000000000..345ff6ea8054 --- /dev/null +++ b/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.20.2 --> +<interface domain="sc"> + <requires lib="gtk+" version="3.18"/> + <object class="GtkGrid" id="grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="border_width">6</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="aggregatefunctionentry|name">Aggregate Functions</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="grid_details"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="aggregatefunctionentry|type">Type:</property> + <accessibility> + <relation type="label-for" target="ed_lst"/> + </accessibility> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="aggregatefunctionentry|columns">Columns:</property> + <accessibility> + <relation type="label-for" target="ed_columns"/> + </accessibility> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="ed_lst"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="active">0</property> + <property name="active_id">0</property> + <items> + <item id="0" translatable="yes" context="aggregatefunctionentry|sum">Sum</item> + <item id="1" translatable="yes" context="aggregatefunctionentry|average">Average</item> + <item id="2" translatable="yes" context="aggregatefunctionentry|min">Minimum Value</item> + <item id="3" translatable="yes" context="aggregatefunctionentry|max">Maximum Value</item> + </items> + <accessibility> + <relation type="labelled-by" target="label1"/> + </accessibility> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="ed_columns"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <accessibility> + <relation type="labelled-by" target="label2"/> + </accessibility> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> +</interface> commit 537ca51ddb2ad2052cb0ca33fd8656d42ad46733 Author: Manuj Vashist <manujvash...@gmail.com> Date: Wed Jul 4 03:18:59 2018 +0530 Added Sort Transformation in Data Provider dlg Change-Id: I68ea3d2fc40163d0f3a67bb3723341f8e382db27 Reviewed-on: https://gerrit.libreoffice.org/56914 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk index 498540b645fb..424d630d08de 100644 --- a/sc/UIConfig_scalc.mk +++ b/sc/UIConfig_scalc.mk @@ -157,6 +157,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\ sc/uiconfig/scalc/ui/mergecellsdialog \ sc/uiconfig/scalc/ui/mergecolumnentry \ sc/uiconfig/scalc/ui/texttransformationentry \ + sc/uiconfig/scalc/ui/sorttransformationentry \ sc/uiconfig/scalc/ui/movecopysheet \ sc/uiconfig/scalc/ui/movingaveragedialog \ sc/uiconfig/scalc/ui/multipleoperationsdialog \ diff --git a/sc/source/ui/inc/dataproviderdlg.hxx b/sc/source/ui/inc/dataproviderdlg.hxx index cd3f681754f0..b39254ddf70a 100644 --- a/sc/source/ui/inc/dataproviderdlg.hxx +++ b/sc/source/ui/inc/dataproviderdlg.hxx @@ -62,6 +62,7 @@ public: void splitColumn(); void mergeColumns(); void textTransformation(); + void sortTransformation(); void import(ScDocument* pDoc, bool bInternal = false); }; diff --git a/sc/source/ui/miscdlgs/dataproviderdlg.cxx b/sc/source/ui/miscdlgs/dataproviderdlg.cxx index c2ce2f6d4e4f..e07f789b1269 100644 --- a/sc/source/ui/miscdlgs/dataproviderdlg.cxx +++ b/sc/source/ui/miscdlgs/dataproviderdlg.cxx @@ -222,7 +222,8 @@ MenuData aColumnData[] = { { 0, "Delete Column", &ScDataProviderDlg::deleteColumn }, { 1, "Split Column", &ScDataProviderDlg::splitColumn }, { 2, "Merge Columns", &ScDataProviderDlg::mergeColumns }, - { 3, "Text Transformation", &ScDataProviderDlg::textTransformation } + { 3, "Text Transformation", &ScDataProviderDlg::textTransformation }, + { 4, "Sort Columns", &ScDataProviderDlg::sortTransformation } }; class ScDataTransformationBaseControl : public VclContainer, @@ -436,6 +437,60 @@ std::shared_ptr<sc::DataTransformation> ScMergeColumnTransformationControl::getT return std::make_shared<sc::MergeColumnTransformation>(aMergedColumns, mpSeparator->GetText()); } +class ScSortTransformationControl : public ScDataTransformationBaseControl +{ +private: + + VclPtr<CheckBox> mpAscending; + VclPtr<Edit> mpEdColumns; + +public: + ScSortTransformationControl(vcl::Window* pParent); + ~ScSortTransformationControl() override; + + virtual void dispose() override; + + virtual std::shared_ptr<sc::DataTransformation> getTransformation() override; +}; + +ScSortTransformationControl::ScSortTransformationControl(vcl::Window* pParent): + ScDataTransformationBaseControl(pParent, "modules/scalc/ui/sorttransformationentry.ui") +{ + get(mpAscending, "ed_ascending"); + get(mpEdColumns, "ed_columns"); +} + +ScSortTransformationControl::~ScSortTransformationControl() +{ + disposeOnce(); +} + +void ScSortTransformationControl::dispose() +{ + mpAscending.clear(); + mpEdColumns.clear(); + + ScDataTransformationBaseControl::dispose(); +} + +std::shared_ptr<sc::DataTransformation> ScSortTransformationControl::getTransformation() +{ + OUString aColStr = mpEdColumns->GetText(); + bool aIsAscending = mpAscending->IsChecked(); + SCCOL aColumn = 0; + sal_Int32 nCol = aColStr.toInt32(); + if (nCol > 0 && nCol <= MAXCOL) + aColumn = nCol - 1; // translate from 1-based column notations to internal Calc one + + ScSortParam aSortParam; + ScSortKeyState aSortKey; + aSortKey.bDoSort = true; + aSortKey.nField = aColumn; + aSortKey.bAscending = aIsAscending; + aSortParam.maKeyState.push_back(aSortKey); + return std::make_shared<sc::SortTransformation>(aSortParam); +} + class ScColumnTextTransformation : public ScDataTransformationBaseControl { private: @@ -660,6 +715,12 @@ void ScDataProviderDlg::textTransformation() mpList->addEntry(pTextTransforamtionEntry); } +void ScDataProviderDlg::sortTransformation() +{ + VclPtr<ScSortTransformationControl> pSortTransforamtionEntry = VclPtr<ScSortTransformationControl>::Create(mpList); + mpList->addEntry(pSortTransforamtionEntry); +} + void ScDataProviderDlg::import(ScDocument* pDoc, bool bInternal) { sc::ExternalDataSource aSource = mpDataProviderCtrl->getDataSource(pDoc); diff --git a/sc/uiconfig/scalc/ui/sorttransformationentry.ui b/sc/uiconfig/scalc/ui/sorttransformationentry.ui new file mode 100644 index 000000000000..070c0b478a7c --- /dev/null +++ b/sc/uiconfig/scalc/ui/sorttransformationentry.ui @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.20.2 --> +<interface domain="sc"> + <requires lib="gtk+" version="3.18"/> + <object class="GtkGrid" id="grid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="border_width">6</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="sorttransformationentry|name">Sort Transformation</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkGrid" id="grid_details"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkCheckButton" id="ed_ascending"> + <property name="visible">True</property> + <property name="label" translatable="yes" context="sorttransformationentry|type">Ascending Order</property> + <property name="can_focus">True</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes" context="sorttransformationentry|column">Column:</property> + <accessibility> + <relation type="label-for" target="ed_columns"/> + </accessibility> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="ed_columns"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <accessibility> + <relation type="labelled-by" target="label1"/> + </accessibility> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> +</interface> _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits