[Libreoffice-commits] core.git: reportdesign/source reportdesign/uiconfig

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Wed Dec 4 08:55:05 UTC 2019


 reportdesign/source/ui/dlg/GroupsSorting.cxx       |  333 ++++-----
 reportdesign/source/ui/inc/GroupsSorting.hxx       |   62 -
 reportdesign/source/ui/inc/ReportController.hxx    |    2 
 reportdesign/source/ui/report/ReportController.cxx |   35 -
 reportdesign/uiconfig/dbreport/ui/floatingsort.ui  |  714 ++++++++++-----------
 5 files changed, 560 insertions(+), 586 deletions(-)

New commits:
commit 2701708942061e05f5516f940f626e1a5a257226
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Dec 2 20:41:11 2019 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Wed Dec 4 09:54:08 2019 +0100

    weld OGroupsSortingDialog
    
    Change-Id: I49f9cfb4df670c68d21082a81e1a0aad225cc408
    Reviewed-on: https://gerrit.libreoffice.org/84279
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/reportdesign/source/ui/dlg/GroupsSorting.cxx b/reportdesign/source/ui/dlg/GroupsSorting.cxx
index 67234233bf7e..f9702f0385bc 100644
--- a/reportdesign/source/ui/dlg/GroupsSorting.cxx
+++ b/reportdesign/source/ui/dlg/GroupsSorting.cxx
@@ -20,6 +20,7 @@
 #include <connectivity/dbtools.hxx>
 #include <sot/exchange.hxx>
 #include <svtools/editbrowsebox.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/container/XContainerListener.hpp>
 #include <com/sun/star/report/GroupOn.hpp>
@@ -38,6 +39,7 @@
 
 #include <cppuhelper/implbase.hxx>
 #include <comphelper/property.hxx>
+#include <vcl/commandevent.hxx>
 #include <vcl/settings.hxx>
 
 #include <algorithm>
@@ -104,12 +106,12 @@ class OFieldExpressionControl : public ::svt::EditBrowseBox
     sal_Int32                       m_nDataPos;
     sal_Int32                       m_nCurrentPos;
     ImplSVEvent *                   m_nDeleteEvent;
-    VclPtr<OGroupsSortingDialog>    m_pParent;
+    OGroupsSortingDialog*           m_pParent;
     bool                            m_bIgnoreEvent;
     rtl::Reference<OFieldExpressionControlContainerListener> aContainerListener;
 
 public:
-    OFieldExpressionControl(OGroupsSortingDialog* _pParentDialog, vcl::Window *_pParent);
+    OFieldExpressionControl(OGroupsSortingDialog* pParentDialog, const css::uno::Reference<css::awt::XWindow> &rParent);
     virtual ~OFieldExpressionControl() override;
     virtual void dispose() override;
 
@@ -128,8 +130,6 @@ public:
 
     sal_Int32   getGroupPosition(sal_Int32 _nRow) const { return _nRow != BROWSER_ENDOFSELECTION ? m_aGroupPositions[_nRow] : sal_Int32(NO_GROUP); }
 
-    ::svt::ComboBoxControl*  getExpressionControl() const { return m_pComboCell; }
-
     /** returns the sequence with the selected groups
     */
     uno::Sequence<uno::Any> fillSelectedGroups();
@@ -184,9 +184,8 @@ void OFieldExpressionControlContainerListener::elementReplaced(const css::contai
 void OFieldExpressionControlContainerListener::elementRemoved(const css::container::ContainerEvent& rEvent)
 { mpParent->elementRemoved(rEvent); }
 
-
-OFieldExpressionControl::OFieldExpressionControl(OGroupsSortingDialog* _pParentDialog, vcl::Window *_pParent)
-    :EditBrowseBox( _pParent, EditBrowseBoxFlags::NONE, WB_TABSTOP,
+OFieldExpressionControl::OFieldExpressionControl(OGroupsSortingDialog* pParentDialog, const css::uno::Reference<css::awt::XWindow> &rParent)
+    :EditBrowseBox( VCLUnoHelper::GetWindow(rParent), EditBrowseBoxFlags::NONE, WB_TABSTOP,
                     BrowserMode::COLUMNSELECTION | BrowserMode::MULTISELECTION | BrowserMode::AUTOSIZE_LASTCOL |
                               BrowserMode::KEEPHIGHLIGHT | BrowserMode::HLINES | BrowserMode::VLINES)
     ,m_aGroupPositions(GROUPS_START_LEN,-1)
@@ -194,20 +193,18 @@ OFieldExpressionControl::OFieldExpressionControl(OGroupsSortingDialog* _pParentD
     ,m_nDataPos(-1)
     ,m_nCurrentPos(-1)
     ,m_nDeleteEvent(nullptr)
-    ,m_pParent(_pParentDialog)
+    ,m_pParent(pParentDialog)
     ,m_bIgnoreEvent(false)
     ,aContainerListener(new OFieldExpressionControlContainerListener(this))
 {
     SetBorderStyle(WindowBorderStyle::MONO);
 }
 
-
 OFieldExpressionControl::~OFieldExpressionControl()
 {
     disposeOnce();
 }
 
-
 void OFieldExpressionControl::dispose()
 {
     uno::Reference< report::XGroups > xGroups = m_pParent->getGroups();
@@ -218,7 +215,7 @@ void OFieldExpressionControl::dispose()
         Application::RemoveUserEvent( m_nDeleteEvent );
 
     m_pComboCell.disposeAndClear();
-    m_pParent.clear();
+    m_pParent = nullptr;
     ::svt::EditBrowseBox::dispose();
 }
 
@@ -380,7 +377,6 @@ void OFieldExpressionControl::lateInit()
         m_pComboCell->SetHelpId(HID_RPT_FIELDEXPRESSION);
 
         m_pComboCell->SetGetFocusHdl(LINK(m_pParent, OGroupsSortingDialog, OnControlFocusGot));
-        m_pComboCell->SetLoseFocusHdl(LINK(m_pParent, OGroupsSortingDialog, OnControlFocusLost));
 
 
         // set browse mode
@@ -791,98 +787,82 @@ Size OFieldExpressionControl::GetOptimalSize() const
     return LogicToPixel(Size(106, 75), MapMode(MapUnit::MapAppFont));
 }
 
-OGroupsSortingDialog::OGroupsSortingDialog(vcl::Window* _pParent, bool _bReadOnly,
-                                           OReportController* _pController)
-    : FloatingWindow(_pParent, "FloatingSort", "modules/dbreport/ui/floatingsort.ui")
+OGroupsSortingDialog::OGroupsSortingDialog(weld::Window* pParent, bool bReadOnly,
+                                           OReportController* pController)
+    : GenericDialogController(pParent, "modules/dbreport/ui/floatingsort.ui", "FloatingSort")
     , OPropertyChangeListener(m_aMutex)
-    , m_pController(_pController)
+    , m_pController(pController)
     , m_xGroups(m_pController->getReportDefinition()->getGroups())
-    , m_bReadOnly(_bReadOnly)
+    , m_bReadOnly(bReadOnly)
+    , m_xToolBox(m_xBuilder->weld_toolbar("toolbox"))
+    , m_xProperties(m_xBuilder->weld_widget("properties"))
+    , m_xOrderLst(m_xBuilder->weld_combo_box("sorting"))
+    , m_xHeaderLst(m_xBuilder->weld_combo_box("header"))
+    , m_xFooterLst(m_xBuilder->weld_combo_box("footer"))
+    , m_xGroupOnLst(m_xBuilder->weld_combo_box("group"))
+    , m_xGroupIntervalEd(m_xBuilder->weld_spin_button("interval"))
+    , m_xKeepTogetherLst(m_xBuilder->weld_combo_box("keep"))
+    , m_xHelpWindow(m_xBuilder->weld_label("helptext"))
+    , m_xBox(m_xBuilder->weld_container("box"))
+    , m_xTableCtrlParent(m_xBox->CreateChildFrame())
+    , m_xFieldExpression(VclPtr<OFieldExpressionControl>::Create(this, m_xTableCtrlParent))
 {
-    get(m_pToolBox, "toolbox");
-    m_nMoveUpId = m_pToolBox->GetItemId(0);
-    m_nMoveDownId = m_pToolBox->GetItemId(1);
-    m_nDeleteId = m_pToolBox->GetItemId(2);
-    get(m_pOrderLst, "sorting");
-    get(m_pHeaderLst, "header");
-    get(m_pFooterLst, "footer");
-    get(m_pGroupOnLst, "group");
-    get(m_pGroupIntervalEd, "interval");
-    get(m_pKeepTogetherLst, "keep");
-    get(m_pHelpWindow, "helptext");
-    m_pHelpWindow->set_height_request(GetTextHeight() * 4);
-    get(m_pProperties, "properties");
-    m_pFieldExpression = VclPtr<OFieldExpressionControl>::Create(this, get<vcl::Window>("box"));
-    m_pFieldExpression->set_hexpand(true);
-    m_pFieldExpression->set_vexpand(true);
-
-    Control* pControlsLst[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst, m_pGroupIntervalEd};
-    for (Control* i : pControlsLst)
+    m_xHelpWindow->set_size_request(-1, m_xHelpWindow->get_text_height() * 4);
+    m_xFieldExpression->set_hexpand(true);
+    m_xFieldExpression->set_vexpand(true);
+
+    weld::Widget* pControlsLst[] = { m_xHeaderLst.get(), m_xFooterLst.get(), m_xGroupOnLst.get(),
+                                     m_xKeepTogetherLst.get(), m_xOrderLst.get(), m_xGroupIntervalEd.get() };
+    for (weld::Widget* i : pControlsLst)
     {
-        i->SetGetFocusHdl(LINK(this, OGroupsSortingDialog, OnControlFocusGot));
-        i->SetLoseFocusHdl(LINK(this, OGroupsSortingDialog, OnControlFocusLost));
-        i->Show();
+        i->connect_focus_in(LINK(this, OGroupsSortingDialog, OnWidgetFocusGot));
+        i->show();
     }
 
+    m_xGroupIntervalEd->connect_focus_out(LINK(this, OGroupsSortingDialog, OnWidgetFocusLost));
+
     for (size_t i = 0; i < SAL_N_ELEMENTS(pControlsLst) - 1; ++i)
-        static_cast<ListBox*>(pControlsLst[i])->SetSelectHdl(LINK(this,OGroupsSortingDialog,LBChangeHdl));
+        dynamic_cast<weld::ComboBox&>(*pControlsLst[i]).connect_changed(LINK(this,OGroupsSortingDialog,LBChangeHdl));
 
     m_pReportListener = new OPropertyChangeMultiplexer(this,m_pController->getReportDefinition().get());
     m_pReportListener->addProperty(PROPERTY_COMMAND);
     m_pReportListener->addProperty(PROPERTY_COMMANDTYPE);
 
-    m_pFieldExpression->lateInit();
+    m_xFieldExpression->lateInit();
     fillColumns();
-    m_pFieldExpression->Show();
+    Size aPrefSize = m_xFieldExpression->GetOptimalSize();
+    m_xBox->set_size_request(aPrefSize.Width(), aPrefSize.Height());
+    m_xFieldExpression->Show();
 
-    m_pHelpWindow->SetControlBackground( GetSettings().GetStyleSettings().GetFaceColor() );
-
-    m_pToolBox->SetLineSpacing(true);
-    m_pToolBox->SetSelectHdl(LINK(this, OGroupsSortingDialog, OnFormatAction));
+    m_xToolBox->connect_clicked(LINK(this, OGroupsSortingDialog, OnFormatAction));
 
     checkButtons(0);
-
-    Show();
 }
 
 OGroupsSortingDialog::~OGroupsSortingDialog()
 {
-    disposeOnce();
-}
-
-void OGroupsSortingDialog::dispose()
-{
-    m_xColumns.clear();
     m_pReportListener->dispose();
     if ( m_pCurrentGroupListener.is() )
         m_pCurrentGroupListener->dispose();
-    m_pToolBox.clear();
-    m_pProperties.clear();
-    m_pOrderLst.clear();
-    m_pHeaderLst.clear();
-    m_pFooterLst.clear();
-    m_pGroupOnLst.clear();
-    m_pGroupIntervalEd.clear();
-    m_pKeepTogetherLst.clear();
-    m_pHelpWindow.clear();
-    m_pFieldExpression.disposeAndClear();
-    FloatingWindow::dispose();
+    m_xFieldExpression.disposeAndClear();
+    m_xTableCtrlParent->dispose();
+    m_xTableCtrlParent.clear();
 }
 
 void OGroupsSortingDialog::UpdateData( )
 {
-    m_pFieldExpression->Invalidate();
-    long nCurRow = m_pFieldExpression->GetCurRow();
-    m_pFieldExpression->DeactivateCell();
-    m_pFieldExpression->ActivateCell(nCurRow, m_pFieldExpression->GetCurColumnId());
+    m_xFieldExpression->Invalidate();
+    long nCurRow = m_xFieldExpression->GetCurRow();
+    m_xFieldExpression->DeactivateCell();
+    m_xFieldExpression->ActivateCell(nCurRow, m_xFieldExpression->GetCurColumnId());
     DisplayData(nCurRow);
 }
 
 void OGroupsSortingDialog::DisplayData( sal_Int32 _nRow )
 {
-    const sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
+    const sal_Int32 nGroupPos = m_xFieldExpression->getGroupPosition(_nRow);
     const bool bEmpty = nGroupPos == NO_GROUP;
-    m_pProperties->Enable(!bEmpty);
+    m_xProperties->set_sensitive(!bEmpty);
 
     checkButtons(_nRow);
 
@@ -903,36 +883,36 @@ void OGroupsSortingDialog::DisplayData( sal_Int32 _nRow )
 
 void OGroupsSortingDialog::SaveData( sal_Int32 _nRow)
 {
-    sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
+    sal_Int32 nGroupPos = m_xFieldExpression->getGroupPosition(_nRow);
     if ( nGroupPos == NO_GROUP )
         return;
 
     uno::Reference< report::XGroup> xGroup = getGroup(nGroupPos);
-    if ( m_pHeaderLst->IsValueChangedFromSaved() )
-        xGroup->setHeaderOn( m_pHeaderLst->GetSelectedEntryPos() == 0 );
-    if ( m_pFooterLst->IsValueChangedFromSaved() )
-        xGroup->setFooterOn( m_pFooterLst->GetSelectedEntryPos() == 0 );
-    if ( m_pKeepTogetherLst->IsValueChangedFromSaved() )
-        xGroup->setKeepTogether( m_pKeepTogetherLst->GetSelectedEntryPos() );
-    if ( m_pGroupOnLst->IsValueChangedFromSaved() )
+    if (m_xHeaderLst->get_value_changed_from_saved())
+        xGroup->setHeaderOn( m_xHeaderLst->get_active() == 0 );
+    if (m_xFooterLst->get_value_changed_from_saved())
+        xGroup->setFooterOn( m_xFooterLst->get_active() == 0 );
+    if (m_xKeepTogetherLst->get_value_changed_from_saved())
+        xGroup->setKeepTogether( m_xKeepTogetherLst->get_active() );
+    if (m_xGroupOnLst->get_value_changed_from_saved())
     {
-        sal_Int16 nGroupOn = static_cast<sal_Int16>(reinterpret_cast<sal_IntPtr>(m_pGroupOnLst->GetSelectedEntryData()));
+        auto nGroupOn = m_xGroupOnLst->get_active_id().toInt32();
         xGroup->setGroupOn( nGroupOn );
     }
-    if ( m_pGroupIntervalEd->IsValueChangedFromSaved() )
+    if (m_xGroupIntervalEd->get_value_changed_from_saved())
     {
-        xGroup->setGroupInterval( static_cast<sal_Int32>(m_pGroupIntervalEd->GetValue()) );
-        m_pGroupIntervalEd->SaveValue();
+        xGroup->setGroupInterval(m_xGroupIntervalEd->get_value());
+        m_xGroupIntervalEd->save_value();
     }
-    if ( m_pOrderLst->IsValueChangedFromSaved() )
-        xGroup->setSortAscending( m_pOrderLst->GetSelectedEntryPos() == 0 );
+    if ( m_xOrderLst->get_value_changed_from_saved() )
+        xGroup->setSortAscending( m_xOrderLst->get_active() == 0 );
 
-    ListBox* pControls[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst};
-    for (ListBox* pControl : pControls)
-        pControl->SaveValue();
+    weld::ComboBox* pControls[] = { m_xHeaderLst.get(), m_xFooterLst.get(), m_xGroupOnLst.get(),
+                                    m_xKeepTogetherLst.get(), m_xOrderLst.get() };
+    for (weld::ComboBox* pControl : pControls)
+        pControl->save_value();
 }
 
-
 sal_Int32 OGroupsSortingDialog::getColumnDataType(const OUString& _sColumnName)
 {
     sal_Int32 nDataType = sdbc::DataType::VARCHAR;
@@ -955,100 +935,98 @@ sal_Int32 OGroupsSortingDialog::getColumnDataType(const OUString& _sColumnName)
     return nDataType;
 }
 
-IMPL_LINK(OGroupsSortingDialog, OnControlFocusGot, Control&, rControl, void )
+IMPL_LINK_NOARG(OGroupsSortingDialog, OnControlFocusGot, Control&, void )
+{
+    m_xHelpWindow->set_label(RptResId(STR_RPT_HELP_FIELD));
+}
+
+IMPL_LINK(OGroupsSortingDialog, OnWidgetFocusGot, weld::Widget&, rControl, void )
 {
-    if ( m_pFieldExpression && m_pFieldExpression->getExpressionControl() )
+    const std::pair<weld::Widget*, const char*> pControls[] = {
+        { m_xHeaderLst.get(), STR_RPT_HELP_HEADER },
+        { m_xFooterLst.get(), STR_RPT_HELP_FOOTER },
+        { m_xGroupOnLst.get(), STR_RPT_HELP_GROUPON },
+        { m_xGroupIntervalEd.get(), STR_RPT_HELP_INTERVAL },
+        { m_xKeepTogetherLst.get(), STR_RPT_HELP_KEEP },
+        { m_xOrderLst.get(), STR_RPT_HELP_SORT }
+    };
+    for (size_t i = 0; i < SAL_N_ELEMENTS(pControls); ++i)
     {
-        const std::pair<Control*, const char*> pControls[] = {
-            { m_pFieldExpression->getExpressionControl(), STR_RPT_HELP_FIELD },
-            { m_pHeaderLst, STR_RPT_HELP_HEADER },
-            { m_pFooterLst, STR_RPT_HELP_FOOTER },
-            { m_pGroupOnLst, STR_RPT_HELP_GROUPON },
-            { m_pGroupIntervalEd, STR_RPT_HELP_INTERVAL },
-            { m_pKeepTogetherLst, STR_RPT_HELP_KEEP },
-            { m_pOrderLst, STR_RPT_HELP_SORT }
-        };
-        for (size_t i = 0; i < SAL_N_ELEMENTS(pControls); ++i)
+        if (&rControl == pControls[i].first)
         {
-            if (&rControl == pControls[i].first)
-            {
-                ListBox* pListBox = dynamic_cast< ListBox* >( &rControl );
-                if ( pListBox )
-                    pListBox->SaveValue();
-                NumericField* pNumericField = dynamic_cast< NumericField* >( &rControl );
-                if ( pNumericField )
-                    pNumericField->SaveValue();
-                //shows the text given by the id in the multiline edit
-                m_pHelpWindow->SetText(RptResId(pControls[i].second));
-                break;
-            }
+            weld::ComboBox* pListBox = dynamic_cast<weld::ComboBox*>( &rControl );
+            if ( pListBox )
+                pListBox->save_value();
+            weld::SpinButton* pNumericField = dynamic_cast<weld::SpinButton*>(&rControl);
+            if ( pNumericField )
+                pNumericField->save_value();
+            //shows the text given by the id in the multiline edit
+            m_xHelpWindow->set_label(RptResId(pControls[i].second));
+            break;
         }
     }
 }
 
-IMPL_LINK(OGroupsSortingDialog, OnControlFocusLost, Control&, rControl, void )
+IMPL_LINK_NOARG(OGroupsSortingDialog, OnWidgetFocusLost, weld::Widget&, void)
 {
-    if (m_pFieldExpression && &rControl == m_pGroupIntervalEd)
+    if (m_xFieldExpression)
     {
-        if ( m_pGroupIntervalEd->IsModified() )
-            SaveData(m_pFieldExpression->GetCurRow());
+        if (m_xGroupIntervalEd->get_value_changed_from_saved())
+            SaveData(m_xFieldExpression->GetCurRow());
     }
 }
 
-IMPL_LINK_NOARG( OGroupsSortingDialog, OnFormatAction, ToolBox*, void )
+IMPL_LINK(OGroupsSortingDialog, OnFormatAction, const OString&, rCommand, void)
 {
-
-    sal_uInt16 nCommand = m_pToolBox->GetCurItemId();
-
-    if ( m_pFieldExpression )
+    if ( m_xFieldExpression )
     {
-        long nIndex = m_pFieldExpression->GetCurrRow();
-        sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(nIndex);
+        long nIndex = m_xFieldExpression->GetCurrRow();
+        sal_Int32 nGroupPos = m_xFieldExpression->getGroupPosition(nIndex);
         uno::Sequence<uno::Any> aClipboardList;
         if ( nIndex >= 0 && nGroupPos != NO_GROUP )
         {
             aClipboardList.realloc(1);
             aClipboardList[0] = m_xGroups->getByIndex(nGroupPos);
         }
-        if ( nCommand == m_nMoveUpId )
+        if (rCommand == "up")
         {
             --nIndex;
         }
-        if ( nCommand == m_nMoveDownId )
+        if (rCommand == "down")
         {
             ++nIndex;
         }
-        if ( nCommand == m_nDeleteId )
+        if (rCommand == "delete")
         {
-            Application::PostUserEvent( LINK(m_pFieldExpression, OFieldExpressionControl, DelayedDelete), nullptr, true );
+            Application::PostUserEvent(LINK(m_xFieldExpression, OFieldExpressionControl, DelayedDelete));
         }
         else
         {
             if ( nIndex >= 0 && aClipboardList.hasElements() )
             {
-                m_pFieldExpression->SetNoSelection();
-                m_pFieldExpression->moveGroups(aClipboardList,nIndex,false);
-                m_pFieldExpression->DeactivateCell();
-                m_pFieldExpression->GoToRow(nIndex);
-                m_pFieldExpression->ActivateCell(nIndex, m_pFieldExpression->GetCurColumnId());
+                m_xFieldExpression->SetNoSelection();
+                m_xFieldExpression->moveGroups(aClipboardList,nIndex,false);
+                m_xFieldExpression->DeactivateCell();
+                m_xFieldExpression->GoToRow(nIndex);
+                m_xFieldExpression->ActivateCell(nIndex, m_xFieldExpression->GetCurColumnId());
                 DisplayData(nIndex);
             }
         }
     }
 }
 
-IMPL_LINK( OGroupsSortingDialog, LBChangeHdl, ListBox&, rListBox, void )
+IMPL_LINK( OGroupsSortingDialog, LBChangeHdl, weld::ComboBox&, rListBox, void )
 {
-    if ( rListBox.IsValueChangedFromSaved() )
+    if ( rListBox.get_value_changed_from_saved() )
     {
-        sal_Int32 nRow = m_pFieldExpression->GetCurRow();
-        sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(nRow);
-        if (&rListBox != m_pHeaderLst && &rListBox != m_pFooterLst)
+        sal_Int32 nRow = m_xFieldExpression->GetCurRow();
+        sal_Int32 nGroupPos = m_xFieldExpression->getGroupPosition(nRow);
+        if (&rListBox != m_xHeaderLst.get() && &rListBox != m_xFooterLst.get())
         {
-            if ( rListBox.IsValueChangedFromSaved() )
+            if ( rListBox.get_value_changed_from_saved() )
                 SaveData(nRow);
-            if ( &rListBox == m_pGroupOnLst )
-                m_pGroupIntervalEd->Enable( rListBox.GetSelectedEntryPos() != 0 );
+            if ( &rListBox == m_xGroupOnLst.get() )
+                m_xGroupIntervalEd->set_sensitive(rListBox.get_active() != 0);
         }
         else if ( nGroupPos != NO_GROUP )
         {
@@ -1057,14 +1035,14 @@ IMPL_LINK( OGroupsSortingDialog, LBChangeHdl, ListBox&, rListBox, void )
             aArgs[1].Name = PROPERTY_GROUP;
             aArgs[1].Value <<= xGroup;
 
-            if ( m_pHeaderLst  == &rListBox )
+            if ( m_xHeaderLst.get() == &rListBox )
                 aArgs[0].Name = PROPERTY_HEADERON;
             else
                 aArgs[0].Name = PROPERTY_FOOTERON;
 
-            aArgs[0].Value <<= rListBox.GetSelectedEntryPos() == 0;
-            m_pController->executeChecked(m_pHeaderLst  == &rListBox ? SID_GROUPHEADER : SID_GROUPFOOTER, aArgs);
-            m_pFieldExpression->InvalidateHandleColumn();
+            aArgs[0].Value <<= rListBox.get_active() == 0;
+            m_pController->executeChecked(m_xHeaderLst.get() == &rListBox ? SID_GROUPHEADER : SID_GROUPFOOTER, aArgs);
+            m_xFieldExpression->InvalidateHandleColumn();
         }
     }
 }
@@ -1081,19 +1059,19 @@ void OGroupsSortingDialog::_propertyChanged(const beans::PropertyChangeEvent& _r
 void OGroupsSortingDialog::fillColumns()
 {
     m_xColumns = m_pController->getColumns();
-    m_pFieldExpression->fillColumns(m_xColumns);
+    m_xFieldExpression->fillColumns(m_xColumns);
 }
 
 void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _xGroup)
 {
-    m_pHeaderLst->SelectEntryPos(_xGroup->getHeaderOn() ? 0 : 1 );
-    m_pFooterLst->SelectEntryPos(_xGroup->getFooterOn() ? 0 : 1 );
+    m_xHeaderLst->set_active(_xGroup->getHeaderOn() ? 0 : 1 );
+    m_xFooterLst->set_active(_xGroup->getFooterOn() ? 0 : 1 );
     sal_Int32 nDataType = getColumnDataType(_xGroup->getExpression());
 
     // first clear whole group on list
-    while(m_pGroupOnLst->GetEntryCount() > 1 )
+    while (m_xGroupOnLst->get_count() > 1 )
     {
-        m_pGroupOnLst->RemoveEntry(1);
+        m_xGroupOnLst->remove(1);
     }
 
     switch(nDataType)
@@ -1101,8 +1079,7 @@ void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _x
         case sdbc::DataType::LONGVARCHAR:
         case sdbc::DataType::VARCHAR:
         case sdbc::DataType::CHAR:
-            m_pGroupOnLst->InsertEntry(RptResId(STR_RPT_PREFIXCHARS));
-            m_pGroupOnLst->SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::PREFIX_CHARACTERS));
+            m_xGroupOnLst->append(OUString::number(report::GroupOn::PREFIX_CHARACTERS), RptResId(STR_RPT_PREFIXCHARS));
             break;
         case sdbc::DataType::DATE:
         case sdbc::DataType::TIME:
@@ -1111,14 +1088,12 @@ void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _x
                 const char* aIds[] = { STR_RPT_YEAR, STR_RPT_QUARTER,STR_RPT_MONTH,STR_RPT_WEEK,STR_RPT_DAY,STR_RPT_HOUR,STR_RPT_MINUTE };
                 for (size_t i = 0; i < SAL_N_ELEMENTS(aIds); ++i)
                 {
-                    m_pGroupOnLst->InsertEntry(RptResId(aIds[i]));
-                    m_pGroupOnLst->SetEntryData(i+1,reinterpret_cast<void*>(i+2));
+                    m_xGroupOnLst->append(OUString::number(i+2), RptResId(aIds[i]));
                 }
             }
             break;
         default:
-            m_pGroupOnLst->InsertEntry(RptResId(STR_RPT_INTERVAL));
-            m_pGroupOnLst->SetEntryData(1,reinterpret_cast<void*>(report::GroupOn::INTERVAL));
+            m_xGroupOnLst->append(OUString::number(report::GroupOn::INTERVAL), RptResId(STR_RPT_INTERVAL));
             break;
     }
     sal_Int32 nPos = 0;
@@ -1157,56 +1132,56 @@ void OGroupsSortingDialog::displayGroup(const uno::Reference<report::XGroup>& _x
         default:
             nPos = 0;
     }
-    m_pGroupOnLst->SelectEntryPos(nPos);
-    m_pGroupIntervalEd->SetText(OUString::number(_xGroup->getGroupInterval()));
-    m_pGroupIntervalEd->SaveValue();
-    m_pGroupIntervalEd->Enable( nPos != 0 );
-    m_pKeepTogetherLst->SelectEntryPos(_xGroup->getKeepTogether());
-    m_pOrderLst->SelectEntryPos(_xGroup->getSortAscending() ? 0 : 1);
-
-    ListBox* pControls[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst};
-    for (ListBox* pControl : pControls)
-        pControl->SaveValue();
-
-    ListBox* pControlsLst2[] = { m_pHeaderLst, m_pFooterLst, m_pGroupOnLst, m_pKeepTogetherLst, m_pOrderLst};
+    m_xGroupOnLst->set_active(nPos);
+    m_xGroupIntervalEd->set_value(_xGroup->getGroupInterval());
+    m_xGroupIntervalEd->save_value();
+    m_xGroupIntervalEd->set_sensitive( nPos != 0 );
+    m_xKeepTogetherLst->set_active(_xGroup->getKeepTogether());
+    m_xOrderLst->set_active(_xGroup->getSortAscending() ? 0 : 1);
+
+    weld::ComboBox* pControls[] = { m_xHeaderLst.get(), m_xFooterLst.get(), m_xGroupOnLst.get(),
+                                    m_xKeepTogetherLst.get(), m_xOrderLst.get() };
+    for (weld::ComboBox* pControl : pControls)
+        pControl->save_value();
+
     bool bReadOnly = !m_pController->isEditable();
-    for (ListBox* i : pControlsLst2)
-        i->SetReadOnly(bReadOnly);
-    m_pGroupIntervalEd->SetReadOnly(bReadOnly);
+    for (weld::ComboBox* pControl : pControls)
+        pControl->set_sensitive(!bReadOnly);
+    m_xGroupIntervalEd->set_editable(!bReadOnly);
 }
 
 void OGroupsSortingDialog::checkButtons(sal_Int32 _nRow)
 {
     sal_Int32 nGroupCount = m_xGroups->getCount();
-    sal_Int32 nRowCount = m_pFieldExpression->GetRowCount();
+    sal_Int32 nRowCount = m_xFieldExpression->GetRowCount();
     bool bEnabled = nGroupCount > 1;
 
     if (bEnabled && _nRow > 0 )
     {
-        m_pToolBox->EnableItem(m_nMoveUpId);
+        m_xToolBox->set_item_sensitive("up", true);
     }
     else
     {
-        m_pToolBox->EnableItem(m_nMoveUpId, false);
+        m_xToolBox->set_item_sensitive("up", false);
     }
     if (bEnabled && _nRow < (nRowCount - 1) )
     {
-        m_pToolBox->EnableItem(m_nMoveDownId);
+        m_xToolBox->set_item_sensitive("down", true);
     }
     else
     {
-        m_pToolBox->EnableItem(m_nMoveDownId, false);
+        m_xToolBox->set_item_sensitive("down", false);
     }
 
-    sal_Int32 nGroupPos = m_pFieldExpression->getGroupPosition(_nRow);
+    sal_Int32 nGroupPos = m_xFieldExpression->getGroupPosition(_nRow);
     if ( nGroupPos != NO_GROUP )
     {
         bool bEnableDelete = nGroupCount > 0;
-        m_pToolBox->EnableItem(m_nDeleteId, bEnableDelete);
+        m_xToolBox->set_item_sensitive("delete", bEnableDelete);
     }
     else
     {
-        m_pToolBox->EnableItem(m_nDeleteId, false);
+        m_xToolBox->set_item_sensitive("delete", false);
     }
 }
 
diff --git a/reportdesign/source/ui/inc/GroupsSorting.hxx b/reportdesign/source/ui/inc/GroupsSorting.hxx
index 2c4be48ab602..17a6e517e824 100644
--- a/reportdesign/source/ui/inc/GroupsSorting.hxx
+++ b/reportdesign/source/ui/inc/GroupsSorting.hxx
@@ -19,14 +19,6 @@
 #ifndef INCLUDED_REPORTDESIGN_SOURCE_UI_INC_GROUPSSORTING_HXX
 #define INCLUDED_REPORTDESIGN_SOURCE_UI_INC_GROUPSSORTING_HXX
 
-#include <vcl/floatwin.hxx>
-#include <vcl/fixed.hxx>
-#include <vcl/layout.hxx>
-#include <vcl/lstbox.hxx>
-#include <vcl/edit.hxx>
-#include <vcl/field.hxx>
-#include <vcl/button.hxx>
-#include <vcl/toolbox.hxx>
 #include <com/sun/star/report/XGroups.hpp>
 #include <com/sun/star/report/XGroup.hpp>
 #include <com/sun/star/container/XNameAccess.hpp>
@@ -34,10 +26,13 @@
 #include <comphelper/propmultiplex.hxx>
 #include <cppuhelper/basemutex.hxx>
 #include <rtl/ref.hxx>
+#include <vcl/weld.hxx>
 #include <osl/diagnose.h>
 
 #include <vector>
 
+class Control;
+
 namespace comphelper
 {
     class OPropertyChangeMultiplexer;
@@ -52,38 +47,40 @@ class OReportController;
 |*
 \************************************************************************/
 
-class OGroupsSortingDialog :    public FloatingWindow
-                           ,    public ::cppu::BaseMutex
-                           ,    public ::comphelper::OPropertyChangeListener
+class OGroupsSortingDialog : public weld::GenericDialogController
+                           , public ::cppu::BaseMutex
+                           , public ::comphelper::OPropertyChangeListener
 {
     friend class OFieldExpressionControl;
 
-    VclPtr<ToolBox>                                m_pToolBox;
-    sal_uInt16                              m_nMoveUpId;
-    sal_uInt16                              m_nMoveDownId;
-    sal_uInt16                              m_nDeleteId;
-
-    VclPtr<VclContainer>                           m_pProperties;
-    VclPtr<ListBox>                                m_pOrderLst;
-    VclPtr<ListBox>                                m_pHeaderLst;
-    VclPtr<ListBox>                                m_pFooterLst;
-    VclPtr<ListBox>                                m_pGroupOnLst;
-    VclPtr<NumericField>                           m_pGroupIntervalEd;
-    VclPtr<ListBox>                                m_pKeepTogetherLst;
-    VclPtr<FixedText>                              m_pHelpWindow;
-
-    VclPtr<OFieldExpressionControl>                m_pFieldExpression;
     ::rptui::OReportController*                    m_pController;
     ::rtl::Reference< comphelper::OPropertyChangeMultiplexer>                       m_pCurrentGroupListener;
     ::rtl::Reference< comphelper::OPropertyChangeMultiplexer>                       m_pReportListener;
     css::uno::Reference< css::report::XGroups>            m_xGroups;
     css::uno::Reference< css::container::XNameAccess >    m_xColumns;
     bool const                                            m_bReadOnly;
+
+    std::unique_ptr<weld::Toolbar>          m_xToolBox;
+    std::unique_ptr<weld::Widget>           m_xProperties;
+    std::unique_ptr<weld::ComboBox>         m_xOrderLst;
+    std::unique_ptr<weld::ComboBox>         m_xHeaderLst;
+    std::unique_ptr<weld::ComboBox>         m_xFooterLst;
+    std::unique_ptr<weld::ComboBox>         m_xGroupOnLst;
+    std::unique_ptr<weld::SpinButton>       m_xGroupIntervalEd;
+    std::unique_ptr<weld::ComboBox>         m_xKeepTogetherLst;
+    std::unique_ptr<weld::Label>            m_xHelpWindow;
+    std::unique_ptr<weld::Container>        m_xBox;
+    css::uno::Reference<css::awt::XWindow>  m_xTableCtrlParent;
+    VclPtr<OFieldExpressionControl>         m_xFieldExpression;
+
 private:
-    DECL_LINK( OnControlFocusLost, Control&, void );
+    DECL_LINK( OnWidgetFocusLost, weld::Widget&, void );
+    DECL_LINK( OnWidgetFocusGot, weld::Widget&, void );
+
     DECL_LINK( OnControlFocusGot, Control&, void );
-    DECL_LINK( LBChangeHdl, ListBox&, void );
-    DECL_LINK( OnFormatAction, ToolBox*, void );
+
+    DECL_LINK( LBChangeHdl, weld::ComboBox&, void );
+    DECL_LINK( OnFormatAction, const OString&, void );
 
     /** returns the groups
         @return the groups which now have to check which one changes
@@ -135,11 +132,10 @@ protected:
     // OPropertyChangeListener
     virtual void    _propertyChanged(const css::beans::PropertyChangeEvent& _rEvent) override;
 public:
-    OGroupsSortingDialog( vcl::Window* pParent
-                        ,bool _bReadOnly
-                        ,::rptui::OReportController* _pController);
+    OGroupsSortingDialog(weld::Window* pParent,
+                         bool _bReadOnly,
+                         ::rptui::OReportController* _pController);
     virtual ~OGroupsSortingDialog() override;
-    virtual void dispose() override;
 
     /* updates the current view
     */
diff --git a/reportdesign/source/ui/inc/ReportController.hxx b/reportdesign/source/ui/inc/ReportController.hxx
index 9fc568604e16..94fa805740a0 100644
--- a/reportdesign/source/ui/inc/ReportController.hxx
+++ b/reportdesign/source/ui/inc/ReportController.hxx
@@ -89,7 +89,7 @@ namespace rptui
         TransferableDataHelper  m_aSystemClipboard;     // content of the clipboard
         rtl::Reference<TransferableClipboardListener>
                                 m_pClipboardNotifier;    /// notifier for changes in the clipboard
-        VclPtr<OGroupsSortingDialog>   m_pGroupsFloater;
+        std::shared_ptr<OGroupsSortingDialog> m_xGroupsFloater;
 
         rtl::Reference<OXReportControllerObserver> m_pReportControllerObserver;
 
diff --git a/reportdesign/source/ui/report/ReportController.cxx b/reportdesign/source/ui/report/ReportController.cxx
index 133275e9f43d..a33e34098a23 100644
--- a/reportdesign/source/ui/report/ReportController.cxx
+++ b/reportdesign/source/ui/report/ReportController.cxx
@@ -280,7 +280,6 @@ OReportController::OReportController(Reference< XComponentContext > const & xCon
     :OReportController_BASE(xContext)
     ,OPropertyStateContainer(OGenericUnoController_Base::rBHelper)
     ,m_aSelectionListeners( getMutex() )
-    ,m_pGroupsFloater(nullptr)
     ,m_sMode("normal")
     ,m_nSplitPos(-1)
     ,m_nPageNum(-1)
@@ -321,11 +320,13 @@ void OReportController::disposing()
         m_pClipboardNotifier->RemoveListener( getView() );
         m_pClipboardNotifier.clear();
     }
-    if ( m_pGroupsFloater )
+    if ( m_xGroupsFloater )
     {
-        SvtViewOptions aDlgOpt(EViewType::Window, OStringToOUString(m_pGroupsFloater->GetHelpId(), RTL_TEXTENCODING_UTF8));
-        aDlgOpt.SetWindowState(OStringToOUString(m_pGroupsFloater->GetWindowState(), RTL_TEXTENCODING_ASCII_US));
-        m_pGroupsFloater.disposeAndClear();
+        SvtViewOptions aDlgOpt(EViewType::Window, OStringToOUString(m_xGroupsFloater->get_help_id(), RTL_TEXTENCODING_UTF8));
+        aDlgOpt.SetWindowState(OStringToOUString(m_xGroupsFloater->getDialog()->get_window_state(WindowStateMask::All), RTL_TEXTENCODING_ASCII_US));
+        if (m_xGroupsFloater->getDialog()->get_visible())
+            m_xGroupsFloater->response(RET_CANCEL);
+        m_xGroupsFloater.reset();
     }
 
     try
@@ -808,7 +809,7 @@ FeatureState OReportController::GetState(sal_uInt16 _nId) const
             break;
         case SID_SORTINGANDGROUPING:
             aReturn.bEnabled = true;
-            aReturn.bChecked = m_pGroupsFloater && m_pGroupsFloater->IsVisible();
+            aReturn.bChecked = m_xGroupsFloater && m_xGroupsFloater->getDialog()->get_visible();
             break;
         case SID_ATTR_CHAR_WEIGHT:
         case SID_ATTR_CHAR_POSTURE:
@@ -1019,8 +1020,8 @@ void OReportController::Execute(sal_uInt16 _nId, const Sequence< PropertyValue >
             SfxUndoManager& rUndoManager( getUndoManager() );
             (rUndoManager.*doXDo)();
             InvalidateAll();
-            if ( m_pGroupsFloater && m_pGroupsFloater->IsVisible() )
-                m_pGroupsFloater->UpdateData();
+            if (m_xGroupsFloater && m_xGroupsFloater->getDialog()->get_visible())
+                m_xGroupsFloater->UpdateData();
         }
         break;
         case SID_CUT:
@@ -2521,16 +2522,20 @@ void OReportController::openSortingAndGroupingDialog()
 {
     if ( !m_xReportDefinition.is() )
         return;
-    if ( !m_pGroupsFloater )
+    if (!m_xGroupsFloater)
     {
-        m_pGroupsFloater = VclPtr<OGroupsSortingDialog>::Create(getView(),!isEditable(),this);
-        SvtViewOptions aDlgOpt(EViewType::Window, OStringToOUString(m_pGroupsFloater->GetHelpId(), RTL_TEXTENCODING_UTF8));
+        m_xGroupsFloater = std::make_shared<OGroupsSortingDialog>(getFrameWeld(), !isEditable(), this);
+        SvtViewOptions aDlgOpt(EViewType::Window, OStringToOUString(m_xGroupsFloater->get_help_id(), RTL_TEXTENCODING_UTF8));
         if ( aDlgOpt.Exists() )
-            m_pGroupsFloater->SetWindowState(OUStringToOString(aDlgOpt.GetWindowState(), RTL_TEXTENCODING_ASCII_US));
-        m_pGroupsFloater->AddEventListener(LINK(this,OReportController,EventLstHdl));
+            m_xGroupsFloater->getDialog()->set_window_state(OUStringToOString(aDlgOpt.GetWindowState(), RTL_TEXTENCODING_ASCII_US));
+    }
+    if (isUiVisible())
+    {
+        if (!m_xGroupsFloater->getDialog()->get_visible())
+            weld::DialogController::runAsync(m_xGroupsFloater, [this](sal_Int32 /*nResult*/) { m_xGroupsFloater.reset(); });
+        else
+            m_xGroupsFloater->response(RET_CANCEL);
     }
-    else if ( isUiVisible() )
-        m_pGroupsFloater->Show(!m_pGroupsFloater->IsVisible());
 }
 
 sal_Int32 OReportController::getGroupPosition(const uno::Reference< report::XGroup >& _xGroup)
diff --git a/reportdesign/uiconfig/dbreport/ui/floatingsort.ui b/reportdesign/uiconfig/dbreport/ui/floatingsort.ui
index a65ff5d7973f..e6d13f27e8c7 100644
--- a/reportdesign/uiconfig/dbreport/ui/floatingsort.ui
+++ b/reportdesign/uiconfig/dbreport/ui/floatingsort.ui
@@ -1,450 +1,448 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="rpt">
   <requires lib="gtk+" version="3.18"/>
-  <object class="GtkWindow" id="FloatingSort">
-    <property name="visible">True</property>
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkDialog" id="FloatingSort">
     <property name="can_focus">False</property>
-    <property name="hexpand">True</property>
-    <property name="vexpand">True</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="floatingsort|FloatingSort">Sorting and Grouping</property>
-    <property name="type_hint">utility</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
+    <property name="type_hint">dialog</property>
     <child>
-      <object class="GtkGrid" id="grid1">
-        <property name="visible">True</property>
+      <placeholder/>
+    </child>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
         <property name="hexpand">True</property>
         <property name="vexpand">True</property>
-        <property name="row_spacing">12</property>
+        <property name="orientation">vertical</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox">
+            <property name="can_focus">False</property>
+            <property name="no_show_all">True</property>
+            <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="GtkFrame" id="frame1">
+          <object class="GtkGrid" id="grid1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="hexpand">True</property>
             <property name="vexpand">True</property>
-            <property name="label_xalign">0</property>
-            <property name="shadow_type">none</property>
+            <property name="row_spacing">12</property>
             <child>
-              <object class="GtkAlignment" id="alignment1">
+              <object class="GtkFrame" id="frame1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="hexpand">True</property>
                 <property name="vexpand">True</property>
-                <property name="top_padding">6</property>
-                <property name="left_padding">12</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkGrid" id="grid2">
+                  <object class="GtkAlignment" id="alignment1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="hexpand">True</property>
                     <property name="vexpand">True</property>
-                    <property name="row_spacing">6</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
                     <child>
-                      <object class="GtkGrid" id="grid3">
+                      <object class="GtkGrid" id="grid2">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="column_spacing">12</property>
-                        <child>
-                          <object class="GtkLabel" id="label5">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes" context="floatingsort|label5">Group actions</property>
-                            <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">toolbox</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">0</property>
-                            <property name="top_attach">0</property>
-                            <property name="width">1</property>
-                            <property name="height">1</property>
-                          </packing>
-                        </child>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="row_spacing">6</property>
                         <child>
-                          <object class="GtkToolbar" id="toolbox">
+                          <object class="GtkGrid" id="grid3">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="halign">end</property>
-                            <property name="hexpand">True</property>
-                            <property name="toolbar_style">icons</property>
+                            <property name="column_spacing">12</property>
                             <child>
-                              <object class="GtkToolButton" id="up">
+                              <object class="GtkLabel" id="label5">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes" context="floatingsort|up">Move up</property>
+                                <property name="label" translatable="yes" context="floatingsort|label5">Group actions</property>
                                 <property name="use_underline">True</property>
-                                <property name="icon_name">cmd/sc_moveup.png</property>
+                                <property name="mnemonic_widget">toolbox</property>
+                                <property name="xalign">0</property>
                               </object>
                               <packing>
-                                <property name="expand">False</property>
-                                <property name="homogeneous">True</property>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkToolButton" id="down">
+                              <object class="GtkToolbar" id="toolbox">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes" context="floatingsort|down">Move down</property>
-                                <property name="use_underline">True</property>
-                                <property name="icon_name">cmd/sc_movedown.png</property>
+                                <property name="halign">end</property>
+                                <property name="hexpand">True</property>
+                                <property name="toolbar_style">icons</property>
+                                <child>
+                                  <object class="GtkToolButton" id="up">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes" context="floatingsort|up">Move up</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="icon_name">cmd/sc_moveup.png</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="homogeneous">False</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkToolButton" id="down">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes" context="floatingsort|down">Move down</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="icon_name">cmd/sc_movedown.png</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="homogeneous">False</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkToolButton" id="delete">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes" context="floatingsort|delete">Delete</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="icon_name">cmd/sc_deleterows.png</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="homogeneous">False</property>
+                                  </packing>
+                                </child>
                               </object>
                               <packing>
-                                <property name="expand">False</property>
-                                <property name="homogeneous">True</property>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
                               </packing>
                             </child>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="box">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                            <property name="orientation">vertical</property>
                             <child>
-                              <object class="GtkToolButton" id="delete">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="label" translatable="yes" context="floatingsort|delete">Delete</property>
-                                <property name="use_underline">True</property>
-                                <property name="icon_name">cmd/sc_deleterows.png</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="homogeneous">True</property>
-                              </packing>
+                              <placeholder/>
                             </child>
                           </object>
                           <packing>
-                            <property name="left_attach">1</property>
+                            <property name="left_attach">0</property>
                             <property name="top_attach">0</property>
-                            <property name="width">1</property>
-                            <property name="height">1</property>
                           </packing>
                         </child>
                       </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">1</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkBox" id="box">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="hexpand">True</property>
-                        <property name="vexpand">True</property>
-                        <property name="orientation">vertical</property>
-                        <child>
-                          <placeholder/>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">0</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
                     </child>
                   </object>
                 </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes" context="floatingsort|label1">Groups</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                </child>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+              </packing>
             </child>
-            <child type="label">
-              <object class="GtkLabel" id="label1">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes" context="floatingsort|label1">Groups</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                </attributes>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">0</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkFrame" id="properties">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="hexpand">True</property>
-            <property name="label_xalign">0</property>
-            <property name="shadow_type">none</property>
             <child>
-              <object class="GtkAlignment" id="alignment2">
+              <object class="GtkFrame" id="properties">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="hexpand">True</property>
-                <property name="top_padding">6</property>
-                <property name="left_padding">12</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkGrid" id="grid4">
+                  <object class="GtkAlignment" id="alignment2">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="hexpand">True</property>
-                    <property name="row_spacing">6</property>
-                    <property name="column_spacing">12</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
                     <child>
-                      <object class="GtkLabel" id="label6">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes" context="floatingsort|label6">Sorting</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">sorting</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">0</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label7">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes" context="floatingsort|label7">Group Header</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">header</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">1</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label8">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes" context="floatingsort|label8">Group Footer</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">footer</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">2</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label9">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes" context="floatingsort|label9">Group On</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">group</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">3</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label10">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes" context="floatingsort|label10">Group Interval</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">interval</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">4</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label11">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes" context="floatingsort|label11">Keep Together</property>
-                        <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">keep</property>
-                      </object>
-                      <packing>
-                        <property name="left_attach">0</property>
-                        <property name="top_attach">5</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBoxText" id="sorting">
+                      <object class="GtkGrid" id="grid4">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="hexpand">True</property>
-                        <property name="active">0</property>
-                        <items>
-                          <item translatable="yes" context="floatingsort|sorting">Ascending</item>
-                          <item translatable="yes" context="floatingsort|sorting">Descending</item>
-                        </items>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">0</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBoxText" id="header">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="hexpand">True</property>
-                        <property name="active">0</property>
-                        <items>
-                          <item translatable="yes" context="floatingsort|header">Present</item>
-                          <item translatable="yes" context="floatingsort|header">Not present</item>
-                        </items>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">1</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBoxText" id="keep">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="hexpand">True</property>
-                        <property name="active">0</property>
-                        <items>
-                          <item translatable="yes" context="floatingsort|keep">No</item>
-                          <item translatable="yes" context="floatingsort|keep">Whole Group</item>
-                          <item translatable="yes" context="floatingsort|keep">With First Detail</item>
-                        </items>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">5</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBoxText" id="footer">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="hexpand">True</property>
-                        <property name="active">1</property>
-                        <items>
-                          <item translatable="yes" context="floatingsort|footer">Present</item>
-                          <item translatable="yes" context="floatingsort|footer">Not present</item>
-                        </items>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">2</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkComboBoxText" id="group">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="hexpand">True</property>
-                        <property name="active">0</property>
-                        <items>
-                          <item translatable="yes" context="floatingsort|group">Each Value</item>
-                        </items>
-                      </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">3</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkSpinButton" id="interval">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="hexpand">True</property>
+                        <property name="row_spacing">6</property>
+                        <property name="column_spacing">12</property>
+                        <child>
+                          <object class="GtkLabel" id="label6">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="floatingsort|label6">Sorting</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">sorting</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="GtkLabel" id="label7">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="floatingsort|label7">Group Header</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">header</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="GtkLabel" id="label8">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="floatingsort|label8">Group Footer</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">footer</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="GtkLabel" id="label9">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="floatingsort|label9">Group On</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">group</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="GtkLabel" id="label10">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="floatingsort|label10">Group Interval</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">interval</property>
+                            <property name="xalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">4</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label11">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes" context="floatingsort|label11">Keep Together</property>
+                            <property name="use_underline">True</property>
+                            <property name="mnemonic_widget">keep</property>
+                            <property name="xalign">0</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">0</property>
+                            <property name="top_attach">5</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkComboBoxText" id="sorting">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="active">0</property>
+                            <items>
+                              <item translatable="yes" context="floatingsort|sorting">Ascending</item>
+                              <item translatable="yes" context="floatingsort|sorting">Descending</item>
+                            </items>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkComboBoxText" id="header">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="active">0</property>
+                            <items>
+                              <item translatable="yes" context="floatingsort|header">Present</item>
+                              <item translatable="yes" context="floatingsort|header">Not present</item>
+                            </items>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkComboBoxText" id="keep">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="active">0</property>
+                            <items>
+                              <item translatable="yes" context="floatingsort|keep">No</item>
+                              <item translatable="yes" context="floatingsort|keep">Whole Group</item>
+                              <item translatable="yes" context="floatingsort|keep">With First Detail</item>
+                            </items>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">5</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkComboBoxText" id="footer">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="active">1</property>
+                            <items>
+                              <item translatable="yes" context="floatingsort|footer">Present</item>
+                              <item translatable="yes" context="floatingsort|footer">Not present</item>
+                            </items>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">2</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkComboBoxText" id="group">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="hexpand">True</property>
+                            <property name="active">0</property>
+                            <items>
+                              <item translatable="yes" context="floatingsort|group">Each Value</item>
+                            </items>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">3</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkSpinButton" id="interval">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
+                            <property name="activates_default">True</property>
+                            <property name="adjustment">adjustment1</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">4</property>
+                          </packing>
+                        </child>
                       </object>
-                      <packing>
-                        <property name="left_attach">1</property>
-                        <property name="top_attach">4</property>
-                        <property name="width">1</property>
-                        <property name="height">1</property>
-                      </packing>
                     </child>
                   </object>
                 </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes" context="floatingsort|label2">Properties</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                </child>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+              </packing>
             </child>
-            <child type="label">
-              <object class="GtkLabel" id="label2">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes" context="floatingsort|label2">Properties</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                </attributes>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">1</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkFrame" id="frame3">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label_xalign">0</property>
-            <property name="shadow_type">none</property>
             <child>
-              <object class="GtkAlignment" id="alignment3">
+              <object class="GtkFrame" id="frame3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="top_padding">6</property>
-                <property name="left_padding">12</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkLabel" id="helptext">
+                  <object class="GtkAlignment" id="alignment3">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="yalign">0</property>
-                    <property name="wrap">True</property>
-                    <property name="max_width_chars">52</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <object class="GtkLabel" id="helptext">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="wrap">True</property>
+                        <property name="max_width_chars">52</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkLabel" id="label3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes" context="floatingsort|label3">Help</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
                   </object>
                 </child>
               </object>
-            </child>
-            <child type="label">
-              <object class="GtkLabel" id="label3">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="label" translatable="yes" context="floatingsort|label3">Help</property>
-                <attributes>
-                  <attribute name="weight" value="bold"/>
-                </attributes>
-              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+              </packing>
             </child>
           </object>
           <packing>
-            <property name="left_attach">0</property>
-            <property name="top_attach">2</property>
-            <property name="width">1</property>
-            <property name="height">1</property>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>


More information about the Libreoffice-commits mailing list