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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sat Mar 16 19:03:53 UTC 2019


 include/vcl/weld.hxx                              |   17 
 sc/source/ui/namedlg/namemgrtable.cxx             |    2 
 sd/source/ui/dlg/sdtreelb.cxx                     |    2 
 sw/inc/swabstdlg.hxx                              |    2 
 sw/source/ui/dialog/swdlgfact.cxx                 |   13 
 sw/source/ui/dialog/swdlgfact.hxx                 |   10 
 sw/source/ui/dialog/uiregionsw.cxx                | 1093 +++++++++-------------
 sw/source/ui/fldui/changedb.cxx                   |    1 
 sw/source/uibase/dialog/regionsw.cxx              |    2 
 sw/source/uibase/inc/condedit.hxx                 |    2 
 sw/source/uibase/inc/numberingtypelistbox.hxx     |    2 
 sw/source/uibase/inc/regionsw.hxx                 |   95 -
 sw/uiconfig/swriter/ui/editsectiondialog.ui       |   62 +
 vcl/source/app/salvtables.cxx                     |   60 -
 vcl/unx/gtk3/gtk3gtkinst.cxx                      |  121 ++
 xmlsecurity/source/dialogs/certificatechooser.cxx |    1 
 16 files changed, 776 insertions(+), 709 deletions(-)

New commits:
commit aa04df5fd9c8359a50039f598f4998caf7e5afe6
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Mar 15 09:36:06 2019 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Sat Mar 16 20:03:31 2019 +0100

    weld SwEditRegionDlg
    
    Change-Id: I6aacd013a344caa731841ff4f015017ba16c4aca
    Reviewed-on: https://gerrit.libreoffice.org/69325
    Tested-by: Jenkins
    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 b0c669d28bf7..f0f7c95f3cf6 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -414,10 +414,12 @@ private:
 
 protected:
     Link<ComboBox&, void> m_aChangeHdl;
+    Link<ComboBox&, void> m_aPopupToggledHdl;
     Link<ComboBox&, bool> m_aEntryActivateHdl;
     Link<OUString&, bool> m_aEntryInsertTextHdl;
 
     void signal_changed() { m_aChangeHdl.Call(*this); }
+    virtual void signal_popup_toggled() { m_aPopupToggledHdl.Call(*this); }
 
 public:
     virtual void insert(int pos, const OUString& rStr, const OUString* pId,
@@ -470,6 +472,10 @@ public:
     void remove_id(const OUString& rId) { remove(find_id(rId)); }
 
     void connect_changed(const Link<ComboBox&, void>& rLink) { m_aChangeHdl = rLink; }
+    virtual void connect_popup_toggled(const Link<ComboBox&, void>& rLink)
+    {
+        m_aPopupToggledHdl = rLink;
+    }
 
     //entry related
     virtual bool has_entry() const = 0;
@@ -664,6 +670,7 @@ public:
     }
     virtual bool iter_parent(TreeIter& rIter) const = 0;
     virtual int get_iter_depth(const TreeIter& rIter) const = 0;
+    virtual int get_iter_index_in_parent(const TreeIter& rIter) const = 0;
     virtual bool iter_has_child(const TreeIter& rIter) const = 0;
     virtual void remove(const TreeIter& rIter) = 0;
     virtual void select(const TreeIter& rIter) = 0;
@@ -682,8 +689,14 @@ public:
     virtual void scroll_to_row(const TreeIter& rIter) = 0;
     virtual bool is_selected(const TreeIter& rIter) const = 0;
 
-    virtual void selected_foreach(const std::function<void(TreeIter&)>& func) = 0;
-    virtual void visible_foreach(const std::function<void(TreeIter&)>& func) = 0;
+    virtual void move_subtree(weld::TreeIter& rNode, const weld::TreeIter* pNewParent,
+                              int nIndexInNewParent)
+        = 0;
+
+    //calling func on each selected element until func returns true or we run out of elements
+    virtual void selected_foreach(const std::function<bool(TreeIter&)>& func) = 0;
+    //calling func on each visible element until func returns true or we run out of elements
+    virtual void visible_foreach(const std::function<bool(TreeIter&)>& func) = 0;
 
     void connect_expanding(const Link<const TreeIter&, bool>& rLink) { m_aExpandingHdl = rLink; }
 
diff --git a/sc/source/ui/namedlg/namemgrtable.cxx b/sc/source/ui/namedlg/namemgrtable.cxx
index 0268fd31120a..5be7b4eea7e2 100644
--- a/sc/source/ui/namedlg/namemgrtable.cxx
+++ b/sc/source/ui/namedlg/namemgrtable.cxx
@@ -358,6 +358,7 @@ void RangeManagerTable::CheckForFormulaString()
             m_xTreeView->set_text(rEntry, aFormulaString, 1);
             maCalculatedFormulaEntries.insert( std::pair<OUString, bool>(sId, true) );
         }
+        return false;
     });
 }
 
@@ -415,6 +416,7 @@ std::vector<ScRangeNameLine> RangeManagerTable::GetSelectedEntries()
         ScRangeNameLine aLine;
         GetLine(aLine, rEntry);
         aSelectedEntries.push_back(aLine);
+        return false;
     });
     return aSelectedEntries;
 }
diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx
index ff1de866826c..32586303799f 100644
--- a/sd/source/ui/dlg/sdtreelb.cxx
+++ b/sd/source/ui/dlg/sdtreelb.cxx
@@ -1422,6 +1422,7 @@ IMPL_LINK_NOARG(SdPageObjsTLV, SelectHdl, weld::TreeView&, void)
     m_xTreeView->selected_foreach([this](weld::TreeIter& rEntry){
         if (m_xTreeView->get_id(rEntry).toInt64() == 0)
             m_bLinkableSelected = false;
+        return false;
     });
 
     m_aChangeHdl.Call(*m_xTreeView);
@@ -1450,6 +1451,7 @@ std::vector<OUString> SdPageObjsTLV::GetSelectEntryList(const int nDepth) const
         int nListDepth = m_xTreeView->get_iter_depth(rEntry);
         if (nListDepth == nDepth)
             aEntries.push_back(m_xTreeView->get_text(rEntry));
+        return false;
     });
 
     return aEntries;
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index 5746d28eec30..10d0fe9f882e 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -477,7 +477,7 @@ public:
                                                 SwWrtShell &rShell,
                                                 SwTOXBase* pCurTOX,
                                                 bool bGlobal) = 0;
-    virtual VclPtr<AbstractEditRegionDlg>      CreateEditRegionDlg(vcl::Window* pParent, SwWrtShell& rWrtSh) = 0;
+    virtual VclPtr<AbstractEditRegionDlg>      CreateEditRegionDlg(weld::Window* pParent, SwWrtShell& rWrtSh) = 0;
     virtual VclPtr<AbstractInsertSectionTabDialog> CreateInsertSectionTabDialog(weld::Window* pParent,
                                                        const SfxItemSet& rSet, SwWrtShell& rSh) = 0;
     virtual VclPtr<AbstractMarkFloatDlg>       CreateIndexMarkFloatDlg(
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index 070eea579f8b..1ac4adaadfcb 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -243,7 +243,11 @@ short AbstractMailMergeFieldConnectionsDlg_Impl::Execute()
 }
 
 IMPL_ABSTDLG_BASE(AbstractMultiTOXTabDialog_Impl);
-IMPL_ABSTDLG_BASE(AbstractEditRegionDlg_Impl);
+
+short AbstractEditRegionDlg_Impl::Execute()
+{
+    return m_xDlg->run();
+}
 
 short AbstractInsertSectionTabDialog_Impl::Execute()
 {
@@ -670,7 +674,7 @@ const SfxItemSet* AbstractMultiTOXTabDialog_Impl::GetOutputItemSet() const
 
 void AbstractEditRegionDlg_Impl::SelectSection(const OUString& rSectionName)
 {
-    pDlg->SelectSection(rSectionName);
+    m_xDlg->SelectSection(rSectionName);
 }
 
 void
@@ -1082,10 +1086,9 @@ VclPtr<AbstractMultiTOXTabDialog> SwAbstractDialogFactory_Impl::CreateMultiTOXTa
     return VclPtr<AbstractMultiTOXTabDialog_Impl>::Create( pDlg );
 }
 
-VclPtr<AbstractEditRegionDlg> SwAbstractDialogFactory_Impl::CreateEditRegionDlg(vcl::Window* pParent, SwWrtShell& rWrtSh)
+VclPtr<AbstractEditRegionDlg> SwAbstractDialogFactory_Impl::CreateEditRegionDlg(weld::Window* pParent, SwWrtShell& rWrtSh)
 {
-    VclPtr<SwEditRegionDlg> pDlg = VclPtr<SwEditRegionDlg>::Create( pParent, rWrtSh );
-    return VclPtr<AbstractEditRegionDlg_Impl>::Create( pDlg );
+    return VclPtr<AbstractEditRegionDlg_Impl>::Create(std::make_unique<SwEditRegionDlg>(pParent, rWrtSh));
 }
 
 VclPtr<AbstractInsertSectionTabDialog> SwAbstractDialogFactory_Impl::CreateInsertSectionTabDialog(weld::Window* pParent,
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index f1ce1c6ce940..262eb39521a2 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -523,7 +523,13 @@ class AbstractMultiTOXTabDialog_Impl : public AbstractMultiTOXTabDialog
 class SwEditRegionDlg;
 class AbstractEditRegionDlg_Impl : public AbstractEditRegionDlg
 {
-    DECL_ABSTDLG_BASE(AbstractEditRegionDlg_Impl,SwEditRegionDlg)
+    std::shared_ptr<SwEditRegionDlg> m_xDlg;
+public:
+    explicit AbstractEditRegionDlg_Impl(std::unique_ptr<SwEditRegionDlg> p)
+        : m_xDlg(std::move(p))
+    {
+    }
+    virtual short Execute() override;
     virtual void    SelectSection(const OUString& rSectionName) override;
 };
 
@@ -698,7 +704,7 @@ public:
                                                 SwWrtShell &rShell,
                                                 SwTOXBase* pCurTOX,
                                                 bool bGlobal) override;
-    virtual VclPtr<AbstractEditRegionDlg>      CreateEditRegionDlg(vcl::Window* pParent, SwWrtShell& rWrtSh) override;
+    virtual VclPtr<AbstractEditRegionDlg>      CreateEditRegionDlg(weld::Window* pParent, SwWrtShell& rWrtSh) override;
     virtual VclPtr<AbstractInsertSectionTabDialog>     CreateInsertSectionTabDialog(
         weld::Window* pParent, const SfxItemSet& rSet, SwWrtShell& rSh) override;
     virtual VclPtr<AbstractMarkFloatDlg>       CreateIndexMarkFloatDlg(
diff --git a/sw/source/ui/dialog/uiregionsw.cxx b/sw/source/ui/dialog/uiregionsw.cxx
index 26acfcffae92..80960fe412ef 100644
--- a/sw/source/ui/dialog/uiregionsw.cxx
+++ b/sw/source/ui/dialog/uiregionsw.cxx
@@ -67,65 +67,17 @@ using namespace ::com::sun::star;
 
 namespace {
 
-Image BuildBitmap(bool bProtect, bool bHidden)
+OUString BuildBitmap(bool bProtect, bool bHidden)
 {
     if (bProtect)
-        return Image(StockImage::Yes, bHidden ? OUString(RID_BMP_PROT_HIDE) : OUString(RID_BMP_PROT_NO_HIDE));
-    return Image(StockImage::Yes, bHidden ? OUString(RID_BMP_HIDE) : OUString(RID_BMP_NO_HIDE));
+        return bHidden ? OUString(RID_BMP_PROT_HIDE) : OUString(RID_BMP_PROT_NO_HIDE);
+    return bHidden ? OUString(RID_BMP_HIDE) : OUString(RID_BMP_NO_HIDE);
 }
 
 }
 
-static void   lcl_ReadSections( SfxMedium& rMedium, ComboBox& rBox );
 static void   lcl_ReadSections( SfxMedium& rMedium, weld::ComboBox& rBox );
 
-static void lcl_FillList( SwWrtShell& rSh, ComboBox& rSubRegions, ComboBox* pAvailNames, const SwSectionFormat* pNewFormat )
-{
-    if( !pNewFormat )
-    {
-        const size_t nCount = rSh.GetSectionFormatCount();
-        for (size_t i = 0; i<nCount; i++)
-        {
-            SectionType eTmpType;
-            const SwSectionFormat* pFormat = &rSh.GetSectionFormat(i);
-            if( !pFormat->GetParent() &&
-                    pFormat->IsInNodesArr() &&
-                    (eTmpType = pFormat->GetSection()->GetType()) != TOX_CONTENT_SECTION
-                    && TOX_HEADER_SECTION != eTmpType )
-            {
-                    const OUString sString(pFormat->GetSection()->GetSectionName());
-                    if(pAvailNames)
-                        pAvailNames->InsertEntry(sString);
-                    rSubRegions.InsertEntry(sString);
-                    lcl_FillList( rSh, rSubRegions, pAvailNames, pFormat );
-            }
-        }
-    }
-    else
-    {
-        SwSections aTmpArr;
-        pNewFormat->GetChildSections(aTmpArr, SectionSort::Pos);
-        if( !aTmpArr.empty() )
-        {
-            SectionType eTmpType;
-            for( const auto pSect : aTmpArr )
-            {
-                const SwSectionFormat* pFormat = pSect->GetFormat();
-                if( pFormat->IsInNodesArr()&&
-                    (eTmpType = pFormat->GetSection()->GetType()) != TOX_CONTENT_SECTION
-                    && TOX_HEADER_SECTION != eTmpType )
-                {
-                    const OUString sString(pFormat->GetSection()->GetSectionName());
-                    if(pAvailNames)
-                        pAvailNames->InsertEntry(sString);
-                    rSubRegions.InsertEntry(sString);
-                    lcl_FillList( rSh, rSubRegions, pAvailNames, pFormat );
-                }
-            }
-        }
-    }
-}
-
 static void lcl_FillList( SwWrtShell& rSh, weld::ComboBox& rSubRegions, weld::ComboBox* pAvailNames, const SwSectionFormat* pNewFormat )
 {
     if( !pNewFormat )
@@ -173,23 +125,9 @@ static void lcl_FillList( SwWrtShell& rSh, weld::ComboBox& rSubRegions, weld::Co
     }
 }
 
-
-static void lcl_FillSubRegionList( SwWrtShell& rSh, ComboBox& rSubRegions, ComboBox* pAvailNames )
-{
-    lcl_FillList( rSh, rSubRegions, pAvailNames, nullptr );
-    IDocumentMarkAccess* const pMarkAccess = rSh.getIDocumentMarkAccess();
-    for( IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getBookmarksBegin();
-        ppMark != pMarkAccess->getBookmarksEnd();
-        ++ppMark)
-    {
-        const ::sw::mark::IMark* pBkmk = ppMark->get();
-        if( pBkmk->IsExpanded() )
-            rSubRegions.InsertEntry( pBkmk->GetName() );
-    }
-}
-
 static void lcl_FillSubRegionList( SwWrtShell& rSh, weld::ComboBox& rSubRegions, weld::ComboBox* pAvailNames )
 {
+    rSubRegions.clear();
     lcl_FillList( rSh, rSubRegions, pAvailNames, nullptr );
     IDocumentMarkAccess* const pMarkAccess = rSh.getIDocumentMarkAccess();
     for( IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getBookmarksBegin();
@@ -374,102 +312,106 @@ OUString SectRepr::GetSubRegion() const
 }
 
 // dialog edit regions
-SwEditRegionDlg::SwEditRegionDlg( vcl::Window* pParent, SwWrtShell& rWrtSh )
-    : SfxModalDialog(pParent, "EditSectionDialog",
-        "modules/swriter/ui/editsectiondialog.ui")
+SwEditRegionDlg::SwEditRegionDlg(weld::Window* pParent, SwWrtShell& rWrtSh)
+    : SfxDialogController(pParent, "modules/swriter/ui/editsectiondialog.ui",
+                          "EditSectionDialog")
     , m_bSubRegionsFilled(false)
     , rSh(rWrtSh)
     , bDontCheckPasswd(true)
-{
-    get(m_pCurName, "curname");
-    get(m_pTree, "tree");
-    m_pTree->set_height_request(m_pTree->GetTextHeight() * 16);
-    get(m_pFileCB, "link");
-    m_pFileCB->SetState(TRISTATE_FALSE);
-    get(m_pDDECB, "dde");
-    get(m_pDDEFrame, "ddedepend");
-    get(m_pFileNameFT, "filenameft");
-    get(m_pDDECommandFT, "ddeft");
-    get(m_pFileNameED, "filename");
-    get(m_pFilePB, "file");
-    get(m_pSubRegionFT, "sectionft");
-    get(m_pSubRegionED, "section");
-    m_pSubRegionED->SetStyle(m_pSubRegionED->GetStyle() | WB_SORT);
-    get(m_pProtectCB, "protect");
-    m_pProtectCB->SetState(TRISTATE_FALSE);
-    get(m_pPasswdCB, "withpassword");
-    get(m_pPasswdPB, "password");
-    get(m_pHideCB, "hide");
-    m_pHideCB->SetState(TRISTATE_FALSE);
-    get(m_pConditionFT, "conditionft");
-    get(m_pConditionED, "condition");
+    , m_xCurName(m_xBuilder->weld_entry("curname"))
+    , m_xTree(m_xBuilder->weld_tree_view("tree"))
+    , m_xFileCB(m_xBuilder->weld_check_button("link"))
+    , m_xDDECB(m_xBuilder->weld_check_button("dde"))
+    , m_xDDEFrame(m_xBuilder->weld_widget("ddedepend"))
+    , m_xFileNameFT(m_xBuilder->weld_label("filenameft"))
+    , m_xDDECommandFT(m_xBuilder->weld_label("ddeft"))
+    , m_xFileNameED(m_xBuilder->weld_entry("filename"))
+    , m_xFilePB(m_xBuilder->weld_button("file"))
+    , m_xSubRegionFT(m_xBuilder->weld_label("sectionft"))
+    , m_xSubRegionED(m_xBuilder->weld_combo_box("section"))
+    , m_xProtectCB(m_xBuilder->weld_check_button("protect"))
+    , m_xPasswdCB(m_xBuilder->weld_check_button("withpassword"))
+    , m_xPasswdPB(m_xBuilder->weld_button("password"))
+    , m_xHideCB(m_xBuilder->weld_check_button("hide"))
+    , m_xConditionFT(m_xBuilder->weld_label("conditionft"))
+    , m_xConditionED(new SwConditionEdit(m_xBuilder->weld_entry("condition")))
+    , m_xEditInReadonlyCB(m_xBuilder->weld_check_button("editinro"))
+    , m_xOK(m_xBuilder->weld_button("ok"))
+    , m_xOptionsPB(m_xBuilder->weld_button("options"))
+    , m_xDismiss(m_xBuilder->weld_button("remove"))
+    , m_xHideFrame(m_xBuilder->weld_widget("hideframe"))
+{
+    m_xTree->set_size_request(-1, m_xTree->get_height_rows(16));
+    m_xFileCB->set_state(TRISTATE_FALSE);
+    m_xSubRegionED->make_sorted();
+    m_xProtectCB->set_state(TRISTATE_FALSE);
+    m_xHideCB->set_state(TRISTATE_FALSE);
     // edit in readonly sections
-    get(m_pEditInReadonlyCB, "editinro");
-    m_pEditInReadonlyCB->SetState(TRISTATE_FALSE);
-    get(m_pOptionsPB, "options");
-    get(m_pDismiss, "remove");
-    get(m_pOK, "ok");
+    m_xEditInReadonlyCB->set_state(TRISTATE_FALSE);
 
     bool bWeb = dynamic_cast<SwWebDocShell*>( rSh.GetView().GetDocShell() ) != nullptr;
 
-    m_pTree->SetSelectHdl(LINK(this, SwEditRegionDlg, GetFirstEntryHdl));
-    m_pTree->SetDeselectHdl(LINK(this, SwEditRegionDlg, DeselectHdl));
-    m_pCurName->SetModifyHdl(LINK(this, SwEditRegionDlg, NameEditHdl));
-    m_pConditionED->SetModifyHdl( LINK( this, SwEditRegionDlg, ConditionEditHdl));
-    m_pOK->SetClickHdl         ( LINK( this, SwEditRegionDlg, OkHdl));
-    m_pPasswdCB->SetClickHdl(LINK(this, SwEditRegionDlg, ChangePasswdHdl));
-    m_pPasswdPB->SetClickHdl(LINK(this, SwEditRegionDlg, ChangePasswdHdl));
-    m_pHideCB->SetClickHdl(LINK(this, SwEditRegionDlg, ChangeHideHdl));
+    m_xTree->connect_changed(LINK(this, SwEditRegionDlg, GetFirstEntryHdl));
+    m_xCurName->connect_changed(LINK(this, SwEditRegionDlg, NameEditHdl));
+    m_xConditionED->connect_changed( LINK( this, SwEditRegionDlg, ConditionEditHdl));
+    m_xOK->connect_clicked( LINK( this, SwEditRegionDlg, OkHdl));
+    m_xPasswdCB->connect_toggled(LINK(this, SwEditRegionDlg, TogglePasswdHdl));
+    m_xPasswdPB->connect_clicked(LINK(this, SwEditRegionDlg, ChangePasswdHdl));
+    m_xHideCB->connect_toggled(LINK(this, SwEditRegionDlg, ChangeHideHdl));
     // edit in readonly sections
-    m_pEditInReadonlyCB->SetClickHdl(LINK(this, SwEditRegionDlg, ChangeEditInReadonlyHdl));
-
-    m_pOptionsPB->SetClickHdl(LINK(this, SwEditRegionDlg, OptionsHdl));
-    m_pProtectCB->SetClickHdl(LINK(this, SwEditRegionDlg, ChangeProtectHdl));
-    m_pDismiss->SetClickHdl    ( LINK( this, SwEditRegionDlg, ChangeDismissHdl));
-    m_pFileCB->SetClickHdl(LINK(this, SwEditRegionDlg, UseFileHdl));
-    m_pFilePB->SetClickHdl(LINK(this, SwEditRegionDlg, FileSearchHdl));
-    m_pFileNameED->SetModifyHdl(LINK(this, SwEditRegionDlg, FileNameHdl));
-    m_pSubRegionED->SetModifyHdl(LINK(this, SwEditRegionDlg, FileNameHdl));
-    m_pSubRegionED->AddEventListener(LINK(this, SwEditRegionDlg, SubRegionEventHdl));
-    m_pSubRegionED->EnableAutocomplete(true, true);
-
-    m_pTree->SetSelectionMode( SelectionMode::Multiple );
-    m_pTree->SetStyle(m_pTree->GetStyle()|WB_HASBUTTONSATROOT|WB_CLIPCHILDREN|WB_HSCROLL);
-    m_pTree->SetSpaceBetweenEntries(0);
-    m_pTree->SetAllEntriesAccessibleRoleType(SvTreeAccRoleType::TREE);
+    m_xEditInReadonlyCB->connect_toggled(LINK(this, SwEditRegionDlg, ChangeEditInReadonlyHdl));
+
+    m_xOptionsPB->connect_clicked(LINK(this, SwEditRegionDlg, OptionsHdl));
+    m_xProtectCB->connect_toggled(LINK(this, SwEditRegionDlg, ChangeProtectHdl));
+    m_xDismiss->connect_clicked( LINK( this, SwEditRegionDlg, ChangeDismissHdl));
+    m_xFileCB->connect_toggled(LINK(this, SwEditRegionDlg, UseFileHdl));
+    m_xFilePB->connect_clicked(LINK(this, SwEditRegionDlg, FileSearchHdl));
+    m_xFileNameED->connect_changed(LINK(this, SwEditRegionDlg, FileNameEntryHdl));
+    m_xSubRegionED->connect_changed(LINK(this, SwEditRegionDlg, FileNameComboBoxHdl));
+    m_xSubRegionED->connect_popup_toggled(LINK(this, SwEditRegionDlg, SubRegionEventHdl));
+    m_xSubRegionED->set_entry_completion(true, true);
 
-    if(bWeb)
+    m_xTree->set_selection_mode(SelectionMode::Multiple);
+
+    if (bWeb)
     {
-        m_pDDECB->Hide();
-        get<VclContainer>("hideframe")->Hide();
-        m_pPasswdCB->Hide();
+        m_xDDECB->hide();
+        m_xHideFrame->hide();
+        m_xPasswdCB->hide();
     }
 
-    m_pDDECB->SetClickHdl(LINK(this, SwEditRegionDlg, DDEHdl));
+    m_xDDECB->connect_toggled(LINK(this, SwEditRegionDlg, DDEHdl));
 
     pCurrSect = rSh.GetCurrSection();
     RecurseList( nullptr, nullptr );
-    // if the cursor is not in a region
-    // the first one will always be selected
-    if( !m_pTree->FirstSelected() && m_pTree->First() )
-        m_pTree->Select( m_pTree->First() );
-    m_pTree->Show();
+
+    // if the cursor is not in a region the first one will always be selected
+    if (!m_xTree->get_selected(nullptr))
+    {
+        std::unique_ptr<weld::TreeIter> xIter(m_xTree->make_iterator());
+        if (m_xTree->get_iter_first(*xIter))
+        {
+            m_xTree->select(*xIter);
+            GetFirstEntryHdl(*m_xTree);
+        }
+    }
+
+    m_xTree->show();
     bDontCheckPasswd = false;
 }
 
-bool SwEditRegionDlg::CheckPasswd(CheckBox* pBox)
+bool SwEditRegionDlg::CheckPasswd(weld::ToggleButton* pBox)
 {
-    if(bDontCheckPasswd)
+    if (bDontCheckPasswd)
         return true;
     bool bRet = true;
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    while( pEntry )
-    {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+
+    m_xTree->selected_foreach([this, &bRet](weld::TreeIter& rEntry){
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
         if (!pRepr->GetTempPasswd().getLength()
             && pRepr->GetSectionData().GetPassword().getLength())
         {
-            SfxPasswordDialog aPasswdDlg(GetFrameWeld());
+            SfxPasswordDialog aPasswdDlg(m_xDialog.get());
             bRet = false;
             if (aPasswdDlg.run())
             {
@@ -484,31 +426,29 @@ bool SwEditRegionDlg::CheckPasswd(CheckBox* pBox)
                 }
                 else
                 {
-                    std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(GetFrameWeld(),
+                    std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(m_xDialog.get(),
                                                                   VclMessageType::Info, VclButtonsType::Ok,
                                                                   SwResId(STR_WRONG_PASSWORD)));
                     xInfoBox->run();
                 }
             }
         }
-        pEntry = m_pTree->NextSelected(pEntry);
-    }
-    if(!bRet && pBox)
+        return false;
+    });
+    if (!bRet && pBox)
     {
         //reset old button state
-        if(pBox->IsTriStateEnabled())
-            pBox->SetState(pBox->IsChecked() ? TRISTATE_FALSE : TRISTATE_INDET);
-        else
-            pBox->Check(!pBox->IsChecked());
+        if (pBox->get_state() != TRISTATE_INDET)
+            pBox->set_active(!pBox->get_active());
     }
 
     return bRet;
 }
 
 // recursively look for child-sections
-void SwEditRegionDlg::RecurseList(const SwSectionFormat* pFormat, SvTreeListEntry* pEntry)
+void SwEditRegionDlg::RecurseList(const SwSectionFormat* pFormat, weld::TreeIter* pEntry)
 {
-    SvTreeListEntry* pSelEntry = nullptr;
+    std::unique_ptr<weld::TreeIter> xIter(m_xTree->make_iterator());
     if (!pFormat)
     {
         const size_t nCount=rSh.GetSectionFormatCount();
@@ -522,21 +462,27 @@ void SwEditRegionDlg::RecurseList(const SwSectionFormat* pFormat, SvTreeListEntr
             {
                 SwSection *pSect = pFormat->GetSection();
                 SectRepr* pSectRepr = new SectRepr( n, *pSect );
-                Image aImg = BuildBitmap( pSect->IsProtect(),pSect->IsHidden());
-                SvTreeListEntry* pNewEntry = m_pTree->InsertEntry(pSect->GetSectionName(), aImg, aImg);
-                pNewEntry->SetUserData(pSectRepr);
-                RecurseList( pFormat, pNewEntry );
-                if (pNewEntry->HasChildren())
-                    m_pTree->Expand(pNewEntry);
+
+                OUString sText(pSect->GetSectionName());
+                OUString sImage(BuildBitmap(pSect->IsProtect(),pSect->IsHidden()));
+                OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pSectRepr)));
+                m_xTree->insert(nullptr, -1, &sText, &sId, nullptr, nullptr, &sImage, false, xIter.get());
+
+                RecurseList(pFormat, xIter.get());
+                if (m_xTree->iter_has_child(*xIter))
+                    m_xTree->expand_row(*xIter);
                 if (pCurrSect==pSect)
-                    m_pTree->Select(pNewEntry);
+                {
+                    m_xTree->select(*xIter);
+                    m_xTree->scroll_to_row(*xIter);
+                    GetFirstEntryHdl(*m_xTree);
+                }
             }
         }
     }
     else
     {
         SwSections aTmpArr;
-        SvTreeListEntry* pNEntry;
         pFormat->GetChildSections(aTmpArr, SectionSort::Pos);
         for( const auto pSect : aTmpArr )
         {
@@ -548,24 +494,24 @@ void SwEditRegionDlg::RecurseList(const SwSectionFormat* pFormat, SvTreeListEntr
             {
                 SectRepr* pSectRepr=new SectRepr(
                                 FindArrPos( pSect->GetFormat() ), *pSect );
-                Image aImage = BuildBitmap( pSect->IsProtect(),
-                                        pSect->IsHidden());
-                pNEntry = m_pTree->InsertEntry(
-                    pSect->GetSectionName(), aImage, aImage, pEntry);
-                pNEntry->SetUserData(pSectRepr);
-                RecurseList( pSect->GetFormat(), pNEntry );
-                if( pNEntry->HasChildren())
-                    m_pTree->Expand(pNEntry);
+
+                OUString sText(pSect->GetSectionName());
+                OUString sImage = BuildBitmap(pSect->IsProtect(), pSect->IsHidden());
+                OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pSectRepr)));
+                m_xTree->insert(pEntry, -1, &sText, &sId, nullptr, nullptr, &sImage, false, xIter.get());
+
+                RecurseList(pSect->GetFormat(), xIter.get());
+                if (m_xTree->iter_has_child(*xIter))
+                    m_xTree->expand_row(*xIter);
                 if (pCurrSect==pSect)
-                    pSelEntry = pNEntry;
+                {
+                    m_xTree->select(*xIter);
+                    m_xTree->scroll_to_row(*xIter);
+                    GetFirstEntryHdl(*m_xTree);
+                }
             }
         }
     }
-    if(nullptr != pSelEntry)
-    {
-        m_pTree->MakeVisible(pSelEntry);
-        m_pTree->Select(pSelEntry);
-    }
 }
 
 size_t SwEditRegionDlg::FindArrPos(const SwSectionFormat* pFormat )
@@ -581,82 +527,57 @@ size_t SwEditRegionDlg::FindArrPos(const SwSectionFormat* pFormat )
 
 SwEditRegionDlg::~SwEditRegionDlg( )
 {
-    disposeOnce();
-}
-
-void SwEditRegionDlg::dispose()
-{
-    SvTreeListEntry* pEntry = m_pTree->First();
-    while( pEntry )
+    std::unique_ptr<weld::TreeIter> xIter(m_xTree->make_iterator());
+    if (m_xTree->get_iter_first(*xIter))
     {
-        delete static_cast<SectRepr*>(pEntry->GetUserData());
-        pEntry = m_pTree->Next( pEntry );
+        do
+        {
+            delete reinterpret_cast<SectRepr*>(m_xTree->get_id(*xIter).toInt64());
+        } while (m_xTree->iter_next(*xIter));
     }
-
-    m_pDocInserter.reset();
-    m_pCurName.clear();
-    m_pTree.clear();
-    m_pFileCB.clear();
-    m_pDDECB.clear();
-    m_pDDEFrame.clear();
-    m_pFileNameFT.clear();
-    m_pDDECommandFT.clear();
-    m_pFileNameED.clear();
-    m_pFilePB.clear();
-    m_pSubRegionFT.clear();
-    m_pSubRegionED.clear();
-    m_pProtectCB.clear();
-    m_pPasswdCB.clear();
-    m_pPasswdPB.clear();
-    m_pHideCB.clear();
-    m_pConditionFT.clear();
-    m_pConditionED.clear();
-    m_pEditInReadonlyCB.clear();
-    m_pOK.clear();
-    m_pOptionsPB.clear();
-    m_pDismiss.clear();
-    SfxModalDialog::dispose();
 }
 
-void    SwEditRegionDlg::SelectSection(const OUString& rSectionName)
+void SwEditRegionDlg::SelectSection(const OUString& rSectionName)
 {
-    SvTreeListEntry* pEntry = m_pTree->First();
-    while(pEntry)
-    {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
-        if (pRepr->GetSectionData().GetSectionName() == rSectionName)
-            break;
-        pEntry = m_pTree->Next(pEntry);
-    }
-    if(pEntry)
+    std::unique_ptr<weld::TreeIter> xIter(m_xTree->make_iterator());
+    if (m_xTree->get_iter_first(*xIter))
     {
-        m_pTree->SelectAll(false);
-        m_pTree->Select(pEntry);
-        m_pTree->MakeVisible(pEntry);
+        do
+        {
+            SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(*xIter).toInt64());
+            if (pRepr->GetSectionData().GetSectionName() == rSectionName)
+            {
+                m_xTree->unselect_all();
+                m_xTree->select(*xIter);
+                m_xTree->scroll_to_row(*xIter);
+                GetFirstEntryHdl(*m_xTree);
+                break;
+            }
+        } while (m_xTree->iter_next(*xIter));
     }
 }
 
 // selected entry in TreeListBox is showed in Edit window in case of
 // multiselection some controls are disabled
-IMPL_LINK( SwEditRegionDlg, GetFirstEntryHdl, SvTreeListBox *, pBox, void )
+IMPL_LINK(SwEditRegionDlg, GetFirstEntryHdl, weld::TreeView&, rBox, void)
 {
     bDontCheckPasswd = true;
-    SvTreeListEntry* pEntry=pBox->FirstSelected();
-    m_pHideCB->Enable();
+    std::unique_ptr<weld::TreeIter> xIter(rBox.make_iterator());
+    bool bEntry = rBox.get_selected(xIter.get());
+    m_xHideCB->set_sensitive(true);
     // edit in readonly sections
-    m_pEditInReadonlyCB->Enable();
+    m_xEditInReadonlyCB->set_sensitive(true);
 
-    m_pProtectCB->Enable();
-    m_pFileCB->Enable();
+    m_xProtectCB->set_sensitive(true);
+    m_xFileCB->set_sensitive(true);
     css::uno::Sequence <sal_Int8> aCurPasswd;
-    if( 1 < pBox->GetSelectionCount() )
+    if (1 < rBox.count_selected_rows())
     {
-        m_pHideCB->EnableTriState();
-        m_pProtectCB->EnableTriState();
+        m_xHideCB->set_state(TRISTATE_INDET);
+        m_xProtectCB->set_state(TRISTATE_INDET);
         // edit in readonly sections
-        m_pEditInReadonlyCB->EnableTriState();
-
-        m_pFileCB->EnableTriState();
+        m_xEditInReadonlyCB->set_state(TRISTATE_INDET);
+        m_xFileCB->set_state(TRISTATE_INDET);
 
         bool bHiddenValid       = true;
         bool bProtectValid      = true;
@@ -673,9 +594,8 @@ IMPL_LINK( SwEditRegionDlg, GetFirstEntryHdl, SvTreeListBox *, pBox, void )
         bool bFile              = true;
         bool bPasswdValid       = true;
 
-        while( pEntry )
-        {
-            SectRepr* pRepr=static_cast<SectRepr*>(pEntry->GetUserData());
+        m_xTree->selected_foreach([&](weld::TreeIter& rEntry){
+            SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
             SwSectionData const& rData( pRepr->GetSectionData() );
             if(bFirst)
             {
@@ -702,127 +622,130 @@ IMPL_LINK( SwEditRegionDlg, GetFirstEntryHdl, SvTreeListBox *, pBox, void )
                     (rData.GetType() != CONTENT_SECTION));
                 bPasswdValid      = (aCurPasswd == rData.GetPassword());
             }
-            pEntry = pBox->NextSelected(pEntry);
             bFirst = false;
-        }
+            return false;
+        });
 
-        m_pHideCB->SetState(!bHiddenValid ? TRISTATE_INDET :
+        m_xHideCB->set_state(!bHiddenValid ? TRISTATE_INDET :
                     bHidden ? TRISTATE_TRUE : TRISTATE_FALSE);
-        m_pProtectCB->SetState(!bProtectValid ? TRISTATE_INDET :
+        m_xProtectCB->set_state(!bProtectValid ? TRISTATE_INDET :
                     bProtect ? TRISTATE_TRUE : TRISTATE_FALSE);
         // edit in readonly sections
-        m_pEditInReadonlyCB->SetState(!bEditInReadonlyValid ? TRISTATE_INDET :
+        m_xEditInReadonlyCB->set_state(!bEditInReadonlyValid ? TRISTATE_INDET :
                     bEditInReadonly ? TRISTATE_TRUE : TRISTATE_FALSE);
 
-        m_pFileCB->SetState(!bFileValid ? TRISTATE_INDET :
+        m_xFileCB->set_state(!bFileValid ? TRISTATE_INDET :
                     bFile ? TRISTATE_TRUE : TRISTATE_FALSE);
 
         if (bConditionValid)
-            m_pConditionED->SetText(sCondition);
+            m_xConditionED->set_text(sCondition);
         else
         {
-            m_pConditionFT->Enable(false);
-            m_pConditionED->Enable(false);
+            m_xConditionFT->set_sensitive(false);
+            m_xConditionED->set_sensitive(false);
         }
 
-        m_pCurName->Enable(false);
-        m_pDDECB->Enable(false);
-        m_pDDEFrame->Enable(false);
-        m_pOptionsPB->Enable(false);
-        bool bPasswdEnabled = m_pProtectCB->GetState() == TRISTATE_TRUE;
-        m_pPasswdCB->Enable(bPasswdEnabled);
-        m_pPasswdPB->Enable(bPasswdEnabled);
+        m_xCurName->set_sensitive(false);
+        m_xDDECB->set_sensitive(false);
+        m_xDDEFrame->set_sensitive(false);
+        m_xOptionsPB->set_sensitive(false);
+        bool bPasswdEnabled = m_xProtectCB->get_state() == TRISTATE_TRUE;
+        m_xPasswdCB->set_sensitive(bPasswdEnabled);
+        m_xPasswdPB->set_sensitive(bPasswdEnabled);
         if(!bPasswdValid)
         {
-            pEntry = pBox->FirstSelected();
-            pBox->SelectAll( false );
-            pBox->Select( pEntry );
-            GetFirstEntryHdl(pBox);
+            rBox.get_selected(xIter.get());
+            rBox.unselect_all();
+            rBox.select(*xIter);
+            GetFirstEntryHdl(rBox);
             return;
         }
         else
-            m_pPasswdCB->Check(aCurPasswd.getLength() > 0);
+            m_xPasswdCB->set_active(aCurPasswd.getLength() > 0);
     }
-    else if (pEntry )
+    else if (bEntry )
     {
-        m_pCurName->Enable();
-        m_pOptionsPB->Enable();
-        SectRepr* pRepr=static_cast<SectRepr*>(pEntry->GetUserData());
+        m_xCurName->set_sensitive(true);
+        m_xOptionsPB->set_sensitive(true);
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(*xIter).toInt64());
         SwSectionData const& rData( pRepr->GetSectionData() );
-        m_pConditionED->SetText(rData.GetCondition());
-        m_pHideCB->Enable();
-        m_pHideCB->SetState((rData.IsHidden()) ? TRISTATE_TRUE : TRISTATE_FALSE);
-        bool bHide = TRISTATE_TRUE == m_pHideCB->GetState();
-        m_pConditionED->Enable(bHide);
-        m_pConditionFT->Enable(bHide);
-        m_pPasswdCB->Check(rData.GetPassword().getLength() > 0);
-
-        m_pOK->Enable();
-        m_pPasswdCB->Enable();
-        m_pCurName->SetText(pBox->GetEntryText(pEntry));
-        m_pCurName->Enable();
-        m_pDismiss->Enable();
+        m_xConditionED->set_text(rData.GetCondition());
+        m_xHideCB->set_sensitive(true);
+        m_xHideCB->set_state((rData.IsHidden()) ? TRISTATE_TRUE : TRISTATE_FALSE);
+        bool bHide = TRISTATE_TRUE == m_xHideCB->get_state();
+        m_xConditionED->set_sensitive(bHide);
+        m_xConditionFT->set_sensitive(bHide);
+        m_xPasswdCB->set_active(rData.GetPassword().getLength() > 0);
+
+        m_xOK->set_sensitive(true);
+        m_xPasswdCB->set_sensitive(true);
+        m_xCurName->set_text(rBox.get_text(*xIter));
+        m_xCurName->set_sensitive(true);
+        m_xDismiss->set_sensitive(true);
         const OUString aFile = pRepr->GetFile();
         const OUString sSub = pRepr->GetSubRegion();
+        m_xSubRegionED->clear();
+        m_xSubRegionED->append_text(""); // put in a dummy entry, which is replaced when m_bSubRegionsFilled is set
         m_bSubRegionsFilled = false;
-        m_pSubRegionED->Clear();
         if( !aFile.isEmpty() || !sSub.isEmpty() )
         {
-            m_pFileCB->Check();
-            m_pFileNameED->SetText(aFile);
-            m_pSubRegionED->SetText(sSub);
-            m_pDDECB->Check(rData.GetType() == DDE_LINK_SECTION);
+            m_xFileCB->set_active(true);
+            m_xFileNameED->set_text(aFile);
+            m_xSubRegionED->set_entry_text(sSub);
+            m_xDDECB->set_active(rData.GetType() == DDE_LINK_SECTION);
         }
         else
         {
-            m_pFileCB->Check(false);
-            m_pFileNameED->SetText(aFile);
-            m_pDDECB->Enable(false);
-            m_pDDECB->Check(false);
+            m_xFileCB->set_active(false);
+            m_xFileNameED->set_text(aFile);
+            m_xDDECB->set_sensitive(false);
+            m_xDDECB->set_active(false);
         }
-        UseFileHdl(m_pFileCB);
-        DDEHdl(m_pDDECB);
-        m_pProtectCB->SetState((rData.IsProtectFlag())
+        UseFileHdl(*m_xFileCB);
+        DDEHdl(*m_xDDECB);
+        m_xProtectCB->set_state((rData.IsProtectFlag())
                 ? TRISTATE_TRUE : TRISTATE_FALSE);
-        m_pProtectCB->Enable();
+        m_xProtectCB->set_sensitive(true);
 
         // edit in readonly sections
-        m_pEditInReadonlyCB->SetState((rData.IsEditInReadonlyFlag())
+        m_xEditInReadonlyCB->set_state((rData.IsEditInReadonlyFlag())
                 ? TRISTATE_TRUE : TRISTATE_FALSE);
-        m_pEditInReadonlyCB->Enable();
+        m_xEditInReadonlyCB->set_sensitive(true);
 
-        bool bPasswdEnabled = m_pProtectCB->IsChecked();
-        m_pPasswdCB->Enable(bPasswdEnabled);
-        m_pPasswdPB->Enable(bPasswdEnabled);
+        bool bPasswdEnabled = m_xProtectCB->get_active();
+        m_xPasswdCB->set_sensitive(bPasswdEnabled);
+        m_xPasswdPB->set_sensitive(bPasswdEnabled);
     }
     bDontCheckPasswd = false;
 }
 
+#if 0
 IMPL_LINK( SwEditRegionDlg, DeselectHdl, SvTreeListBox *, pBox, void )
 {
     if( pBox->GetSelectionCount() )
         return;
 
-    m_pHideCB->Enable(false);
-    m_pProtectCB->Enable(false);
+    m_xHideCB->set_sensitive(false);
+    m_xProtectCB->set_sensitive(false);
     // edit in readonly sections
-    m_pEditInReadonlyCB->Enable(false);
+    m_xEditInReadonlyCB->set_sensitive(false);
 
-    m_pPasswdCB->Enable(false);
-    m_pConditionFT->Enable(false);
-    m_pConditionED->Enable(false);
-    m_pFileCB->Enable(false);
-    m_pDDEFrame->Enable(false);
-    m_pDDECB->Enable(false);
-    m_pCurName->Enable(false);
+    m_xPasswdCB->set_sensitive(false);
+    m_xConditionFT->set_sensitive(false);
+    m_xConditionED->set_sensitive(false);
+    m_xFileCB->set_sensitive(false);
+    m_xDDEFrame->set_sensitive(false);
+    m_xDDECB->set_sensitive(false);
+    m_xCurName->set_sensitive(false);
 
-    UseFileHdl(m_pFileCB);
-    DDEHdl(m_pDDECB);
+    UseFileHdl(*m_xFileCB);
+    DDEHdl(m_xDDECB);
 
 }
+#endif
 
 // in OkHdl the modified settings are being applied and reversed regions are deleted
-IMPL_LINK_NOARG(SwEditRegionDlg, OkHdl, Button*, void)
+IMPL_LINK_NOARG(SwEditRegionDlg, OkHdl, weld::Button&, void)
 {
     // temp. Array because during changing of a region the position
     // inside of the "Core-Arrays" can be shifted:
@@ -837,46 +760,48 @@ IMPL_LINK_NOARG(SwEditRegionDlg, OkHdl, Button*, void)
     rSh.StartAllAction();
     rSh.StartUndo();
     rSh.ResetSelect( nullptr,false );
-    SvTreeListEntry* pEntry = m_pTree->First();
 
-    while( pEntry )
+    std::unique_ptr<weld::TreeIter> xIter(m_xTree->make_iterator());
+    if (m_xTree->get_iter_first(*xIter))
     {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
-        SwSectionFormat* pFormat = aOrigArray[ pRepr->GetArrPos() ];
-        if (!pRepr->GetSectionData().IsProtectFlag())
+        do
         {
-            pRepr->GetSectionData().SetPassword(uno::Sequence<sal_Int8 >());
-        }
-        size_t nNewPos = rDocFormats.GetPos(pFormat);
-        if ( SIZE_MAX != nNewPos )
-        {
-            std::unique_ptr<SfxItemSet> pSet(pFormat->GetAttrSet().Clone( false ));
-            if( pFormat->GetCol() != pRepr->GetCol() )
-                pSet->Put( pRepr->GetCol() );
+            SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(*xIter).toInt64());
+            SwSectionFormat* pFormat = aOrigArray[ pRepr->GetArrPos() ];
+            if (!pRepr->GetSectionData().IsProtectFlag())
+            {
+                pRepr->GetSectionData().SetPassword(uno::Sequence<sal_Int8 >());
+            }
+            size_t nNewPos = rDocFormats.GetPos(pFormat);
+            if ( SIZE_MAX != nNewPos )
+            {
+                std::unique_ptr<SfxItemSet> pSet(pFormat->GetAttrSet().Clone( false ));
+                if( pFormat->GetCol() != pRepr->GetCol() )
+                    pSet->Put( pRepr->GetCol() );
 
-            SvxBrushItem aBrush(pFormat->makeBackgroundBrushItem(false));
-            if( aBrush != pRepr->GetBackground() )
-                pSet->Put( pRepr->GetBackground() );
+                SvxBrushItem aBrush(pFormat->makeBackgroundBrushItem(false));
+                if( aBrush != pRepr->GetBackground() )
+                    pSet->Put( pRepr->GetBackground() );
 
-            if( pFormat->GetFootnoteAtTextEnd(false) != pRepr->GetFootnoteNtAtEnd() )
-                pSet->Put( pRepr->GetFootnoteNtAtEnd() );
+                if( pFormat->GetFootnoteAtTextEnd(false) != pRepr->GetFootnoteNtAtEnd() )
+                    pSet->Put( pRepr->GetFootnoteNtAtEnd() );
 
-            if( pFormat->GetEndAtTextEnd(false) != pRepr->GetEndNtAtEnd() )
-                pSet->Put( pRepr->GetEndNtAtEnd() );
+                if( pFormat->GetEndAtTextEnd(false) != pRepr->GetEndNtAtEnd() )
+                    pSet->Put( pRepr->GetEndNtAtEnd() );
 
-            if( pFormat->GetBalancedColumns() != pRepr->GetBalance() )
-                pSet->Put( pRepr->GetBalance() );
+                if( pFormat->GetBalancedColumns() != pRepr->GetBalance() )
+                    pSet->Put( pRepr->GetBalance() );
 
-            if( pFormat->GetFrameDir() != pRepr->GetFrameDir() )
-                pSet->Put( pRepr->GetFrameDir() );
+                if( pFormat->GetFrameDir() != pRepr->GetFrameDir() )
+                    pSet->Put( pRepr->GetFrameDir() );
 
-            if( pFormat->GetLRSpace() != pRepr->GetLRSpace())
-                pSet->Put( pRepr->GetLRSpace());
+                if( pFormat->GetLRSpace() != pRepr->GetLRSpace())
+                    pSet->Put( pRepr->GetLRSpace());
 
-            rSh.UpdateSection( nNewPos, pRepr->GetSectionData(),
-                               pSet->Count() ? pSet.get() : nullptr );
-        }
-        pEntry = m_pTree->Next( pEntry );
+                rSh.UpdateSection( nNewPos, pRepr->GetSectionData(),
+                                   pSet->Count() ? pSet.get() : nullptr );
+            }
+        } while (m_xTree->iter_next(*xIter));
     }
 
     for (SectReprs_t::reverse_iterator it = m_SectReprs.rbegin(), aEnd = m_SectReprs.rend(); it != aEnd; ++it)
@@ -890,172 +815,154 @@ IMPL_LINK_NOARG(SwEditRegionDlg, OkHdl, Button*, void)
 
     aOrigArray.clear();
 
-    // EndDialog must be called ahead of EndAction's end,
+    // response must be called ahead of EndAction's end,
     // otherwise ScrollError can occur.
-    EndDialog(RET_OK);
+    m_xDialog->response(RET_OK);
 
     rSh.EndUndo();
     rSh.EndAllAction();
 }
 
 // Toggle protect
-IMPL_LINK( SwEditRegionDlg, ChangeProtectHdl, Button *, pButton, void )
+IMPL_LINK(SwEditRegionDlg, ChangeProtectHdl, weld::ToggleButton&, rButton, void)
 {
-    TriStateBox* pBox = static_cast<TriStateBox*>(pButton);
-    if(!CheckPasswd(pBox))
+    if (!CheckPasswd(&rButton))
         return;
-    pBox->EnableTriState(false);
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    OSL_ENSURE(pEntry,"no entry found");
-    bool bCheck = TRISTATE_TRUE == pBox->GetState();
-    while( pEntry )
-    {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+    bool bCheck = TRISTATE_TRUE == rButton.get_state();
+    m_xTree->selected_foreach([this, bCheck](weld::TreeIter& rEntry){
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
         pRepr->GetSectionData().SetProtectFlag(bCheck);
-        Image aImage = BuildBitmap(bCheck,
-                                   TRISTATE_TRUE == m_pHideCB->GetState());
-        m_pTree->SetExpandedEntryBmp(  pEntry, aImage );
-        m_pTree->SetCollapsedEntryBmp( pEntry, aImage );
-        pEntry = m_pTree->NextSelected(pEntry);
-    }
-    m_pPasswdCB->Enable(bCheck);
-    m_pPasswdPB->Enable(bCheck);
+        OUString aImage = BuildBitmap(bCheck, TRISTATE_TRUE == m_xHideCB->get_state());
+        m_xTree->set_image(rEntry, aImage);
+        return false;
+    });
+    m_xPasswdCB->set_sensitive(bCheck);
+    m_xPasswdPB->set_sensitive(bCheck);
 }
 
 // Toggle hide
-IMPL_LINK( SwEditRegionDlg, ChangeHideHdl, Button *, pButton, void )
+IMPL_LINK( SwEditRegionDlg, ChangeHideHdl, weld::ToggleButton&, rButton, void)
 {
-    TriStateBox* pBox = static_cast<TriStateBox*>(pButton);
-    if(!CheckPasswd(pBox))
+    if (!CheckPasswd(&rButton))
         return;
-    pBox->EnableTriState(false);
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    OSL_ENSURE(pEntry,"no entry found");
-    while( pEntry )
-    {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
-        pRepr->GetSectionData().SetHidden(TRISTATE_TRUE == pBox->GetState());
-
-        Image aImage = BuildBitmap(TRISTATE_TRUE == m_pProtectCB->GetState(),
-                                    TRISTATE_TRUE == pBox->GetState());
-        m_pTree->SetExpandedEntryBmp(  pEntry, aImage );
-        m_pTree->SetCollapsedEntryBmp( pEntry, aImage );
-
-        pEntry = m_pTree->NextSelected(pEntry);
-    }
-
-    bool bHide = TRISTATE_TRUE == pBox->GetState();
-    m_pConditionED->Enable(bHide);
-    m_pConditionFT->Enable(bHide);
+    m_xTree->selected_foreach([this, &rButton](weld::TreeIter& rEntry){
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
+        pRepr->GetSectionData().SetHidden(TRISTATE_TRUE == rButton.get_state());
+        OUString aImage = BuildBitmap(TRISTATE_TRUE == m_xProtectCB->get_state(),
+                                      TRISTATE_TRUE == rButton.get_state());
+        m_xTree->set_image(rEntry, aImage);
+        return false;
+    });
+    bool bHide = TRISTATE_TRUE == rButton.get_state();
+    m_xConditionED->set_sensitive(bHide);
+    m_xConditionFT->set_sensitive(bHide);
 }
 
 // Toggle edit in readonly
-IMPL_LINK( SwEditRegionDlg, ChangeEditInReadonlyHdl, Button *, pButton, void )
+IMPL_LINK(SwEditRegionDlg, ChangeEditInReadonlyHdl, weld::ToggleButton&, rButton, void)
 {
-    TriStateBox* pBox = static_cast<TriStateBox*>(pButton);
-    if(!CheckPasswd(pBox))
+    if (!CheckPasswd(&rButton))
         return;
-    pBox->EnableTriState(false);
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    OSL_ENSURE(pEntry,"no entry found");
-    while( pEntry )
-    {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+    m_xTree->selected_foreach([this, &rButton](weld::TreeIter& rEntry){
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
         pRepr->GetSectionData().SetEditInReadonlyFlag(
-                TRISTATE_TRUE == pBox->GetState());
-        pEntry = m_pTree->NextSelected(pEntry);
-    }
+                TRISTATE_TRUE == rButton.get_state());
+        return false;
+    });
 }
 
 // clear selected region
-IMPL_LINK_NOARG(SwEditRegionDlg, ChangeDismissHdl, Button*, void)
+IMPL_LINK_NOARG(SwEditRegionDlg, ChangeDismissHdl, weld::Button&, void)
 {
     if(!CheckPasswd())
         return;
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    SvTreeListEntry* pChild;
-    SvTreeListEntry* pParent;
     // at first mark all selected
-    while(pEntry)
-    {
-        SectRepr* const pSectRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+    m_xTree->selected_foreach([this](weld::TreeIter& rEntry){
+        SectRepr* const pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
         pSectRepr->SetSelected();
-        pEntry = m_pTree->NextSelected(pEntry);
-    }
-    pEntry = m_pTree->FirstSelected();
+        return false;
+    });
+
+    std::unique_ptr<weld::TreeIter> xEntry(m_xTree->make_iterator());
+    bool bEntry(m_xTree->get_selected(xEntry.get()));
     // then delete
-    while(pEntry)
+    while (bEntry)
     {
-        SectRepr* const pSectRepr = static_cast<SectRepr*>(pEntry->GetUserData());
-        SvTreeListEntry* pRemove = nullptr;
+        SectRepr* const pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(*xEntry).toInt64());
+        std::unique_ptr<weld::TreeIter> xRemove;
         bool bRestart = false;
-        if(pSectRepr->IsSelected())
+        if (pSectRepr->IsSelected())
         {
             m_SectReprs.insert(std::make_pair(pSectRepr->GetArrPos(),
                         std::unique_ptr<SectRepr>(pSectRepr)));
-            while( (pChild = m_pTree->FirstChild(pEntry) )!= nullptr )
+            if (m_xTree->iter_has_child(*xEntry))
             {
-                // because of the repositioning we have to start at the beginning again
-                bRestart = true;
-                pParent = m_pTree->GetParent(pEntry);
-                m_pTree->GetModel()->Move(pChild, pParent, SvTreeList::GetRelPos(pEntry));
+                std::unique_ptr<weld::TreeIter> xChild(m_xTree->make_iterator(xEntry.get()));
+                m_xTree->iter_children(*xChild);
+                std::unique_ptr<weld::TreeIter> xParent(m_xTree->make_iterator(xEntry.get()));
+                if (!m_xTree->iter_parent(*xParent))
+                    xParent.reset();
+                bool bChild = true;
+                do
+                {
+                    // because of the repositioning we have to start at the beginning again
+                    bRestart = true;
+                    std::unique_ptr<weld::TreeIter> xMove(m_xTree->make_iterator(xChild.get()));
+                    bChild = m_xTree->iter_next_sibling(*xChild);
+                    m_xTree->move_subtree(*xMove, xParent.get(), m_xTree->get_iter_index_in_parent(*xEntry));
+                } while (bChild);
             }
-            pRemove = pEntry;
+            xRemove = m_xTree->make_iterator(xEntry.get());
         }
-        if(bRestart)
-            pEntry = m_pTree->First();
+        if (bRestart)
+            bEntry = m_xTree->get_iter_first(*xEntry);
         else
-            pEntry = m_pTree->Next(pEntry);
-        if(pRemove)
-            m_pTree->GetModel()->Remove( pRemove );
+            bEntry = m_xTree->iter_next(*xEntry);
+        if (xRemove)
+            m_xTree->remove(*xRemove);
     }
 
-    if ( m_pTree->FirstSelected() )
+    if (m_xTree->get_selected(nullptr))
         return;
 
-    m_pConditionFT->Enable(false);
-    m_pConditionED->Enable(false);
-    m_pDismiss->       Enable(false);
-    m_pCurName->Enable(false);
-    m_pProtectCB->Enable(false);
-    m_pPasswdCB->Enable(false);
-    m_pHideCB->Enable(false);
+    m_xConditionFT->set_sensitive(false);
+    m_xConditionED->set_sensitive(false);
+    m_xDismiss->set_sensitive(false);
+    m_xCurName->set_sensitive(false);
+    m_xProtectCB->set_sensitive(false);
+    m_xPasswdCB->set_sensitive(false);
+    m_xHideCB->set_sensitive(false);
     // edit in readonly sections
-    m_pEditInReadonlyCB->Enable(false);
-    m_pEditInReadonlyCB->SetState(TRISTATE_FALSE);
-    m_pProtectCB->SetState(TRISTATE_FALSE);
-    m_pPasswdCB->Check(false);
-    m_pHideCB->SetState(TRISTATE_FALSE);
-    m_pFileCB->Check(false);
+    m_xEditInReadonlyCB->set_sensitive(false);
+    m_xEditInReadonlyCB->set_state(TRISTATE_FALSE);
+    m_xProtectCB->set_state(TRISTATE_FALSE);
+    m_xPasswdCB->set_active(false);
+    m_xHideCB->set_state(TRISTATE_FALSE);
+    m_xFileCB->set_active(false);
     // otherwise the focus would be on HelpButton
-    m_pOK->GrabFocus();
-    UseFileHdl(m_pFileCB);
-
+    m_xOK->grab_focus();
+    UseFileHdl(*m_xFileCB);
 }
 
 // link CheckBox to file?
-IMPL_LINK( SwEditRegionDlg, UseFileHdl, Button *, pButton, void )
+IMPL_LINK(SwEditRegionDlg, UseFileHdl, weld::ToggleButton&, rButton, void)
 {
-    CheckBox* pBox = static_cast<CheckBox*>(pButton);
-    if(!CheckPasswd(pBox))
+    if (!CheckPasswd(&rButton))
         return;
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    pBox->EnableTriState(false);
-    bool bMulti = 1 < m_pTree->GetSelectionCount();
-    bool bFile = pBox->IsChecked();
-    if(pEntry)
+    bool bMulti = 1 < m_xTree->count_selected_rows();
+    bool bFile = rButton.get_active();
+    if (m_xTree->get_selected(nullptr))
     {
-        while(pEntry)
-        {
-            SectRepr* const pSectRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+        m_xTree->selected_foreach([&](weld::TreeIter& rEntry){
+            SectRepr* const pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
             bool bContent = pSectRepr->IsContent();
-            if( pBox->IsChecked() && bContent && rSh.HasSelection() )
+            if( rButton.get_active() && bContent && rSh.HasSelection() )
             {
-                std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(GetFrameWeld(),
+                std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(m_xDialog.get(),
                                                                VclMessageType::Question, VclButtonsType::YesNo,
                                                                SwResId(STR_QUERY_CONNECT)));
                 if (RET_NO == xQueryBox->run())
-                    pBox->Check( false );
+                    rButton.set_active( false );
             }
             if( bFile )
                 pSectRepr->SetContent(false);
@@ -1065,53 +972,51 @@ IMPL_LINK( SwEditRegionDlg, UseFileHdl, Button *, pButton, void )
                 pSectRepr->SetSubRegion(OUString());
                 pSectRepr->GetSectionData().SetLinkFilePassword(OUString());
             }
-
-            pEntry = m_pTree->NextSelected(pEntry);
-        }
-        m_pDDECB->Enable(bFile && ! bMulti);
-        m_pDDEFrame->Enable(bFile && ! bMulti);
+            return false;
+        });
+        m_xDDECB->set_sensitive(bFile && !bMulti);
+        m_xDDEFrame->set_sensitive(bFile && !bMulti);
         if( bFile )
         {
-            m_pProtectCB->SetState(TRISTATE_TRUE);
-            m_pFileNameED->GrabFocus();
+            m_xProtectCB->set_state(TRISTATE_TRUE);
+            ChangeProtectHdl(*m_xProtectCB);
+            m_xFileNameED->grab_focus();
 
         }
         else
         {
-            m_pDDECB->Check(false);
-            DDEHdl(m_pDDECB);
-            m_pSubRegionED->SetText(OUString());
+            m_xDDECB->set_active(false);
+            m_xSubRegionED->set_entry_text(OUString());
         }
+        DDEHdl(*m_xDDECB);
     }
     else
     {
-        pBox->Check(false);
-        pBox->Enable(false);
-        m_pDDECB->Check(false);
-        m_pDDECB->Enable(false);
-        m_pDDEFrame->Enable(false);
+        rButton.set_active(false);
+        rButton.set_sensitive(false);
+        m_xDDECB->set_active(false);
+        m_xDDECB->set_sensitive(false);
+        m_xDDEFrame->set_sensitive(false);
     }
 }
 
 // call dialog paste file
-IMPL_LINK_NOARG(SwEditRegionDlg, FileSearchHdl, Button*, void)
+IMPL_LINK_NOARG(SwEditRegionDlg, FileSearchHdl, weld::Button&, void)
 {
     if(!CheckPasswd())
         return;
-    m_pDocInserter.reset(new ::sfx2::DocumentInserter(GetFrameWeld(), "swriter"));
+    m_pDocInserter.reset(new ::sfx2::DocumentInserter(m_xDialog.get(), "swriter"));
     m_pDocInserter->StartExecuteModal( LINK( this, SwEditRegionDlg, DlgClosedHdl ) );
 }
 
-IMPL_LINK_NOARG(SwEditRegionDlg, OptionsHdl, Button*, void)
+IMPL_LINK_NOARG(SwEditRegionDlg, OptionsHdl, weld::Button&, void)
 {
     if(!CheckPasswd())
         return;
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-
-    if(!pEntry)
+    SectRepr* pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_selected_id().toInt64());
+    if (!pSectRepr)
         return;
 
-    SectRepr* pSectRepr = static_cast<SectRepr*>(pEntry->GetUserData());
     SfxItemSet aSet(
         rSh.GetView().GetPool(),
         svl::Items<
@@ -1143,7 +1048,7 @@ IMPL_LINK_NOARG(SwEditRegionDlg, OptionsHdl, Button*, void)
     aSet.Put(SwFormatFrameSize(ATT_VAR_SIZE, nWidth));
     aSet.Put(SvxSizeItem(SID_ATTR_PAGE_SIZE, Size(nWidth, nWidth)));
 
-    SwSectionPropertyTabDialog aTabDlg(GetFrameWeld(), aSet, rSh);
+    SwSectionPropertyTabDialog aTabDlg(m_xDialog.get(), aSet, rSh);
     if (RET_OK == aTabDlg.run())
     {
         const SfxItemSet* pOutSet = aTabDlg.GetOutputItemSet();
@@ -1175,10 +1080,8 @@ IMPL_LINK_NOARG(SwEditRegionDlg, OptionsHdl, Button*, void)
                 SfxItemState::SET == eFrameDirState||
                 SfxItemState::SET == eLRState)
             {
-                SvTreeListEntry* pSelEntry = m_pTree->FirstSelected();
-                while( pSelEntry )
-                {
-                    SectRepr* pRepr = static_cast<SectRepr*>(pSelEntry->GetUserData());
+                m_xTree->selected_foreach([&](weld::TreeIter& rEntry){
+                    SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
                     if( SfxItemState::SET == eColState )
                         pRepr->GetCol() = *static_cast<const SwFormatCol*>(pColItem);
                     if( SfxItemState::SET == eBrushState )
@@ -1193,133 +1096,131 @@ IMPL_LINK_NOARG(SwEditRegionDlg, OptionsHdl, Button*, void)
                         pRepr->GetFrameDir().SetValue(static_cast<const SvxFrameDirectionItem*>(pFrameDirItem)->GetValue());
                     if( SfxItemState::SET == eLRState )
                         pRepr->GetLRSpace() = *static_cast<const SvxLRSpaceItem*>(pLRSpaceItem);
-
-                    pSelEntry = m_pTree->NextSelected(pSelEntry);
-                }
+                    return false;
+                });
             }
         }
     }
+}
 
+IMPL_LINK(SwEditRegionDlg, FileNameComboBoxHdl, weld::ComboBox&, rEdit, void)
+{
+    int nStartPos, nEndPos;
+    rEdit.get_entry_selection_bounds(nStartPos, nEndPos);
+    if (!CheckPasswd())
+        return;
+    rEdit.select_entry_region(nStartPos, nEndPos);
+    SectRepr* pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_selected_id().toInt64());
+    pSectRepr->SetSubRegion( rEdit.get_active_text() );
 }
 
 // Applying of the filename or the linked region
-IMPL_LINK( SwEditRegionDlg, FileNameHdl, Edit&, rEdit, void )
+IMPL_LINK(SwEditRegionDlg, FileNameEntryHdl, weld::Entry&, rEdit, void)
 {
-    Selection aSelect = rEdit.GetSelection();
-    if(!CheckPasswd())
+    int nStartPos, nEndPos;
+    rEdit.get_selection_bounds(nStartPos, nEndPos);
+    if (!CheckPasswd())
         return;
-    rEdit.SetSelection(aSelect);
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    OSL_ENSURE(pEntry,"no entry found");
-    SectRepr* pSectRepr = static_cast<SectRepr*>(pEntry->GetUserData());
-    if (&rEdit == m_pFileNameED)
-    {
-        m_bSubRegionsFilled = false;
-        m_pSubRegionED->Clear();
-        if (m_pDDECB->IsChecked())
+    rEdit.select_region(nStartPos, nEndPos);
+    SectRepr* pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_selected_id().toInt64());
+    m_xSubRegionED->clear();
+    m_xSubRegionED->append_text(""); // put in a dummy entry, which is replaced when m_bSubRegionsFilled is set
+    m_bSubRegionsFilled = false;
+    if (m_xDDECB->get_active())
+    {
+        OUString sLink( SwSectionData::CollapseWhiteSpaces(rEdit.get_text()) );
+        sal_Int32 nPos = 0;
+        sLink = sLink.replaceFirst( " ", OUStringLiteral1(sfx2::cTokenSeparator), &nPos );
+        if (nPos>=0)
         {
-            OUString sLink( SwSectionData::CollapseWhiteSpaces(rEdit.GetText()) );
-            sal_Int32 nPos = 0;
             sLink = sLink.replaceFirst( " ", OUStringLiteral1(sfx2::cTokenSeparator), &nPos );
-            if (nPos>=0)
-            {
-                sLink = sLink.replaceFirst( " ", OUStringLiteral1(sfx2::cTokenSeparator), &nPos );
-            }
-
-            pSectRepr->GetSectionData().SetLinkFileName( sLink );
-            pSectRepr->GetSectionData().SetType( DDE_LINK_SECTION );
-        }
-        else
-        {
-            OUString sTmp(rEdit.GetText());
-            if(!sTmp.isEmpty())
-            {
-                SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium();
-                INetURLObject aAbs;
-                if( pMedium )
-                    aAbs = pMedium->GetURLObject();
-                sTmp = URIHelper::SmartRel2Abs(
-                    aAbs, sTmp, URIHelper::GetMaybeFileHdl() );
-            }
-            pSectRepr->SetFile( sTmp );
-            pSectRepr->GetSectionData().SetLinkFilePassword(OUString());
         }
+
+        pSectRepr->GetSectionData().SetLinkFileName( sLink );
+        pSectRepr->GetSectionData().SetType( DDE_LINK_SECTION );
     }
     else
     {
-        pSectRepr->SetSubRegion( rEdit.GetText() );
+        OUString sTmp(rEdit.get_text());
+        if(!sTmp.isEmpty())
+        {
+            SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium();
+            INetURLObject aAbs;
+            if( pMedium )
+                aAbs = pMedium->GetURLObject();
+            sTmp = URIHelper::SmartRel2Abs(
+                aAbs, sTmp, URIHelper::GetMaybeFileHdl() );
+        }
+        pSectRepr->SetFile( sTmp );
+        pSectRepr->GetSectionData().SetLinkFilePassword(OUString());
     }
 }
 
-IMPL_LINK( SwEditRegionDlg, DDEHdl, Button*, pButton, void )
+IMPL_LINK(SwEditRegionDlg, DDEHdl, weld::ToggleButton&, rButton, void)
 {
-    CheckBox* pBox = static_cast<CheckBox*>(pButton);
-    if(!CheckPasswd(pBox))
+    if (!CheckPasswd(&rButton))
         return;
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    if(pEntry)
+    SectRepr* pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_selected_id().toInt64());
+    if (pSectRepr)
     {
-        bool bFile = m_pFileCB->IsChecked();
-        SectRepr* pSectRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+        bool bFile = m_xFileCB->get_active();
         SwSectionData & rData( pSectRepr->GetSectionData() );
-        bool bDDE = pBox->IsChecked();
+        bool bDDE = rButton.get_active();
         if(bDDE)
         {
-            m_pFileNameFT->Hide();
-            m_pDDECommandFT->Enable();
-            m_pDDECommandFT->Show();
-            m_pSubRegionFT->Hide();
-            m_pSubRegionED->Hide();
+            m_xFileNameFT->hide();
+            m_xDDECommandFT->set_sensitive(true);
+            m_xDDECommandFT->show();
+            m_xSubRegionFT->hide();
+            m_xSubRegionED->hide();
             if (FILE_LINK_SECTION == rData.GetType())
             {
                 pSectRepr->SetFile(OUString());
-                m_pFileNameED->SetText(OUString());
+                m_xFileNameED->set_text(OUString());
                 rData.SetLinkFilePassword(OUString());
             }
             rData.SetType(DDE_LINK_SECTION);
         }
         else
         {
-            m_pDDECommandFT->Hide();
-            m_pFileNameFT->Enable(bFile);
-            m_pFileNameFT->Show();
-            m_pSubRegionED->Show();
-            m_pSubRegionFT->Show();
-            m_pSubRegionED->Enable(bFile);
-            m_pSubRegionFT->Enable(bFile);
-            m_pSubRegionED->Enable(bFile);
+            m_xDDECommandFT->hide();
+            m_xFileNameFT->set_sensitive(bFile);
+            m_xFileNameFT->show();
+            m_xSubRegionED->show();
+            m_xSubRegionFT->show();
+            m_xSubRegionED->set_sensitive(bFile);
+            m_xSubRegionFT->set_sensitive(bFile);
+            m_xSubRegionED->set_sensitive(bFile);
             if (DDE_LINK_SECTION == rData.GetType())
             {
                 rData.SetType(FILE_LINK_SECTION);
                 pSectRepr->SetFile(OUString());
                 rData.SetLinkFilePassword(OUString());
-                m_pFileNameED->SetText(OUString());
+                m_xFileNameED->set_text(OUString());
             }
         }
-        m_pFilePB->Enable(bFile && !bDDE);
+        m_xFilePB->set_sensitive(bFile && !bDDE);
     }
 }
 
-IMPL_LINK( SwEditRegionDlg, ChangePasswdHdl, Button *, pBox, void )
+void SwEditRegionDlg::ChangePasswd(bool bChange)
 {
-    bool bChange = pBox == m_pPasswdPB;
-    if(!CheckPasswd())
+    if (!CheckPasswd())
     {
-        if(!bChange)
-            m_pPasswdCB->Check(!m_pPasswdCB->IsChecked());
+        if (!bChange)
+            m_xPasswdCB->set_active(!m_xPasswdCB->get_active());
         return;
     }
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    bool bSet = bChange ? bChange : m_pPasswdCB->IsChecked();
-    OSL_ENSURE(pEntry,"no entry found");
-    while( pEntry )
-    {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+
+    bool bSet = bChange ? bChange : m_xPasswdCB->get_active();
+
+    m_xTree->selected_foreach([this, bChange, bSet](weld::TreeIter& rEntry){
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
         if(bSet)
         {
             if(!pRepr->GetTempPasswd().getLength() || bChange)
             {
-                SfxPasswordDialog aPasswdDlg(GetFrameWeld());
+                SfxPasswordDialog aPasswdDlg(m_xDialog.get());
                 aPasswdDlg.ShowExtras(SfxShowExtras::CONFIRM);
                 if (RET_OK == aPasswdDlg.run())
                 {
@@ -1330,19 +1231,19 @@ IMPL_LINK( SwEditRegionDlg, ChangePasswdHdl, Button *, pBox, void )
                     }
                     else
                     {
-                        std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(pBox->GetFrameWeld(),
+                        std::unique_ptr<weld::MessageDialog> xInfoBox(Application::CreateMessageDialog(m_xDialog.get(),
                                                                       VclMessageType::Info, VclButtonsType::Ok,
                                                                       SwResId(STR_WRONG_PASSWD_REPEAT)));
                         xInfoBox->run();
-                        ChangePasswdHdl(pBox);
-                        break;
+                        ChangePasswd(bChange);
+                        return true;
                     }
                 }
                 else
                 {
                     if(!bChange)
-                        m_pPasswdCB->Check(false);
-                    break;
+                        m_xPasswdCB->set_active(false);
+                    return true;
                 }
             }
             pRepr->GetSectionData().SetPassword(pRepr->GetTempPasswd());
@@ -1351,43 +1252,51 @@ IMPL_LINK( SwEditRegionDlg, ChangePasswdHdl, Button *, pBox, void )
         {
             pRepr->GetSectionData().SetPassword(uno::Sequence<sal_Int8 >());
         }
-        pEntry = m_pTree->NextSelected(pEntry);
-    }
+        return false;
+    });
+}
+
+IMPL_LINK_NOARG(SwEditRegionDlg, TogglePasswdHdl, weld::ToggleButton&, void)
+{
+    ChangePasswd(false);
+}
+
+IMPL_LINK_NOARG(SwEditRegionDlg, ChangePasswdHdl, weld::Button&, void)
+{
+    ChangePasswd(true);
 }
 
 // the current region name is being added to the TreeListBox immediately during
 // editing, with empty string no Ok()
-IMPL_LINK_NOARG(SwEditRegionDlg, NameEditHdl, Edit&, void)
+IMPL_LINK_NOARG(SwEditRegionDlg, NameEditHdl, weld::Entry&, void)
 {
     if(!CheckPasswd())
         return;
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    OSL_ENSURE(pEntry,"no entry found");
-    if (pEntry)
+    std::unique_ptr<weld::TreeIter> xIter(m_xTree->make_iterator());
+    if (m_xTree->get_selected(xIter.get()))
     {
-        const OUString aName = m_pCurName->GetText();
-        m_pTree->SetEntryText(pEntry,aName);
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
+        const OUString aName = m_xCurName->get_text();
+        m_xTree->set_text(*xIter, aName);
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(*xIter).toInt64());
         pRepr->GetSectionData().SetSectionName(aName);
 
-        m_pOK->Enable(!aName.isEmpty());
+        m_xOK->set_sensitive(!aName.isEmpty());
     }
 }
 
-IMPL_LINK( SwEditRegionDlg, ConditionEditHdl, Edit&, rEdit, void )
+IMPL_LINK( SwEditRegionDlg, ConditionEditHdl, weld::Entry&, rEdit, void )
 {
-    Selection aSelect = rEdit.GetSelection();
+    int nStartPos, nEndPos;
+    rEdit.get_selection_bounds(nStartPos, nEndPos);
     if(!CheckPasswd())
         return;
-    rEdit.SetSelection(aSelect);
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    OSL_ENSURE(pEntry,"no entry found");
-    while( pEntry )
-    {
-        SectRepr* pRepr = static_cast<SectRepr*>(pEntry->GetUserData());
-        pRepr->GetSectionData().SetCondition(rEdit.GetText());
-        pEntry = m_pTree->NextSelected(pEntry);
-    }
+    rEdit.select_region(nStartPos, nEndPos);
+
+    m_xTree->selected_foreach([this, &rEdit](weld::TreeIter& rEntry){
+        SectRepr* pRepr = reinterpret_cast<SectRepr*>(m_xTree->get_id(rEntry).toInt64());
+        pRepr->GetSectionData().SetCondition(rEdit.get_text());
+        return false;
+    });
 }
 
 IMPL_LINK( SwEditRegionDlg, DlgClosedHdl, sfx2::FileDialogHelper *, _pFileDlg, void )
@@ -1403,29 +1312,27 @@ IMPL_LINK( SwEditRegionDlg, DlgClosedHdl, sfx2::FileDialogHelper *, _pFileDlg, v
             const SfxPoolItem* pItem;
             if ( SfxItemState::SET == pMedium->GetItemSet()->GetItemState( SID_PASSWORD, false, &pItem ) )
                 sPassword = static_cast<const SfxStringItem*>(pItem )->GetValue();
-            ::lcl_ReadSections(*pMedium, *m_pSubRegionED);
+            ::lcl_ReadSections(*pMedium, *m_xSubRegionED);
         }
     }
 
-    SvTreeListEntry* pEntry = m_pTree->FirstSelected();
-    OSL_ENSURE( pEntry, "no entry found" );
-    if ( pEntry )
+    SectRepr* pSectRepr = reinterpret_cast<SectRepr*>(m_xTree->get_selected_id().toInt64());
+    if (pSectRepr)
     {
-        SectRepr* pSectRepr = static_cast<SectRepr*>(pEntry->GetUserData());
         pSectRepr->SetFile( sFileName );
         pSectRepr->SetFilter( sFilterName );
         pSectRepr->GetSectionData().SetLinkFilePassword(sPassword);
-        m_pFileNameED->SetText(pSectRepr->GetFile());
+        m_xFileNameED->set_text(pSectRepr->GetFile());
     }
 }
 
-IMPL_LINK( SwEditRegionDlg, SubRegionEventHdl, VclWindowEvent&, rEvent, void )
+IMPL_LINK_NOARG(SwEditRegionDlg, SubRegionEventHdl, weld::ComboBox&, void)
 {
-    if( !m_bSubRegionsFilled && rEvent.GetId() == VclEventId::DropdownPreOpen )
+    if (!m_bSubRegionsFilled)
     {
         //if necessary fill the names bookmarks/sections/tables now
 
-        OUString sFileName = m_pFileNameED->GetText();
+        OUString sFileName = m_xFileNameED->get_text();
         if(!sFileName.isEmpty())
         {
             SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium();
@@ -1438,35 +1345,15 @@ IMPL_LINK( SwEditRegionDlg, SubRegionEventHdl, VclWindowEvent&, rEvent, void )
             //load file and set the shell
             SfxMedium aMedium( sFileName, StreamMode::STD_READ );
             sFileName = aMedium.GetURLObject().GetMainURL( INetURLObject::DecodeMechanism::NONE );
-            ::lcl_ReadSections(aMedium, *m_pSubRegionED);
+            ::lcl_ReadSections(aMedium, *m_xSubRegionED);
         }
         else
-            lcl_FillSubRegionList(rSh, *m_pSubRegionED, nullptr);
+            lcl_FillSubRegionList(rSh, *m_xSubRegionED, nullptr);
         m_bSubRegionsFilled = true;
     }
 }
 
 // helper function - read section names from medium
-static void lcl_ReadSections( SfxMedium& rMedium, ComboBox& rBox )
-{
-    rBox.Clear();
-    uno::Reference < embed::XStorage > xStg;
-    if( rMedium.IsStorage() && (xStg = rMedium.GetStorage()).is() )
-    {
-        std::vector<OUString> aArr;
-        SotClipboardFormatId nFormat = SotStorage::GetFormatID( xStg );
-        if ( nFormat == SotClipboardFormatId::STARWRITER_60 || nFormat == SotClipboardFormatId::STARWRITERGLOB_60 ||
-            nFormat == SotClipboardFormatId::STARWRITER_8 || nFormat == SotClipboardFormatId::STARWRITERGLOB_8)
-            SwGetReaderXML()->GetSectionList( rMedium, aArr );
-
-        for (auto const& it : aArr)
-        {
-            rBox.InsertEntry(it);
-        }
-    }
-}
-
-// helper function - read section names from medium
 static void lcl_ReadSections( SfxMedium& rMedium, weld::ComboBox& rBox )
 {
     rBox.clear();
@@ -1650,6 +1537,7 @@ void    SwInsertSectionTabPage::SetWrtShell(SwWrtShell& rSh)
         const OUString sSectionName(pSectionData->GetSectionName());
         m_xCurName->set_entry_text(rSh.GetUniqueSectionName(&sSectionName));
         m_xProtectCB->set_active( pSectionData->IsProtectFlag() );
+        ChangeProtectHdl(*m_xProtectCB);
         m_sFileName = pSectionData->GetLinkFileName();
         m_sFilePasswd = pSectionData->GetLinkFilePassword();
         m_xFileCB->set_active( !m_sFileName.isEmpty() );
@@ -1821,6 +1709,7 @@ IMPL_LINK(SwInsertSectionTabPage, UseFileHdl, weld::ToggleButton&, rButton, void
     {
         m_xFileNameED->grab_focus();
         m_xProtectCB->set_active(true);
+        ChangeProtectHdl(*m_xProtectCB);
     }
     else
     {
@@ -2047,7 +1936,7 @@ void SwSectionFootnoteEndTabPage::ResetState( bool bFootnote,
         [[fallthrough]];
 
     case FTNEND_ATTXTEND_OWNNUMSEQ:
-        pNumViewBox->Enable( false );
+        pNumViewBox->set_sensitive( false );
         pPrefixFT->set_sensitive( false );
         pPrefixED->set_sensitive( false );
         pSuffixFT->set_sensitive( false );
@@ -2115,7 +2004,7 @@ IMPL_LINK( SwSectionFootnoteEndTabPage, FootEndHdl, weld::ToggleButton&, rBox, v
     pOffsetText->set_sensitive( bEnableNum );
     pOffsetField->set_sensitive( bEnableNum );
     pNumFormatBox->set_sensitive( bEnableNum );
-    pNumViewBox->Enable( bEnableNumFormat );
+    pNumViewBox->set_sensitive( bEnableNumFormat );
     pPrefixED->set_sensitive( bEnableNumFormat );
     pSuffixED->set_sensitive( bEnableNumFormat );
     pPrefixFT->set_sensitive( bEnableNumFormat );
diff --git a/sw/source/ui/fldui/changedb.cxx b/sw/source/ui/fldui/changedb.cxx
index 4ddfff329d92..3db42d25f5f3 100644
--- a/sw/source/ui/fldui/changedb.cxx
+++ b/sw/source/ui/fldui/changedb.cxx
@@ -193,6 +193,7 @@ void SwChangeDBDlg::UpdateFields()
                           m_xUsedDBTLB->get_id(rEntry));
             aDBNames.push_back(sTmp);
         }
+        return false;
     });
 
     pSh->StartAllAction();
diff --git a/sw/source/uibase/dialog/regionsw.cxx b/sw/source/uibase/dialog/regionsw.cxx
index 30b97749e641..da57a0b6f811 100644
--- a/sw/source/uibase/dialog/regionsw.cxx
+++ b/sw/source/uibase/dialog/regionsw.cxx
@@ -208,7 +208,7 @@ void SwBaseShell::EditRegionDialog(SfxRequest const & rReq)
         case FN_EDIT_REGION:
         case FN_EDIT_CURRENT_REGION:
         {
-            vcl::Window* pParentWin = &GetView().GetViewFrame()->GetWindow();
+            weld::Window* pParentWin = GetView().GetViewFrame()->GetWindow().GetFrameWeld();
             {
                 SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
                 ScopedVclPtr<AbstractEditRegionDlg> pEditRegionDlg(pFact->CreateEditRegionDlg(pParentWin, rWrtShell));
diff --git a/sw/source/uibase/inc/condedit.hxx b/sw/source/uibase/inc/condedit.hxx
index 4efdbff7f867..81716bda93f0 100644
--- a/sw/source/uibase/inc/condedit.hxx
+++ b/sw/source/uibase/inc/condedit.hxx
@@ -69,8 +69,10 @@ public:
     SwConditionEdit(std::unique_ptr<weld::Entry> xControl);
 
     OUString get_text() const { return m_xControl->get_text(); }
+    void set_text(const OUString& rText) { m_xControl->set_text(rText); }
     bool get_sensitive() const { return m_xControl->get_sensitive(); }
     void set_sensitive(bool bSensitive) { m_xControl->set_sensitive(bSensitive); }
+    void connect_changed(const Link<weld::Entry&, void>& rLink) { m_xControl->connect_changed(rLink); }
     void hide() { m_xControl->hide(); }
     weld::Entry& get_widget() { return *m_xControl; }
 
diff --git a/sw/source/uibase/inc/numberingtypelistbox.hxx b/sw/source/uibase/inc/numberingtypelistbox.hxx
index 0cb067bc8666..291fe8a7e5b5 100644
--- a/sw/source/uibase/inc/numberingtypelistbox.hxx
+++ b/sw/source/uibase/inc/numberingtypelistbox.hxx
@@ -52,7 +52,7 @@ public:
     SvxNumType    GetSelectedNumberingType();
     bool          SelectNumberingType(SvxNumType nType);
     void          SetNoSelection() { m_xWidget->set_active(-1); }
-    void          Enable(bool bEnable) { m_xWidget->set_sensitive(bEnable); }
+    void          set_sensitive(bool bEnable) { m_xWidget->set_sensitive(bEnable); }
 };
 
 #endif
diff --git a/sw/source/uibase/inc/regionsw.hxx b/sw/source/uibase/inc/regionsw.hxx
index 4a54a0d72062..60e5bb2802cd 100644
--- a/sw/source/uibase/inc/regionsw.hxx
+++ b/sw/source/uibase/inc/regionsw.hxx
@@ -57,37 +57,10 @@ namespace sfx2
 class SectRepr;
 typedef std::map<size_t, std::unique_ptr<SectRepr>> SectReprs_t;
 
-class SwEditRegionDlg : public SfxModalDialog
+class SwEditRegionDlg : public SfxDialogController
 {
-    VclPtr<Edit>           m_pCurName;
-    VclPtr<SvTreeListBox>  m_pTree;
-
-    VclPtr<TriStateBox>    m_pFileCB;
-    VclPtr<CheckBox>       m_pDDECB;
-    VclPtr<VclContainer>   m_pDDEFrame;
-    VclPtr<FixedText>      m_pFileNameFT;
-    VclPtr<FixedText>      m_pDDECommandFT;
-    VclPtr<Edit>           m_pFileNameED;
-    VclPtr<PushButton>     m_pFilePB;
-    VclPtr<FixedText>      m_pSubRegionFT;
-    VclPtr<ComboBox>       m_pSubRegionED;
     bool            m_bSubRegionsFilled;
 
-    VclPtr<TriStateBox>    m_pProtectCB;
-    VclPtr<CheckBox>       m_pPasswdCB;
-    VclPtr<PushButton>     m_pPasswdPB;
-
-    VclPtr<TriStateBox>    m_pHideCB;
-    VclPtr<FixedText>      m_pConditionFT;
-    VclPtr<ConditionEdit>  m_pConditionED;
-
-    // #114856# edit in readonly sections
-    VclPtr<TriStateBox>    m_pEditInReadonlyCB;
-
-    VclPtr<OKButton>       m_pOK;
-    VclPtr<PushButton>     m_pOptionsPB;
-    VclPtr<PushButton>     m_pDismiss;
-
     SwWrtShell&             rSh;
     SectReprs_t             m_SectReprs;
     const SwSection*        pCurrSect;
@@ -95,36 +68,62 @@ class SwEditRegionDlg : public SfxModalDialog
 
     bool            bDontCheckPasswd :1;
 
-    void    RecurseList( const SwSectionFormat* pFormat, SvTreeListEntry* pEntry);
+    std::unique_ptr<weld::Entry> m_xCurName;
+    std::unique_ptr<weld::TreeView>  m_xTree;
+    std::unique_ptr<weld::CheckButton> m_xFileCB;
+    std::unique_ptr<weld::CheckButton> m_xDDECB;
+    std::unique_ptr<weld::Widget> m_xDDEFrame;
+    std::unique_ptr<weld::Label> m_xFileNameFT;
+    std::unique_ptr<weld::Label> m_xDDECommandFT;
+    std::unique_ptr<weld::Entry> m_xFileNameED;
+    std::unique_ptr<weld::Button> m_xFilePB;
+    std::unique_ptr<weld::Label> m_xSubRegionFT;
+    std::unique_ptr<weld::ComboBox> m_xSubRegionED;
+    std::unique_ptr<weld::CheckButton> m_xProtectCB;
+    std::unique_ptr<weld::CheckButton> m_xPasswdCB;
+    std::unique_ptr<weld::Button> m_xPasswdPB;
+    std::unique_ptr<weld::CheckButton> m_xHideCB;
+    std::unique_ptr<weld::Label> m_xConditionFT;
+    std::unique_ptr<SwConditionEdit>  m_xConditionED;
+    // #114856# edit in readonly sections
+    std::unique_ptr<weld::CheckButton> m_xEditInReadonlyCB;
+    std::unique_ptr<weld::Button> m_xOK;
+    std::unique_ptr<weld::Button> m_xOptionsPB;
+    std::unique_ptr<weld::Button> m_xDismiss;
+    std::unique_ptr<weld::Widget> m_xHideFrame;
+
+    void    RecurseList(const SwSectionFormat* pFormat, weld::TreeIter* pIter);
     size_t  FindArrPos(const SwSectionFormat* pFormat);
 
-    DECL_LINK( GetFirstEntryHdl, SvTreeListBox *, void );
-    DECL_LINK( DeselectHdl, SvTreeListBox *, void );
+    DECL_LINK( GetFirstEntryHdl, weld::TreeView&, void );
+    DECL_LINK( DeselectHdl, weld::TreeView&, void );
 
-    DECL_LINK( OkHdl, Button*, void );
-    DECL_LINK( NameEditHdl, Edit&, void );
-    DECL_LINK( ConditionEditHdl, Edit&, void );
+    DECL_LINK( OkHdl, weld::Button&, void );
+    DECL_LINK( NameEditHdl, weld::Entry&, void );
+    DECL_LINK( ConditionEditHdl, weld::Entry&, void );
 
-    DECL_LINK( ChangePasswdHdl, Button *, void );
-    DECL_LINK( ChangeProtectHdl, Button *, void );
-    DECL_LINK( ChangeHideHdl, Button *, void );
+    void ChangePasswd(bool bChange);
+    DECL_LINK( TogglePasswdHdl, weld::ToggleButton&, void );
+    DECL_LINK( ChangePasswdHdl, weld::Button&, void );
+    DECL_LINK( ChangeProtectHdl, weld::ToggleButton&, void );
+    DECL_LINK( ChangeHideHdl, weld::ToggleButton&, void );
     // #114856# edit in readonly sections
-    DECL_LINK( ChangeEditInReadonlyHdl, Button *, void );
-    DECL_LINK( ChangeDismissHdl, Button*, void);
-    DECL_LINK( UseFileHdl, Button*, void );
-    DECL_LINK( FileSearchHdl, Button*, void );
-    DECL_LINK( OptionsHdl, Button*, void );
-    DECL_LINK( FileNameHdl, Edit&, void );
-    DECL_LINK( DDEHdl, Button*, void );
+    DECL_LINK( ChangeEditInReadonlyHdl, weld::ToggleButton&, void );
+    DECL_LINK( ChangeDismissHdl, weld::Button&, void);
+    DECL_LINK( UseFileHdl, weld::ToggleButton&, void );
+    DECL_LINK( FileSearchHdl, weld::Button&, void );
+    DECL_LINK( OptionsHdl, weld::Button&, void );
+    DECL_LINK( FileNameComboBoxHdl, weld::ComboBox&, void );
+    DECL_LINK( FileNameEntryHdl, weld::Entry&, void );
+    DECL_LINK( DDEHdl, weld::ToggleButton&, void );
     DECL_LINK( DlgClosedHdl, sfx2::FileDialogHelper*, void );
-    DECL_LINK( SubRegionEventHdl, VclWindowEvent&, void );
+    DECL_LINK( SubRegionEventHdl, weld::ComboBox&, void );
 
-    bool CheckPasswd(CheckBox* pBox = nullptr);
+    bool CheckPasswd(weld::ToggleButton* pBox = nullptr);
 
 public:
-    SwEditRegionDlg( vcl::Window* pParent, SwWrtShell& rWrtSh );
+    SwEditRegionDlg(weld::Window* pParent, SwWrtShell& rWrtSh);
     virtual ~SwEditRegionDlg() override;
-    virtual void dispose() override;
 
     void    SelectSection(const OUString& rSectionName);
 
diff --git a/sw/uiconfig/swriter/ui/editsectiondialog.ui b/sw/uiconfig/swriter/ui/editsectiondialog.ui
index 37c3081bfce5..a35f9167c361 100644
--- a/sw/uiconfig/swriter/ui/editsectiondialog.ui
+++ b/sw/uiconfig/swriter/ui/editsectiondialog.ui
@@ -2,11 +2,23 @@
 <!-- Generated with glade 3.22.1 -->
 <interface domain="sw">
   <requires lib="gtk+" version="3.18"/>
-  <requires lib="LibreOffice" version="1.0"/>
+  <object class="GtkTreeStore" id="liststore1">
+    <columns>
+      <!-- column-name expander -->
+      <column type="GdkPixbuf"/>
+      <!-- column-name text -->
+      <column type="gchararray"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkDialog" id="EditSectionDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="editsectiondialog|EditSectionDialog">Edit Sections</property>
+    <property name="modal">True</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
     <property name="type_hint">dialog</property>
     <child>
       <placeholder/>
@@ -133,7 +145,6 @@
                         <property name="hexpand">True</property>
                         <property name="vexpand">True</property>
                         <property name="row_spacing">6</property>
-                        <property name="column_spacing">12</property>
                         <child>
                           <object class="GtkEntry" id="curname">
                             <property name="visible">True</property>
@@ -146,13 +157,43 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="vcllo-SvTreeListBox" id="tree:border">
+                          <object class="GtkScrolledWindow">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="hexpand">True</property>
                             <property name="vexpand">True</property>
-                            <child internal-child="selection">
-                              <object class="GtkTreeSelection" id="Tree List-selection1"/>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkTreeView" id="tree">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="hexpand">True</property>
+                                <property name="vexpand">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>
+                                <child internal-child="selection">
+                                  <object class="GtkTreeSelection"/>
+                                </child>
+                                <child>
+                                  <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkCellRendererPixbuf" id="cellrenderertext4"/>
+                                      <attributes>
+                                        <attribute name="pixbuf">0</attribute>
+                                      </attributes>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCellRendererText" id="cellrenderertext2"/>
+                                      <attributes>
+                                        <attribute name="text">1</attribute>
+                                      </attributes>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
                             </child>
                           </object>
                           <packing>
@@ -274,6 +315,7 @@
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
                                         <property name="hexpand">True</property>
+                                        <property name="activates_default">True</property>
                                       </object>
                                       <packing>
                                         <property name="left_attach">1</property>
@@ -302,7 +344,8 @@
                                         <property name="has_entry">True</property>
                                         <child internal-child="entry">
                                           <object class="GtkEntry" id="comboboxtext-entry">
-                                            <property name="can_focus">False</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="activates_default">True</property>
                                           </object>
                                         </child>
                                       </object>
@@ -562,11 +605,12 @@
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="swlo-ConditionEdit" id="condition">
+                                      <object class="GtkEntry" id="condition">
                                         <property name="visible">True</property>
                                         <property name="sensitive">False</property>
                                         <property name="can_focus">True</property>
                                         <property name="hexpand">True</property>
+                                        <property name="activates_default">True</property>
                                       </object>
                                       <packing>
                                         <property name="left_attach">1</property>
@@ -678,8 +722,8 @@
     <action-widgets>
       <action-widget response="-5">ok</action-widget>
       <action-widget response="-6">cancel</action-widget>
-      <action-widget response="0">options</action-widget>
-      <action-widget response="0">remove</action-widget>
+      <action-widget response="101">options</action-widget>
+      <action-widget response="102">remove</action-widget>
       <action-widget response="-11">help</action-widget>
     </action-widgets>
   </object>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 82bae7894824..216de7759527 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -249,6 +249,7 @@ private:
     bool m_bKeyEventListener;
     int m_nBlockNotify;
 
+protected:
     void ensure_event_listener()
     {
         if (!m_bEventListener)
@@ -270,7 +271,6 @@ private:
         }
     }
 
-protected:
     virtual void HandleEventListener(VclWindowEvent& rEvent);
     virtual bool HandleKeyEventListener(VclWindowEvent& rEvent);
 
@@ -1690,15 +1690,7 @@ public:
     {
         m_xRadioButton->SetImageAlign(ImageAlign::Center);
         if (pDevice)
-        {
-            BitmapEx aBitmap(pDevice->GetBitmapEx(Point(0, 0), pDevice->GetOutputSize()));
-
-            vcl::PNGWriter aWriter(aBitmap);
-            SvFileStream sOutput("file:///tmp/demo.png", StreamMode::WRITE);
-            aWriter.Write(sOutput);
-
             m_xRadioButton->SetModeImage(createImage(*pDevice));
-        }
         else
             m_xRadioButton->SetModeImage(Image());
     }
@@ -2387,7 +2379,7 @@ public:
         for (SvTreeListEntry* pEntry = m_xTreeView->First(); pEntry; pEntry = m_xTreeView->Next(pEntry))
         {
             if (SvTabListBox::GetEntryText(pEntry, 0) == rText)
-                return m_xTreeView->GetAbsPos(pEntry);
+                return SvTreeList::GetRelPos(pEntry);
         }
         return -1;
     }
@@ -2400,7 +2392,7 @@ public:
             if (!pId)
                 continue;
             if (rId == *pId)
-                return m_xTreeView->GetAbsPos(pEntry);
+                return SvTreeList::GetRelPos(pEntry);
         }
         return -1;
     }
@@ -2488,7 +2480,7 @@ public:
 
         aRows.reserve(m_xTreeView->GetSelectionCount());
         for (SvTreeListEntry* pEntry = m_xTreeView->FirstSelected(); pEntry; pEntry = m_xTreeView->NextSelected(pEntry))
-            aRows.push_back(m_xTreeView->GetAbsPos(pEntry));
+            aRows.push_back(SvTreeList::GetRelPos(pEntry));
 
         return aRows;
     }
@@ -2719,7 +2711,7 @@ public:
         SvTreeListEntry* pEntry = m_xTreeView->FirstSelected();
         if (!pEntry)
             return -1;
-        return m_xTreeView->GetAbsPos(pEntry);
+        return SvTreeList::GetRelPos(pEntry);
     }
 
     virtual OUString get_selected_text() const override
@@ -2928,24 +2920,26 @@ public:
         m_xTreeView->SetSelectionMode(eMode);
     }
 
-    virtual void selected_foreach(const std::function<void(weld::TreeIter&)>& func) override
+    virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override
     {
         SalInstanceTreeIter aVclIter(nullptr);
         aVclIter.iter = m_xTreeView->FirstSelected();
         while (aVclIter.iter)
         {
-            func(aVclIter);
+            if (func(aVclIter))
+                return;
             aVclIter.iter = m_xTreeView->NextSelected(aVclIter.iter);
         }
     }
 
-    virtual void visible_foreach(const std::function<void(weld::TreeIter&)>& func) override
+    virtual void visible_foreach(const std::function<bool(weld::TreeIter&)>& func) override
     {
         SalInstanceTreeIter aVclIter(nullptr);
         aVclIter.iter = m_xTreeView->GetFirstEntryInView();
         while (aVclIter.iter)
         {
-            func(aVclIter);
+            if (func(aVclIter))
+                return;
             aVclIter.iter = m_xTreeView->GetNextEntryInView(aVclIter.iter);
         }
     }
@@ -2962,6 +2956,19 @@ public:
         return m_xTreeView->IsSelected(rVclIter.iter);
     }
 
+    virtual int get_iter_index_in_parent(const weld::TreeIter& rIter) const override
+    {
+        const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
+        return SvTreeList::GetRelPos(rVclIter.iter);
+    }
+
+    virtual void move_subtree(weld::TreeIter& rNode, const weld::TreeIter* pNewParent, int nIndexInNewParent) override
+    {
+        SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rNode);
+        const SalInstanceTreeIter* pVclParentIter = static_cast<const SalInstanceTreeIter*>(pNewParent);
+        m_xTreeView->GetModel()->Move(rVclIter.iter, pVclParentIter ? pVclParentIter->iter : nullptr, nIndexInNewParent);
+    }
+
     virtual int count_selected_rows() const override
     {
         return m_xTreeView->GetSelectionCount();
@@ -3141,7 +3148,7 @@ IMPL_LINK(SalInstanceTreeView, ToggleHdl, SvLBoxButtonData*, pData, void)
         SvLBoxItem& rItem = pEntry->GetItem(i);
         if (&rItem == pBox)
         {
-            int nRow = m_xTreeView->GetAbsPos(pEntry);
+            int nRow = SvTreeList::GetRelPos(pEntry);
             int nCol = i - 1; // less dummy/expander column
             signal_toggled(std::make_pair(nRow, nCol));
             break;
@@ -3928,6 +3935,23 @@ public:
     {
         return m_xComboBox->IsInDropDown();
     }
+
+    virtual void connect_popup_toggled(const Link<ComboBox&, void>& rLink) override
+    {
+        weld::ComboBox::connect_popup_toggled(rLink);
+        ensure_event_listener();
+    }
+
+    virtual void HandleEventListener(VclWindowEvent& rEvent) override
+    {
+        if (rEvent.GetId() == VclEventId::DropdownPreOpen ||
+            rEvent.GetId() == VclEventId::DropdownClose)
+        {
+            signal_popup_toggled();
+            return;
+        }
+        SalInstanceContainer::HandleEventListener(rEvent);
+    }
 };
 
 class SalInstanceComboBoxWithoutEdit : public SalInstanceComboBox<ListBox>
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 15f3a780df83..910c1cbc230a 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5310,7 +5310,11 @@ namespace
         gtk_tree_model_get(model, iter, search->col, &pStr, -1);
         bool found = strcmp(pStr, search->str.getStr()) == 0;
         if (found)
-            search->index = gtk_tree_path_get_indices(path)[0];
+        {
+            gint depth;
+            gint* indices = gtk_tree_path_get_indices_with_depth(path, &depth);
+            search->index = indices[depth-1];
+        }
         g_free(pStr);
         return found;
     }
@@ -5666,7 +5670,10 @@ private:
         bRet = !bRet;
         gtk_tree_store_set(m_pTreeStore, &iter, nCol, bRet, -1);
 
-        int nRow = gtk_tree_path_get_indices(tree_path)[0];
+        gint depth;
+        gint* indices = gtk_tree_path_get_indices_with_depth(tree_path, &depth);
+        int nRow = indices[depth-1];
+
         signal_toggled(std::make_pair(nRow, nCol));
 
         gtk_tree_path_free(tree_path);
@@ -6055,14 +6062,19 @@ public:
         for (GList* pItem = g_list_first(pList); pItem; pItem = g_list_next(pItem))
         {
             GtkTreePath* path = static_cast<GtkTreePath*>(pItem->data);
-            aRows.push_back(gtk_tree_path_get_indices(path)[0]);
+
+            gint depth;
+            gint* indices = gtk_tree_path_get_indices_with_depth(path, &depth);
+            int nRow = indices[depth-1];
+
+            aRows.push_back(nRow);
         }
         g_list_free_full(pList, reinterpret_cast<GDestroyNotify>(gtk_tree_path_free));
 
         return aRows;
     }
 
-    virtual void selected_foreach(const std::function<void(weld::TreeIter&)>& func) override
+    virtual void selected_foreach(const std::function<bool(weld::TreeIter&)>& func) override
     {
         GtkInstanceTreeIter aGtkIter(nullptr);
 
@@ -6072,12 +6084,13 @@ public:
         {
             GtkTreePath* path = static_cast<GtkTreePath*>(pItem->data);
             gtk_tree_model_get_iter(pModel, &aGtkIter.iter, path);
-            func(aGtkIter);
+            if (func(aGtkIter))
+                break;
         }
         g_list_free_full(pList, reinterpret_cast<GDestroyNotify>(gtk_tree_path_free));
     }
 
-    virtual void visible_foreach(const std::function<void(weld::TreeIter&)>& func) override
+    virtual void visible_foreach(const std::function<bool(weld::TreeIter&)>& func) override
     {
         GtkTreePath* start_path;
         GtkTreePath* end_path;
@@ -6090,7 +6103,8 @@ public:
 
             do
             {
-                func(aGtkIter);
+                if (func(aGtkIter))
+                    break;
                 GtkTreePath* path = gtk_tree_model_get_path(pModel, &aGtkIter.iter);
                 bool bContinue = gtk_tree_path_compare(path, end_path) != 0;
                 gtk_tree_path_free(path);
@@ -6222,6 +6236,61 @@ public:
         return set(pos, m_nIdCol, rId);
     }
 
+    virtual int get_iter_index_in_parent(const weld::TreeIter& rIter) const override
+    {
+        const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
+
+        GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+        GtkTreePath* path = gtk_tree_model_get_path(pModel, const_cast<GtkTreeIter*>(&rGtkIter.iter));
+
+        gint depth;
+        gint* indices = gtk_tree_path_get_indices_with_depth(path, &depth);
+        int nRet = indices[depth-1];
+
+        gtk_tree_path_free(path);
+
+        return nRet;
+    }
+
+    // by copy and delete of old copy
+    void move_subtree(GtkTreeIter& rFromIter, GtkTreeIter* pGtkParentIter, int nIndexInNewParent)
+    {
+        GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+
+        int nCols = gtk_tree_model_get_n_columns(pModel);
+        GValue value;
+
+        GtkTreeIter toiter;
+        gtk_tree_store_insert(m_pTreeStore, &toiter, pGtkParentIter, nIndexInNewParent);
+
+        for (int i = 0; i < nCols; ++i)
+        {
+            memset(&value,  0, sizeof(GValue));
+            gtk_tree_model_get_value(pModel, &rFromIter, i, &value);
+            gtk_tree_store_set_value(m_pTreeStore, &toiter, i, &value);
+            g_value_unset(&value);
+        }
+
+        GtkTreeIter tmpfromiter;
+        if (gtk_tree_model_iter_children(pModel, &tmpfromiter, &rFromIter))
+        {
+            int j = 0;
+            do
+            {
+                move_subtree(tmpfromiter, &toiter, j++);
+            } while (gtk_tree_model_iter_next(pModel, &tmpfromiter));
+        }
+
+        gtk_tree_store_remove(m_pTreeStore, &rFromIter);
+    }
+
+    virtual void move_subtree(weld::TreeIter& rNode, const weld::TreeIter* pNewParent, int nIndexInNewParent) override
+    {
+        GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rNode);
+        const GtkInstanceTreeIter* pGtkParentIter = static_cast<const GtkInstanceTreeIter*>(pNewParent);
+        move_subtree(rGtkIter.iter, pGtkParentIter ? const_cast<GtkTreeIter*>(&pGtkParentIter->iter) : nullptr, nIndexInNewParent);
+    }
+
     virtual int get_selected_index() const override
     {
         assert(gtk_tree_view_get_model(m_pTreeView) && "don't request selection when frozen");
@@ -6234,7 +6303,11 @@ public:
             if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(m_pTreeView), &pModel, &iter))
             {
                 GtkTreePath* path = gtk_tree_model_get_path(pModel, &iter);
-                nRet = gtk_tree_path_get_indices(path)[0];
+
+                gint depth;
+                gint* indices = gtk_tree_path_get_indices_with_depth(path, &depth);
+                nRet = indices[depth-1];
+
                 gtk_tree_path_free(path);
             }
         }
@@ -6246,21 +6319,24 @@ public:

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list