[Libreoffice-commits] core.git: sc/source sc/uiconfig sc/UIConfig_scalc.mk solenv/sanitizers

tushar (via logerrit) logerrit at kemper.freedesktop.org
Sat Jul 3 18:51:36 UTC 2021


 sc/UIConfig_scalc.mk                                   |    1 
 sc/source/ui/inc/dataproviderdlg.hxx                   |   39 +
 sc/source/ui/miscdlgs/dataproviderdlg.cxx              |  310 +++++-------
 sc/source/ui/miscdlgs/datatableview.cxx                |    2 
 sc/uiconfig/scalc/ui/aggregatefunctionentry.ui         |  184 ++-----
 sc/uiconfig/scalc/ui/dataproviderdlg.ui                |  412 ++++++++++++-----
 sc/uiconfig/scalc/ui/dataproviderentry.ui              |  108 ----
 sc/uiconfig/scalc/ui/datetimetransformationentry.ui    |  212 +++-----
 sc/uiconfig/scalc/ui/deletecolumnentry.ui              |  123 +----
 sc/uiconfig/scalc/ui/mergecolumnentry.ui               |  159 ++----
 sc/uiconfig/scalc/ui/numbertransformationentry.ui      |  202 +++-----
 sc/uiconfig/scalc/ui/replacenulltransformationentry.ui |  171 ++-----
 sc/uiconfig/scalc/ui/sorttransformationentry.ui        |  144 ++---
 sc/uiconfig/scalc/ui/splitcolumnentry.ui               |  160 ++----
 sc/uiconfig/scalc/ui/texttransformationentry.ui        |  165 ++----
 solenv/sanitizers/ui/modules/scalc.suppr               |   23 
 16 files changed, 1041 insertions(+), 1374 deletions(-)

New commits:
commit 7b4169c9d54c6e90e860141a6ced51464cf102d8
Author:     tushar <tusharrai282 at gmail.com>
AuthorDate: Wed Jun 9 01:56:48 2021 +0530
Commit:     Markus Mohrhard <markus.mohrhard at googlemail.com>
CommitDate: Sat Jul 3 20:51:04 2021 +0200

    Implement Interface for Data Providers.
    
    Change-Id: I83ec43511d4fd9a91d7ec34e2281f80b19b4d562
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116870
    Tested-by: Heiko Tietze <heiko.tietze at documentfoundation.org>
    Tested-by: Jenkins
    Reviewed-by: Heiko Tietze <heiko.tietze at documentfoundation.org>
    Reviewed-by: Markus Mohrhard <markus.mohrhard at googlemail.com>

diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk
index 3d11cfdbf18c..705aee221cbf 100644
--- a/sc/UIConfig_scalc.mk
+++ b/sc/UIConfig_scalc.mk
@@ -113,7 +113,6 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\
 	sc/uiconfig/scalc/ui/dataformfragment \
 	sc/uiconfig/scalc/ui/datastreams \
 	sc/uiconfig/scalc/ui/dataproviderdlg \
-	sc/uiconfig/scalc/ui/dataproviderentry \
 	sc/uiconfig/scalc/ui/definedatabaserangedialog \
 	sc/uiconfig/scalc/ui/definename \
 	sc/uiconfig/scalc/ui/deletecells \
diff --git a/sc/source/ui/inc/dataproviderdlg.hxx b/sc/source/ui/inc/dataproviderdlg.hxx
index d056fa386006..582df71e5c22 100644
--- a/sc/source/ui/inc/dataproviderdlg.hxx
+++ b/sc/source/ui/inc/dataproviderdlg.hxx
@@ -9,6 +9,8 @@
 
 #pragma once
 
+#include <datamapper.hxx>
+
 #include <sal/config.h>
 
 #include <com/sun/star/awt/XWindow.hpp>
@@ -18,7 +20,6 @@
 #include <memory>
 
 class ScDocument;
-class ScDataProviderBaseControl;
 class ScDataTransformationBaseControl;
 class ScDBData;
 
@@ -26,15 +27,25 @@ class ScDataProviderDlg : public weld::GenericDialogController
 {
 private:
     std::shared_ptr<ScDocument> mxDoc;
-    std::unique_ptr<weld::Menu> mxStartMenu;
-    std::unique_ptr<weld::Menu> mxColumnMenu;
     std::unique_ptr<weld::Container> mxBox;
     css::uno::Reference<css::awt::XWindow> m_xTableParent;
     VclPtr<ScDataTableView> mxTable;
-    std::unique_ptr<weld::ScrolledWindow> mxScroll;
     std::unique_ptr<weld::Container> mxList;
-    std::unique_ptr<ScDataProviderBaseControl> mxDataProviderCtrl;
     std::unique_ptr<weld::ComboBox> mxDBRanges;
+    std::unique_ptr<weld::Button> mxOKBtn;
+    std::unique_ptr<weld::Button> mxCancelBtn;
+    std::unique_ptr<weld::Button> mxAddTransformationBtn;
+    std::unique_ptr<weld::ScrolledWindow> mxScroll;
+    std::unique_ptr<weld::Container> mxTransformationList;
+    std::unique_ptr<weld::ComboBox> mxTransformationBox;
+    std::unique_ptr<weld::ComboBox> mxProviderList;
+    std::unique_ptr<weld::Entry> mxEditURL;
+    std::unique_ptr<weld::Entry> mxEditID;
+    std::unique_ptr<weld::Button> mxApplyBtn;
+    std::unique_ptr<weld::Button> mxBrowseBtn;
+
+    OUString msApplyTooltip;
+    OUString msAddTransformationToolTip;
 
     std::vector<std::unique_ptr<ScDataTransformationBaseControl>> maControls;
 
@@ -43,12 +54,18 @@ private:
     sal_uInt32 mnIndex;
     ScDBData* pDBData;
 
-    void InitMenu();
-
     DECL_LINK(StartMenuHdl, const OString&, void);
-    DECL_LINK(ColumnMenuHdl, const OString&, void);
-    DECL_LINK(ImportHdl, ScDataProviderBaseControl*, void);
+    DECL_LINK(ColumnMenuHdl, const weld::ComboBox&, void);
     DECL_LINK(ScrollToEnd, Timer*, void);
+    DECL_LINK(ApplyQuitHdl, weld::Button&, void);
+    DECL_LINK(CancelQuitHdl, weld::Button&, void);
+    DECL_LINK(TransformationListHdl, weld::Button&, void);
+    DECL_LINK(ProviderSelectHdl, weld::ComboBox&, void);
+    DECL_LINK(TransformationSelectHdl, weld::ComboBox&, void);
+    DECL_LINK(IDEditHdl, weld::Entry&, void);
+    DECL_LINK(URLEditHdl, weld::Entry&, void);
+    DECL_LINK(ApplyBtnHdl, weld::Button&, void);
+    DECL_LINK(BrowseBtnHdl, weld::Button&, void);
 
 public:
     ScDataProviderDlg(weld::Window* pWindow, std::shared_ptr<ScDocument> pDoc,
@@ -68,6 +85,10 @@ public:
     void deletefromList(sal_uInt32 nIndex);
     void replaceNullTransformation();
     void dateTimeTransformation();
+    void updateApplyBtn(bool bValidConfig);
+    void isValid();
+
+    sc::ExternalDataSource getDataSource(ScDocument* pDoc);
 
     void import(ScDocument& rDoc, bool bInternal = false);
 };
diff --git a/sc/source/ui/miscdlgs/dataproviderdlg.cxx b/sc/source/ui/miscdlgs/dataproviderdlg.cxx
index d41c3842488c..757ea7634778 100644
--- a/sc/source/ui/miscdlgs/dataproviderdlg.cxx
+++ b/sc/source/ui/miscdlgs/dataproviderdlg.cxx
@@ -17,116 +17,12 @@
 
 #include <comphelper/string.hxx>
 #include <sal/log.hxx>
+#include <sfx2/filedlghelper.hxx>
 #include <unotools/charclass.hxx>
 #include <vcl/svapp.hxx>
 
 #include <utility>
 
-class ScDataProviderBaseControl
-{
-    std::unique_ptr<weld::Builder> mxBuilder;
-    std::unique_ptr<weld::Container> mxGrid;
-    std::unique_ptr<weld::ComboBox> mxProviderList;
-    std::unique_ptr<weld::Entry> mxEditURL;
-    std::unique_ptr<weld::Entry> mxEditID;
-    std::unique_ptr<weld::Button> mxApplyBtn;
-
-    OUString msApplyTooltip;
-
-    Link<ScDataProviderBaseControl*, void> maImportCallback;
-
-    DECL_LINK(ProviderSelectHdl, weld::ComboBox&, void);
-    DECL_LINK(IDEditHdl, weld::Entry&, void);
-    DECL_LINK(URLEditHdl, weld::Entry&, void);
-    DECL_LINK(ApplyBtnHdl, weld::Button&, void);
-
-    void updateApplyBtn(bool bValidConfig);
-
-public:
-    ScDataProviderBaseControl(weld::Container* pParent, const Link<ScDataProviderBaseControl*, void>& rImportCallback);
-
-    void isValid();
-
-    sc::ExternalDataSource getDataSource(ScDocument* pDoc);
-};
-
-ScDataProviderBaseControl::ScDataProviderBaseControl(weld::Container* pParent,
-        const Link<ScDataProviderBaseControl*, void>& rImportCallback)
-    : mxBuilder(Application::CreateBuilder(pParent, "modules/scalc/ui/dataproviderentry.ui"))
-    , mxGrid(mxBuilder->weld_container("grid"))
-    , mxProviderList(mxBuilder->weld_combo_box("provider_lst"))
-    , mxEditURL(mxBuilder->weld_entry("ed_url"))
-    , mxEditID(mxBuilder->weld_entry("ed_id"))
-    , mxApplyBtn(mxBuilder->weld_button("apply"))
-    , maImportCallback(rImportCallback)
-{
-    auto aDataProvider = sc::DataProviderFactory::getDataProviders();
-    for (const auto& rDataProvider : aDataProvider)
-    {
-        mxProviderList->append_text(rDataProvider);
-    }
-
-    mxProviderList->connect_changed(LINK(this, ScDataProviderBaseControl, ProviderSelectHdl));
-    mxEditID->connect_changed(LINK(this, ScDataProviderBaseControl, IDEditHdl));
-    mxEditURL->connect_changed(LINK(this, ScDataProviderBaseControl, URLEditHdl));
-
-    msApplyTooltip = mxApplyBtn->get_tooltip_text();
-    mxApplyBtn->connect_clicked(LINK(this, ScDataProviderBaseControl, ApplyBtnHdl));
-    isValid();
-}
-
-void ScDataProviderBaseControl::isValid()
-{
-    bool bValid = !mxProviderList->get_active_text().isEmpty();
-    bValid &= !mxEditURL->get_text().isEmpty();
-    updateApplyBtn(bValid);
-}
-
-sc::ExternalDataSource ScDataProviderBaseControl::getDataSource(ScDocument* pDoc)
-{
-    OUString aURL = mxEditURL->get_text();
-    OUString aProvider = mxProviderList->get_active_text();
-    sc::ExternalDataSource aSource(aURL, aProvider, pDoc);
-
-    OUString aID = mxEditID->get_text();
-    aSource.setID(aID);
-    return aSource;
-}
-
-void ScDataProviderBaseControl::updateApplyBtn(bool bValidConfig)
-{
-    if (!bValidConfig)
-    {
-        mxApplyBtn->set_sensitive(false);
-        mxApplyBtn->set_tooltip_text(OUString());
-        return;
-    }
-
-    mxApplyBtn->set_sensitive(true);
-    mxApplyBtn->set_tooltip_text(msApplyTooltip);
-}
-
-IMPL_LINK_NOARG(ScDataProviderBaseControl, ProviderSelectHdl, weld::ComboBox&, void)
-{
-    isValid();
-}
-
-IMPL_LINK_NOARG(ScDataProviderBaseControl, IDEditHdl, weld::Entry&, void)
-{
-    isValid();
-}
-
-IMPL_LINK_NOARG(ScDataProviderBaseControl, URLEditHdl, weld::Entry&, void)
-{
-    isValid();
-}
-
-IMPL_LINK_NOARG(ScDataProviderBaseControl, ApplyBtnHdl, weld::Button&, void)
-{
-    updateApplyBtn(true);
-    maImportCallback.Call(this);
-}
-
 class ScDataTransformationBaseControl
 {
 protected:
@@ -162,26 +58,20 @@ namespace {
 
 struct MenuData
 {
-    int nMenuID;
-    const char* aMenuName;
+    const char* aTransformationName;
     std::function<void(ScDataProviderDlg*)> maCallback;
 };
 
-MenuData aStartData[] = {
-    { 0, "Apply & Quit", &ScDataProviderDlg::applyAndQuit },
-    { 1, "Cancel & Quit", &ScDataProviderDlg::cancelAndQuit }
-};
-
-MenuData aColumnData[] = {
-    { 0, "Delete Column", &ScDataProviderDlg::deleteColumn },
-    { 1, "Split Column", &ScDataProviderDlg::splitColumn },
-    { 2, "Merge Columns", &ScDataProviderDlg::mergeColumns },
-    { 3, "Text Transformation", &ScDataProviderDlg::textTransformation },
-    { 4, "Sort Columns", &ScDataProviderDlg::sortTransformation },
-    { 5, "Aggregate Functions", &ScDataProviderDlg::aggregateFunction},
-    { 6, "Number Transformations", &ScDataProviderDlg::numberTransformation },
-    { 7, "Replace Null Transformations", &ScDataProviderDlg::replaceNullTransformation },
-    { 8, "Date & Time Transformations", &ScDataProviderDlg::dateTimeTransformation }
+MenuData aTransformationData[] = {
+    { "Delete Column", &ScDataProviderDlg::deleteColumn },
+    { "Split Column", &ScDataProviderDlg::splitColumn },
+    { "Merge Columns", &ScDataProviderDlg::mergeColumns },
+    { "Text Transformation", &ScDataProviderDlg::textTransformation },
+    { "Sort Columns", &ScDataProviderDlg::sortTransformation },
+    { "Aggregate Functions", &ScDataProviderDlg::aggregateFunction},
+    { "Number Transformations", &ScDataProviderDlg::numberTransformation },
+    { "Replace Null Transformations", &ScDataProviderDlg::replaceNullTransformation },
+    { "Date & Time Transformations", &ScDataProviderDlg::dateTimeTransformation }
 };
 
 class ScDeleteColumnTransformationControl : public ScDataTransformationBaseControl
@@ -235,7 +125,7 @@ class ScSplitColumnTransformationControl : public ScDataTransformationBaseContro
 {
 private:
     std::unique_ptr<weld::Entry> mxSeparator;
-    std::unique_ptr<weld::SpinButton> mxNumColumns;
+    std::unique_ptr<weld::Entry> mxNumColumns;
     std::unique_ptr<weld::Button> mxDelete;
     SCCOL mnCol;
     std::function<void(sal_uInt32&)> maDeleteTransformation;
@@ -252,7 +142,7 @@ ScSplitColumnTransformationControl::ScSplitColumnTransformationControl(
     std::function<void(sal_uInt32&)> aDeleteTransformation)
     : ScDataTransformationBaseControl(pParent, "modules/scalc/ui/splitcolumnentry.ui", nIndex)
     , mxSeparator(mxBuilder->weld_entry("ed_separator"))
-    , mxNumColumns(mxBuilder->weld_spin_button("num_cols"))
+    , mxNumColumns(mxBuilder->weld_entry("num_cols"))
     , mxDelete(mxBuilder->weld_button("ed_delete"))
     , mnCol(nCol)
     , maDeleteTransformation(std::move(aDeleteTransformation))
@@ -330,7 +220,7 @@ std::shared_ptr<sc::DataTransformation> ScMergeColumnTransformationControl::getT
 class ScSortTransformationControl : public ScDataTransformationBaseControl
 {
 private:
-    std::unique_ptr<weld::CheckButton> mxAscending;
+    std::unique_ptr<weld::ComboBox> mxType;
     std::unique_ptr<weld::Entry> mxEdColumns;
     std::unique_ptr<weld::Button> mxDelete;
     std::function<void(sal_uInt32&)> maDeleteTransformation;
@@ -346,7 +236,7 @@ public:
 ScSortTransformationControl::ScSortTransformationControl(
     const ScDocument* pDoc, weld::Container* pParent, sal_uInt32 nIndex, std::function<void(sal_uInt32&)> aDeleteTransformation)
     : ScDataTransformationBaseControl(pParent, "modules/scalc/ui/sorttransformationentry.ui", nIndex)
-    , mxAscending(mxBuilder->weld_check_button("ed_ascending"))
+    , mxType(mxBuilder->weld_combo_box("ed_ascending"))
     , mxEdColumns(mxBuilder->weld_entry("ed_columns"))
     , mxDelete(mxBuilder->weld_button("ed_delete"))
     , maDeleteTransformation(std::move(aDeleteTransformation))
@@ -358,7 +248,7 @@ ScSortTransformationControl::ScSortTransformationControl(
 std::shared_ptr<sc::DataTransformation> ScSortTransformationControl::getTransformation()
 {
     OUString aColStr = mxEdColumns->get_text();
-    bool aIsAscending = mxAscending->get_active();
+    bool aIsAscending = mxType->get_active();
     SCCOL aColumn = 0;
     sal_Int32 nCol = aColStr.toInt32();
     if (nCol > 0 && nCol <= mpDoc->MaxCol())
@@ -729,15 +619,21 @@ ScDataProviderDlg::ScDataProviderDlg(weld::Window* pParent, std::shared_ptr<ScDo
                                      const ScDocument* pDocument)
     : GenericDialogController(pParent, "modules/scalc/ui/dataproviderdlg.ui", "dataproviderdlg")
     , mxDoc(std::move(pDoc))
-    , mxStartMenu(m_xBuilder->weld_menu("start"))
-    , mxColumnMenu(m_xBuilder->weld_menu("column"))
     , mxBox(m_xBuilder->weld_container("data_table"))
     , m_xTableParent(mxBox->CreateChildFrame())
     , mxTable(VclPtr<ScDataTableView>::Create(m_xTableParent))
-    , mxScroll(m_xBuilder->weld_scrolled_window("scroll"))
-    , mxList(m_xBuilder->weld_container("operation_ctrl"))
-    , mxDataProviderCtrl(new ScDataProviderBaseControl(mxList.get(), LINK(this, ScDataProviderDlg, ImportHdl)))
     , mxDBRanges(m_xBuilder->weld_combo_box("select_db_range"))
+    , mxOKBtn(m_xBuilder->weld_button("okay"))
+    , mxCancelBtn(m_xBuilder->weld_button("cancel"))
+    , mxAddTransformationBtn(m_xBuilder->weld_button("add_transformation"))
+    , mxScroll(m_xBuilder->weld_scrolled_window("scroll"))
+    , mxTransformationList(m_xBuilder->weld_container("transformation_ctrl"))
+    , mxTransformationBox(m_xBuilder->weld_combo_box("transformation_box"))
+    , mxProviderList(m_xBuilder->weld_combo_box("provider_lst"))
+    , mxEditURL(m_xBuilder->weld_entry("ed_url"))
+    , mxEditID(m_xBuilder->weld_entry("ed_id"))
+    , mxApplyBtn(m_xBuilder->weld_button("apply"))
+    , mxBrowseBtn(m_xBuilder->weld_button("browse"))
     , mnIndex(0)
 {
     Size aPrefSize = mxTable->GetOptimalSize();
@@ -752,11 +648,36 @@ ScDataProviderDlg::ScDataProviderDlg(weld::Window* pParent, std::shared_ptr<ScDo
         mxDBRanges->append_text(rNamedDB->GetName());
     }
 
+    for (const auto& i : aTransformationData)
+    {
+         mxTransformationBox->append_text(OUString::createFromAscii(i.aTransformationName));
+    }
+
     pDBData = new ScDBData("data", 0, 0, 0, mxDoc->MaxCol(), mxDoc->MaxRow());
     bool bSuccess = mxDoc->GetDBCollection()->getNamedDBs().insert(std::unique_ptr<ScDBData>(pDBData));
     SAL_WARN_IF(!bSuccess, "sc", "temporary warning");
 
-    InitMenu();
+    auto aDataProvider = sc::DataProviderFactory::getDataProviders();
+    for (const auto& rDataProvider : aDataProvider)
+    {
+        mxProviderList->append_text(rDataProvider);
+    }
+
+    mxOKBtn->connect_clicked(LINK(this, ScDataProviderDlg, ApplyQuitHdl));
+    mxCancelBtn->connect_clicked(LINK(this, ScDataProviderDlg, CancelQuitHdl));
+    mxAddTransformationBtn->connect_clicked(LINK(this, ScDataProviderDlg, TransformationListHdl));
+    mxApplyBtn->connect_clicked(LINK(this, ScDataProviderDlg, ApplyBtnHdl));
+    mxBrowseBtn->connect_clicked(LINK(this, ScDataProviderDlg, BrowseBtnHdl));
+    mxTransformationBox->connect_changed(LINK(this, ScDataProviderDlg, TransformationSelectHdl));
+    mxProviderList->connect_changed(LINK(this, ScDataProviderDlg, ProviderSelectHdl));
+    mxEditID->connect_changed(LINK(this, ScDataProviderDlg, IDEditHdl));
+    mxEditURL->connect_changed(LINK(this, ScDataProviderDlg, URLEditHdl));
+
+    msApplyTooltip = mxApplyBtn->get_tooltip_text();
+    msAddTransformationToolTip = mxAddTransformationBtn->get_tooltip_text();
+    mxAddTransformationBtn->set_sensitive(false);
+    mxAddTransformationBtn->set_tooltip_text(OUString());
+    isValid();
 
     maIdle.SetPriority( TaskPriority::LOWEST );
     maIdle.SetInvokeHandler( LINK( this, ScDataProviderDlg, ScrollToEnd) );
@@ -769,72 +690,107 @@ ScDataProviderDlg::~ScDataProviderDlg()
     m_xTableParent.clear();
 }
 
-void ScDataProviderDlg::InitMenu()
+IMPL_LINK_NOARG(ScDataProviderDlg, ScrollToEnd, Timer*, void)
 {
-    for (const auto& itrStartData : aStartData)
-        mxStartMenu->append(OUString::number(itrStartData.nMenuID), OUString::createFromAscii(itrStartData.aMenuName));
-    mxStartMenu->connect_activate(LINK(this, ScDataProviderDlg, StartMenuHdl));
-
-    for (const auto& itrColumnData : aColumnData)
-        mxColumnMenu->append(OUString::number(itrColumnData.nMenuID), OUString::createFromAscii(itrColumnData.aMenuName));
-    mxColumnMenu->connect_activate(LINK(this, ScDataProviderDlg, ColumnMenuHdl));
+    mxScroll->vadjustment_set_value(mxScroll->vadjustment_get_upper());
 }
 
-IMPL_LINK(ScDataProviderDlg, StartMenuHdl, const OString&, rIdent, void)
+IMPL_LINK_NOARG(ScDataProviderDlg, ApplyQuitHdl, weld::Button&, void)
 {
-    auto nId = rIdent.toInt32();
-    for (auto& i: aStartData)
-    {
-        if (i.nMenuID == nId)
-        {
-            i.maCallback(this);
-            return;
-        }
-    }
+    m_xDialog->response(RET_OK);
 }
 
-IMPL_LINK_NOARG(ScDataProviderDlg, ScrollToEnd, Timer*, void)
+IMPL_LINK_NOARG(ScDataProviderDlg, CancelQuitHdl, weld::Button&, void)
 {
-    mxScroll->vadjustment_set_value(mxScroll->vadjustment_get_upper());
+    m_xDialog->response(RET_CANCEL);
 }
 
-IMPL_LINK(ScDataProviderDlg, ColumnMenuHdl, const OString&, rIdent, void)
+IMPL_LINK_NOARG(ScDataProviderDlg, TransformationListHdl, weld::Button&, void)
 {
-    auto nId = rIdent.toInt32();
-    for (auto& i: aColumnData)
+    OUString transformation_string = mxTransformationBox->get_active_text();
+    for (auto& i: aTransformationData)
     {
-        if (i.nMenuID == nId)
+        if (transformation_string == OUString::createFromAscii(i.aTransformationName))
         {
             i.maCallback(this);
-            // scroll to bottom when something added to the list
             maIdle.Start();
             return;
         }
     }
 }
 
-IMPL_LINK(ScDataProviderDlg, ImportHdl, ScDataProviderBaseControl*, pCtrl, void)
+IMPL_LINK_NOARG(ScDataProviderDlg, ProviderSelectHdl, weld::ComboBox&, void)
 {
-    if (pCtrl == mxDataProviderCtrl.get())
-    {
-        import(*mxDoc, true);
-    }
+    isValid();
 }
 
-void ScDataProviderDlg::applyAndQuit()
+IMPL_LINK_NOARG(ScDataProviderDlg, IDEditHdl, weld::Entry&, void)
 {
-    m_xDialog->response(RET_OK);
+    isValid();
 }
 
-void ScDataProviderDlg::cancelAndQuit()
+IMPL_LINK_NOARG(ScDataProviderDlg, URLEditHdl, weld::Entry&, void)
 {
-    m_xDialog->response(RET_CANCEL);
+    isValid();
+}
+
+IMPL_LINK_NOARG(ScDataProviderDlg, ApplyBtnHdl, weld::Button&, void)
+{
+    updateApplyBtn(true);
+    import(*mxDoc, true);
+}
+
+IMPL_LINK_NOARG(ScDataProviderDlg, BrowseBtnHdl, weld::Button&, void)
+{
+    sfx2::FileDialogHelper aFileDialog(0, FileDialogFlags::NONE, m_xDialog.get());
+    if (aFileDialog.Execute() != ERRCODE_NONE)
+        return;
+
+    mxEditURL->set_text(aFileDialog.GetPath());
+    isValid();
+}
+
+IMPL_LINK_NOARG(ScDataProviderDlg, TransformationSelectHdl, weld::ComboBox&, void)
+{
+    mxAddTransformationBtn->set_sensitive(true);
+    mxAddTransformationBtn->set_tooltip_text(msAddTransformationToolTip);
+}
+
+sc::ExternalDataSource ScDataProviderDlg::getDataSource(ScDocument* pDoc)
+{
+    OUString aURL = mxEditURL->get_text();
+    OUString aProvider = mxProviderList->get_active_text();
+    sc::ExternalDataSource aSource(aURL, aProvider, pDoc);
+
+    OUString aID = mxEditID->get_text();
+    aSource.setID(aID);
+    return aSource;
+}
+
+void ScDataProviderDlg::isValid()
+{
+    bool bValid = !mxProviderList->get_active_text().isEmpty();
+    bValid &= !mxEditURL->get_text().isEmpty();
+    updateApplyBtn(bValid);
+}
+
+void ScDataProviderDlg::updateApplyBtn(bool bValidConfig)
+{
+    if (!bValidConfig)
+    {
+        mxApplyBtn->set_sensitive(false);
+        mxApplyBtn->set_tooltip_text(OUString());
+        return;
+    }
+
+    mxApplyBtn->set_sensitive(true);
+    mxApplyBtn->set_tooltip_text(msApplyTooltip);
 }
 
 void ScDataProviderDlg::deleteColumn()
 {
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScDeleteColumnTransformationControl>(mxDoc.get(), mxList.get(), mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScDeleteColumnTransformationControl>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::splitColumn()
@@ -843,7 +799,7 @@ void ScDataProviderDlg::splitColumn()
     SCCOL nEndCol = -1;
     mxTable->getColRange(nStartCol, nEndCol);
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScSplitColumnTransformationControl>(mxList.get(), nStartCol, mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScSplitColumnTransformationControl>(mxTransformationList.get(), nStartCol, mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::mergeColumns()
@@ -852,43 +808,43 @@ void ScDataProviderDlg::mergeColumns()
     SCCOL nEndCol = -1;
     mxTable->getColRange(nStartCol, nEndCol);
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScMergeColumnTransformationControl>(mxDoc.get(), mxList.get(), nStartCol, nEndCol, mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScMergeColumnTransformationControl>(mxDoc.get(), mxTransformationList.get(), nStartCol, nEndCol, mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::textTransformation()
 {
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScColumnTextTransformation>(mxDoc.get(), mxList.get(), mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScColumnTextTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::sortTransformation()
 {
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScSortTransformationControl>(mxDoc.get(), mxList.get(), mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScSortTransformationControl>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::aggregateFunction()
 {
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScAggregateFunction>(mxDoc.get(), mxList.get(), mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScAggregateFunction>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::numberTransformation()
 {
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScNumberTransformation>(mxDoc.get(), mxList.get(), mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScNumberTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::replaceNullTransformation()
 {
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScReplaceNullTransformation>(mxDoc.get(), mxList.get(), mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScReplaceNullTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation));
 }
 
 void ScDataProviderDlg::dateTimeTransformation()
 {
     std::function<void(sal_uInt32&)> adeleteTransformation = std::bind(&ScDataProviderDlg::deletefromList,this, std::placeholders::_1);
-    maControls.emplace_back(std::make_unique<ScDateTimeTransformation>(mxDoc.get(), mxList.get(), mnIndex++, adeleteTransformation));
+    maControls.emplace_back(std::make_unique<ScDateTimeTransformation>(mxDoc.get(), mxTransformationList.get(), mnIndex++, adeleteTransformation));
 }
 
 namespace {
@@ -905,7 +861,7 @@ bool hasDBName(const OUString& rName, ScDBCollection* pDBCollection)
 
 void ScDataProviderDlg::import(ScDocument& rDoc, bool bInternal)
 {
-    sc::ExternalDataSource aSource = mxDataProviderCtrl->getDataSource(&rDoc);
+    sc::ExternalDataSource aSource = getDataSource(&rDoc);
 
     for (size_t i = 0; i < maControls.size(); ++i)
     {
diff --git a/sc/source/ui/miscdlgs/datatableview.cxx b/sc/source/ui/miscdlgs/datatableview.cxx
index 3c88ac65b290..da0dd2dd2e5b 100644
--- a/sc/source/ui/miscdlgs/datatableview.cxx
+++ b/sc/source/ui/miscdlgs/datatableview.cxx
@@ -295,7 +295,7 @@ void ScDataTableView::Paint(vcl::RenderContext& rRenderContext, const tools::Rec
 
 Size ScDataTableView::GetOptimalSize() const
 {
-    return Size(600, 400);
+    return Size(450, 400);
 }
 
 void ScDataTableView::getColRange(SCCOL& rStartCol, SCCOL& rEndCol) const
diff --git a/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui b/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui
index ec84d30920a3..2b6e31e13824 100644
--- a/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui
+++ b/sc/uiconfig/scalc/ui/aggregatefunctionentry.ui
@@ -1,134 +1,86 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
+<!-- Generated with glade 3.38.2 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.20"/>
-  <!-- n-columns=1 n-rows=1 -->
+  <!-- n-columns=3 n-rows=3 -->
   <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>
+    <property name="can-focus">False</property>
+    <property name="margin-end">6</property>
+    <property name="border-width">6</property>
+    <property name="row-spacing">6</property>
+    <property name="column-spacing">12</property>
     <child>
-      <object class="GtkBox">
+      <object class="GtkSeparator">
         <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>
-          <!-- n-columns=1 n-rows=1 -->
-          <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>
-                <property name="truncate-multiline">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>
-        <child>
-          <object class="GtkButton" id="ed_delete">
-            <property name="label" translatable="yes" context="aggregatefunctionentry|delete">Cancel</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
+        <property name="can-focus">False</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
+        <property name="left-attach">0</property>
+        <property name="top-attach">0</property>
+        <property name="width">3</property>
       </packing>
     </child>
     <child>
-      <object class="GtkSeparator">
+      <object class="GtkLabel" id="label1">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="halign">start</property>
+        <property name="label" translatable="yes" context="aggregatefunctionentry|name">Aggregate Functions</property>
+        <property name="use-underline">True</property>
+        <property name="mnemonic-widget">ed_lst</property>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">1</property>
+        <property name="width">3</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkComboBoxText" id="ed_lst">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="halign">start</property>
+        <property name="hexpand">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>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkEntry" id="ed_columns">
+        <property name="visible">True</property>
+        <property name="can-focus">True</property>
+        <property name="hexpand">True</property>
+        <property name="width-chars">10</property>
+        <property name="truncate-multiline">True</property>
+        <property name="placeholder-text" translatable="yes" context="aggregatefunctionentry/cols">Columns</property>
+      </object>
+      <packing>
+        <property name="left-attach">1</property>
+        <property name="top-attach">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="ed_delete">
+        <property name="label" translatable="yes" context="aggregatefunctionentry|delete">Delete</property>
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">True</property>
+        <property name="receives-default">False</property>
+        <property name="halign">end</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
+        <property name="left-attach">2</property>
+        <property name="top-attach">2</property>
       </packing>
     </child>
   </object>
diff --git a/sc/uiconfig/scalc/ui/dataproviderdlg.ui b/sc/uiconfig/scalc/ui/dataproviderdlg.ui
index b7f2d79aa7d0..f37cba462e37 100644
--- a/sc/uiconfig/scalc/ui/dataproviderdlg.ui
+++ b/sc/uiconfig/scalc/ui/dataproviderdlg.ui
@@ -1,137 +1,208 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
+<!-- Generated with glade 3.22.2 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkDialog" id="dataproviderdlg">
     <property name="can_focus">False</property>
     <property name="modal">True</property>
     <property name="type_hint">dialog</property>
-    <child>
+    <child type="titlebar">
       <placeholder/>
     </child>
     <child internal-child="vbox">
       <object class="GtkBox">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
-        <property name="spacing">2</property>
+        <property name="spacing">12</property>
         <child internal-child="action_area">
           <object class="GtkButtonBox">
             <property name="can_focus">False</property>
+            <property name="margin_end">6</property>
+            <property name="margin_bottom">6</property>
             <property name="layout_style">end</property>
             <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkMenuBar" id="menubar">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <object class="GtkMenuItem">
+              <object class="GtkButton" id="okay">
+                <property name="label" translatable="yes" context="dataproviderdlg/okaybtn">Okay</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label">_Start</property>
-                <property name="use_underline">True</property>
-                <child type="submenu">
-                  <object class="GtkMenu" id="start">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                  </object>
-                </child>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
               </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkMenuItem">
+              <object class="GtkButton" id="cancel">
+                <property name="label" translatable="yes" context="dataproviderdlg/cancelbtn">Cancel</property>
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label">_Column</property>
-                <property name="use_underline">True</property>
-                <child type="submenu">
-                  <object class="GtkMenu" id="column">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                  </object>
-                </child>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
               </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">2</property>
           </packing>
         </child>
         <child>
-          <object class="GtkBox">
+          <object class="GtkPaned">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="hexpand">True</property>
-            <property name="vexpand">True</property>
-            <property name="spacing">12</property>
+            <property name="can_focus">True</property>
+            <property name="wide_handle">True</property>
             <child>
-              <object class="GtkBox" id="data_table">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="hexpand">True</property>
-                <property name="vexpand">True</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkBox">
+              <object class="GtkBox" id="bxSourceTransform">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
                 <child>
-                  <!-- n-columns=1 n-rows=1 -->
-                  <object class="GtkGrid">
+                  <object class="GtkFrame" id="frmSource">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="column_spacing">6</property>
+                    <property name="margin_start">6</property>
+                    <property name="margin_top">6</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
                     <child>
-                      <object class="GtkLabel" id="label2">
+                      <object class="GtkGrid" id="gdSource">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="label" translatable="yes" context="dataproviderdlg|db_name">Database Range: </property>
-                        <accessibility>
-                          <relation type="label-for" target="select_db_range"/>
-                        </accessibility>
+                        <property name="margin_start">12</property>
+                        <property name="margin_end">12</property>
+                        <property name="margin_top">6</property>
+                        <property name="row_spacing">6</property>
+                        <property name="column_spacing">12</property>
+                        <child>
+                          <object class="GtkLabel" id="label2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="dataproviderdlg|db_name">Database Range:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">select_db_range</property>
+                            <property name="xalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkComboBoxText" id="select_db_range">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">0</property>
+                            <property name="width">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label3">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="dataproviderdlg/provider">Data Provider:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">provider_lst</property>
+                            <property name="xalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkComboBoxText" id="provider_lst">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label4">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="dataproviderdlg/url">URL:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">ed_url</property>
+                            <property name="xalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="ed_url">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkButton" id="browse">
+                            <property name="label" translatable="yes" context="dataproviderdlg/browse_btn">Browse</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">2</property>
+                            <property name="top_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label5">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="dataproviderdlg/id">Id / Xpath:</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">ed_id</property>
+                            <property name="xalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">3</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkEntry" id="ed_id">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">3</property>
+                            <property name="width">2</property>
+                          </packing>
+                        </child>
                       </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">0</property>
-                      </packing>
                     </child>
-                    <child>
-                      <object class="GtkComboBoxText" id="select_db_range">
+                    <child type="label">
+                      <object class="GtkLabel">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="hexpand">True</property>
-                        <accessibility>
-                          <relation type="labelled-by" target="label2"/>
-                        </accessibility>
+                        <property name="label" translatable="yes" context="dataproviderdlg/lbSource">Source</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
                       </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">0</property>
-                      </packing>
                     </child>
                   </object>
                   <packing>
@@ -141,43 +212,92 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkScrolledWindow" id="scroll">
+                  <object class="GtkFrame" id="frmTransformation">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_start">6</property>
+                    <property name="margin_top">6</property>
+                    <property name="hexpand">True</property>
                     <property name="vexpand">True</property>
-                    <property name="hscrollbar_policy">never</property>
-                    <property name="shadow_type">in</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
                     <child>
-                      <object class="GtkViewport">
+                      <object class="GtkGrid" id="select_transformation">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="vexpand">True</property>
+                        <property name="margin_start">12</property>
+                        <property name="margin_end">12</property>
+                        <property name="margin_top">6</property>
+                        <property name="row_spacing">6</property>
+                        <property name="column_spacing">12</property>
+                        <child>
+                          <object class="GtkButton" id="add_transformation">
+                            <property name="label" translatable="yes" context="dataproviderdlg/transformation_add">Add</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="tooltip_text" translatable="yes" context="dataproviderdlg/AddTransformation_tooltip">Add Transformations</property>
+                            <property name="halign">end</property>
+                            <property name="margin_end">12</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
                         <child>
-                          <object class="GtkBox">
+                          <object class="GtkComboBoxText" id="transformation_box">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkScrolledWindow" id="scroll">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
                             <property name="vexpand">True</property>
-                            <property name="orientation">vertical</property>
+                            <property name="shadow_type">in</property>
                             <child>
-                              <object class="GtkBox" id="operation_ctrl">
+                              <object class="GtkViewport">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="vexpand">True</property>
-                                <property name="orientation">vertical</property>
                                 <child>
-                                  <placeholder/>
+                                  <object class="GtkBox" id="transformation_ctrl">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="orientation">vertical</property>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                  </object>
                                 </child>
                               </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">True</property>
-                                <property name="position">0</property>
-                              </packing>
                             </child>
                           </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                            <property name="width">2</property>
+                          </packing>
                         </child>
                       </object>
                     </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label_transformation">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes" context="dataproviderdlg/transformation">Transformations</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
+                      </object>
+                    </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -187,16 +307,90 @@
                 </child>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
+                <property name="resize">True</property>
+                <property name="shrink">True</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frmPreview">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_start">12</property>
+                <property name="margin_end">6</property>
+                <property name="margin_top">6</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
+                <child>
+                  <object class="GtkBox" id="box2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_start">12</property>
+                    <property name="margin_end">6</property>
+                    <property name="margin_top">6</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">12</property>
+                    <child>
+                      <object class="GtkBox" id="data_table">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_end">6</property>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="apply">
+                        <property name="label" translatable="yes" context="dataproviderdlg/apply">Apply</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="tooltip_text" translatable="yes" context="dataproviderdlg/apply_tooltiptext">Apply Changes</property>
+                        <property name="halign">end</property>
+                        <property name="margin_end">6</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <accessibility>
+                      <relation type="labelled-by" target="label_preview"/>
+                    </accessibility>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label_preview">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes" context="dataproviderdlg/preview">Preview</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                    <accessibility>
+                      <relation type="label-for" target="box2"/>
+                    </accessibility>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="resize">True</property>
+                <property name="shrink">True</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="expand">False</property>
+            <property name="expand">True</property>
             <property name="fill">True</property>
-            <property name="position">2</property>
+            <property name="position">0</property>
           </packing>
         </child>
       </object>
diff --git a/sc/uiconfig/scalc/ui/dataproviderentry.ui b/sc/uiconfig/scalc/ui/dataproviderentry.ui
deleted file mode 100644
index 3f1f66c1b640..000000000000
--- a/sc/uiconfig/scalc/ui/dataproviderentry.ui
+++ /dev/null
@@ -1,108 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
-<interface domain="sc">
-  <requires lib="gtk+" version="3.20"/>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="icon_name">sc/res/xml_element.png</property>
-  </object>
-  <!-- n-columns=1 n-rows=1 -->
-  <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="GtkComboBoxText" id="provider_lst">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-      </object>
-      <packing>
-        <property name="left_attach">1</property>
-        <property name="top_attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkEntry" id="ed_url">
-        <property name="visible">True</property>
-        <property name="truncate-multiline">True</property>
-        <property name="can_focus">True</property>
-      </object>
-      <packing>
-        <property name="left_attach">1</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkEntry" id="ed_id">
-        <property name="visible">True</property>
-        <property name="truncate-multiline">True</property>
-        <property name="can_focus">True</property>
-      </object>
-      <packing>
-        <property name="left_attach">3</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkLabel">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes" context="dataproviderentry|url">URL:</property>
-      </object>
-      <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkLabel">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes" context="dataproviderentry|id">ID:</property>
-      </object>
-      <packing>
-        <property name="left_attach">2</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkLabel">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes" context="dataproviderentry|provider">Data Provider:</property>
-      </object>
-      <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkButton" id="apply">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="receives_default">True</property>
-        <property name="tooltip_text" translatable="yes" context="dataproviderentry|apply">Apply Changes</property>
-        <property name="image">image1</property>
-        <property name="relief">none</property>
-        <property name="always_show_image">True</property>
-      </object>
-      <packing>
-        <property name="left_attach">4</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <placeholder/>
-    </child>
-    <child>
-      <placeholder/>
-    </child>
-    <child>
-      <placeholder/>
-    </child>
-  </object>
-</interface>
diff --git a/sc/uiconfig/scalc/ui/datetimetransformationentry.ui b/sc/uiconfig/scalc/ui/datetimetransformationentry.ui
index a2ffe32d3cd6..8ca3b9e7fb9d 100644
--- a/sc/uiconfig/scalc/ui/datetimetransformationentry.ui
+++ b/sc/uiconfig/scalc/ui/datetimetransformationentry.ui
@@ -1,148 +1,100 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
+<!-- Generated with glade 3.38.2 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.20"/>
-  <!-- n-columns=1 n-rows=1 -->
+  <!-- n-columns=3 n-rows=3 -->
   <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>
+    <property name="can-focus">False</property>
+    <property name="margin-end">6</property>
+    <property name="border-width">6</property>
+    <property name="row-spacing">6</property>
+    <property name="column-spacing">12</property>
     <child>
-      <object class="GtkBox">
+      <object class="GtkSeparator">
         <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="datetimetransformationentry|name">Date Time Transformations</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <!-- n-columns=1 n-rows=1 -->
-          <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="datetimetransformationentry|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="datetimetransformationentry|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="datetimetransformationentry|datestring">Date String</item>
-                  <item id="1" translatable="yes" context="datetimetransformationentry|year">Year</item>
-                  <item id="2" translatable="yes" context="datetimetransformationentry|startofyear">Start of Year</item>
-                  <item id="3" translatable="yes" context="datetimetransformationentry|endofyear">End of Year</item>
-                  <item id="4" translatable="yes" context="datetimetransformationentry|month">Month</item>
-                  <item id="5" translatable="yes" context="datetimetransformationentry|monthname">Month Name</item>
-                  <item id="6" translatable="yes" context="datetimetransformationentry|startofmonth">Start of Month</item>
-                  <item id="7" translatable="yes" context="datetimetransformationentry|endofmonth">End of Month</item>
-                  <item id="8" translatable="yes" context="datetimetransformationentry|day">Day</item>
-                  <item id="9" translatable="yes" context="datetimetransformationentry|dayofweek">Day of Week</item>
-                  <item id="10" translatable="yes" context="datetimetransformationentry|dayofyear">Day of Year</item>
-                  <item id="11" translatable="yes" context="datetimetransformationentry|quarter">Quarter</item>
-                  <item id="12" translatable="yes" context="datetimetransformationentry|startofquarter">Start of Quarter</item>
-                  <item id="12" translatable="yes" context="datetimetransformationentry|endofquarter">End of Quarter</item>
-                  <item id="12" translatable="yes" context="datetimetransformationentry|hour">Hour</item>
-                  <item id="12" translatable="yes" context="datetimetransformationentry|minute">Minute</item>
-                  <item id="12" translatable="yes" context="datetimetransformationentry|second">Second</item>
-                  <item id="12" translatable="yes" context="datetimetransformationentry|time">Time</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>
-                <property name="truncate-multiline">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>
-        <child>
-          <object class="GtkButton" id="ed_delete">
-            <property name="label" translatable="yes" context="datetimetransformationentry|delete">Cancel</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
+        <property name="can-focus">False</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
+        <property name="left-attach">0</property>
+        <property name="top-attach">0</property>
+        <property name="width">3</property>
       </packing>
     </child>
     <child>
-      <object class="GtkSeparator">
+      <object class="GtkLabel" id="label1">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="halign">start</property>
+        <property name="label" translatable="yes" context="datetimetransformationentry|name">Date Time Transformations</property>
+        <property name="use-underline">True</property>
+        <property name="mnemonic-widget">ed_lst</property>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">1</property>
+        <property name="width">3</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkComboBoxText" id="ed_lst">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="halign">start</property>
+        <property name="hexpand">False</property>
+        <property name="active">0</property>
+        <property name="active-id">0</property>
+        <items>
+          <item id="0" translatable="yes" context="datetimetransformationentry|datestring">Date String</item>
+          <item id="1" translatable="yes" context="datetimetransformationentry|year">Year</item>
+          <item id="2" translatable="yes" context="datetimetransformationentry|startofyear">Start of Year</item>
+          <item id="3" translatable="yes" context="datetimetransformationentry|endofyear">End of Year</item>
+          <item id="4" translatable="yes" context="datetimetransformationentry|month">Month</item>
+          <item id="5" translatable="yes" context="datetimetransformationentry|monthname">Month Name</item>
+          <item id="6" translatable="yes" context="datetimetransformationentry|startofmonth">Start of Month</item>
+          <item id="7" translatable="yes" context="datetimetransformationentry|endofmonth">End of Month</item>
+          <item id="8" translatable="yes" context="datetimetransformationentry|day">Day</item>
+          <item id="9" translatable="yes" context="datetimetransformationentry|dayofweek">Day of Week</item>
+          <item id="10" translatable="yes" context="datetimetransformationentry|dayofyear">Day of Year</item>
+          <item id="11" translatable="yes" context="datetimetransformationentry|quarter">Quarter</item>
+          <item id="12" translatable="yes" context="datetimetransformationentry|startofquarter">Start of Quarter</item>
+          <item id="12" translatable="yes" context="datetimetransformationentry|endofquarter">End of Quarter</item>
+          <item id="12" translatable="yes" context="datetimetransformationentry|hour">Hour</item>
+          <item id="12" translatable="yes" context="datetimetransformationentry|minute">Minute</item>
+          <item id="12" translatable="yes" context="datetimetransformationentry|second">Second</item>
+          <item id="12" translatable="yes" context="datetimetransformationentry|time">Time</item>
+        </items>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkEntry" id="ed_columns">
+        <property name="visible">True</property>
+        <property name="can-focus">True</property>
+        <property name="hexpand">True</property>
+        <property name="width-chars">10</property>
+        <property name="truncate-multiline">True</property>
+        <property name="placeholder-text" translatable="yes" context="datetimetransformationentry/cols">Columns</property>
+      </object>
+      <packing>
+        <property name="left-attach">1</property>
+        <property name="top-attach">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="ed_delete">
+        <property name="label" translatable="yes" context="datetimetransformationentry|delete">Delete</property>
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">True</property>
+        <property name="receives-default">False</property>
+        <property name="halign">end</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
+        <property name="left-attach">2</property>
+        <property name="top-attach">2</property>
       </packing>
     </child>
   </object>
diff --git a/sc/uiconfig/scalc/ui/deletecolumnentry.ui b/sc/uiconfig/scalc/ui/deletecolumnentry.ui
index 76dc45f09665..db951e2d766d 100644
--- a/sc/uiconfig/scalc/ui/deletecolumnentry.ui
+++ b/sc/uiconfig/scalc/ui/deletecolumnentry.ui
@@ -1,93 +1,66 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
+<!-- Generated with glade 3.38.2 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.20"/>
-  <!-- n-columns=1 n-rows=1 -->
+  <!-- n-columns=2 n-rows=3 -->
   <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>
+    <property name="can-focus">False</property>
+    <property name="margin-end">6</property>
+    <property name="border-width">6</property>
+    <property name="row-spacing">6</property>
+    <property name="column-spacing">12</property>
     <child>
-      <object class="GtkBox">
+      <object class="GtkSeparator">
         <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="deletecolumnentry|name">Delete Columns Action</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <!-- n-columns=1 n-rows=1 -->
-          <object class="GtkGrid" id="grid_details">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <object class="GtkLabel">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes" context="deletecolumnentry|separator">Columns (List of ';' separated columns)</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="ed_columns">
-                <property name="visible">True</property>
-                <property name="truncate-multiline">True</property>
-                <property name="can_focus">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkButton" id="ed_delete">
-            <property name="label" translatable="yes" context="deletecolumnentry|delete">Cancel</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
+        <property name="can-focus">False</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
+        <property name="left-attach">0</property>
+        <property name="top-attach">0</property>
+        <property name="width">2</property>
       </packing>
     </child>
     <child>
-      <object class="GtkSeparator">
+      <object class="GtkLabel" id="label1">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="halign">start</property>
+        <property name="label" translatable="yes" context="deletecolumnentry|name">Delete Columns</property>
+        <property name="use-underline">True</property>
+        <property name="mnemonic-widget">ed_columns</property>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">1</property>
+        <property name="width">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkEntry" id="ed_columns">
+        <property name="visible">True</property>
+        <property name="can-focus">True</property>
+        <property name="hexpand">True</property>
+        <property name="width-chars">10</property>
+        <property name="truncate-multiline">True</property>
+        <property name="placeholder-text" translatable="yes" context="deletecolumnentry/cols">Cols(; Separated)</property>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="ed_delete">
+        <property name="label" translatable="yes" context="deletecolumnentry|delete">Delete</property>
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">True</property>
+        <property name="receives-default">False</property>
+        <property name="halign">end</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
+        <property name="left-attach">1</property>
+        <property name="top-attach">2</property>
       </packing>
     </child>
   </object>
diff --git a/sc/uiconfig/scalc/ui/mergecolumnentry.ui b/sc/uiconfig/scalc/ui/mergecolumnentry.ui
index fda44065de69..41ce05894067 100644
--- a/sc/uiconfig/scalc/ui/mergecolumnentry.ui
+++ b/sc/uiconfig/scalc/ui/mergecolumnentry.ui
@@ -1,115 +1,80 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
+<!-- Generated with glade 3.38.2 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.20"/>
-  <!-- n-columns=1 n-rows=1 -->
+  <!-- n-columns=3 n-rows=3 -->
   <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>
+    <property name="can-focus">False</property>
+    <property name="margin-end">6</property>
+    <property name="border-width">6</property>
+    <property name="row-spacing">6</property>
+    <property name="column-spacing">12</property>
     <child>
-      <object class="GtkBox">
+      <object class="GtkSeparator">
         <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="mergecolumnentry|name">Merge Column Action</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <!-- n-columns=1 n-rows=1 -->
-          <object class="GtkGrid" id="grid_details">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <object class="GtkLabel">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes" context="mergecolumnentry|separator">Separator:</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="ed_separator">
-                <property name="visible">True</property>
-                <property name="truncate-multiline">True</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">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes" context="mergecolumnentry|columns">Columns:</property>
-              </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="truncate-multiline">True</property>
-                <property name="can_focus">True</property>
-              </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>
-        <child>
-          <object class="GtkButton" id="ed_delete">
-            <property name="label" translatable="yes" context="mergecolumnentry|delete">Cancel</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
+        <property name="can-focus">False</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
+        <property name="left-attach">0</property>
+        <property name="top-attach">0</property>
+        <property name="width">3</property>
       </packing>
     </child>
     <child>
-      <object class="GtkSeparator">
+      <object class="GtkLabel" id="label1">
+        <property name="visible">True</property>
+        <property name="can-focus">False</property>
+        <property name="halign">start</property>
+        <property name="label" translatable="yes" context="mergecolumnentry|name">Merge Column Action</property>
+        <property name="use-underline">True</property>
+        <property name="mnemonic-widget">ed_separator</property>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">1</property>
+        <property name="width">3</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkEntry" id="ed_separator">
+        <property name="visible">True</property>
+        <property name="can-focus">True</property>
+        <property name="hexpand">True</property>
+        <property name="width-chars">10</property>
+        <property name="truncate-multiline">True</property>
+        <property name="placeholder-text" translatable="yes" context="mergecolumnentry/separator">Separator</property>
+      </object>
+      <packing>
+        <property name="left-attach">0</property>
+        <property name="top-attach">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkEntry" id="ed_columns">
+        <property name="visible">True</property>
+        <property name="can-focus">True</property>
+        <property name="hexpand">True</property>
+        <property name="width-chars">10</property>
+        <property name="truncate-multiline">True</property>
+        <property name="placeholder-text" translatable="yes" context="mergecolumnentry/cols">Columns</property>
+      </object>
+      <packing>
+        <property name="left-attach">1</property>
+        <property name="top-attach">2</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="ed_delete">
+        <property name="label" translatable="yes" context="mergecolumnentry|delete">Delete</property>
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">True</property>
+        <property name="receives-default">False</property>
+        <property name="halign">end</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">0</property>
+        <property name="left-attach">2</property>
+        <property name="top-attach">2</property>
       </packing>
     </child>
   </object>
diff --git a/sc/uiconfig/scalc/ui/numbertransformationentry.ui b/sc/uiconfig/scalc/ui/numbertransformationentry.ui
index 9271e0edb9b4..35cd42a7afb1 100644
--- a/sc/uiconfig/scalc/ui/numbertransformationentry.ui
+++ b/sc/uiconfig/scalc/ui/numbertransformationentry.ui
@@ -1,143 +1,95 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1 -->
+<!-- Generated with glade 3.38.2 -->
 <interface domain="sc">
   <requires lib="gtk+" version="3.20"/>
-  <!-- n-columns=1 n-rows=1 -->
+  <!-- n-columns=3 n-rows=3 -->
   <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>
+    <property name="can-focus">False</property>
+    <property name="margin-end">6</property>
+    <property name="border-width">6</property>
+    <property name="row-spacing">6</property>
+    <property name="column-spacing">12</property>
     <child>
-      <object class="GtkBox">
+      <object class="GtkSeparator">
         <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="numbertransformationentry|name">Number Transformations</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <!-- n-columns=1 n-rows=1 -->
-          <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="numbertransformationentry|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="numbertransformationentry|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="numbertransformationentry|sign">Sign</item>
-                  <item id="1" translatable="yes" context="numbertransformationentry|round">Round</item>
-                  <item id="2" translatable="yes" context="numbertransformationentry|roundup">Round Up</item>
-                  <item id="3" translatable="yes" context="numbertransformationentry|rounddown">Round Down</item>
-                  <item id="4" translatable="yes" context="numbertransformationentry|absolute">Absolute Value</item>
-                  <item id="5" translatable="yes" context="numbertransformationentry|loge">Log with base e</item>
-                  <item id="6" translatable="yes" context="numbertransformationentry|log10">Log with base 10</item>
-                  <item id="7" translatable="yes" context="numbertransformationentry|cube">Cube</item>
-                  <item id="8" translatable="yes" context="numbertransformationentry|square">Square</item>
-                  <item id="9" translatable="yes" context="numbertransformationentry|squareroot">Square Root</item>
-                  <item id="10" translatable="yes" context="numbertransformationentry|exponent">Exponent</item>
-                  <item id="11" translatable="yes" context="numbertransformationentry|iseven">Is Even</item>
-                  <item id="12" translatable="yes" context="numbertransformationentry|isodd">Is Odd</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>
-                <property name="truncate-multiline">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>
-        <child>
-          <object class="GtkButton" id="ed_delete">
-            <property name="label" translatable="yes" context="numbertransformationentry|delete">Cancel</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
+        <property name="can-focus">False</property>
       </object>
       <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
+        <property name="left-attach">0</property>
+        <property name="top-attach">0</property>
+        <property name="width">3</property>

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list