[Libreoffice-commits] core.git: include/vcl sw/source sw/uiconfig vcl/source vcl/unx

Caolán McNamara caolanm at redhat.com
Fri May 4 20:11:19 UTC 2018


 include/vcl/weld.hxx                          |    5 
 sw/source/ui/misc/num.cxx                     |  453 ++++++++++----------------
 sw/source/uibase/inc/num.hxx                  |   92 ++---
 sw/uiconfig/swriter/ui/outlinepositionpage.ui |  128 +++----
 vcl/source/app/salvtables.cxx                 |   12 
 vcl/unx/gtk3/gtk3gtkinst.cxx                  |   17 
 6 files changed, 336 insertions(+), 371 deletions(-)

New commits:
commit 2cab4acbe2aaaee6e5b9afeb68f3e555ecff2ec7
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri May 4 12:24:24 2018 +0100

    weld SwNumPositionTabPage
    
    Change-Id: I12171eb00d5b8354456b629d58d20b22109e24f8
    Reviewed-on: https://gerrit.libreoffice.org/53845
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 9e58e585a533..6c1078a04457 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -309,6 +309,7 @@ public:
     //by index
     virtual int get_selected_index() const = 0;
     virtual void select(int pos) = 0;
+    virtual void unselect(int pos) = 0;
     virtual void remove(int pos) = 0;
     virtual void set_top_entry(int pos) = 0;
     virtual std::vector<int> get_selected_rows() const = 0;
@@ -334,6 +335,10 @@ public:
     virtual int find_id(const OUString& rId) const = 0;
     OUString get_selected_id() const { return get_id(get_selected_index()); }
     void select_id(const OUString& rId) { select(find_id(rId)); }
+
+    //all of them
+    void select_all() { unselect(-1); }
+    void unselect_all() { select(-1); }
 };
 
 class VCL_DLLPUBLIC Button : virtual public Container
diff --git a/sw/source/ui/misc/num.cxx b/sw/source/ui/misc/num.cxx
index 2f7bb7c41fcf..28b4ba9ca185 100644
--- a/sw/source/ui/misc/num.cxx
+++ b/sw/source/ui/misc/num.cxx
@@ -54,10 +54,8 @@ static bool bLastRelative = false;
 //dialog to this one, except with a different preview window impl.
 //TODO, determine if SwNumPositionTabPage and SvxNumPositionTabPage can be
 //merged
-SwNumPositionTabPage::SwNumPositionTabPage(vcl::Window* pParent,
-                               const SfxItemSet& rSet)
-    : SfxTabPage(pParent, "OutlinePositionPage",
-        "modules/swriter/ui/outlinepositionpage.ui", &rSet)
+SwNumPositionTabPage::SwNumPositionTabPage(TabPageParent pParent, const SfxItemSet& rSet)
+    : SfxTabPage(pParent, "modules/swriter/ui/outlinepositionpage.ui", "OutlinePositionPage", &rSet)
     , pActNum(nullptr)
     , pSaveNum(nullptr)
     , pWrtSh(nullptr)
@@ -67,94 +65,73 @@ SwNumPositionTabPage::SwNumPositionTabPage(vcl::Window* pParent,
     , bPreset(false)
     , bInInintControl(false)
     , bLabelAlignmentPosAndSpaceModeActive(false)
+    , m_xLevelLB(m_xBuilder->weld_tree_view("levellb"))
+    , m_xPositionFrame(m_xBuilder->weld_widget("numberingframe"))
+    , m_xDistBorderFT(m_xBuilder->weld_label("indent"))
+    , m_xDistBorderMF(m_xBuilder->weld_metric_spin_button("indentmf", FUNIT_CM))
+    , m_xRelativeCB(m_xBuilder->weld_check_button("relative"))
+    , m_xIndentFT(m_xBuilder->weld_label("numberingwidth"))
+    , m_xIndentMF(m_xBuilder->weld_metric_spin_button("numberingwidthmf", FUNIT_CM))
+    , m_xDistNumFT(m_xBuilder->weld_label("numdist"))
+    , m_xDistNumMF(m_xBuilder->weld_metric_spin_button("numdistmf", FUNIT_CM))
+    , m_xAlignFT(m_xBuilder->weld_label("numalign"))
+    , m_xAlignLB(m_xBuilder->weld_combo_box_text("numalignlb"))
+    , m_xLabelFollowedByFT(m_xBuilder->weld_label("numfollowedby"))
+    , m_xLabelFollowedByLB(m_xBuilder->weld_combo_box_text("numfollowedbylb"))
+    , m_xListtabFT(m_xBuilder->weld_label("at"))
+    , m_xListtabMF(m_xBuilder->weld_metric_spin_button("atmf", FUNIT_CM))
+    , m_xAlign2FT(m_xBuilder->weld_label("num2align"))
+    , m_xAlign2LB(m_xBuilder->weld_combo_box_text("num2alignlb"))
+    , m_xAlignedAtFT(m_xBuilder->weld_label("alignedat"))
+    , m_xAlignedAtMF(m_xBuilder->weld_metric_spin_button("alignedatmf", FUNIT_CM))
+    , m_xIndentAtFT(m_xBuilder->weld_label("indentat"))
+    , m_xIndentAtMF(m_xBuilder->weld_metric_spin_button("indentatmf", FUNIT_CM))
+    , m_xStandardPB(m_xBuilder->weld_button("standard"))
+    , m_xPreviewWIN(new SwNumberingPreview(m_xBuilder->weld_drawing_area("preview")))
 {
-    get(m_pLevelLB, "levellb");
-    m_pLevelLB->EnableMultiSelection(true);
-    get(m_pPositionFrame, "numberingframe");
-    get(m_pDistBorderFT, "indent");
-    get(m_pDistBorderMF, "indentmf");
-    get(m_pRelativeCB, "relative");
-    get(m_pIndentFT, "numberingwidth");
-    get(m_pIndentMF, "numberingwidthmf");
-    get(m_pDistNumFT, "numdist");
-    get(m_pDistNumMF, "numdistmf");
-    get(m_pAlignFT, "numalign");
-    get(m_pAlignLB, "numalignlb");
-
-    get(m_pLabelFollowedByFT, "numfollowedby");
-    get(m_pLabelFollowedByLB, "numfollowedbylb");
-    get(m_pListtabFT, "at");
-    get(m_pListtabMF, "atmf");
-    get(m_pAlign2FT, "num2align");
-    get(m_pAlign2LB, "num2alignlb");
-    get(m_pAlignedAtFT, "alignedat");
-    get(m_pAlignedAtMF, "alignedatmf");
-    get(m_pIndentAtFT, "indentat");
-    get(m_pIndentAtMF, "indentatmf");
-    get(m_pStandardPB, "standard");
-
-    get(m_pPreviewWIN, "preview");
-
     SetExchangeSupport();
-    m_pPreviewWIN->SetBackground(Wallpaper(COL_TRANSPARENT));
 
-    m_pRelativeCB->Check();
-    m_pAlignLB->SetSelectHdl(LINK(this, SwNumPositionTabPage, EditModifyHdl));
-    m_pAlign2LB->SetSelectHdl(LINK(this, SwNumPositionTabPage, EditModifyHdl));
-    for ( sal_Int32 i = 0; i < m_pAlignLB->GetEntryCount(); ++i )
+    m_xLevelLB->set_selection_mode(true);
+
+    m_xRelativeCB->set_active(true);
+    m_xAlignLB->connect_changed(LINK(this, SwNumPositionTabPage, EditModifyHdl));
+    m_xAlign2LB->connect_changed(LINK(this, SwNumPositionTabPage, EditModifyHdl));
+    for (int i = 0; i < m_xAlignLB->get_count(); ++i)
     {
-        m_pAlign2LB->InsertEntry( m_pAlignLB->GetEntry( i ) );
+        m_xAlign2LB->append_text(m_xAlignLB->get_text(i));
     }
-    m_pAlign2LB->SetDropDownLineCount( m_pAlign2LB->GetEntryCount() );
-    m_pAlign2FT->SetText( m_pAlignFT->GetText() );
-
-    Link<SpinField&,void> aLk = LINK(this, SwNumPositionTabPage, DistanceHdl);
-    Link<Control&,void> aLk2 = LINK(this, SwNumPositionTabPage, DistanceLoseFocusHdl);
-    m_pDistBorderMF->SetUpHdl(aLk);
-    m_pDistNumMF->SetUpHdl(aLk);
-    m_pIndentMF->SetUpHdl(aLk);
-    m_pDistBorderMF->SetDownHdl(aLk);
-    m_pDistNumMF->SetDownHdl(aLk);
-    m_pIndentMF->SetDownHdl(aLk);
-    m_pDistBorderMF->SetLoseFocusHdl(aLk2);
-    m_pDistNumMF->SetLoseFocusHdl(aLk2);
-    m_pIndentMF->SetLoseFocusHdl(aLk2);
-
-    m_pLabelFollowedByLB->SetDropDownLineCount( m_pLabelFollowedByLB->GetEntryCount() );
-    m_pLabelFollowedByLB->SetSelectHdl( LINK(this, SwNumPositionTabPage, LabelFollowedByHdl_Impl) );
+    m_xAlign2FT->set_label(m_xAlignFT->get_label());
+
+    Link<weld::MetricSpinButton&, void> aLk = LINK(this, SwNumPositionTabPage, DistanceHdl);
+    m_xDistBorderMF->connect_value_changed(aLk);
+    m_xDistNumMF->connect_value_changed(aLk);
+    m_xIndentMF->connect_value_changed(aLk);
+
+    m_xLabelFollowedByLB->connect_changed( LINK(this, SwNumPositionTabPage, LabelFollowedByHdl_Impl) );
 
     aLk = LINK(this, SwNumPositionTabPage, ListtabPosHdl_Impl);
-    aLk2 = LINK(this, SwNumPositionTabPage, ListtabPosFocusHdl_Impl);
-    m_pListtabMF->SetUpHdl(aLk);
-    m_pListtabMF->SetDownHdl(aLk);
-    m_pListtabMF->SetLoseFocusHdl(aLk2);
+    m_xListtabMF->connect_value_changed(aLk);
 
     aLk = LINK(this, SwNumPositionTabPage, AlignAtHdl_Impl);
-    aLk2 = LINK(this, SwNumPositionTabPage, AlignAtFocusHdl_Impl);
-    m_pAlignedAtMF->SetUpHdl(aLk);
-    m_pAlignedAtMF->SetDownHdl(aLk);
-    m_pAlignedAtMF->SetLoseFocusHdl(aLk2);
+    m_xAlignedAtMF->connect_value_changed(aLk);
 
     aLk = LINK(this, SwNumPositionTabPage, IndentAtHdl_Impl);
-    aLk2 = LINK(this, SwNumPositionTabPage, IndentAtFocusHdl_Impl);
-    m_pIndentAtMF->SetUpHdl(aLk);
-    m_pIndentAtMF->SetDownHdl(aLk);
-    m_pIndentAtMF->SetLoseFocusHdl(aLk2);
+    m_xIndentAtMF->connect_value_changed(aLk);
 
-    m_pLevelLB->SetSelectHdl(LINK(this, SwNumPositionTabPage, LevelHdl));
-    m_pRelativeCB->SetClickHdl(LINK(this, SwNumPositionTabPage, RelativeHdl));
-    m_pStandardPB->SetClickHdl(LINK(this, SwNumPositionTabPage, StandardHdl));
+    m_xLevelLB->connect_changed(LINK(this, SwNumPositionTabPage, LevelHdl));
+    m_xRelativeCB->connect_toggled(LINK(this, SwNumPositionTabPage, RelativeHdl));
+    m_xStandardPB->connect_clicked(LINK(this, SwNumPositionTabPage, StandardHdl));
 
     // insert levels
     for(sal_uInt16 i = 1; i <= MAXLEVEL; i++)
-        m_pLevelLB->InsertEntry(OUString::number(i));
+        m_xLevelLB->append_text(OUString::number(i));
     OUString sEntry("1 - ");
     sEntry += OUString::number(MAXLEVEL);
-    m_pLevelLB->InsertEntry(sEntry);
-    m_pLevelLB->SelectEntry(sEntry);
+    m_xLevelLB->append_text(sEntry);
+    m_xLevelLB->select_text(sEntry);
 
-    m_pRelativeCB->Check(bLastRelative);
-    m_pPreviewWIN->SetPositionMode();
+    m_xRelativeCB->set_active(bLastRelative);
+    m_xPreviewWIN->SetPositionMode();
 }
 
 SwNumPositionTabPage::~SwNumPositionTabPage()
@@ -165,29 +142,6 @@ SwNumPositionTabPage::~SwNumPositionTabPage()
 void SwNumPositionTabPage::dispose()
 {
     delete pActNum;
-    m_pLevelLB.clear();
-    m_pPositionFrame.clear();
-    m_pDistBorderFT.clear();
-    m_pDistBorderMF.clear();
-    m_pRelativeCB.clear();
-    m_pIndentFT.clear();
-    m_pIndentMF.clear();
-    m_pDistNumFT.clear();
-    m_pDistNumMF.clear();
-    m_pAlignFT.clear();
-    m_pAlignLB.clear();
-    m_pLabelFollowedByFT.clear();
-    m_pLabelFollowedByLB.clear();
-    m_pListtabFT.clear();
-    m_pListtabMF.clear();
-    m_pAlign2FT.clear();
-    m_pAlign2LB.clear();
-    m_pAlignedAtFT.clear();
-    m_pAlignedAtMF.clear();
-    m_pIndentAtFT.clear();
-    m_pIndentAtMF.clear();
-    m_pStandardPB.clear();
-    m_pPreviewWIN.clear();
     pOutlineDlg.clear();
     SfxTabPage::dispose();
 }
@@ -196,13 +150,13 @@ void SwNumPositionTabPage::InitControls()
 {
     bInInintControl = true;
     const bool bRelative = !bLabelAlignmentPosAndSpaceModeActive &&
-                           m_pRelativeCB->IsEnabled() && m_pRelativeCB->IsChecked();
-    const bool bSingleSelection = m_pLevelLB->GetSelectedEntryCount() == 1 &&
+                           m_xRelativeCB->get_sensitive() && m_xRelativeCB->get_active();
+    const bool bSingleSelection = m_xLevelLB->count_selected_rows() == 1 &&
                                   USHRT_MAX != nActNumLvl;
 
-    m_pDistBorderMF->Enable( !bLabelAlignmentPosAndSpaceModeActive &&
+    m_xDistBorderMF->set_sensitive( !bLabelAlignmentPosAndSpaceModeActive &&
                           ( bSingleSelection || bRelative || pOutlineDlg.get() != nullptr ) );
-    m_pDistBorderFT->Enable( !bLabelAlignmentPosAndSpaceModeActive &&
+    m_xDistBorderFT->set_sensitive( !bLabelAlignmentPosAndSpaceModeActive &&
                           ( bSingleSelection || bRelative || pOutlineDlg.get() != nullptr ) );
 
     bool bSetDistEmpty = false;
@@ -290,19 +244,19 @@ void SwNumPositionTabPage::InitControls()
         {
             nDistBorderNum = static_cast<long>(aNumFormatArr[nLvl]->GetAbsLSpace())+ aNumFormatArr[nLvl]->GetFirstLineOffset();
         }
-        m_pDistBorderMF->SetValue(m_pDistBorderMF->Normalize(nDistBorderNum),FUNIT_TWIP);
+        m_xDistBorderMF->set_value(m_xDistBorderMF->normalize(nDistBorderNum),FUNIT_TWIP);
     }
     else
         bSetDistEmpty = true;
 
     if(bSameDist)
-        m_pDistNumMF->SetValue(m_pDistNumMF->Normalize(aNumFormatArr[nLvl]->GetCharTextDistance()), FUNIT_TWIP);
+        m_xDistNumMF->set_value(m_xDistNumMF->normalize(aNumFormatArr[nLvl]->GetCharTextDistance()), FUNIT_TWIP);
     else
-        m_pDistNumMF->SetText(aEmptyOUStr);
+        m_xDistNumMF->set_text(aEmptyOUStr);
     if(bSameIndent)
-        m_pIndentMF->SetValue(m_pIndentMF->Normalize(-aNumFormatArr[nLvl]->GetFirstLineOffset()), FUNIT_TWIP);
+        m_xIndentMF->set_value(m_xIndentMF->normalize(-aNumFormatArr[nLvl]->GetFirstLineOffset()), FUNIT_TWIP);
     else
-        m_pIndentMF->SetText(aEmptyOUStr);
+        m_xIndentMF->set_text(aEmptyOUStr);
 
     if(bSameAdjust)
     {
@@ -311,13 +265,13 @@ void SwNumPositionTabPage::InitControls()
             nPos = 0;
         else if(aNumFormatArr[nLvl]->GetNumAdjust() == SvxAdjust::Right)
             nPos = 2;
-        m_pAlignLB->SelectEntryPos(nPos);
-        m_pAlign2LB->SelectEntryPos( nPos );
+        m_xAlignLB->set_active(nPos);
+        m_xAlign2LB->set_active( nPos );
     }
     else
     {
-        m_pAlignLB->SetNoSelection();
-        m_pAlign2LB->SetNoSelection();
+        m_xAlignLB->set_active(-1);
+        m_xAlign2LB->set_active(-1);
     }
 
     if ( bSameLabelFollowedBy )
@@ -335,57 +289,57 @@ void SwNumPositionTabPage::InitControls()
         {
             nPos = 3;
         }
-        m_pLabelFollowedByLB->SelectEntryPos( nPos );
+        m_xLabelFollowedByLB->set_active(nPos);
     }
     else
     {
-        m_pLabelFollowedByLB->SetNoSelection();
+        m_xLabelFollowedByLB->set_active(-1);
     }
 
     if ( aNumFormatArr[nLvl]->GetLabelFollowedBy() == SvxNumberFormat::LISTTAB )
     {
-        m_pListtabFT->Enable();
-        m_pListtabMF->Enable();
+        m_xListtabFT->set_sensitive(true);
+        m_xListtabMF->set_sensitive(true);
         if ( bSameListtab )
         {
-            m_pListtabMF->SetValue(m_pListtabMF->Normalize(aNumFormatArr[nLvl]->GetListtabPos()),FUNIT_TWIP);
+            m_xListtabMF->set_value(m_xListtabMF->normalize(aNumFormatArr[nLvl]->GetListtabPos()),FUNIT_TWIP);
         }
         else
         {
-            m_pListtabMF->SetText(aEmptyOUStr);
+            m_xListtabMF->set_text(aEmptyOUStr);
         }
     }
     else
     {
-        m_pListtabFT->Enable( false );
-        m_pListtabMF->Enable( false );
-        m_pListtabMF->SetText(aEmptyOUStr);
+        m_xListtabFT->set_sensitive( false );
+        m_xListtabMF->set_sensitive( false );
+        m_xListtabMF->set_text(aEmptyOUStr);
     }
 
     if ( bSameAlignAt )
     {
-        m_pAlignedAtMF->SetValue(
-            m_pAlignedAtMF->Normalize( aNumFormatArr[nLvl]->GetIndentAt() +
+        m_xAlignedAtMF->set_value(
+            m_xAlignedAtMF->normalize( aNumFormatArr[nLvl]->GetIndentAt() +
                                     aNumFormatArr[nLvl]->GetFirstLineIndent()),
             FUNIT_TWIP );
     }
     else
     {
-        m_pAlignedAtMF->SetText(aEmptyOUStr);
+        m_xAlignedAtMF->set_text(aEmptyOUStr);
     }
 
     if ( bSameIndentAt )
     {
-        m_pIndentAtMF->SetValue(
-            m_pIndentAtMF->Normalize( aNumFormatArr[nLvl]->GetIndentAt()), FUNIT_TWIP );
+        m_xIndentAtMF->set_value(
+            m_xIndentAtMF->normalize( aNumFormatArr[nLvl]->GetIndentAt()), FUNIT_TWIP );
     }
     else
     {
-        m_pIndentAtMF->SetText(aEmptyOUStr);
+        m_xIndentAtMF->set_text(aEmptyOUStr);
     }
 
-    if(bSetDistEmpty)
-        m_pDistBorderMF->SetText(aEmptyOUStr);
+    if (bSetDistEmpty)
+        m_xDistBorderMF->set_text(aEmptyOUStr);
 
     bInInintControl = false;
 }
@@ -407,25 +361,26 @@ void SwNumPositionTabPage::ActivatePage(const SfxItemSet& )
         *pActNum = *pSaveNum;
         nActNumLvl = nTmpNumLvl;
         sal_uInt16 nMask = 1;
-        m_pLevelLB->SetUpdateMode(false);
-        m_pLevelLB->SetNoSelection();
-        m_pLevelLB->SelectEntryPos( MAXLEVEL, nActNumLvl == USHRT_MAX);
-        if(nActNumLvl != USHRT_MAX)
-            for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+        m_xLevelLB->unselect_all();
+        if (nActNumLvl == USHRT_MAX)
+            m_xLevelLB->select(MAXLEVEL);
+        else
+        {
+            for (sal_uInt16 i = 0; i < MAXLEVEL; ++i)
             {
-                if(nActNumLvl & nMask)
-                    m_pLevelLB->SelectEntryPos( i );
+                if (nActNumLvl & nMask)
+                    m_xLevelLB->select(i);
                 nMask <<= 1 ;
             }
-        m_pLevelLB->SetUpdateMode(true);
+        }
 
         InitPosAndSpaceMode();
         ShowControlsDependingOnPosAndSpaceMode();
 
         InitControls();
     }
-    m_pRelativeCB->Enable(1 != nActNumLvl);
-    m_pPreviewWIN->Invalidate();
+    m_xRelativeCB->set_sensitive(1 != nActNumLvl);
+    m_xPreviewWIN->queue_draw();
 }
 
 DeactivateRC SwNumPositionTabPage::DeactivatePage(SfxItemSet *_pSet)
@@ -453,36 +408,36 @@ bool SwNumPositionTabPage::FillItemSet( SfxItemSet* rSet )
 void SwNumPositionTabPage::Reset( const SfxItemSet* rSet )
 {
     const SfxPoolItem* pItem;
-    if(pOutlineDlg)
+    if (pOutlineDlg)
     {
         pSaveNum = pOutlineDlg->GetNumRule();
-        m_pLevelLB->EnableMultiSelection(false);
+        m_xLevelLB->set_selection_mode(false);
     }
     else if(SfxItemState::SET == rSet->GetItemState(FN_PARAM_ACT_NUMBER, false, &pItem))
         pSaveNum = const_cast<SwUINumRuleItem*>(static_cast<const SwUINumRuleItem*>(pItem))->GetNumRule();
 
     nActNumLvl = SwOutlineTabDialog::GetActNumLevel();
     sal_uInt16 nMask = 1;
-    m_pLevelLB->SetUpdateMode(false);
-    m_pLevelLB->SetNoSelection();
+    m_xLevelLB->unselect_all();
     if(nActNumLvl == USHRT_MAX)
     {
-        m_pLevelLB->SelectEntryPos( MAXLEVEL );
+        m_xLevelLB->select(MAXLEVEL);
     }
     else
-        for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
+    {
+        for (sal_uInt16 i = 0; i < MAXLEVEL; ++i)
         {
-            if(nActNumLvl & nMask)
-                m_pLevelLB->SelectEntryPos( i );
+            if (nActNumLvl & nMask)
+                m_xLevelLB->select(i);
             nMask <<= 1;
         }
-    m_pLevelLB->SetUpdateMode(true);
+    }
 
     if(!pActNum)
         pActNum = new  SwNumRule(*pSaveNum);
     else if(*pSaveNum != *pActNum)
         *pActNum = *pSaveNum;
-    m_pPreviewWIN->SetNumRule(pActNum);
+    m_xPreviewWIN->SetNumRule(pActNum);
     InitPosAndSpaceMode();
     ShowControlsDependingOnPosAndSpaceMode();
     InitControls();
@@ -520,32 +475,32 @@ void SwNumPositionTabPage::InitPosAndSpaceMode()
 
 void SwNumPositionTabPage::ShowControlsDependingOnPosAndSpaceMode()
 {
-    m_pDistBorderFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pDistBorderMF->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pRelativeCB->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pIndentFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pIndentMF->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pDistNumFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pDistNumMF->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pAlignFT->Show( !bLabelAlignmentPosAndSpaceModeActive );
-    m_pAlignLB->Show( !bLabelAlignmentPosAndSpaceModeActive );
-
-    m_pLabelFollowedByFT->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pLabelFollowedByLB->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pListtabFT->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pListtabMF->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pAlign2FT->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pAlign2LB->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pAlignedAtFT->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pAlignedAtMF->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pIndentAtFT->Show( bLabelAlignmentPosAndSpaceModeActive );
-    m_pIndentAtMF->Show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xDistBorderFT->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xDistBorderMF->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xRelativeCB->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xIndentFT->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xIndentMF->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xDistNumFT->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xDistNumMF->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xAlignFT->show( !bLabelAlignmentPosAndSpaceModeActive );
+    m_xAlignLB->show( !bLabelAlignmentPosAndSpaceModeActive );
+
+    m_xLabelFollowedByFT->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xLabelFollowedByLB->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xListtabFT->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xListtabMF->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xAlign2FT->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xAlign2LB->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xAlignedAtFT->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xAlignedAtMF->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xIndentAtFT->show( bLabelAlignmentPosAndSpaceModeActive );
+    m_xIndentAtMF->show( bLabelAlignmentPosAndSpaceModeActive );
 }
 
 VclPtr<SfxTabPage> SwNumPositionTabPage::Create( TabPageParent pParent,
                                                  const SfxItemSet* rAttrSet)
 {
-    return VclPtr<SwNumPositionTabPage>::Create(pParent.pParent, *rAttrSet);
+    return VclPtr<SwNumPositionTabPage>::Create(pParent, *rAttrSet);
 }
 
 void SwNumPositionTabPage::SetWrtShell(SwWrtShell* pSh)
@@ -554,41 +509,34 @@ void SwNumPositionTabPage::SetWrtShell(SwWrtShell* pSh)
 
     const SwTwips nWidth = pWrtSh->GetAnyCurRect(CurRectType::Frame).Width();
 
-    m_pDistBorderMF->SetMax(m_pDistBorderMF->Normalize( nWidth ), FUNIT_TWIP );
-    m_pDistNumMF->SetMax(m_pDistNumMF->Normalize( nWidth ), FUNIT_TWIP);
-    m_pIndentMF->SetMax(m_pIndentMF->Normalize( nWidth ), FUNIT_TWIP );
-    m_pListtabMF->SetMax(m_pListtabMF->Normalize( nWidth ), FUNIT_TWIP );
-    m_pAlignedAtMF->SetMax(m_pAlignedAtMF->Normalize( nWidth ), FUNIT_TWIP );
-    m_pIndentAtMF->SetMax(m_pIndentAtMF->Normalize( nWidth ), FUNIT_TWIP );
-    const SwTwips nLast2 = nWidth /2;
-    m_pDistBorderMF->SetLast( m_pDistBorderMF->Normalize(   nLast2 ), FUNIT_TWIP );
-    m_pDistNumMF->SetLast(m_pDistNumMF->Normalize( nLast2 ), FUNIT_TWIP);
-    m_pIndentMF->SetLast(m_pIndentMF->Normalize( nLast2 ), FUNIT_TWIP );
-    m_pListtabMF->SetLast(m_pListtabMF->Normalize( nLast2 ), FUNIT_TWIP );
-    m_pAlignedAtMF->SetLast(m_pAlignedAtMF->Normalize( nLast2 ), FUNIT_TWIP );
-    m_pIndentAtMF->SetLast(m_pIndentAtMF->Normalize( nLast2 ), FUNIT_TWIP );
+    m_xDistBorderMF->set_max(m_xDistBorderMF->normalize( nWidth ), FUNIT_TWIP );
+    m_xDistNumMF->set_max(m_xDistNumMF->normalize( nWidth ), FUNIT_TWIP);
+    m_xIndentMF->set_max(m_xIndentMF->normalize( nWidth ), FUNIT_TWIP );
+    m_xListtabMF->set_max(m_xListtabMF->normalize( nWidth ), FUNIT_TWIP );
+    m_xAlignedAtMF->set_max(m_xAlignedAtMF->normalize( nWidth ), FUNIT_TWIP );
+    m_xIndentAtMF->set_max(m_xIndentAtMF->normalize( nWidth ), FUNIT_TWIP );
 
     const SwRect& rPrtRect = pWrtSh->GetAnyCurRect(CurRectType::Page);
-    m_pPreviewWIN->SetPageWidth(rPrtRect.Width());
+    m_xPreviewWIN->SetPageWidth(rPrtRect.Width());
     FieldUnit eMetric = ::GetDfltMetric( dynamic_cast<SwWebView*>( &pWrtSh->GetView()) != nullptr  );
     if(eMetric == FUNIT_MM)
     {
-        m_pDistBorderMF->SetDecimalDigits(1);
-        m_pDistNumMF->SetDecimalDigits(1);
-        m_pIndentMF->SetDecimalDigits(1);
-        m_pListtabMF->SetDecimalDigits(1);
-        m_pAlignedAtMF->SetDecimalDigits(1);
-        m_pIndentAtMF->SetDecimalDigits(1);
-    }
-    m_pDistBorderMF->SetUnit( eMetric );
-    m_pDistNumMF->SetUnit( eMetric );
-    m_pIndentMF->SetUnit( eMetric );
-    m_pListtabMF->SetUnit( eMetric );
-    m_pAlignedAtMF->SetUnit( eMetric );
-    m_pIndentAtMF->SetUnit( eMetric );
+        m_xDistBorderMF->set_digits(1);
+        m_xDistNumMF->set_digits(1);
+        m_xIndentMF->set_digits(1);
+        m_xListtabMF->set_digits(1);
+        m_xAlignedAtMF->set_digits(1);
+        m_xIndentAtMF->set_digits(1);
+    }
+    m_xDistBorderMF->set_unit( eMetric );
+    m_xDistNumMF->set_unit( eMetric );
+    m_xIndentMF->set_unit( eMetric );
+    m_xListtabMF->set_unit( eMetric );
+    m_xAlignedAtMF->set_unit( eMetric );
+    m_xIndentAtMF->set_unit( eMetric );
 }
 
-IMPL_LINK_NOARG(SwNumPositionTabPage, EditModifyHdl, ListBox&, void)
+IMPL_LINK_NOARG(SwNumPositionTabPage, EditModifyHdl, weld::ComboBoxText&, void)
 {
     sal_uInt16 nMask = 1;
     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
@@ -597,9 +545,9 @@ IMPL_LINK_NOARG(SwNumPositionTabPage, EditModifyHdl, ListBox&, void)
         {
             SwNumFormat aNumFormat(pActNum->Get(i));
 
-            const sal_Int32 nPos = m_pAlignLB->IsVisible()
-                                ? m_pAlignLB->GetSelectedEntryPos()
-                                : m_pAlign2LB->GetSelectedEntryPos();
+            const int nPos = m_xAlignLB->get_visible()
+                                ? m_xAlignLB->get_active()
+                                : m_xAlign2LB->get_active();
             SvxAdjust eAdjust = SvxAdjust::Center;
             if(nPos == 0)
                 eAdjust = SvxAdjust::Left;
@@ -613,71 +561,65 @@ IMPL_LINK_NOARG(SwNumPositionTabPage, EditModifyHdl, ListBox&, void)
     SetModified();
 }
 
-IMPL_LINK( SwNumPositionTabPage, LevelHdl, ListBox&, rBox, void )
+IMPL_LINK( SwNumPositionTabPage, LevelHdl, weld::TreeView&, rBox, void )
 {
     sal_uInt16 nSaveNumLvl = nActNumLvl;
     nActNumLvl = 0;
-    if(rBox.IsEntryPosSelected( MAXLEVEL ) &&
-            (rBox.GetSelectedEntryCount() == 1 || nSaveNumLvl != 0xffff))
+    auto aRows = rBox.get_selected_rows();
+    if ((std::find(aRows.begin(), aRows.end(), MAXLEVEL) != aRows.end()) &&
+            (aRows.size() == 1 || nSaveNumLvl != 0xffff))
     {
         nActNumLvl = 0xFFFF;
-        rBox.SetUpdateMode(false);
-        for( sal_uInt16 i = 0; i < MAXLEVEL; i++ )
-            rBox.SelectEntryPos( i, false );
-        rBox.SetUpdateMode(true);
+        for (sal_uInt16 i = 0; i < MAXLEVEL; ++i)
+            rBox.unselect(i);
     }
-    else if(rBox.GetSelectedEntryCount())
+    else if (!aRows.empty())
     {
         sal_uInt16 nMask = 1;
-        for( sal_uInt16 i = 0; i < MAXLEVEL; i++ )
+        for (sal_uInt16 i = 0; i < MAXLEVEL; ++i)
         {
-            if(rBox.IsEntryPosSelected( i ))
+            if (std::find(aRows.begin(), aRows.end(), i) != aRows.end())
                 nActNumLvl |= nMask;
             nMask <<= 1;
         }
-        rBox.SelectEntryPos( MAXLEVEL, false );
+        rBox.unselect(MAXLEVEL);
     }
     else
     {
         nActNumLvl = nSaveNumLvl;
         sal_uInt16 nMask = 1;
-        for( sal_uInt16 i = 0; i < MAXLEVEL; i++ )
+        for (sal_uInt16 i = 0; i < MAXLEVEL; ++i)
         {
             if(nActNumLvl & nMask)
             {
-                rBox.SelectEntryPos(i);
+                rBox.select(i);
                 break;
             }
             nMask <<=1;
         }
     }
-    m_pRelativeCB->Enable(1 != nActNumLvl);
+    m_xRelativeCB->set_sensitive(1 != nActNumLvl);
     SetModified();
     InitPosAndSpaceMode();
     ShowControlsDependingOnPosAndSpaceMode();
     InitControls();
 }
 
-IMPL_LINK( SwNumPositionTabPage, DistanceLoseFocusHdl, Control&, rControl, void )
-{
-    DistanceHdl(static_cast<SpinField&>(rControl));
-}
-IMPL_LINK( SwNumPositionTabPage, DistanceHdl, SpinField&, rSpin, void )
+IMPL_LINK(SwNumPositionTabPage, DistanceHdl, weld::MetricSpinButton&, rField, void)
 {
     if(bInInintControl)
         return;
-    MetricField& rField = static_cast<MetricField&>(rSpin);
-    long nValue = static_cast< long >(rField.Denormalize(rField.GetValue(FUNIT_TWIP)));
+    long nValue = static_cast< long >(rField.denormalize(rField.get_value(FUNIT_TWIP)));
     sal_uInt16 nMask = 1;
     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
     {
         if(nActNumLvl & nMask)
         {
             SwNumFormat aNumFormat( pActNum->Get( i ) );
-            if(&rField == m_pDistBorderMF)
+            if (&rField == m_xDistBorderMF.get())
             {
 
-                if(m_pRelativeCB->IsChecked() && m_pRelativeCB->IsEnabled())
+                if (m_xRelativeCB->get_active() && m_xRelativeCB->get_sensitive())
                 {
                     if(0 == i)
                     {
@@ -698,11 +640,11 @@ IMPL_LINK( SwNumPositionTabPage, DistanceHdl, SpinField&, rSpin, void )
                     aNumFormat.SetAbsLSpace( static_cast<short>(nValue) - aNumFormat.GetFirstLineOffset());
                 }
             }
-            else if (&rField == m_pDistNumMF)
+            else if (&rField == m_xDistNumMF.get())
             {
                 aNumFormat.SetCharTextDistance( nValue );
             }
-            else if (&rField == m_pIndentMF)
+            else if (&rField == m_xIndentMF.get())
             {
                 // now AbsLSpace also has to be modified by FirstLineOffset
                 long nDiff = nValue + aNumFormat.GetFirstLineOffset();
@@ -717,14 +659,14 @@ IMPL_LINK( SwNumPositionTabPage, DistanceHdl, SpinField&, rSpin, void )
     }
 
     SetModified();
-    if(!m_pDistBorderMF->IsEnabled())
-        m_pDistBorderMF->SetText(aEmptyOUStr);
+    if(!m_xDistBorderMF->get_sensitive())
+        m_xDistBorderMF->set_text(aEmptyOUStr);
 }
 
-IMPL_LINK( SwNumPositionTabPage, RelativeHdl, Button *, pBox, void )
+IMPL_LINK( SwNumPositionTabPage, RelativeHdl, weld::ToggleButton&, rBox, void )
 {
-    bool bOn = static_cast<CheckBox*>(pBox)->IsChecked();
-    bool bSingleSelection = m_pLevelLB->GetSelectedEntryCount() == 1 && USHRT_MAX != nActNumLvl;
+    bool bOn = rBox.get_active();
+    bool bSingleSelection = m_xLevelLB->n_children() == 1 && USHRT_MAX != nActNumLvl;
     bool bSetValue = false;
     long nValue = 0;
     if(bOn || bSingleSelection)
@@ -752,19 +694,19 @@ IMPL_LINK( SwNumPositionTabPage, RelativeHdl, Button *, pBox, void )
 
     }
     if(bSetValue)
-        m_pDistBorderMF->SetValue(m_pDistBorderMF->Normalize(nValue), FUNIT_TWIP);
+        m_xDistBorderMF->set_value(m_xDistBorderMF->normalize(nValue), FUNIT_TWIP);
     else
-        m_pDistBorderMF->SetText(aEmptyOUStr);
-    m_pDistBorderMF->Enable(bOn || bSingleSelection || pOutlineDlg);
+        m_xDistBorderMF->set_text(aEmptyOUStr);
+    m_xDistBorderMF->set_sensitive(bOn || bSingleSelection || pOutlineDlg);
     bLastRelative = bOn;
 }
 
-IMPL_LINK_NOARG(SwNumPositionTabPage, LabelFollowedByHdl_Impl, ListBox&, void)
+IMPL_LINK_NOARG(SwNumPositionTabPage, LabelFollowedByHdl_Impl, weld::ComboBoxText&, void)
 {
     // determine value to be set at the chosen list levels
     SvxNumberFormat::LabelFollowedBy eLabelFollowedBy = SvxNumberFormat::LISTTAB;
     {
-        const sal_Int32 nPos = m_pLabelFollowedByLB->GetSelectedEntryPos();
+        const int nPos = m_xLabelFollowedByLB->get_active();
         if ( nPos == 1 )
         {
             eLabelFollowedBy = SvxNumberFormat::SPACE;
@@ -806,31 +748,26 @@ IMPL_LINK_NOARG(SwNumPositionTabPage, LabelFollowedByHdl_Impl, ListBox&, void)
 
     // enable/disable metric field for list tab stop position depending on
     // selected item following the list label.
-    m_pListtabFT->Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
-    m_pListtabMF->Enable( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
+    m_xListtabFT->set_sensitive( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
+    m_xListtabMF->set_sensitive( eLabelFollowedBy == SvxNumberFormat::LISTTAB );
     if ( bSameListtabPos && eLabelFollowedBy == SvxNumberFormat::LISTTAB )
     {
-        m_pListtabMF->SetValue(
-            m_pListtabMF->Normalize( pActNum->Get( nFirstLvl ).GetListtabPos() ),
+        m_xListtabMF->set_value(
+            m_xListtabMF->normalize( pActNum->Get( nFirstLvl ).GetListtabPos() ),
             FUNIT_TWIP );
     }
     else
     {
-        m_pListtabMF->SetText( OUString() );
+        m_xListtabMF->set_text(OUString());
     }
 
     SetModified();
 }
 
-IMPL_LINK( SwNumPositionTabPage, ListtabPosFocusHdl_Impl, Control&, rControl, void )
-{
-    ListtabPosHdl_Impl(static_cast<SpinField&>(rControl));
-}
-IMPL_LINK( SwNumPositionTabPage, ListtabPosHdl_Impl, SpinField&, rSpin, void )
+IMPL_LINK( SwNumPositionTabPage, ListtabPosHdl_Impl, weld::MetricSpinButton&, rField, void )
 {
-    MetricField& rField = static_cast<MetricField&>(rSpin);
     // determine value to be set at the chosen list levels
-    const long nValue = static_cast< long >(rField.Denormalize(rField.GetValue(FUNIT_TWIP)));
+    const long nValue = static_cast< long >(rField.denormalize(rField.get_value(FUNIT_TWIP)));
 
     // set value at the chosen list levels
     sal_uInt16 nMask = 1;
@@ -848,15 +785,10 @@ IMPL_LINK( SwNumPositionTabPage, ListtabPosHdl_Impl, SpinField&, rSpin, void )
     SetModified();
 }
 
-IMPL_LINK( SwNumPositionTabPage, AlignAtFocusHdl_Impl, Control&, rControl, void )
-{
-    AlignAtHdl_Impl(static_cast<SpinField&>(rControl));
-}
-IMPL_LINK( SwNumPositionTabPage, AlignAtHdl_Impl, SpinField&, rSpin, void )
+IMPL_LINK( SwNumPositionTabPage, AlignAtHdl_Impl, weld::MetricSpinButton&, rField, void )
 {
-    MetricField& rField = static_cast<MetricField&>(rSpin);
     // determine value to be set at the chosen list levels
-    const long nValue = static_cast< long >(rField.Denormalize(rField.GetValue(FUNIT_TWIP)));
+    const long nValue = static_cast< long >(rField.denormalize(rField.get_value(FUNIT_TWIP)));
 
     // set value at the chosen list levels
     sal_uInt16 nMask = 1;
@@ -875,15 +807,10 @@ IMPL_LINK( SwNumPositionTabPage, AlignAtHdl_Impl, SpinField&, rSpin, void )
     SetModified();
 }
 
-IMPL_LINK( SwNumPositionTabPage, IndentAtFocusHdl_Impl, Control&, rControl, void )
-{
-    IndentAtHdl_Impl(static_cast<SpinField&>(rControl));
-}
-IMPL_LINK( SwNumPositionTabPage, IndentAtHdl_Impl, SpinField&, rSpin, void )
+IMPL_LINK( SwNumPositionTabPage, IndentAtHdl_Impl, weld::MetricSpinButton&, rField, void )
 {
-    MetricField& rField = static_cast<MetricField&>(rSpin);
     // determine value to be set at the chosen list levels
-    const long nValue = static_cast< long >(rField.Denormalize(rField.GetValue(FUNIT_TWIP)));
+    const long nValue = static_cast< long >(rField.denormalize(rField.get_value(FUNIT_TWIP)));
 
     // set value at the chosen list levels
     sal_uInt16 nMask = 1;
@@ -905,7 +832,7 @@ IMPL_LINK( SwNumPositionTabPage, IndentAtHdl_Impl, SpinField&, rSpin, void )
     SetModified();
 }
 
-IMPL_LINK_NOARG(SwNumPositionTabPage, StandardHdl, Button*, void)
+IMPL_LINK_NOARG(SwNumPositionTabPage, StandardHdl, weld::Button&, void)
 {
     sal_uInt16 nMask = 1;
     for(sal_uInt16 i = 0; i < MAXLEVEL; i++)
@@ -945,8 +872,8 @@ IMPL_LINK_NOARG(SwNumPositionTabPage, StandardHdl, Button*, void)
 void SwNumPositionTabPage::SetModified()
 {
     bModified = true;
-    m_pPreviewWIN->SetLevel(nActNumLvl);
-    m_pPreviewWIN->Invalidate();
+    m_xPreviewWIN->SetLevel(nActNumLvl);
+    m_xPreviewWIN->queue_draw();
 }
 #endif
 
diff --git a/sw/source/uibase/inc/num.hxx b/sw/source/uibase/inc/num.hxx
index d93bd4eefb0a..5d0817cd273e 100644
--- a/sw/source/uibase/inc/num.hxx
+++ b/sw/source/uibase/inc/num.hxx
@@ -37,38 +37,6 @@ class SwOutlineTabDialog;
 
 class SwNumPositionTabPage : public SfxTabPage
 {
-    VclPtr<ListBox> m_pLevelLB;
-    VclPtr<VclFrame> m_pPositionFrame;
-
-    // former set of controls shown for numbering rules containing list level
-    // attributes in SvxNumberFormat::SvxNumPositionAndSpaceMode == LABEL_WIDTH_AND_POSITION
-    VclPtr<FixedText>          m_pDistBorderFT;
-    VclPtr<MetricField>        m_pDistBorderMF;
-    VclPtr<CheckBox>           m_pRelativeCB;
-    VclPtr<FixedText>          m_pIndentFT;
-    VclPtr<MetricField>        m_pIndentMF;
-    VclPtr<FixedText>          m_pDistNumFT;
-    VclPtr<MetricField>        m_pDistNumMF;
-    VclPtr<FixedText>          m_pAlignFT;
-    VclPtr<ListBox>            m_pAlignLB;
-
-    // new set of controls shown for numbering rules containing list level
-    // attributes in SvxNumberFormat::SvxNumPositionAndSpaceMode == LABEL_ALIGNMENT
-    VclPtr<FixedText>          m_pLabelFollowedByFT;
-    VclPtr<ListBox>            m_pLabelFollowedByLB;
-    VclPtr<FixedText>          m_pListtabFT;
-    VclPtr<MetricField>        m_pListtabMF;
-    VclPtr<FixedText>          m_pAlign2FT;
-    VclPtr<ListBox>            m_pAlign2LB;
-    VclPtr<FixedText>          m_pAlignedAtFT;
-    VclPtr<MetricField>        m_pAlignedAtMF;
-    VclPtr<FixedText>          m_pIndentAtFT;
-    VclPtr<MetricField>        m_pIndentAtMF;
-
-    VclPtr<PushButton>         m_pStandardPB;
-
-    VclPtr<NumberingPreview>   m_pPreviewWIN;
-
     SwNumRule*          pActNum;
     SwNumRule*          pSaveNum;
     SwWrtShell*         pWrtSh;
@@ -81,33 +49,59 @@ class SwNumPositionTabPage : public SfxTabPage
     bool                bInInintControl     : 1;  // work around modify-error; should be resolved from 391 on
     bool                bLabelAlignmentPosAndSpaceModeActive;
 
+    std::unique_ptr<weld::TreeView> m_xLevelLB;
+    std::unique_ptr<weld::Widget> m_xPositionFrame;
+
+    // former set of controls shown for numbering rules containing list level
+    // attributes in SvxNumberFormat::SvxNumPositionAndSpaceMode == LABEL_WIDTH_AND_POSITION
+    std::unique_ptr<weld::Label> m_xDistBorderFT;
+    std::unique_ptr<weld::MetricSpinButton> m_xDistBorderMF;
+    std::unique_ptr<weld::CheckButton> m_xRelativeCB;
+    std::unique_ptr<weld::Label> m_xIndentFT;
+    std::unique_ptr<weld::MetricSpinButton> m_xIndentMF;
+    std::unique_ptr<weld::Label> m_xDistNumFT;
+    std::unique_ptr<weld::MetricSpinButton> m_xDistNumMF;
+    std::unique_ptr<weld::Label> m_xAlignFT;
+    std::unique_ptr<weld::ComboBoxText> m_xAlignLB;
+
+    // new set of controls shown for numbering rules containing list level
+    // attributes in SvxNumberFormat::SvxNumPositionAndSpaceMode == LABEL_ALIGNMENT
+    std::unique_ptr<weld::Label> m_xLabelFollowedByFT;
+    std::unique_ptr<weld::ComboBoxText> m_xLabelFollowedByLB;
+    std::unique_ptr<weld::Label> m_xListtabFT;
+    std::unique_ptr<weld::MetricSpinButton> m_xListtabMF;
+    std::unique_ptr<weld::Label> m_xAlign2FT;
+    std::unique_ptr<weld::ComboBoxText> m_xAlign2LB;
+    std::unique_ptr<weld::Label> m_xAlignedAtFT;
+    std::unique_ptr<weld::MetricSpinButton> m_xAlignedAtMF;
+    std::unique_ptr<weld::Label> m_xIndentAtFT;
+    std::unique_ptr<weld::MetricSpinButton> m_xIndentAtMF;
+    std::unique_ptr<weld::Button> m_xStandardPB;
+    std::unique_ptr<SwNumberingPreview> m_xPreviewWIN;
+
+
     void                InitControls();
 
-    DECL_LINK( LevelHdl, ListBox&, void );
-    DECL_LINK(EditModifyHdl, ListBox&, void);
-    DECL_LINK( DistanceHdl, SpinField&, void );
-    DECL_LINK( DistanceLoseFocusHdl, Control&, void );
-    DECL_LINK( RelativeHdl, Button*, void );
-    DECL_LINK(StandardHdl, Button*, void);
+    DECL_LINK(LevelHdl, weld::TreeView&, void);
+    DECL_LINK(EditModifyHdl, weld::ComboBoxText&, void);
+    DECL_LINK(DistanceHdl, weld::MetricSpinButton&, void);
+    DECL_LINK(RelativeHdl, weld::ToggleButton&, void);
+    DECL_LINK(StandardHdl, weld::Button&, void);
 
     void InitPosAndSpaceMode();
     void ShowControlsDependingOnPosAndSpaceMode();
 
-    DECL_LINK(LabelFollowedByHdl_Impl, ListBox&, void);
-    DECL_LINK( ListtabPosHdl_Impl, SpinField&, void );
-    DECL_LINK( ListtabPosFocusHdl_Impl, Control&, void );
-    DECL_LINK( AlignAtHdl_Impl, SpinField&, void );
-    DECL_LINK( AlignAtFocusHdl_Impl, Control&, void );
-    DECL_LINK( IndentAtHdl_Impl, SpinField&, void );
-    DECL_LINK( IndentAtFocusHdl_Impl, Control&, void );
+    DECL_LINK(LabelFollowedByHdl_Impl, weld::ComboBoxText&, void);
+    DECL_LINK(ListtabPosHdl_Impl, weld::MetricSpinButton&, void);
+    DECL_LINK(AlignAtHdl_Impl, weld::MetricSpinButton&, void);
+    DECL_LINK(IndentAtHdl_Impl, weld::MetricSpinButton&, void);
 
     using SfxTabPage::ActivatePage;
     using SfxTabPage::DeactivatePage;
 
 public:
 
-    SwNumPositionTabPage(vcl::Window* pParent,
-                               const SfxItemSet& rSet);
+    SwNumPositionTabPage(TabPageParent pParent, const SfxItemSet& rSet);
     virtual ~SwNumPositionTabPage() override;
     virtual void        dispose() override;
 
@@ -126,8 +120,8 @@ public:
 #else
     void                SetModified()
                             {   bModified = true;
-                                m_pPreviewWIN->SetLevel(nActNumLvl);
-                                m_pPreviewWIN->Invalidate();
+                                m_xPreviewWIN->SetLevel(nActNumLvl);
+                                m_xPreviewWIN->queue_draw();
                             }
 #endif
 };
diff --git a/sw/uiconfig/swriter/ui/outlinepositionpage.ui b/sw/uiconfig/swriter/ui/outlinepositionpage.ui
index d334cba8f914..b310ef8bfa19 100644
--- a/sw/uiconfig/swriter/ui/outlinepositionpage.ui
+++ b/sw/uiconfig/swriter/ui/outlinepositionpage.ui
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.20.4 -->
 <interface domain="sw">
   <requires lib="gtk+" version="3.18"/>
-  <requires lib="LibreOffice" version="1.0"/>
   <object class="GtkAdjustment" id="adjustment1">
     <property name="upper">19.989999999999998</property>
     <property name="step_increment">0.050000000000000003</property>
@@ -14,42 +13,18 @@
     <property name="step_increment">0.050000000000000003</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjustment3">
+    <property name="upper">19.989999999999998</property>
+    <property name="step_increment">0.050000000000000003</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkListStore" id="liststore1">
     <columns>
-      <!-- column-name gchararray1 -->
+      <!-- column-name text -->
       <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes" context="outlinepositionpage|liststore1">Left</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="outlinepositionpage|liststore1">Centered</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="outlinepositionpage|liststore1">Right</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="liststore2">
-    <columns>
-      <!-- column-name gchararray1 -->
+      <!-- column-name id -->
       <column type="gchararray"/>
     </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes" context="outlinepositionpage|liststore2">Tab stop</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="outlinepositionpage|liststore2">Space</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="outlinepositionpage|liststore2">Nothing</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes" context="outlinepositionpage|liststore2">New Line</col>
-      </row>
-    </data>
   </object>
   <object class="GtkBox" id="OutlinePositionPage">
     <property name="visible">True</property>
@@ -71,14 +46,34 @@
             <property name="top_padding">6</property>
             <property name="left_padding">12</property>
             <child>
-              <object class="GtkTreeView" id="levellb:border">
+              <object class="GtkScrolledWindow">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="headers_visible">False</property>
-                <property name="search_column">0</property>
-                <child internal-child="selection">
-                  <object class="GtkTreeSelection" id="treeview-selection6">
-                    <property name="mode">multiple</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="levellb">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="model">liststore1</property>
+                    <property name="headers_visible">False</property>
+                    <property name="headers_clickable">False</property>
+                    <property name="search_column">0</property>
+                    <property name="show_expanders">False</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
                   </object>
                 </child>
               </object>
@@ -148,10 +143,14 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkComboBox" id="numalignlb">
+                      <object class="GtkComboBoxText" id="numalignlb">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="model">liststore1</property>
+                        <items>
+                          <item translatable="yes" context="outlinepositionpage|liststore1">Left</item>
+                          <item translatable="yes" context="outlinepositionpage|liststore1">Centered</item>
+                          <item translatable="yes" context="outlinepositionpage|liststore1">Right</item>
+                        </items>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -166,7 +165,7 @@
 numbering and text:</property>
                         <property name="use_underline">True</property>
                         <property name="justify">right</property>
-                        <property name="mnemonic_widget">numdistmf:0.00cm</property>
+                        <property name="mnemonic_widget">numdistmf</property>
                         <property name="xalign">1</property>
                       </object>
                       <packing>
@@ -175,10 +174,11 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="numdistmf:0.00cm">
+                      <object class="GtkSpinButton" id="numdistmf">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="adjustment">adjustment1</property>
+                        <property name="activates_default">True</property>
+                        <property name="adjustment">adjustment3</property>
                         <property name="digits">2</property>
                       </object>
                       <packing>
@@ -192,7 +192,7 @@ numbering and text:</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes" context="outlinepositionpage|numberingwidth">Width of numbering:</property>
                         <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">numberingwidthmf:0.00cm</property>
+                        <property name="mnemonic_widget">numberingwidthmf</property>
                         <property name="xalign">1</property>
                       </object>
                       <packing>
@@ -201,9 +201,10 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="numberingwidthmf:0.00cm">
+                      <object class="GtkSpinButton" id="numberingwidthmf">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="activates_default">True</property>
                         <property name="adjustment">adjustment1</property>
                         <property name="digits">2</property>
                       </object>
@@ -218,8 +219,8 @@ numbering and text:</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">False</property>
-                        <property name="use_underline">True</property>
                         <property name="halign">end</property>
+                        <property name="use_underline">True</property>
                         <property name="xalign">0</property>
                         <property name="draw_indicator">True</property>
                       </object>
@@ -234,7 +235,7 @@ numbering and text:</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes" context="outlinepositionpage|indent">Indent:</property>
                         <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">indentmf:0.00cm</property>
+                        <property name="mnemonic_widget">indentmf</property>
                         <property name="xalign">1</property>
                       </object>
                       <packing>
@@ -243,9 +244,10 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="indentmf:0.00cm">
+                      <object class="GtkSpinButton" id="indentmf">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="activates_default">True</property>
                         <property name="adjustment">adjustment2</property>
                         <property name="digits">2</property>
                       </object>
@@ -260,7 +262,7 @@ numbering and text:</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes" context="outlinepositionpage|indentat">Indent at:</property>
                         <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">indentatmf:0.00cm</property>
+                        <property name="mnemonic_widget">indentatmf</property>
                         <property name="xalign">1</property>
                       </object>
                       <packing>
@@ -269,9 +271,10 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="indentatmf:0.00cm">
+                      <object class="GtkSpinButton" id="indentatmf">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="activates_default">True</property>
                         <property name="digits">2</property>
                       </object>
                       <packing>
@@ -294,7 +297,7 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkComboBox" id="num2alignlb">
+                      <object class="GtkComboBoxText" id="num2alignlb">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                       </object>
@@ -309,7 +312,7 @@ numbering and text:</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes" context="outlinepositionpage|alignedat">Aligned at:</property>
                         <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">alignedatmf:0.00cm</property>
+                        <property name="mnemonic_widget">alignedatmf</property>
                         <property name="xalign">1</property>
                       </object>
                       <packing>
@@ -318,9 +321,10 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="alignedatmf:0.00cm">
+                      <object class="GtkSpinButton" id="alignedatmf">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="activates_default">True</property>
                         <property name="digits">2</property>
                       </object>
                       <packing>
@@ -334,7 +338,7 @@ numbering and text:</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes" context="outlinepositionpage|at">Tab stop at:</property>
                         <property name="use_underline">True</property>
-                        <property name="mnemonic_widget">atmf:0.00cm</property>
+                        <property name="mnemonic_widget">atmf</property>
                         <property name="xalign">1</property>
                       </object>
                       <packing>
@@ -343,9 +347,10 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkSpinButton" id="atmf:0.00cm">
+                      <object class="GtkSpinButton" id="atmf">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="activates_default">True</property>
                         <property name="digits">2</property>
                       </object>
                       <packing>
@@ -354,10 +359,15 @@ numbering and text:</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkComboBox" id="numfollowedbylb">
+                      <object class="GtkComboBoxText" id="numfollowedbylb">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="model">liststore2</property>
+                        <items>
+                          <item translatable="yes" context="outlinepositionpage|liststore2">Tab stop</item>
+                          <item translatable="yes" context="outlinepositionpage|liststore2">Space</item>
+                          <item translatable="yes" context="outlinepositionpage|liststore2">Nothing</item>
+                          <item translatable="yes" context="outlinepositionpage|liststore2">New Line</item>
+                        </items>
                       </object>
                       <packing>
                         <property name="left_attach">1</property>
@@ -427,7 +437,7 @@ numbering and text:</property>
               </packing>
             </child>
             <child>
-              <object class="swuilo-NumberingPreview" id="preview">
+              <object class="GtkDrawingArea" id="preview">
                 <property name="width_request">250</property>
                 <property name="height_request">120</property>
                 <property name="visible">True</property>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 818ef8b778b4..0ff54771656b 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -1314,6 +1314,18 @@ public:
             m_xTreeView->SelectEntryPos(pos);
     }
 
+    virtual void unselect(int pos) override
+    {
+        assert(m_xTreeView->IsUpdateMode() && "don't select when frozen");
+        if (pos == -1)
+        {
+            for (sal_Int32 i = 0; i < m_xTreeView->GetEntryCount(); ++i)
+                m_xTreeView->SelectEntryPos(i);
+        }
+        else
+            m_xTreeView->SelectEntryPos(pos, false);
+    }
+
     virtual std::vector<int> get_selected_rows() const override
     {
         std::vector<int> aRows;
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index d88b8a5b9e95..845e15ad15e4 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -3102,6 +3102,23 @@ public:
         enable_notify_events();
     }
 
+    virtual void unselect(int pos) override
+    {
+        assert(gtk_tree_view_get_model(m_pTreeView) && "don't select when frozen");
+        disable_notify_events();
+        if (pos != -1)
+        {
+            GtkTreePath* path = gtk_tree_path_new_from_indices(pos, -1);
+            gtk_tree_selection_unselect_path(gtk_tree_view_get_selection(m_pTreeView), path);
+            gtk_tree_path_free(path);
+        }
+        else
+        {
+            gtk_tree_selection_select_all(gtk_tree_view_get_selection(m_pTreeView));
+        }
+        enable_notify_events();
+    }
+
     virtual std::vector<int> get_selected_rows() const override
     {
         std::vector<int> aRows;


More information about the Libreoffice-commits mailing list