[Libreoffice-commits] core.git: 2 commits - cui/source include/sfx2 include/svtools include/svx include/vcl sc/source sc/uiconfig sfx2/source solenv/sanitizers svtools/source svx/source svx/uiconfig sw/inc sw/source sw/uiconfig vcl/headless vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Sat Apr 27 10:42:59 UTC 2019


 cui/source/dialogs/postdlg.cxx                   |    2 
 cui/source/factory/dlgfact.cxx                   |    6 
 cui/source/factory/dlgfact.hxx                   |    6 
 cui/source/inc/postdlg.hxx                       |    4 
 cui/source/tabpages/numfmt.cxx                   |    2 
 include/sfx2/basedlgs.hxx                        |    1 
 include/sfx2/childwin.hxx                        |    8 
 include/svtools/ctrlbox.hxx                      |    9 
 include/svx/ctredlin.hxx                         |  176 +--
 include/svx/sidebar/PanelLayout.hxx              |    7 
 include/svx/svxdlg.hxx                           |    2 
 include/vcl/treelistbox.hxx                      |    2 
 include/vcl/weld.hxx                             |   24 
 sc/source/ui/docshell/docsh3.cxx                 |    6 
 sc/source/ui/inc/acredlin.hxx                    |   66 -
 sc/source/ui/inc/conflictsdlg.hxx                |   46 -
 sc/source/ui/inc/highred.hxx                     |   36 
 sc/source/ui/inc/reffact.hxx                     |   86 -
 sc/source/ui/inc/simpref.hxx                     |    2 
 sc/source/ui/miscdlgs/acredlin.cxx               | 1014 ++++++++++-------------
 sc/source/ui/miscdlgs/conflictsdlg.cxx           |  308 +++---
 sc/source/ui/miscdlgs/highred.cxx                |  221 ++---
 sc/source/ui/miscdlgs/simpref.cxx                |    9 
 sc/source/ui/view/reffact.cxx                    |   60 -
 sc/source/ui/view/tabview3.cxx                   |   24 
 sc/source/ui/view/tabvwsh4.cxx                   |   11 
 sc/source/ui/view/tabvwshc.cxx                   |   14 
 sc/uiconfig/scalc/ui/conflictsdialog.ui          |   92 +-
 sc/uiconfig/scalc/ui/showchangesdialog.ui        |   15 
 sfx2/source/appl/workwin.cxx                     |   10 
 sfx2/source/dialog/basedlgs.cxx                  |   13 
 solenv/sanitizers/ui/modules/scalc.false         |    3 
 solenv/sanitizers/ui/modules/scalc.suppr         |    2 
 svtools/source/control/ctrlbox.cxx               |   12 
 svx/source/dialog/ctredlin.cxx                   |  875 +++++++++----------
 svx/source/sidebar/PanelLayout.cxx               |    9 
 svx/uiconfig/ui/acceptrejectchangesdialog.ui     |   45 -
 svx/uiconfig/ui/redlinefilterpage.ui             |   63 -
 svx/uiconfig/ui/redlineviewpage.ui               |  288 ++++--
 sw/inc/swabstdlg.hxx                             |    2 
 sw/inc/viewsh.hxx                                |    3 
 sw/source/core/view/viewsh.cxx                   |    8 
 sw/source/ui/dialog/swdlgfact.cxx                |   15 
 sw/source/ui/dialog/swdlgfact.hxx                |   12 
 sw/source/ui/dialog/wordcountdialog.cxx          |    2 
 sw/source/ui/misc/swmodalredlineacceptdlg.cxx    |   41 
 sw/source/uibase/inc/redlndlg.hxx                |   46 -
 sw/source/uibase/inc/swmodalredlineacceptdlg.hxx |    8 
 sw/source/uibase/lingu/hhcwrp.cxx                |    2 
 sw/source/uibase/misc/redlndlg.cxx               |  591 ++++++-------
 sw/source/uibase/shells/textsh1.cxx              |    8 
 sw/source/uibase/uiview/viewport.cxx             |   14 
 sw/uiconfig/swriter/ui/managechangessidebar.ui   |   10 
 vcl/headless/svpgdi.cxx                          |   14 
 vcl/source/app/salvtables.cxx                    |   85 +
 vcl/source/treelist/treelistbox.cxx              |    3 
 vcl/unx/gtk3/gtk3gtkinst.cxx                     |  135 ++-
 57 files changed, 2424 insertions(+), 2154 deletions(-)

New commits:
commit 56dd851cfc77c362c3db5c0aae4a490c7f6782cc
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Thu Apr 18 16:49:26 2019 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Sat Apr 27 12:41:14 2019 +0200

    weld cluster of change tracking dialogs
    
    Change-Id: I42ca7acb41699df91b91a9f59fc68cd30972a397
    Reviewed-on: https://gerrit.libreoffice.org/70988
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/cui/source/dialogs/postdlg.cxx b/cui/source/dialogs/postdlg.cxx
index 570109c6ddfb..940d8ebb564f 100644
--- a/cui/source/dialogs/postdlg.cxx
+++ b/cui/source/dialogs/postdlg.cxx
@@ -33,7 +33,7 @@
 
 // class SvxPostItDialog -------------------------------------------------
 
-SvxPostItDialog::SvxPostItDialog(weld::Window* pParent, const SfxItemSet& rCoreSet,
+SvxPostItDialog::SvxPostItDialog(weld::Widget* pParent, const SfxItemSet& rCoreSet,
     bool bPrevNext)
     : SfxDialogController(pParent, "cui/ui/comment.ui", "CommentDialog")
     , m_rSet(rCoreSet)
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 4669f431df56..11df8ce96030 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -1315,9 +1315,9 @@ VclPtr<SfxAbstractDialog> AbstractDialogFactory_Impl::CreateSfxDialog(weld::Wind
     return nullptr;
 }
 
-VclPtr<AbstractSvxPostItDialog> AbstractDialogFactory_Impl::CreateSvxPostItDialog( weld::Window* pParent,
-                                                                        const SfxItemSet& rCoreSet,
-                                                                        bool bPrevNext )
+VclPtr<AbstractSvxPostItDialog> AbstractDialogFactory_Impl::CreateSvxPostItDialog(weld::Widget* pParent,
+                                                                                  const SfxItemSet& rCoreSet,
+                                                                                  bool bPrevNext)
 {
     return VclPtr<AbstractSvxPostItDialog_Impl>::Create(std::make_unique<SvxPostItDialog>(pParent, rCoreSet, bPrevNext));
 }
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index 65b2f4337760..f48afb3fbf31 100644
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -804,9 +804,9 @@ public:
                                                                  SdrModel* pModel,
                                                                  const SdrObject* pObj,
                                                                  bool bHasObj ) override;
-    virtual VclPtr<AbstractSvxPostItDialog>        CreateSvxPostItDialog( weld::Window* pParent,
-                                                                        const SfxItemSet& rCoreSet,
-                                                                        bool bPrevNext = false ) override;
+    virtual VclPtr<AbstractSvxPostItDialog>        CreateSvxPostItDialog(weld::Widget* pParent,
+                                                                         const SfxItemSet& rCoreSet,
+                                                                         bool bPrevNext = false) override;
 
     // For TabPage
     virtual CreateTabPage               GetTabPageCreatorFunc( sal_uInt16 nId ) override;
diff --git a/cui/source/inc/postdlg.hxx b/cui/source/inc/postdlg.hxx
index 13ecf359c096..c3c086d89097 100644
--- a/cui/source/inc/postdlg.hxx
+++ b/cui/source/inc/postdlg.hxx
@@ -37,8 +37,8 @@
 class SvxPostItDialog : public SfxDialogController
 {
 public:
-    SvxPostItDialog(weld::Window* pParent, const SfxItemSet& rCoreSet,
-                     bool bPrevNext);
+    SvxPostItDialog(weld::Widget* pParent, const SfxItemSet& rCoreSet,
+                    bool bPrevNext);
     virtual ~SvxPostItDialog() override;
 
     static const sal_uInt16*      GetRanges();
diff --git a/cui/source/tabpages/numfmt.cxx b/cui/source/tabpages/numfmt.cxx
index f6166de32740..993b4c31baca 100644
--- a/cui/source/tabpages/numfmt.cxx
+++ b/cui/source/tabpages/numfmt.cxx
@@ -831,7 +831,7 @@ void SvxNumberFormatTabPage::FillFormatListBox_Impl( std::vector<OUString>& rEnt
                 OUString aPreviewString( GetExpColorString( pPreviewColor, aEntry, aPrivCat ) );
                 m_xLbFormat->append_text(aPreviewString);
                 if (pPreviewColor)
-                    m_xLbFormat->set_font_color(m_xLbFormat->n_children() -1, *pPreviewColor);
+                    m_xLbFormat->set_font_color(m_xLbFormat->n_children() - 1, *pPreviewColor);
             }
             else
             {
diff --git a/include/sfx2/basedlgs.hxx b/include/sfx2/basedlgs.hxx
index 272ad3fae082..d2646af1d9e5 100644
--- a/include/sfx2/basedlgs.hxx
+++ b/include/sfx2/basedlgs.hxx
@@ -143,6 +143,7 @@ public:
     virtual void            Activate() override;
     virtual void            Deactivate() override;
     virtual void            ChildWinDispose() override;
+    virtual void            FillInfo(SfxChildWinInfo&) const;
     SfxBindings&            GetBindings() { return *m_pBindings; }
 };
 
diff --git a/include/sfx2/childwin.hxx b/include/sfx2/childwin.hxx
index 0a65e3c964a6..a01881c7698a 100644
--- a/include/sfx2/childwin.hxx
+++ b/include/sfx2/childwin.hxx
@@ -163,6 +163,7 @@ public:
     void                SetController(std::shared_ptr<SfxDialogController> controller) { xController = controller; }
     void                ClearController() { xController.reset(); }
     std::shared_ptr<SfxDialogController>& GetController() { return xController; }
+    const std::shared_ptr<SfxDialogController>& GetController() const { return xController; }
     vcl::Window*        GetParent() const
                         { return pParent; }
     SfxChildAlignment   GetAlignment() const
@@ -297,6 +298,13 @@ public:
             static_cast<SfxModelessDialog*>(GetWindow())->FillInfo( aInfo );  \
             return aInfo; }
 
+#define SFX_IMPL_MODELESSDIALOGCONTOLLER_WITHID(Class, MyID)    \
+        SFX_IMPL_CHILDWINDOW_WITHID(Class, MyID)       \
+        SfxChildWinInfo Class::GetInfo() const \
+        {                                       \
+            SfxChildWinInfo aInfo = SfxChildWindow::GetInfo();     \
+            static_cast<const SfxModelessDialogController*>(GetController().get())->FillInfo( aInfo );  \
+            return aInfo; }
 
 #define SFX_IMPL_DOCKINGWINDOW(Class, MyID) \
         SFX_IMPL_CHILDWINDOW(Class, MyID)       \
diff --git a/include/svtools/ctrlbox.hxx b/include/svtools/ctrlbox.hxx
index 80384fd0e882..1923809ba344 100644
--- a/include/svtools/ctrlbox.hxx
+++ b/include/svtools/ctrlbox.hxx
@@ -300,9 +300,14 @@ public:
     void set_date(const Date& rDate);
     Date get_date() const { return m_xCalendar->get_date(); }
 
+    void set_label(const OUString& rLabel) { m_xControl->set_label(rLabel); }
+    OUString get_label() const { return m_xControl->get_label(); }
+
     void set_sensitive(bool bSensitive) { m_xControl->set_sensitive(bSensitive); }
     bool get_sensitive() const { return m_xControl->get_sensitive(); }
     void grab_focus() { m_xControl->grab_focus(); }
+
+    void connect_activated(const Link<SvtCalendarBox&, void>& rActivatedHdl) { m_aActivatedHdl = rActivatedHdl; }
 private:
     DECL_LINK(SelectHdl, weld::Calendar&, void);
     DECL_LINK(ActivateHdl, weld::Calendar&, void);
@@ -311,6 +316,10 @@ private:
     std::unique_ptr<weld::Builder> m_xBuilder;
     std::unique_ptr<weld::Widget> m_xTopLevel;
     std::unique_ptr<weld::Calendar> m_xCalendar;
+
+    Link<SvtCalendarBox&, void> m_aActivatedHdl;
+
+    void set_label_from_date();
 };
 
 class SVT_DLLPUBLIC FontNameBox : public ComboBox
diff --git a/include/svx/ctredlin.hxx b/include/svx/ctredlin.hxx
index 7e2260b4f1c4..3e2e88367156 100644
--- a/include/svx/ctredlin.hxx
+++ b/include/svx/ctredlin.hxx
@@ -20,10 +20,12 @@
 #ifndef INCLUDED_SVX_CTREDLIN_HXX
 #define INCLUDED_SVX_CTREDLIN_HXX
 
+#include <comphelper/string.hxx>
 #include <rtl/ustring.hxx>
 #include <sal/types.h>
 #include <svx/svxdllapi.h>
 #include <svtools/simptabl.hxx>
+#include <svtools/ctrlbox.hxx>
 #include <vcl/svlbitm.hxx>
 #include <vcl/svtabbx.hxx>
 #include <vcl/treelistbox.hxx>
@@ -108,11 +110,13 @@ public:
     virtual std::unique_ptr<SvLBoxItem> Clone(SvLBoxItem const * pSource) const override;
 };
 
-class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxRedlinTable : public SvSimpleTable
+class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxRedlinTable
 {
-    using SvTabListBox::InsertEntry;
-
 private:
+    std::unique_ptr<comphelper::string::NaturalStringSorter> xSorter;
+    std::unique_ptr<weld::TreeView> xWriterTreeView;
+    std::unique_ptr<weld::TreeView> xCalcTreeView;
+    weld::TreeView* pTreeView;
 
     sal_uInt16      nDatePos;
     bool            bAuthor;
@@ -128,18 +132,18 @@ private:
     Image           maEntryImage;
     OUString        maEntryString;
     std::unique_ptr<utl::TextSearch> pCommentSearcher;
-    Link<const SvSortData*,sal_Int32>  aColCompareLink;
-
-protected:
 
-    virtual sal_Int32       ColCompare(SvTreeListEntry*,SvTreeListEntry*) override;
-    virtual void            InitEntry(SvTreeListEntry*, const OUString&, const Image&, const Image&, SvLBoxButtonKind) override;
+    int ColCompare(const weld::TreeIter& rLeft, const weld::TreeIter& rRight);
 
 public:
+    SvxRedlinTable(std::unique_ptr<weld::TreeView> xWriterControl,
+                   std::unique_ptr<weld::TreeView> xCalcControl);
 
-    SvxRedlinTable(SvSimpleTableContainer& rParent, WinBits nBits = WB_BORDER);
-    virtual ~SvxRedlinTable() override;
-    virtual void    dispose() override;
+    void set_size_request(int nWidth, int nHeight);
+
+    weld::TreeView& GetWidget() { return *pTreeView; }
+
+    ~SvxRedlinTable();
 
     // For FilterPage only {
     void            SetFilterDate(bool bFlag);
@@ -157,80 +161,71 @@ public:
     // } For FilterPage only
 
     void            SetCalcView();
+    void            SetWriterView();
 
     bool            IsValidEntry(const OUString &rAuthor, const DateTime &rDateTime, const OUString &rComment);
     bool            IsValidEntry(const OUString &rAuthor, const DateTime &rDateTime);
     bool            IsValidComment(const OUString &rComment);
 
-    /** Insert a redline entry.
-
-        The rStr contains the entire redline entry; the columns are delimited by '\t'.
-    */
-    SvTreeListEntry* InsertEntry(const OUString &rStr, std::unique_ptr<RedlinData> pUserData,
-                                 SvTreeListEntry* pParent = nullptr, sal_uLong nPos = TREELIST_APPEND);
-
-    /** Insert a redline entry.
-
-        The rStr contains the entire redline entry; the columns are delimited by '\t'.
-    */
-    SvTreeListEntry* InsertEntry(const OUString &rStr, std::unique_ptr<RedlinData> pUserData, const Color&,
-                                 SvTreeListEntry* pParent, sal_uLong nPos = TREELIST_APPEND);
-
-    /** Insert a redline entry.
-
-        rRedlineType contains the image for this redline entry (plus for insertion, minus for deletion etc.).
-        rStr contains the rest of the redline entry; the columns are delimited by '\t'.
-    */
-    SvTreeListEntry* InsertEntry(const Image &rRedlineType, const OUString &rStr, std::unique_ptr<RedlinData> pUserData,
-                                 SvTreeListEntry* pParent, sal_uLong nPos = TREELIST_APPEND);
-
-    virtual SvTreeListEntry* CreateEntry() const override;
+    DECL_LINK(HeaderBarClick, int, void);
+};
 
-    void            SetColCompareHdl(const Link<const SvSortData*,sal_Int32>& rLink ) { aColCompareLink = rLink; }
+class SVX_DLLPUBLIC SvxTPage
+{
+protected:
+    std::unique_ptr<weld::Builder> m_xBuilder;
+    std::unique_ptr<weld::Container> m_xContainer;
+public:
+    SvxTPage(weld::Container* pParent, const OUString& rUIXMLDescription, const OString& rID);
+    virtual ~SvxTPage();
+    virtual void ActivatePage();
+    virtual void DeactivatePage();
+    void Show() { m_xContainer->show(); }
 };
 
 /// Tabpage with the filter text entries etc.
-class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxTPFilter final : public TabPage
+class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxTPFilter final : public SvxTPage
 {
     Link<SvxTPFilter*,void>  aReadyLink;
     Link<SvxTPFilter*,void>  aRefLink;
 
-    VclPtr<SvxRedlinTable> pRedlinTable;
-    VclPtr<CheckBox>       m_pCbDate;
-    VclPtr<ListBox>        m_pLbDate;
-    VclPtr<DateField>      m_pDfDate;
-    VclPtr<TimeField>      m_pTfDate;
-    VclPtr<PushButton>     m_pIbClock;
-    VclPtr<FixedText>      m_pFtDate2;
-    VclPtr<DateField>      m_pDfDate2;
-    VclPtr<TimeField>      m_pTfDate2;
-    VclPtr<PushButton>     m_pIbClock2;
-    VclPtr<CheckBox>       m_pCbAuthor;
-    VclPtr<ListBox>        m_pLbAuthor;
-    VclPtr<CheckBox>       m_pCbRange;
-    VclPtr<Edit>           m_pEdRange;
-    VclPtr<PushButton>     m_pBtnRange;
-    VclPtr<CheckBox>       m_pCbAction;
-    VclPtr<ListBox>        m_pLbAction;
-    VclPtr<CheckBox>       m_pCbComment;
-    VclPtr<Edit>           m_pEdComment;
     bool                   bModified;
 
-    DECL_LINK( SelDateHdl, ListBox&, void );
-    DECL_LINK( RowEnableHdl, Button*, void );
-    DECL_LINK( TimeHdl, Button*, void );
-    DECL_LINK( ModifyHdl, Edit&, void );
-    DECL_LINK( ModifyListBoxHdl, ListBox&, void );
-    DECL_LINK( ModifyDate, Edit&, void );
-    DECL_LINK( RefHandle, Button*, void );
+    SvxRedlinTable* m_pRedlinTable;
+    std::unique_ptr<weld::CheckButton> m_xCbDate;
+    std::unique_ptr<weld::ComboBox> m_xLbDate;
+    std::unique_ptr<SvtCalendarBox> m_xDfDate;
+    std::unique_ptr<weld::TimeSpinButton> m_xTfDate;
+    std::unique_ptr<weld::Button> m_xIbClock;
+    std::unique_ptr<weld::Label> m_xFtDate2;
+    std::unique_ptr<SvtCalendarBox> m_xDfDate2;
+    std::unique_ptr<weld::TimeSpinButton> m_xTfDate2;
+    std::unique_ptr<weld::Button> m_xIbClock2;
+    std::unique_ptr<weld::CheckButton> m_xCbAuthor;
+    std::unique_ptr<weld::ComboBox> m_xLbAuthor;
+    std::unique_ptr<weld::CheckButton> m_xCbRange;
+    std::unique_ptr<weld::Entry> m_xEdRange;
+    std::unique_ptr<weld::Button> m_xBtnRange;
+    std::unique_ptr<weld::CheckButton> m_xCbAction;
+    std::unique_ptr<weld::ComboBox> m_xLbAction;
+    std::unique_ptr<weld::CheckButton> m_xCbComment;
+    std::unique_ptr<weld::Entry> m_xEdComment;
+
+    DECL_LINK( SelDateHdl, weld::ComboBox&, void );
+    DECL_LINK( RowEnableHdl, weld::Button&, void );
+    DECL_LINK( TimeHdl, weld::Button&, void );
+    DECL_LINK( ModifyHdl, weld::Entry&, void );
+    DECL_LINK( ModifyListBoxHdl, weld::ComboBox&, void );
+    DECL_LINK( ModifyDate, SvtCalendarBox&, void );
+    DECL_LINK( ModifyTime, weld::TimeSpinButton&, void );
+    DECL_LINK( RefHandle, weld::Button&, void );
 
     void            EnableDateLine1(bool bFlag);
     void            EnableDateLine2(bool bFlag);
 
 public:
-                    SvxTPFilter( vcl::Window * pParent);
-    virtual         ~SvxTPFilter() override;
-    virtual void    dispose() override;
+    SvxTPFilter(weld::Container* pParent);
+    virtual ~SvxTPFilter() override;
 
     virtual void    DeactivatePage() override;
     void            SetRedlinTable(SvxRedlinTable*);
@@ -277,7 +272,7 @@ public:
     void            CheckAction(bool bFlag);
     void            CheckComment(bool bFlag);
 
-    ListBox*        GetLbAction() { return m_pLbAction;}
+    weld::ComboBox* GetLbAction() { return m_xLbAction.get(); }
 
     void            SetReadyHdl( const Link<SvxTPFilter*,void>& rLink ) { aReadyLink= rLink; }
 
@@ -291,7 +286,7 @@ public:
 };
 
 /// Tabpage with the redlining entries.
-class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxTPView : public TabPage
+class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxTPView : public SvxTPage
 {
 private:
 
@@ -301,35 +296,34 @@ private:
     Link<SvxTPView*,void>          RejectAllClickLk;
     Link<SvxTPView*,void>          UndoClickLk;
 
-    VclPtr<SvxRedlinTable> m_pViewData;
-    VclPtr<PushButton>     m_pAccept;
-    VclPtr<PushButton>     m_pReject;
-    VclPtr<PushButton>     m_pAcceptAll;
-    VclPtr<PushButton>     m_pRejectAll;
-    VclPtr<PushButton>     m_pUndo;
-
     bool bEnableAccept;
     bool bEnableAcceptAll;
     bool bEnableReject;
     bool bEnableRejectAll;
     bool bEnableUndo;
 
-    DECL_LINK( PbClickHdl, Button*, void );
+    std::unique_ptr<weld::Button> m_xAccept;
+    std::unique_ptr<weld::Button> m_xReject;
+    std::unique_ptr<weld::Button> m_xAcceptAll;
+    std::unique_ptr<weld::Button> m_xRejectAll;
+    std::unique_ptr<weld::Button> m_xUndo;
+    std::unique_ptr<SvxRedlinTable> m_xViewData;
+
+    DECL_LINK( PbClickHdl, weld::Button&, void );
 
 public:
-    SvxTPView(vcl::Window * pParent, VclBuilderContainer *pTopLevel);
+    SvxTPView(weld::Container* pParent, weld::Builder* pTopLevel);
     virtual ~SvxTPView() override;
-    virtual void    dispose() override;
 
     void            InsertWriterHeader();
     void            InsertCalcHeader();
-    SvxRedlinTable* GetTableControl() { return m_pViewData;}
+    SvxRedlinTable* GetTableControl() { return m_xViewData.get(); }
 
     void            EnableAccept(bool bFlag);
     void            EnableAcceptAll(bool bFlag);
     void            EnableReject(bool bFlag);
     void            EnableRejectAll(bool bFlag);
-    static void     EnableClearFormatButton(VclPtr<PushButton>, bool bFlag);
+    static void     EnableClearFormatButton(weld::Button&, bool bFlag);
     void            EnableClearFormat(bool bFlag);
     void            EnableClearFormatAll(bool bFlag);
     void            EnableUndo(bool bFlag=true);
@@ -350,29 +344,29 @@ public:
     virtual void    DeactivatePage() override;
 };
 
-
 //  Redlining - Control (Accept- Changes)
 class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxAcceptChgCtr
-    : public TabControl
-    , public VclBuilderContainer
 {
 private:
+    std::unique_ptr<weld::Builder> m_xBuilder;
+    std::unique_ptr<weld::Notebook> m_xTabCtrl;
 
-    VclPtr<SvxTPFilter>    pTPFilter;
-    VclPtr<SvxTPView>      pTPView;
+    std::unique_ptr<SvxTPFilter> m_xTPFilter;
+    std::unique_ptr<SvxTPView> m_xTPView;
 
-    sal_uInt16      m_nFilterPageId;
+    DECL_DLLPRIVATE_LINK(ActivatePageHdl, const OString&, void);
+    DECL_DLLPRIVATE_LINK(DeactivatePageHdl, const OString&, bool);
 
 public:
-                    SvxAcceptChgCtr(vcl::Window* pParent, VclBuilderContainer* pTopLevel);
-
-                    virtual ~SvxAcceptChgCtr() override;
-    virtual void    dispose() override;
+    SvxAcceptChgCtr(weld::Container* pParent, weld::Builder* pTopLevel);
+    ~SvxAcceptChgCtr();
 
     void            ShowFilterPage();
 
-    SvxTPFilter*    GetFilterPage() { return pTPFilter;}
-    SvxTPView*      GetViewPage() { return pTPView;}
+    SvxTPFilter*    GetFilterPage() { return m_xTPFilter.get(); }
+    SvxTPView*      GetViewPage() { return m_xTPView.get(); }
+
+    void set_help_id(const OString& rId) { m_xTabCtrl->set_help_id(rId); }
 };
 
 #endif // INCLUDED_SVX_CTREDLIN_HXX
diff --git a/include/svx/sidebar/PanelLayout.hxx b/include/svx/sidebar/PanelLayout.hxx
index 0932fe459f40..ddb52b172b33 100644
--- a/include/svx/sidebar/PanelLayout.hxx
+++ b/include/svx/sidebar/PanelLayout.hxx
@@ -17,6 +17,7 @@
 #include <vcl/timer.hxx>
 #include <vcl/idle.hxx>
 #include <vcl/vclptr.hxx>
+#include <vcl/weld.hxx>
 
 #include <com/sun/star/beans/PropertyValue.hpp>
 #include <com/sun/star/frame/XFrame.hpp>
@@ -24,6 +25,10 @@
 /// This class is the base for the Widget Layout-based sidebar panels.
 class SVX_DLLPUBLIC PanelLayout : public Control, public VclBuilderContainer
 {
+protected:
+    std::unique_ptr<weld::Builder> m_xBuilder;
+    std::unique_ptr<weld::Container> m_xContainer;
+
 private:
     Idle m_aPanelLayoutIdle;
     bool m_bInClose;
@@ -33,7 +38,7 @@ private:
 
 public:
     PanelLayout(vcl::Window* pParent, const OString& rID, const OUString& rUIXMLDescription,
-            const css::uno::Reference<css::frame::XFrame> &rFrame);
+            const css::uno::Reference<css::frame::XFrame> &rFrame, bool bInterimBuilder = false);
     virtual ~PanelLayout() override;
     virtual void dispose() override;
 
diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx
index 2a50a9ccde03..4926a7be9f42 100644
--- a/include/svx/svxdlg.hxx
+++ b/include/svx/svxdlg.hxx
@@ -428,7 +428,7 @@ public:
     virtual VclPtr<SfxAbstractDialog>       CreateCharMapDialog(weld::Window* pParent, const SfxItemSet& rAttr, bool bInsert) = 0;
     virtual VclPtr<SfxAbstractDialog>       CreateEventConfigDialog(weld::Window* pParent, const SfxItemSet& rAttr,
                                                                     const css::uno::Reference< css::frame::XFrame >& _rxFrame) = 0;
-    virtual VclPtr<AbstractSvxPostItDialog>    CreateSvxPostItDialog(weld::Window* pParent, const SfxItemSet& rCoreSet, bool bPrevNext = false) = 0;
+    virtual VclPtr<AbstractSvxPostItDialog>    CreateSvxPostItDialog(weld::Widget* pParent, const SfxItemSet& rCoreSet, bool bPrevNext = false) = 0;
     virtual VclPtr<VclAbstractDialog>          CreateSvxScriptOrgDialog(weld::Window* pParent, const OUString& rLanguage) override = 0;
 
     virtual DialogGetRanges                    GetDialogGetRangesFunc() = 0;
diff --git a/include/vcl/treelistbox.hxx b/include/vcl/treelistbox.hxx
index c88ada02c74e..f0ac85bd3980 100644
--- a/include/vcl/treelistbox.hxx
+++ b/include/vcl/treelistbox.hxx
@@ -208,6 +208,7 @@ class VCL_DLLPUBLIC SvTreeListBox
     Link<SvTreeListBox*,bool>  aExpandingHdl;
     Link<SvTreeListBox*,void>  aSelectHdl;
     Link<SvTreeListBox*,void>  aDeselectHdl;
+    Link<const CommandEvent&, bool> aPopupMenuHdl;
 
     Image           aPrevInsertedExpBmp;
     Image           aPrevInsertedColBmp;
@@ -441,6 +442,7 @@ public:
     const Link<SvTreeListBox*,bool>&   GetDoubleClickHdl() const { return aDoubleClickHdl; }
     void            SetExpandingHdl(const Link<SvTreeListBox*,bool>& rNewHdl){aExpandingHdl=rNewHdl;}
     void            SetExpandedHdl(const Link<SvTreeListBox*,void>& rNewHdl){aExpandedHdl=rNewHdl;}
+    void SetPopupMenuHdl(const Link<const CommandEvent&, bool>& rLink) { aPopupMenuHdl = rLink; }
 
     virtual void    ExpandedHdl();
     virtual bool    ExpandingHdl();
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index a5b83aadbb9d..ed3d69d5a652 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -552,6 +552,8 @@ protected:
     Link<const TreeIter&, bool> m_aExpandingHdl;
     Link<TreeView&, void> m_aVisibleRangeChangedHdl;
     Link<TreeView&, void> m_aModelChangedHdl;
+    Link<const CommandEvent&, bool> m_aPopupMenuHdl;
+    std::function<int(const weld::TreeIter&, const weld::TreeIter&)> m_aCustomSort;
 
     std::vector<int> m_aRadioIndexes;
 
@@ -673,6 +675,7 @@ public:
     virtual OUString get_id(int pos) const = 0;
     virtual int find_id(const OUString& rId) const = 0;
     void select_id(const OUString& rId) { select(find_id(rId)); }
+    void remove_id(const OUString& rText) { remove(find_id(rText)); }
 
     //via iter
     virtual std::unique_ptr<TreeIter> make_iterator(const TreeIter* pOrig = nullptr) const = 0;
@@ -702,6 +705,11 @@ 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;
+    /* Compares two paths. If a appears before b in a tree, then -1 is returned.
+       If b appears before a , then 1 is returned. If the two nodes are equal,
+       then 0 is returned.
+    */
+    virtual int iter_compare(const TreeIter& a, const TreeIter& b) 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;
@@ -721,12 +729,15 @@ public:
     virtual void set_image(const TreeIter& rIter,
                            const css::uno::Reference<css::graphic::XGraphic>& rImage, int col)
         = 0;
+    virtual void set_font_color(const TreeIter& rIter, const Color& rColor) const = 0;
     virtual void scroll_to_row(const TreeIter& rIter) = 0;
     virtual bool is_selected(const TreeIter& rIter) const = 0;
 
     virtual void move_subtree(TreeIter& rNode, const TreeIter* pNewParent, int nIndexInNewParent)
         = 0;
 
+    //calling func on each element until func returns true or we run out of elements
+    virtual void all_foreach(const std::function<bool(TreeIter&)>& func) = 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
@@ -740,6 +751,11 @@ public:
         m_aVisibleRangeChangedHdl = rLink;
     }
 
+    virtual void connect_popup_menu(const Link<const CommandEvent&, bool>& rLink)
+    {
+        m_aPopupMenuHdl = rLink;
+    }
+
     //all of them
     void select_all() { unselect(-1); }
     void unselect_all() { select(-1); }
@@ -759,6 +775,12 @@ public:
     virtual int get_sort_column() const = 0;
     virtual void set_sort_column(int nColumn) = 0;
 
+    virtual void
+    set_sort_func(const std::function<int(const weld::TreeIter&, const weld::TreeIter&)>& func)
+    {
+        m_aCustomSort = func;
+    }
+
     virtual void clear() = 0;
     virtual int get_height_rows(int nRows) const = 0;
 
@@ -1434,6 +1456,8 @@ public:
         return m_xSpinButton->get_value_changed_from_saved();
     }
     void set_position(int nCursorPos) { m_xSpinButton->set_position(nCursorPos); }
+    void set_text(const OUString& rText) { m_xSpinButton->set_text(rText); }
+    OUString get_text() const { return m_xSpinButton->get_text(); }
     weld::SpinButton& get_widget() { return *m_xSpinButton; }
 };
 
diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx
index 0c8e93cd857e..060dc50f36ad 100644
--- a/sc/source/ui/docshell/docsh3.cxx
+++ b/sc/source/ui/docshell/docsh3.cxx
@@ -1199,10 +1199,10 @@ bool ScDocShell::MergeSharedDocument( ScDocShell* pSharedDocShell )
                 while ( bLoop )
                 {
                     bLoop = false;
-                    ScopedVclPtrInstance< ScConflictsDlg > aDlg( GetActiveDialogParent(), GetViewData(), &rSharedDoc, aConflictsList );
-                    if ( aDlg->Execute() == RET_CANCEL )
+                    vcl::Window* pWin = GetActiveDialogParent();
+                    ScConflictsDlg aDlg(pWin ? pWin->GetFrameWeld() : nullptr, GetViewData(), &rSharedDoc, aConflictsList);
+                    if (aDlg.run() == RET_CANCEL)
                     {
-                        vcl::Window* pWin = GetActiveDialogParent();
                         std::unique_ptr<weld::MessageDialog> xQueryBox(Application::CreateMessageDialog(pWin ? pWin->GetFrameWeld() : nullptr,
                                                                        VclMessageType::Question, VclButtonsType::YesNo,
                                                                        ScResId(STR_DOC_WILLNOTBESAVED)));
diff --git a/sc/source/ui/inc/acredlin.hxx b/sc/source/ui/inc/acredlin.hxx
index fd8e19f8f24f..a92d4d2a1c58 100644
--- a/sc/source/ui/inc/acredlin.hxx
+++ b/sc/source/ui/inc/acredlin.hxx
@@ -45,17 +45,12 @@ public:
     bool            bIsAcceptable;
 };
 
-class ScAcceptChgDlg final : public SfxModelessDialog
+class ScAcceptChgDlg final : public SfxModelessDialogController
 {
     Idle                    aSelectionIdle;
     Idle                    aReOpenIdle;
-    VclPtr<PopupMenu>       m_xPopup;
-    VclPtr<SvxAcceptChgCtr> m_pAcceptChgCtr;
     ScViewData*             pViewData;
     ScDocument*             pDoc;
-    VclPtr<SvxTPFilter>     pTPFilter;
-    VclPtr<SvxTPView>       pTPView;
-    VclPtr<SvxRedlinTable>  pTheView; // #i48648 now SvHeaderTabListBox
     ScRangeList             aRangeList;
     ScChangeViewSettings    aChangeViewSet;
     OUString           aStrInsertCols;
@@ -82,6 +77,14 @@ class ScAcceptChgDlg final : public SfxModelessDialog
     bool                    bHasFilterEntry:1;
     bool                    bUseColor:1;
 
+    SvxTPFilter* pTPFilter;
+    SvxTPView* pTPView;
+    SvxRedlinTable* pTheView; // #i48648 now SvHeaderTabListBox
+
+    std::unique_ptr<weld::Container> m_xContentArea;
+    std::unique_ptr<weld::Menu> m_xPopup;
+    std::unique_ptr<SvxAcceptChgCtr> m_xAcceptChgCtr;
+
     void            Init();
 
     DECL_LINK( FilterHandle, SvxTPFilter*, void );
@@ -90,15 +93,16 @@ class ScAcceptChgDlg final : public SfxModelessDialog
     DECL_LINK( AcceptHandle, SvxTPView*, void );
     DECL_LINK( RejectAllHandle, SvxTPView*, void );
     DECL_LINK( AcceptAllHandle, SvxTPView*, void );
-    DECL_LINK( ExpandingHandle, SvTreeListBox*, bool );
-    DECL_LINK( SelectHandle, SvTreeListBox*, void );
+    DECL_LINK( ExpandingHandle, const weld::TreeIter&, bool );
+    DECL_LINK( SelectHandle, weld::TreeView&, void );
     DECL_LINK( RefInfoHandle, const OUString*, void );
 
     DECL_LINK( UpdateSelectionHdl, Timer*, void );
     DECL_LINK( ChgTrackModHdl, ScChangeTrack&, void );
-    DECL_LINK( CommandHdl, SvSimpleTable*, void );
+    DECL_LINK( CommandHdl, const CommandEvent&, bool );
     DECL_LINK( ReOpenTimerHdl, Timer*, void );
-    DECL_LINK( ColCompareHdl, const SvSortData*, sal_Int32 );
+
+    int ColCompareHdl(const weld::TreeIter& rLeft, const weld::TreeIter& rRight) const;
 
     void            RejectFiltered();
     void            AcceptFiltered();
@@ -107,31 +111,32 @@ class ScAcceptChgDlg final : public SfxModelessDialog
 
     OUString* MakeTypeString(ScChangeActionType eType);
 
-    SvTreeListEntry* AppendChangeAction(
-        const ScChangeAction* pScChangeAction,
-        SvTreeListEntry* pParent=nullptr,bool bDelMaster = false,
+    std::unique_ptr<weld::TreeIter> AppendChangeAction(
+        const ScChangeAction* pScChangeAction, bool bCreateOnDamend,
+        const weld::TreeIter* pParent = nullptr, bool bDelMaster = false,
         bool bDisabled = false);
 
-    SvTreeListEntry* AppendFilteredAction(
+    std::unique_ptr<weld::TreeIter> AppendFilteredAction(
         const ScChangeAction* pScChangeAction,ScChangeActionState eState,
-        SvTreeListEntry* pParent = nullptr,bool bDelMaster = false,
+        bool bCreateOnDemand,
+        const weld::TreeIter* pParent = nullptr, bool bDelMaster = false,
         bool bDisabled = false);
 
-    SvTreeListEntry*    InsertChangeActionContent(const ScChangeActionContent* pScChangeAction,
-                                              SvTreeListEntry* pParent,sal_uLong nSpecial);
+    std::unique_ptr<weld::TreeIter> InsertChangeActionContent(const ScChangeActionContent* pScChangeAction,
+        const weld::TreeIter& rParent, sal_uLong nSpecial);
 
-    void            GetDependents( const ScChangeAction* pScChangeAction,
-                                ScChangeActionMap& aActionMap,
-                                SvTreeListEntry* pEntry);
+    void            GetDependents(const ScChangeAction* pScChangeAction,
+                                 ScChangeActionMap& aActionMap,
+                                 const weld::TreeIter& rEntry);
 
-    bool            InsertContentChildren( ScChangeActionMap* pActionMap, SvTreeListEntry* pParent );
+    bool            InsertContentChildren(ScChangeActionMap* pActionMap, const weld::TreeIter& rParent);
 
-    bool            InsertAcceptedORejected(SvTreeListEntry* pParent);
+    bool            InsertAcceptedORejected(const weld::TreeIter& rParent);
 
-    bool            InsertDeletedChildren( const ScChangeAction* pChangeAction, ScChangeActionMap* pActionMap,
-                                        SvTreeListEntry* pParent);
+    bool            InsertDeletedChildren(const ScChangeAction* pChangeAction, ScChangeActionMap* pActionMap,
+                                          const weld::TreeIter& rParent);
 
-    bool            InsertChildren( ScChangeActionMap* pActionMap, SvTreeListEntry* pParent );
+    bool            InsertChildren(ScChangeActionMap* pActionMap, const weld::TreeIter& rParent);
 
     void            AppendChanges(const ScChangeTrack* pChanges,sal_uLong nStartAction, sal_uLong nEndAction);
 
@@ -142,20 +147,17 @@ class ScAcceptChgDlg final : public SfxModelessDialog
     void            ClearView();
 
     bool            Expand(const ScChangeTrack* pChanges,const ScChangeAction* pScChangeAction,
-                           SvTreeListEntry* pEntry, bool bFilter = false);
+                           const weld::TreeIter& rEntry, bool bFilter = false);
 
 public:
-                    ScAcceptChgDlg( SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pParent,
-                               ScViewData*      ptrViewData);
-
-                    virtual ~ScAcceptChgDlg() override;
-    virtual void    dispose() override;
+    ScAcceptChgDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent,
+                   ScViewData* ptrViewData);
+    virtual ~ScAcceptChgDlg() override;
 
     void            ReInit(ScViewData* ptrViewData);
 
     void            Initialize (SfxChildWinInfo* pInfo);
     virtual void    FillInfo(SfxChildWinInfo&) const override;
-
 };
 
 #endif // INCLUDED_SC_SOURCE_UI_INC_ACREDLIN_HXX
diff --git a/sc/source/ui/inc/conflictsdlg.hxx b/sc/source/ui/inc/conflictsdlg.hxx
index 818023d75269..433d4584b140 100644
--- a/sc/source/ui/inc/conflictsdlg.hxx
+++ b/sc/source/ui/inc/conflictsdlg.hxx
@@ -111,50 +111,46 @@ public:
 
 // class ScConflictsDlg
 
-class ScConflictsDlg : public ModalDialog
+class ScConflictsDlg : public weld::GenericDialogController
 {
 private:
-    VclPtr<SvSimpleTableContainer> m_pLbConflictsContainer;
-    VclPtr<SvxRedlinTable>      m_pLbConflicts;
-    VclPtr<PushButton>          m_pBtnKeepMine;
-    VclPtr<PushButton>          m_pBtnKeepOther;
-    VclPtr<PushButton>          m_pBtnKeepAllMine;
-    VclPtr<PushButton>          m_pBtnKeepAllOthers;
+    OUString const      maStrTitleConflict;
+    OUString const      maStrUnknownUser;
 
-    OUString const            maStrTitleConflict;
-    OUString const            maStrUnknownUser;
-
-    ScViewData* const         mpViewData;
+    ScViewData* const   mpViewData;
     ScDocument*         mpOwnDoc;
     ScChangeTrack*      mpOwnTrack;
-    ScDocument* const         mpSharedDoc;
+    ScDocument* const   mpSharedDoc;
     ScChangeTrack*      mpSharedTrack;
     ScConflictsList&    mrConflictsList;
 
     Idle                maSelectionIdle;
     bool                mbInSelectHdl;
-    bool                mbInDeselectHdl;
+
+    std::unique_ptr<weld::Button> m_xBtnKeepMine;
+    std::unique_ptr<weld::Button> m_xBtnKeepOther;
+    std::unique_ptr<weld::Button> m_xBtnKeepAllMine;
+    std::unique_ptr<weld::Button> m_xBtnKeepAllOthers;
+    std::unique_ptr<SvxRedlinTable> m_xLbConflicts;
 
     OUString            GetConflictString( const ScConflictsListEntry& rConflictEntry );
-    OUString            GetActionString( const ScChangeAction* pAction, ScDocument* pDoc );
-    void                HandleListBoxSelection( bool bSelectHandle );
+    void                SetActionString(const ScChangeAction* pAction, ScDocument* pDoc, weld::TreeIter& rEntry);
+    void                HandleListBoxSelection();
 
-    static void         SetConflictAction( const SvTreeListEntry* pRootEntry, ScConflictAction eConflictAction );
+    void                SetConflictAction(const weld::TreeIter& rRootEntry, ScConflictAction eConflictAction);
     void                KeepHandler( bool bMine );
     void                KeepAllHandler( bool bMine );
 
-    DECL_LINK( SelectHandle, SvTreeListBox*, void );
-    DECL_LINK( DeselectHandle, SvTreeListBox*, void );
+    DECL_LINK( SelectHandle, weld::TreeView&, void );
     DECL_LINK( UpdateSelectionHdl, Timer*, void );
-    DECL_LINK( KeepMineHandle, Button*, void );
-    DECL_LINK( KeepOtherHandle, Button*, void );
-    DECL_LINK( KeepAllMineHandle, Button*, void );
-    DECL_LINK( KeepAllOthersHandle, Button*, void );
+    DECL_LINK( KeepMineHandle, weld::Button&, void );
+    DECL_LINK( KeepOtherHandle, weld::Button&, void );
+    DECL_LINK( KeepAllMineHandle, weld::Button&, void );
+    DECL_LINK( KeepAllOthersHandle, weld::Button&, void );
 
 public:
-                        ScConflictsDlg( vcl::Window* pParent, ScViewData* pViewData, ScDocument* pSharedDoc, ScConflictsList& rConflictsList );
-                        virtual ~ScConflictsDlg() override;
-    virtual void        dispose() override;
+    ScConflictsDlg(weld::Window* pParent, ScViewData* pViewData, ScDocument* pSharedDoc, ScConflictsList& rConflictsList);
+    virtual ~ScConflictsDlg() override;
 
     void                UpdateView();
 };
diff --git a/sc/source/ui/inc/highred.hxx b/sc/source/ui/inc/highred.hxx
index 1a4c595a0cb8..ffb504cdf633 100644
--- a/sc/source/ui/inc/highred.hxx
+++ b/sc/source/ui/inc/highred.hxx
@@ -29,42 +29,44 @@ class ScViewData;
 class ScDocument;
 
 
-class ScHighlightChgDlg : public ScAnyRefDlg
+class ScHighlightChgDlg : public ScAnyRefDlgController
 {
 private:
-    VclPtr<CheckBox>               m_pHighlightBox;
-    VclPtr<SvxTPFilter>            m_pFilterCtr;
-    VclPtr<CheckBox>               m_pCbAccept;
-    VclPtr<CheckBox>               m_pCbReject;
-    VclPtr<OKButton>               m_pOkButton;
-
-    VclPtr<formula::RefEdit>       m_pEdAssign;
-    VclPtr<formula::RefButton>     m_pRbAssign;
-
     ScViewData*             pViewData;
     ScDocument*             pDoc;
     ScChangeViewSettings    aChangeViewSet;
 
+    std::unique_ptr<weld::CheckButton> m_xHighlightBox;
+    std::unique_ptr<weld::CheckButton> m_xCbAccept;
+    std::unique_ptr<weld::CheckButton> m_xCbReject;
+    std::unique_ptr<weld::Button> m_xOkButton;
+
+    std::unique_ptr<formula::WeldRefEdit> m_xEdAssign;
+    std::unique_ptr<formula::WeldRefButton> m_xRbAssign;
+
+    std::unique_ptr<weld::Container> m_xBox;
+
+    std::unique_ptr<SvxTPFilter> m_xFilterCtr;
+
     void                    Init();
 
     DECL_LINK( RefHandle, SvxTPFilter*, void );
-    DECL_LINK( HighlightHandle, Button*, void );
-    DECL_LINK( OKBtnHdl, Button*, void );
+    DECL_LINK( HighlightHandle, weld::Button&, void );
+    DECL_LINK( OKBtnHdl, weld::Button&, void );
 
 protected:
 
     virtual void    RefInputDone( bool bForced = false ) override;
 
 public:
-                    ScHighlightChgDlg( SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pParent,
-                               ScViewData*      ptrViewData);
+    ScHighlightChgDlg( SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent,
+               ScViewData*      ptrViewData);
 
-                    virtual ~ScHighlightChgDlg() override;
-    virtual void    dispose() override;
+    virtual ~ScHighlightChgDlg() override;
 
     virtual void    SetActive() override;
     virtual void    SetReference( const ScRange& rRef, ScDocument* pDoc ) override;
-    virtual bool    Close() override;
+    virtual void    Close() override;
     virtual bool    IsRefInputMode() const override;
 
 };
diff --git a/sc/source/ui/inc/reffact.hxx b/sc/source/ui/inc/reffact.hxx
index 61ec9321a9ad..eac1e2aa3ad2 100644
--- a/sc/source/ui/inc/reffact.hxx
+++ b/sc/source/ui/inc/reffact.hxx
@@ -33,30 +33,19 @@
         SFX_DECL_CHILDWINDOW_WITHID(Class);                                     \
     };
 
-#define DECL_WRAPPER_WITHID_CONTROLLER(Class) \
-    class Class : public SfxChildWindow                                         \
-    {                                                                           \
-    public:                                                                     \
-        Class( vcl::Window*, sal_uInt16, SfxBindings*, const SfxChildWinInfo* ); \
-        static  std::unique_ptr<SfxChildWindow> CreateImpl(vcl::Window *pParent, sal_uInt16 nId, \
-                    SfxBindings *pBindings, SfxChildWinInfo* pInfo ); \
-        static  void RegisterChildWindow (bool bVisible=false, SfxModule *pMod=nullptr, SfxChildWindowFlags nFlags=SfxChildWindowFlags::NONE); \
-        static  sal_uInt16 GetChildWindowId ();\
-    };
-
-DECL_WRAPPER_WITHID_CONTROLLER(ScNameDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScNameDefDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScSolverDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScOptSolverDlgWrapper)
+DECL_WRAPPER_WITHID(ScNameDlgWrapper)
+DECL_WRAPPER_WITHID(ScNameDefDlgWrapper)
+DECL_WRAPPER_WITHID(ScSolverDlgWrapper)
+DECL_WRAPPER_WITHID(ScOptSolverDlgWrapper)
 DECL_WRAPPER_WITHID(ScXMLSourceDlgWrapper)
 DECL_WRAPPER_WITHID(ScPivotLayoutWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScTabOpDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScFilterDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScSpecialFilterDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScDbNameDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScConsolidateDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScPrintAreasDlgWrapper)
-DECL_WRAPPER_WITHID_CONTROLLER(ScColRowNameRangesDlgWrapper)
+DECL_WRAPPER_WITHID(ScTabOpDlgWrapper)
+DECL_WRAPPER_WITHID(ScFilterDlgWrapper)
+DECL_WRAPPER_WITHID(ScSpecialFilterDlgWrapper)
+DECL_WRAPPER_WITHID(ScDbNameDlgWrapper)
+DECL_WRAPPER_WITHID(ScConsolidateDlgWrapper)
+DECL_WRAPPER_WITHID(ScPrintAreasDlgWrapper)
+DECL_WRAPPER_WITHID(ScColRowNameRangesDlgWrapper)
 DECL_WRAPPER_WITHID(ScFormulaDlgWrapper)
 DECL_WRAPPER_WITHID(ScHighlightChgDlgWrapper)
 DECL_WRAPPER_WITHID(ScCondFormatDlgWrapper)
@@ -159,41 +148,38 @@ private:
     ScFourierAnalysisDialogWrapper() = delete;
 };
 
-class ScAcceptChgDlgWrapper: public SfxChildWindow
+class ScAcceptChgDlgWrapper : public SfxChildWindow
 {
-    public:
-        ScAcceptChgDlgWrapper(  vcl::Window*,
-                                sal_uInt16,
-                                SfxBindings*,
-                                SfxChildWinInfo* );
+public:
+    ScAcceptChgDlgWrapper( vcl::Window*,
+                           sal_uInt16,
+                           SfxBindings*,
+                           SfxChildWinInfo* );
 
-        SFX_DECL_CHILDWINDOW_WITHID(Class);
+    SFX_DECL_CHILDWINDOW_WITHID(Class);
 
-        void ReInitDlg();
+    void ReInitDlg();
 };
 
 class ScSimpleRefDlgWrapper: public SfxChildWindow
 {
-    public:
-        ScSimpleRefDlgWrapper(  vcl::Window*,
-                                sal_uInt16,
-                                SfxBindings*,
-                                SfxChildWinInfo* );
-
-        static std::unique_ptr<SfxChildWindow> CreateImpl(vcl::Window *pParent, sal_uInt16 nId,
-                                                          SfxBindings *pBindings, SfxChildWinInfo* pInfo);
-        static void     RegisterChildWindow(bool bVisible=false, SfxModule *pMod=nullptr, SfxChildWindowFlags nFlags=SfxChildWindowFlags::NONE);
-        static          sal_uInt16 GetChildWindowId();
-
-        static void     SetDefaultPosSize(Point aPos, Size aSize);
-        void            SetRefString(const OUString& rStr);
-        void            SetCloseHdl( const Link<const OUString*,void>& rLink );
-        void            SetUnoLinks( const Link<const OUString&,void>& rDone, const Link<const OUString&,void>& rAbort,
-                                        const Link<const OUString&,void>& rChange );
-        void            SetFlags( bool bCloseOnButtonUp, bool bSingleCell, bool bMultiSelection );
-        static void     SetAutoReOpen(bool bFlag);
-
-        void            StartRefInput();
+public:
+    ScSimpleRefDlgWrapper(vcl::Window*,
+                          sal_uInt16,
+                          SfxBindings*,
+                          SfxChildWinInfo*);
+
+    SFX_DECL_CHILDWINDOW_WITHID(Class);
+
+    static void     SetDefaultPosSize(Point aPos, Size aSize);
+    void            SetRefString(const OUString& rStr);
+    void            SetCloseHdl( const Link<const OUString*,void>& rLink );
+    void            SetUnoLinks( const Link<const OUString&,void>& rDone, const Link<const OUString&,void>& rAbort,
+                                    const Link<const OUString&,void>& rChange );
+    void            SetFlags( bool bCloseOnButtonUp, bool bSingleCell, bool bMultiSelection );
+    static void     SetAutoReOpen(bool bFlag);
+
+    void            StartRefInput();
 };
 
 class SC_DLLPUBLIC ScValidityRefChildWin : public SfxChildWindow
diff --git a/sc/source/ui/inc/simpref.hxx b/sc/source/ui/inc/simpref.hxx
index a69330fbf55b..7920005ac437 100644
--- a/sc/source/ui/inc/simpref.hxx
+++ b/sc/source/ui/inc/simpref.hxx
@@ -35,6 +35,7 @@ private:
 
     ScRange         theCurArea;
     bool            bCloseFlag;
+    bool            bAutoReOpen;
     bool            bCloseOnButtonUp;
     bool            bSingleCell;
     bool            bMultiSelection;
@@ -67,6 +68,7 @@ public:
     void            StartRefInput();
 
     void            SetRefString(const OUString &rStr);
+    virtual void    FillInfo(SfxChildWinInfo&) const override;
 
     void            SetCloseHdl( const Link<const OUString*,void>& rLink );
     void            SetUnoLinks( const Link<const OUString&,void>& rDone, const Link<const OUString&,void>& rAbort,
diff --git a/sc/source/ui/miscdlgs/acredlin.cxx b/sc/source/ui/miscdlgs/acredlin.cxx
index 00b841ed4bc5..54b029509c7b 100644
--- a/sc/source/ui/miscdlgs/acredlin.cxx
+++ b/sc/source/ui/miscdlgs/acredlin.cxx
@@ -69,104 +69,92 @@ ScRedlinData::~ScRedlinData()
 
 //  class ScAcceptChgDlg
 
-ScAcceptChgDlg::ScAcceptChgDlg(SfxBindings* pB, SfxChildWindow* pCW, vcl::Window* pParent,
+ScAcceptChgDlg::ScAcceptChgDlg(SfxBindings* pB, SfxChildWindow* pCW, weld::Window* pParent,
     ScViewData* ptrViewData)
-    : SfxModelessDialog(pB, pCW, pParent,
-        "AcceptRejectChangesDialog", "svx/ui/acceptrejectchangesdialog.ui"),
-        aSelectionIdle("ScAcceptChgDlg SelectionIdle"),
-        aReOpenIdle("ScAcceptChgDlg ReOpenIdle"),
-        m_xPopup(get_menu("calcmenu")),
-        pViewData       ( ptrViewData ),
-        pDoc            ( ptrViewData->GetDocument() ),
-        aStrInsertCols       (ScResId(STR_CHG_INSERT_COLS)),
-        aStrInsertRows       (ScResId(STR_CHG_INSERT_ROWS)),
-        aStrInsertTabs       (ScResId(STR_CHG_INSERT_TABS)),
-        aStrDeleteCols       (ScResId(STR_CHG_DELETE_COLS)),
-        aStrDeleteRows       (ScResId(STR_CHG_DELETE_ROWS)),
-        aStrDeleteTabs       (ScResId(STR_CHG_DELETE_TABS)),
-        aStrMove             (ScResId(STR_CHG_MOVE)),
-        aStrContent          (ScResId(STR_CHG_CONTENT)),
-        aStrReject           (ScResId(STR_CHG_REJECT)),
-        aStrAllAccepted      (ScResId(STR_CHG_ACCEPTED)),
-        aStrAllRejected      (ScResId(STR_CHG_REJECTED)),
-        aStrNoEntry          (ScResId(STR_CHG_NO_ENTRY)),
-        aStrContentWithChild (ScResId(STR_CHG_CONTENT_WITH_CHILD)),
-        aStrChildContent     (ScResId(STR_CHG_CHILD_CONTENT)),
-        aStrChildOrgContent  (ScResId(STR_CHG_CHILD_ORGCONTENT)),
-        aStrEmpty            (ScResId(STR_CHG_EMPTY)),
-        aUnknown("Unknown"),
-        bIgnoreMsg(false),
-        bNoSelection(false),
-        bHasFilterEntry(false),
-        bUseColor(false)
+    : SfxModelessDialogController(pB, pCW, pParent,
+        "svx/ui/acceptrejectchangesdialog.ui", "AcceptRejectChangesDialog")
+    , aSelectionIdle("ScAcceptChgDlg SelectionIdle")
+    , aReOpenIdle("ScAcceptChgDlg ReOpenIdle")
+    , pViewData( ptrViewData )
+    , pDoc( ptrViewData->GetDocument() )
+    , aStrInsertCols(ScResId(STR_CHG_INSERT_COLS))
+    , aStrInsertRows(ScResId(STR_CHG_INSERT_ROWS))
+    , aStrInsertTabs(ScResId(STR_CHG_INSERT_TABS))
+    , aStrDeleteCols(ScResId(STR_CHG_DELETE_COLS))
+    , aStrDeleteRows(ScResId(STR_CHG_DELETE_ROWS))
+    , aStrDeleteTabs(ScResId(STR_CHG_DELETE_TABS))
+    , aStrMove(ScResId(STR_CHG_MOVE))
+    , aStrContent(ScResId(STR_CHG_CONTENT))
+    , aStrReject(ScResId(STR_CHG_REJECT))
+    , aStrAllAccepted(ScResId(STR_CHG_ACCEPTED))
+    , aStrAllRejected(ScResId(STR_CHG_REJECTED))
+    , aStrNoEntry(ScResId(STR_CHG_NO_ENTRY))
+    , aStrContentWithChild(ScResId(STR_CHG_CONTENT_WITH_CHILD))
+    , aStrChildContent(ScResId(STR_CHG_CHILD_CONTENT))
+    , aStrChildOrgContent(ScResId(STR_CHG_CHILD_ORGCONTENT))
+    , aStrEmpty(ScResId(STR_CHG_EMPTY))
+    , aUnknown("Unknown")
+    , bIgnoreMsg(false)
+    , bNoSelection(false)
+    , bHasFilterEntry(false)
+    , bUseColor(false)
+    , m_xContentArea(m_xDialog->weld_content_area())
+    , m_xPopup(m_xBuilder->weld_menu("calcmenu"))
 {
-    m_pAcceptChgCtr = VclPtr<SvxAcceptChgCtr>::Create(get_content_area(), this);
+    m_xAcceptChgCtr.reset(new SvxAcceptChgCtr(m_xContentArea.get(), m_xBuilder.get()));
     nAcceptCount=0;
     nRejectCount=0;
     aReOpenIdle.SetInvokeHandler(LINK( this, ScAcceptChgDlg, ReOpenTimerHdl ));
 
-    pTPFilter=m_pAcceptChgCtr->GetFilterPage();
-    pTPView=m_pAcceptChgCtr->GetViewPage();
-    pTheView=pTPView->GetTableControl();
+    pTPFilter = m_xAcceptChgCtr->GetFilterPage();
+    pTPView = m_xAcceptChgCtr->GetViewPage();
+    pTheView = pTPView->GetTableControl();
+    pTheView->SetCalcView();
     aSelectionIdle.SetInvokeHandler(LINK( this, ScAcceptChgDlg, UpdateSelectionHdl ));
     aSelectionIdle.SetDebugName( "ScAcceptChgDlg  aSelectionIdle" );
 
     pTPFilter->SetReadyHdl(LINK( this, ScAcceptChgDlg, FilterHandle ));
     pTPFilter->SetRefHdl(LINK( this, ScAcceptChgDlg, RefHandle ));
     pTPFilter->HideRange(false);
-    pTPView->InsertCalcHeader();
     pTPView->SetRejectClickHdl( LINK( this, ScAcceptChgDlg,RejectHandle));
     pTPView->SetAcceptClickHdl( LINK(this, ScAcceptChgDlg, AcceptHandle));
     pTPView->SetRejectAllClickHdl( LINK( this, ScAcceptChgDlg,RejectAllHandle));
     pTPView->SetAcceptAllClickHdl( LINK(this, ScAcceptChgDlg, AcceptAllHandle));
-    pTheView->SetCalcView();
-    pTheView->SetStyle(pTheView->GetStyle()|WB_HASLINES|WB_CLIPCHILDREN|WB_HASBUTTONS|WB_HASBUTTONSATROOT|WB_HSCROLL);
-    pTheView->SetExpandingHdl( LINK(this, ScAcceptChgDlg, ExpandingHandle));
-    pTheView->SetSelectHdl( LINK(this, ScAcceptChgDlg, SelectHandle));
-    pTheView->SetDeselectHdl( LINK(this, ScAcceptChgDlg, SelectHandle));
-    pTheView->SetCommandHdl( LINK(this, ScAcceptChgDlg, CommandHdl));
-    pTheView->SetColCompareHdl( LINK(this, ScAcceptChgDlg,ColCompareHdl));
-    pTheView->SetSelectionMode(SelectionMode::Multiple);
-    pTheView->SetHighlightRange(1);
+
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    rTreeView.connect_expanding(LINK(this, ScAcceptChgDlg, ExpandingHandle));
+    rTreeView.connect_changed(LINK(this, ScAcceptChgDlg, SelectHandle));
+    rTreeView.connect_popup_menu(LINK(this, ScAcceptChgDlg, CommandHdl));
+    rTreeView.set_sort_func([this](const weld::TreeIter& rLeft, const weld::TreeIter& rRight){
+        return ColCompareHdl(rLeft, rRight);
+    });
+    rTreeView.set_selection_mode(SelectionMode::Multiple);
 
     Init();
 
     UpdateView();
-    SvTreeListEntry* pEntry=pTheView->First();
-    if(pEntry!=nullptr)
-    {
-        pTheView->Select(pEntry);
-    }
-}
 
-ScAcceptChgDlg::~ScAcceptChgDlg()
-{
-    disposeOnce();
+    std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+    if (rTreeView.get_iter_first(*xEntry))
+        rTreeView.select(*xEntry);
 }
 
-void ScAcceptChgDlg::dispose()
+ScAcceptChgDlg::~ScAcceptChgDlg()
 {
     ClearView();
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
 
-    if(pChanges!=nullptr)
+    if (pChanges)
     {
         Link<ScChangeTrack&,void> aLink;
         pChanges->SetModifiedLink(aLink);
     }
-
-    m_xPopup.clear();
-    m_pAcceptChgCtr.disposeAndClear();
-    pTPFilter.clear();
-    pTPView.clear();
-    pTheView.clear();
-    SfxModelessDialog::dispose();
 }
 
 void ScAcceptChgDlg::ReInit(ScViewData* ptrViewData)
 {
     pViewData=ptrViewData;
-    if(pViewData!=nullptr)
+    if (pViewData)
         pDoc=ptrViewData->GetDocument();
     else
         pDoc=nullptr;
@@ -212,10 +200,22 @@ void ScAcceptChgDlg::Init()
     aChangeViewSet.AdjustDateMode( *pDoc );
 
     pTPFilter->CheckDate(aChangeViewSet.HasDate());
-    pTPFilter->SetFirstDate(aChangeViewSet.GetTheFirstDateTime());
-    pTPFilter->SetFirstTime(aChangeViewSet.GetTheFirstDateTime());
-    pTPFilter->SetLastDate(aChangeViewSet.GetTheLastDateTime());
-    pTPFilter->SetLastTime(aChangeViewSet.GetTheLastDateTime());
+
+    DateTime aEmpty(DateTime::EMPTY);
+
+    DateTime aDateTime(aChangeViewSet.GetTheFirstDateTime());
+    if (aDateTime != aEmpty)
+    {
+        pTPFilter->SetFirstDate(aDateTime);
+        pTPFilter->SetFirstTime(aDateTime);
+    }
+    aDateTime = aChangeViewSet.GetTheLastDateTime();
+    if (aDateTime != aEmpty)
+    {
+        pTPFilter->SetLastDate(aDateTime);
+        pTPFilter->SetLastTime(aDateTime);
+    }
+
     pTPFilter->SetDateMode(static_cast<sal_uInt16>(aChangeViewSet.GetTheDateMode()));
     pTPFilter->CheckComment(aChangeViewSet.HasComment());
     pTPFilter->SetComment(aChangeViewSet.GetTheComment());
@@ -273,10 +273,10 @@ void ScAcceptChgDlg::ClearView()
 {
     nAcceptCount=0;
     nRejectCount=0;
-    pTheView->SetUpdateMode(false);
-
-    pTheView->Clear();
-    pTheView->SetUpdateMode(true);
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    rTreeView.freeze();
+    rTreeView.clear();
+    rTreeView.thaw();
 }
 
 OUString* ScAcceptChgDlg::MakeTypeString(ScChangeActionType eType)
@@ -348,16 +348,14 @@ bool ScAcceptChgDlg::IsValidAction(const ScChangeAction* pScChangeAction)
     return bFlag;
 }
 
-SvTreeListEntry* ScAcceptChgDlg::AppendChangeAction(
-    const ScChangeAction* pScChangeAction,
-    SvTreeListEntry* pParent, bool bDelMaster,bool bDisabled)
+std::unique_ptr<weld::TreeIter> ScAcceptChgDlg::AppendChangeAction(
+    const ScChangeAction* pScChangeAction, bool bCreateOnDemand,
+    const weld::TreeIter* pParent, bool bDelMaster, bool bDisabled)
 {
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
 
     if(pScChangeAction==nullptr || pChanges==nullptr) return nullptr;
 
-    SvTreeListEntry* pEntry=nullptr;
-
     bool bFlag = false;
 
     ScRange aRef=pScChangeAction->GetBigRange().MakeRange();
@@ -470,47 +468,44 @@ SvTreeListEntry* ScAcceptChgDlg::AppendChangeAction(
         }
     }
 
-    if(!bFlag&& bUseColor&& pParent==nullptr)
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+    OUString sString(aBuf.makeStringAndClear());
+    OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewData.release())));
+    rTreeView.insert(pParent, -1, &sString, &sId, nullptr, nullptr, nullptr, bCreateOnDemand, xEntry.get());
+    if (!bFlag && bUseColor && !pParent)
     {
-        pEntry = pTheView->InsertEntry(
-            aBuf.makeStringAndClear(), std::move(pNewData), COL_LIGHTBLUE, pParent, TREELIST_APPEND);
+        rTreeView.set_font_color(*xEntry, COL_LIGHTBLUE);
     }
-    else if(bFlag&& bUseColor&& pParent!=nullptr)
+    else if (bFlag && bUseColor && pParent)
     {
-        pEntry = pTheView->InsertEntry(
-            aBuf.makeStringAndClear(), std::move(pNewData), COL_GREEN, pParent, TREELIST_APPEND);
-        SvTreeListEntry* pExpEntry=pParent;
+        rTreeView.set_font_color(*xEntry, COL_GREEN);
 
-        while(pExpEntry!=nullptr && !pTheView->IsExpanded(pExpEntry))
-        {
-            SvTreeListEntry* pTmpEntry=pTheView->GetParent(pExpEntry);
+        std::unique_ptr<weld::TreeIter> xExpEntry(rTreeView.make_iterator(pParent));
 
-            if(pTmpEntry!=nullptr) pTheView->Expand(pExpEntry);
+        while (!rTreeView.get_row_expanded(*xExpEntry))
+        {
+            if (rTreeView.get_iter_depth(*xExpEntry))
+                rTreeView.expand_row(*xExpEntry);
 
-            pExpEntry=pTmpEntry;
+            if (!rTreeView.iter_parent(*xExpEntry))
+                break;
         }
     }
-    else
-    {
-        pEntry = pTheView->InsertEntry(
-            aBuf.makeStringAndClear(), std::move(pNewData), pParent, TREELIST_APPEND);
-    }
-    return pEntry;
+    return xEntry;
 }
 
-SvTreeListEntry* ScAcceptChgDlg::AppendFilteredAction(
+std::unique_ptr<weld::TreeIter> ScAcceptChgDlg::AppendFilteredAction(
     const ScChangeAction* pScChangeAction, ScChangeActionState eState,
-    SvTreeListEntry* pParent, bool bDelMaster, bool bDisabled)
+    bool bCreateOnDemand,
+    const weld::TreeIter* pParent, bool bDelMaster, bool bDisabled)
 {
-
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
 
     if(pScChangeAction==nullptr || pChanges==nullptr) return nullptr;
 
     bool bIsGenerated = pChanges->IsGenerated(pScChangeAction->GetActionNumber());
 
-    SvTreeListEntry* pEntry=nullptr;
-
     bool bFlag = false;
 
     ScRange aRef=pScChangeAction->GetBigRange().MakeRange();
@@ -536,12 +531,11 @@ SvTreeListEntry* ScAcceptChgDlg::AppendFilteredAction(
             bFlag = true;
     }
 
+    std::unique_ptr<weld::TreeIter> xEntry;
     if(bFlag)
     {
-
-        OUString aRefStr;
         ScChangeActionType eType=pScChangeAction->GetType();
-        OUString aString;
+        OUString aActionString;
         OUString aDesc;
 
         std::unique_ptr<ScRedlinData> pNewData(new ScRedlinData);
@@ -559,20 +553,20 @@ SvTreeListEntry* ScAcceptChgDlg::AppendFilteredAction(
         {
             if(pScChangeAction->IsDialogParent())
             {
-                aString=aStrContentWithChild;
+                aActionString=aStrContentWithChild;
                 pNewData->nInfo=RD_SPECIAL_VISCONTENT;
                 pNewData->bIsRejectable=false;
                 pNewData->bIsAcceptable=false;
             }
             else
             {
-                aString=*MakeTypeString(eType);
+                aActionString=*MakeTypeString(eType);
                 pScChangeAction->GetDescription( aDesc, pDoc, true);
             }
         }
         else
         {
-            aString=*MakeTypeString(eType);
+            aActionString=*MakeTypeString(eType);
 
             if(bDelMaster)
             {
@@ -585,45 +579,40 @@ SvTreeListEntry* ScAcceptChgDlg::AppendFilteredAction(
 
         }
 
-        aString += "\t";
-        pScChangeAction->GetRefString(aRefStr, pDoc, true);
-        aString += aRefStr + "\t";
-
-        if(!bIsGenerated)
-        {
-            aString += aUser
-                    + "\t"
-                    + ScGlobal::pLocaleData->getDate(aDateTime)
-                    + " "
-                    + ScGlobal::pLocaleData->getTime(aDateTime)
-                    + "\t";
-        }
-        else
-        {
-            aString += "\t";
-            aString += "\t";
-        }
 
         OUString aComment = pScChangeAction->GetComment().replaceAll("\n", "");
-
         if (!aDesc.isEmpty())
         {
             aComment += " (" + aDesc + ")";
         }
         if (pTheView->IsValidComment(aComment))
         {
-            aString+=aComment;
-            pEntry=pTheView->InsertEntry(aString,std::move(pNewData),pParent,TREELIST_APPEND);
+            weld::TreeView& rTreeView = pTheView->GetWidget();
+            xEntry = rTreeView.make_iterator();
+            OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewData.release())));
+            rTreeView.insert(pParent, -1, &aActionString, &sId, nullptr, nullptr, nullptr, bCreateOnDemand, xEntry.get());
+
+            OUString aRefStr;
+            pScChangeAction->GetRefString(aRefStr, pDoc, true);
+            rTreeView.set_text(*xEntry, aRefStr, 1);
+
+            if (!bIsGenerated)
+            {
+                rTreeView.set_text(*xEntry, aUser, 2);
+                OUString sDate = ScGlobal::pLocaleData->getDate(aDateTime) + " " + ScGlobal::pLocaleData->getTime(aDateTime);
+                rTreeView.set_text(*xEntry, sDate, 3);
+            }
+
+            rTreeView.set_text(*xEntry, aComment, 4);
         }
     }
-    return pEntry;
+    return xEntry;
 }
 
-SvTreeListEntry* ScAcceptChgDlg::InsertChangeActionContent(const ScChangeActionContent* pScChangeAction,
-                                                          SvTreeListEntry* pParent, sal_uLong nSpecial)
+std::unique_ptr<weld::TreeIter> ScAcceptChgDlg::InsertChangeActionContent(const ScChangeActionContent* pScChangeAction,
+                                                                          const weld::TreeIter& rParent, sal_uLong nSpecial)
 {
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
-    SvTreeListEntry* pEntry=nullptr;
 
     if(pScChangeAction==nullptr || pChanges==nullptr) return nullptr;
 
@@ -727,23 +716,27 @@ SvTreeListEntry* ScAcceptChgDlg::InsertChangeActionContent(const ScChangeActionC
     pNewData->nCol  = aRef.aStart.Col();
     pNewData->nTable= aRef.aStart.Tab();
 
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+    OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewData.release())));
+    rTreeView.insert(&rParent, -1, &aString, &sId, nullptr, nullptr, nullptr, false, xEntry.get());
     if (pTheView->IsValidComment(aComment) && bFlag)
-    {
         bHasFilterEntry=true;
-        pEntry=pTheView->InsertEntry(aString,std::move(pNewData),pParent);
-    }
     else
-        pEntry=pTheView->InsertEntry(aString,std::move(pNewData),COL_LIGHTBLUE,pParent);
-    return pEntry;
+    {
+        rTreeView.set_font_color(*xEntry, COL_LIGHTBLUE);
+    }
+    return xEntry;
 }
 
 void ScAcceptChgDlg::UpdateView()
 {
-    SvTreeListEntry* pParent=nullptr;
+    std::unique_ptr<weld::TreeIter> xParent;
     ScChangeTrack* pChanges=nullptr;
     const ScChangeAction* pScChangeAction=nullptr;
-    SetPointer(PointerStyle::Wait);
-    pTheView->SetUpdateMode(false);
+    m_xDialog->set_busy_cursor(true);
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    rTreeView.freeze();
     bool bFilterFlag = pTPFilter->IsDate() || pTPFilter->IsRange() ||
         pTPFilter->IsAuthor() || pTPFilter->IsComment();
 
@@ -760,45 +753,41 @@ void ScAcceptChgDlg::UpdateView()
     while(pScChangeAction!=nullptr)
     {
         bHasFilterEntry=false;
-        switch(pScChangeAction->GetState())
+        switch (pScChangeAction->GetState())
         {
             case SC_CAS_VIRGIN:
 
-                if(pScChangeAction->IsDialogRoot())
+                if (pScChangeAction->IsDialogRoot())
                 {
-                    if(pScChangeAction->IsDialogParent())
-                        pParent=AppendChangeAction(pScChangeAction);
+                    bool bOnDemandChildren = !bFilterFlag && pScChangeAction->IsDialogParent();
+                    if (pScChangeAction->IsDialogParent())
+                        xParent = AppendChangeAction(pScChangeAction, bOnDemandChildren);
                     else
-                        pParent=AppendFilteredAction(pScChangeAction,SC_CAS_VIRGIN);
+                        xParent = AppendFilteredAction(pScChangeAction, SC_CAS_VIRGIN, bOnDemandChildren);
                 }
                 else
-                    pParent=nullptr;
+                    xParent.reset();
 
                 bTheFlag=true;
                 break;
 
             case SC_CAS_ACCEPTED:
-                pParent=nullptr;
+                xParent.reset();
                 nAcceptCount++;
                 break;
 
             case SC_CAS_REJECTED:
-                pParent=nullptr;
+                xParent.reset();
                 nRejectCount++;
                 break;
         }
 
-        if(pParent!=nullptr && pScChangeAction->IsDialogParent())
+        if (xParent && pScChangeAction->IsDialogParent() && bFilterFlag)
         {
-            if(!bFilterFlag)
-                pParent->EnableChildrenOnDemand();
-            else
-            {
-                bool bTestFlag = bHasFilterEntry;
-                bHasFilterEntry=false;
-                if(Expand(pChanges,pScChangeAction,pParent,!bTestFlag)&&!bTestFlag)
-                    pTheView->RemoveEntry(pParent);
-            }
+            bool bTestFlag = bHasFilterEntry;
+            bHasFilterEntry=false;
+            if (Expand(pChanges, pScChangeAction, *xParent, !bTestFlag) && !bTestFlag)
+                rTreeView.remove(*xParent);
         }
 
         pScChangeAction=pScChangeAction->GetNext();
@@ -812,33 +801,21 @@ void ScAcceptChgDlg::UpdateView()
     pTPView->EnableReject(bTheFlag);
     pTPView->EnableRejectAll(bTheFlag);
 
-    if(nAcceptCount>0)
-    {
-        pParent=pTheView->InsertEntry(
-            aStrAllAccepted, std::unique_ptr<RedlinData>(),
-            static_cast< SvTreeListEntry * >(nullptr));
-        pParent->EnableChildrenOnDemand();
-    }
-    if(nRejectCount>0)
-    {
-        pParent=pTheView->InsertEntry(
-            aStrAllRejected, std::unique_ptr<RedlinData>(),
-            static_cast< SvTreeListEntry * >(nullptr));
-        pParent->EnableChildrenOnDemand();
-    }
-    pTheView->SetUpdateMode(true);
-    SetPointer(PointerStyle::Arrow);
-    SvTreeListEntry* pEntry=pTheView->First();
-    if(pEntry!=nullptr)
-        pTheView->Select(pEntry);
+    if (nAcceptCount>0)
+        rTreeView.insert(nullptr, -1, &aStrAllAccepted, nullptr, nullptr, nullptr, nullptr, true, nullptr);
+    if (nRejectCount>0)
+        rTreeView.insert(nullptr, -1, &aStrAllRejected, nullptr, nullptr, nullptr, nullptr, true, nullptr);
+    rTreeView.thaw();
+    m_xDialog->set_busy_cursor(false);
+    std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+    if (rTreeView.get_iter_first(*xEntry))
+        rTreeView.select(*xEntry);
 }
 
 IMPL_LINK_NOARG(ScAcceptChgDlg, RefHandle, SvxTPFilter*, void)
 {
     sal_uInt16 nId  =ScSimpleRefDlgWrapper::GetChildWindowId();
 
-    ScSimpleRefDlgWrapper::SetDefaultPosSize(GetPosPixel(),GetSizePixel());
-
     SC_MOD()->SetRefDialog( nId, true );
 
     SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame();
@@ -851,44 +828,30 @@ IMPL_LINK_NOARG(ScAcceptChgDlg, RefHandle, SvxTPFilter*, void)
         pWnd->SetCloseHdl(LINK( this, ScAcceptChgDlg,RefInfoHandle));
         pWnd->SetRefString(pTPFilter->GetRange());
         ScSimpleRefDlgWrapper::SetAutoReOpen(false);
-        vcl::Window* pWin=pWnd->GetWindow();
-        pWin->SetPosSizePixel(GetPosPixel(),GetSizePixel());
-        Hide();
-        pWin->SetText(GetText());
+        auto xWin = pWnd->GetController();
+        m_xDialog->hide();
+        xWin->set_title(m_xDialog->get_title());
         pWnd->StartRefInput();
     }
 }
 
 IMPL_LINK( ScAcceptChgDlg, RefInfoHandle, const OUString*, pResult, void)
 {
-    sal_uInt16 nId;
+    sal_uInt16 nId = ScAcceptChgDlgWrapper::GetChildWindowId();
 
     ScSimpleRefDlgWrapper::SetAutoReOpen(true);
 
     SfxViewFrame* pViewFrm = pViewData->GetViewShell()->GetViewFrame();
-    if(pResult!=nullptr)
+    if (pResult)
     {
         pTPFilter->SetRange(*pResult);
         FilterHandle(pTPFilter);
 
-        nId = ScSimpleRefDlgWrapper::GetChildWindowId();
-        ScSimpleRefDlgWrapper* pWnd = static_cast<ScSimpleRefDlgWrapper*>(pViewFrm->GetChildWindow( nId ));
-
-        if(pWnd!=nullptr)
-        {
-            vcl::Window* pWin=pWnd->GetWindow();
-            Size aWinSize=pWin->GetSizePixel();
-            aWinSize.setWidth(GetSizePixel().Width() );
-            SetPosSizePixel(pWin->GetPosPixel(),aWinSize);
-            Invalidate();
-        }
-        nId = ScAcceptChgDlgWrapper::GetChildWindowId();
-        pViewFrm->ShowChildWindow( nId );
+        pViewFrm->ShowChildWindow(nId);
     }
     else
     {
-        nId = ScAcceptChgDlgWrapper::GetChildWindowId();
-        pViewFrm->SetChildWindow( nId, false );
+        pViewFrm->SetChildWindow(nId, false);
     }
 }
 
@@ -905,29 +868,25 @@ IMPL_LINK( ScAcceptChgDlg, FilterHandle, SvxTPFilter*, pRef, void )
 
 IMPL_LINK( ScAcceptChgDlg, RejectHandle, SvxTPView*, pRef, void )
 {
-    SetPointer(PointerStyle::Wait);
+    m_xDialog->set_busy_cursor(true);
 
     bIgnoreMsg=true;
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
 
     if(pRef!=nullptr)
     {
-        SvTreeListEntry* pEntry=pTheView->FirstSelected();
-        while(pEntry!=nullptr)
-        {
-            ScRedlinData *pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
-            if(pEntryData!=nullptr)
+        weld::TreeView& rTreeView = pTheView->GetWidget();
+        rTreeView.selected_foreach([this, pChanges, &rTreeView](weld::TreeIter& rEntry){
+            ScRedlinData *pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(rEntry).toInt64());
+            if (pEntryData)
             {
-                ScChangeAction* pScChangeAction=
-                        static_cast<ScChangeAction*>(pEntryData->pData);
-
-                if(pScChangeAction->GetType()==SC_CAT_INSERT_TABS)
+                ScChangeAction* pScChangeAction= static_cast<ScChangeAction*>(pEntryData->pData);
+                if (pScChangeAction->GetType()==SC_CAT_INSERT_TABS)
                     pViewData->SetTabNo(0);
-
                 pChanges->Reject(pScChangeAction);
             }
-            pEntry = pTheView->NextSelected(pEntry);
-        }
+            return false;
+        });
         ScDocShell* pDocSh=pViewData->GetDocShell();
         pDocSh->PostPaintExtras();
         pDocSh->PostPaintGridAll();
@@ -936,23 +895,23 @@ IMPL_LINK( ScAcceptChgDlg, RejectHandle, SvxTPView*, pRef, void )
         ClearView();
         UpdateView();
     }
-    SetPointer(PointerStyle::Arrow);
+
+    m_xDialog->set_busy_cursor(false);
 
     bIgnoreMsg=false;
 }
 IMPL_LINK( ScAcceptChgDlg, AcceptHandle, SvxTPView*, pRef, void )
 {
-    SetPointer(PointerStyle::Wait);
+    m_xDialog->set_busy_cursor(true);
 
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
     bIgnoreMsg=true;
     if(pRef!=nullptr)
     {
-        SvTreeListEntry* pEntry=pTheView->FirstSelected();
-        while(pEntry!=nullptr)
-        {
-            ScRedlinData *pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
-            if(pEntryData!=nullptr)
+        weld::TreeView& rTreeView = pTheView->GetWidget();
+        rTreeView.selected_foreach([pChanges, &rTreeView](weld::TreeIter& rEntry) {
+            ScRedlinData *pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(rEntry).toInt64());
+            if (pEntryData)
             {
                 ScChangeAction* pScChangeAction=
                         static_cast<ScChangeAction*>(pEntryData->pData);
@@ -966,8 +925,8 @@ IMPL_LINK( ScAcceptChgDlg, AcceptHandle, SvxTPView*, pRef, void )
                 else
                     pChanges->Accept(pScChangeAction);
             }
-            pEntry = pTheView->NextSelected(pEntry);
-        }
+            return false;
+        });
         ScDocShell* pDocSh=pViewData->GetDocShell();
         pDocSh->PostPaintExtras();
         pDocSh->PostPaintGridAll();
@@ -975,7 +934,7 @@ IMPL_LINK( ScAcceptChgDlg, AcceptHandle, SvxTPView*, pRef, void )
         ClearView();
         UpdateView();
     }
-    SetPointer(PointerStyle::Arrow);
+    m_xDialog->set_busy_cursor(false);
     bIgnoreMsg=false;
 }
 
@@ -1020,7 +979,7 @@ void ScAcceptChgDlg::AcceptFiltered()
 
 IMPL_LINK_NOARG(ScAcceptChgDlg, RejectAllHandle, SvxTPView*, void)
 {
-    SetPointer(PointerStyle::Wait);
+    m_xDialog->set_busy_cursor(true);
     bIgnoreMsg=true;
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
     if(pChanges!=nullptr)
@@ -1040,14 +999,14 @@ IMPL_LINK_NOARG(ScAcceptChgDlg, RejectAllHandle, SvxTPView*, void)
         ClearView();
         UpdateView();
     }
-    SetPointer(PointerStyle::Arrow);
+    m_xDialog->set_busy_cursor(false);
 
     bIgnoreMsg=false;
 }
 
 IMPL_LINK_NOARG(ScAcceptChgDlg, AcceptAllHandle, SvxTPView*, void)
 {
-    SetPointer(PointerStyle::Wait);
+    m_xDialog->set_busy_cursor(true);
 
     bIgnoreMsg=true;
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
@@ -1066,27 +1025,29 @@ IMPL_LINK_NOARG(ScAcceptChgDlg, AcceptAllHandle, SvxTPView*, void)
         UpdateView();
     }
     bIgnoreMsg=false;
-    SetPointer(PointerStyle::Arrow);
+
+    m_xDialog->set_busy_cursor(false);
 }
 
-IMPL_LINK_NOARG(ScAcceptChgDlg, SelectHandle, SvTreeListBox*, void)
+IMPL_LINK_NOARG(ScAcceptChgDlg, SelectHandle, weld::TreeView&, void)
 {
-    if(!bNoSelection)
+    if (!bNoSelection)
         aSelectionIdle.Start();
 
     bNoSelection=false;
 }
 
-void ScAcceptChgDlg::GetDependents(  const ScChangeAction* pScChangeAction,
-                                    ScChangeActionMap& aActionMap,
-                                    SvTreeListEntry* pEntry)
+void ScAcceptChgDlg::GetDependents(const ScChangeAction* pScChangeAction,
+                                   ScChangeActionMap& aActionMap,
+                                   const weld::TreeIter& rEntry)
 {
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
 
-    SvTreeListEntry* pParent=pTheView->GetParent(pEntry);
-    if(pParent!=nullptr)
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    std::unique_ptr<weld::TreeIter> xParent(rTreeView.make_iterator(&rEntry));
+    if (rTreeView.iter_parent(*xParent))
     {
-        ScRedlinData *pParentData=static_cast<ScRedlinData *>(pParent->GetUserData());
+        ScRedlinData *pParentData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(*xParent).toInt64());
         ScChangeAction* pParentAction=static_cast<ScChangeAction*>(pParentData->pData);
 
         if(pParentAction!=pScChangeAction)
@@ -1101,10 +1062,11 @@ void ScAcceptChgDlg::GetDependents(  const ScChangeAction* pScChangeAction,
                     aActionMap, pScChangeAction->IsMasterDelete() );
 }
 
-bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap,SvTreeListEntry* pParent)
+bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap, const weld::TreeIter& rParent)
 {
     bool bTheTestFlag = true;
-    ScRedlinData *pEntryData=static_cast<ScRedlinData *>(pParent->GetUserData());
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    ScRedlinData *pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(rParent).toInt64());
     const ScChangeAction* pScChangeAction = static_cast<ScChangeAction*>(pEntryData->pData);
     bool bParentInserted = false;
     // If the parent is a MatrixOrigin then place it in the right order before
@@ -1119,7 +1081,6 @@ bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap,SvTreeL
             const_cast<ScChangeAction*>( pScChangeAction ) ) );
         bParentInserted = true;
     }
-    SvTreeListEntry* pEntry=nullptr;
 
     ScChangeActionMap::iterator itChangeAction = std::find_if(pActionMap->begin(), pActionMap->end(),
         [](const std::pair<sal_uLong, ScChangeAction*>& rEntry) { return rEntry.second->GetState() == SC_CAS_VIRGIN; });
@@ -1127,14 +1088,14 @@ bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap,SvTreeL
     if( itChangeAction == pActionMap->end() )
         return true;
 
-    SvTreeListEntry* pOriginal = InsertChangeActionContent(
+    std::unique_ptr<weld::TreeIter> xOriginal = InsertChangeActionContent(
         dynamic_cast<const ScChangeActionContent*>( itChangeAction->second ),
-        pParent, RD_SPECIAL_CONTENT );
+        rParent, RD_SPECIAL_CONTENT );
 
-    if(pOriginal!=nullptr)
+    if (xOriginal)
     {
         bTheTestFlag=false;
-        ScRedlinData *pParentData=static_cast<ScRedlinData *>(pOriginal->GetUserData());
+        ScRedlinData *pParentData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(*xOriginal).toInt64());
         pParentData->pData=const_cast<ScChangeAction *>(pScChangeAction);
         pParentData->nActionNo=pScChangeAction->GetActionNumber();
         pParentData->bIsAcceptable=pScChangeAction->IsRejectable(); // select old value
@@ -1145,10 +1106,11 @@ bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap,SvTreeL
     {
         if( itChangeAction->second->GetState() == SC_CAS_VIRGIN )
         {
-            pEntry = InsertChangeActionContent( dynamic_cast<const ScChangeActionContent*>( itChangeAction->second ),
-                pParent, RD_SPECIAL_NONE );
+            std::unique_ptr<weld::TreeIter> xEntry =
+                InsertChangeActionContent( dynamic_cast<const ScChangeActionContent*>( itChangeAction->second ),
+                    rParent, RD_SPECIAL_NONE );
 
-            if(pEntry!=nullptr)
+            if (xEntry)
                 bTheTestFlag=false;
         }
         ++itChangeAction;
@@ -1156,13 +1118,14 @@ bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap,SvTreeL
 
     if ( !bParentInserted )
     {
-        pEntry=InsertChangeActionContent(static_cast<const ScChangeActionContent*>(
-                                pScChangeAction),pParent,RD_SPECIAL_NONE);
+        std::unique_ptr<weld::TreeIter> xEntry =
+            InsertChangeActionContent(static_cast<const ScChangeActionContent*>(
+                                pScChangeAction),rParent,RD_SPECIAL_NONE);
 
-        if(pEntry!=nullptr)
+        if (xEntry)
         {
             bTheTestFlag=false;
-            ScRedlinData *pParentData=static_cast<ScRedlinData *>(pEntry->GetUserData());
+            ScRedlinData *pParentData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(*xEntry).toInt64());
             pParentData->pData=const_cast<ScChangeAction *>(pScChangeAction);
             pParentData->nActionNo=pScChangeAction->GetActionNumber();
             pParentData->bIsAcceptable=pScChangeAction->IsClickable();
@@ -1172,16 +1135,16 @@ bool ScAcceptChgDlg::InsertContentChildren(ScChangeActionMap* pActionMap,SvTreeL
     }
 
     return bTheTestFlag;
-
 }
 
-bool ScAcceptChgDlg::InsertAcceptedORejected(SvTreeListEntry* pParent)
+bool ScAcceptChgDlg::InsertAcceptedORejected(const weld::TreeIter& rParent)
 {
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
     bool bTheTestFlag = true;
 
     ScChangeActionState eState = SC_CAS_VIRGIN;
-    OUString aString = pTheView->GetEntryText(pParent);
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    OUString aString = rTreeView.get_text(rParent, 0);
     OUString a2String = aString.copy(0, aStrAllAccepted.getLength());
     if (a2String == aStrAllAccepted)
         eState=SC_CAS_ACCEPTED;
@@ -1192,90 +1155,91 @@ bool ScAcceptChgDlg::InsertAcceptedORejected(SvTreeListEntry* pParent)
             eState=SC_CAS_REJECTED;
     }
 
-    ScChangeAction* pScChangeAction=pChanges->GetFirst();
-    while(pScChangeAction!=nullptr)
+    ScChangeAction* pScChangeAction = pChanges->GetFirst();
+    while (pScChangeAction)
     {
-        if(pScChangeAction->GetState()==eState &&
-            AppendFilteredAction(pScChangeAction,eState,pParent)!=nullptr)
+        if (pScChangeAction->GetState()==eState &&
+            AppendFilteredAction(pScChangeAction, eState, false, &rParent))
             bTheTestFlag=false;
         pScChangeAction=pScChangeAction->GetNext();
     }
     return bTheTestFlag;
 }
 
-bool ScAcceptChgDlg::InsertChildren(ScChangeActionMap* pActionMap,SvTreeListEntry* pParent)
+bool ScAcceptChgDlg::InsertChildren(ScChangeActionMap* pActionMap, const weld::TreeIter& rParent)
 {
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
     bool bTheTestFlag = true;
 
     for( const auto& rChangeAction : *pActionMap )
     {
-        SvTreeListEntry* pEntry=AppendChangeAction( rChangeAction.second, pParent, false, true );
+        std::unique_ptr<weld::TreeIter> xEntry = AppendChangeAction(rChangeAction.second, false, &rParent, false, true);
 
-        if(pEntry!=nullptr)
+        if (xEntry)
         {
             bTheTestFlag=false;
 
-            ScRedlinData *pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
+            weld::TreeView& rTreeView = pTheView->GetWidget();
+            ScRedlinData *pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(*xEntry).toInt64());
             pEntryData->bIsRejectable=false;
             pEntryData->bIsAcceptable=false;
             pEntryData->bDisabled=true;
 
-            if( rChangeAction.second->IsDialogParent() )
-                Expand( pChanges, rChangeAction.second, pEntry );
+            if (rChangeAction.second->IsDialogParent())
+                Expand(pChanges, rChangeAction.second, *xEntry);
         }
     }
     return bTheTestFlag;
 }
 
 bool ScAcceptChgDlg::InsertDeletedChildren(const ScChangeAction* pScChangeAction,
-                                         ScChangeActionMap* pActionMap,SvTreeListEntry* pParent)
+                                           ScChangeActionMap* pActionMap, const weld::TreeIter& rParent)
 {
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
     bool bTheTestFlag = true;
-    SvTreeListEntry* pEntry=nullptr;
+    std::unique_ptr<weld::TreeIter> xEntry;
 
     for( const auto& rChangeAction : *pActionMap )
     {
 
         if( pScChangeAction != rChangeAction.second )
-            pEntry = AppendChangeAction( rChangeAction.second, pParent, false, true );
+            xEntry = AppendChangeAction(rChangeAction.second, false, &rParent, false, true);
         else
-            pEntry = AppendChangeAction( rChangeAction.second, pParent, true, true );
+            xEntry = AppendChangeAction(rChangeAction.second, false, &rParent, true, true);
 
-        if(pEntry!=nullptr)
+        if (xEntry)
         {
-            ScRedlinData *pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
+            weld::TreeView& rTreeView = pTheView->GetWidget();
+            ScRedlinData *pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(*xEntry).toInt64());
             pEntryData->bIsRejectable=false;
             pEntryData->bIsAcceptable=false;
             pEntryData->bDisabled=true;
 
             bTheTestFlag=false;
 
-            if( rChangeAction.second->IsDialogParent() )
-                Expand( pChanges, rChangeAction.second, pEntry );
+            if (rChangeAction.second->IsDialogParent())
+                Expand(pChanges, rChangeAction.second, *xEntry);
         }
     }
     return bTheTestFlag;
 }
 
-bool ScAcceptChgDlg::Expand(
-    const ScChangeTrack* pChanges, const ScChangeAction* pScChangeAction,
-    SvTreeListEntry* pEntry, bool bFilter)
+bool ScAcceptChgDlg::Expand(const ScChangeTrack* pChanges, const ScChangeAction* pScChangeAction,
+                            const weld::TreeIter& rEntry, bool bFilter)
 {
     bool bTheTestFlag = true;
 
-    if(pChanges!=nullptr &&pEntry!=nullptr &&pScChangeAction!=nullptr)
+    if (pChanges && pScChangeAction)
     {
         ScChangeActionMap aActionMap;
 
-        GetDependents( pScChangeAction, aActionMap, pEntry );
+        GetDependents(pScChangeAction, aActionMap, rEntry);
 
         switch(pScChangeAction->GetType())
         {
             case SC_CAT_CONTENT:
             {
-                InsertContentChildren( &aActionMap, pEntry );
+                InsertContentChildren(&aActionMap, rEntry);
                 bTheTestFlag=!bHasFilterEntry;
                 break;
             }
@@ -1283,14 +1247,14 @@ bool ScAcceptChgDlg::Expand(
             case SC_CAT_DELETE_ROWS:
             case SC_CAT_DELETE_TABS:
             {
-                InsertDeletedChildren( pScChangeAction, &aActionMap, pEntry );
+                InsertDeletedChildren(pScChangeAction, &aActionMap, rEntry);
                 bTheTestFlag=!bHasFilterEntry;
                 break;
             }
             default:
             {
                 if(!bFilter)
-                    bTheTestFlag = InsertChildren( &aActionMap, pEntry );
+                    bTheTestFlag = InsertChildren(&aActionMap, rEntry);
                 break;
             }
         }
@@ -1299,65 +1263,61 @@ bool ScAcceptChgDlg::Expand(
     return bTheTestFlag;
 }
 
-IMPL_LINK( ScAcceptChgDlg, ExpandingHandle, SvTreeListBox*, pTable, bool )
+IMPL_LINK(ScAcceptChgDlg, ExpandingHandle, const weld::TreeIter&, rEntry, bool)
 {
     ScChangeTrack* pChanges=pDoc->GetChangeTrack();
-    SetPointer(PointerStyle::Wait);
-    if(pTable!=nullptr && pChanges!=nullptr)
+    if (pChanges)
     {
+        m_xDialog->set_busy_cursor(true);
         ScChangeActionMap aActionMap;
-        SvTreeListEntry* pEntry=pTheView->GetHdlEntry();
-        if(pEntry!=nullptr)
+        weld::TreeView& rTreeView = pTheView->GetWidget();
+        ScRedlinData *pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(rEntry).toInt64());
+        if (!rTreeView.iter_has_child(rEntry))
         {
-            ScRedlinData *pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
+            bool bTheTestFlag = true;
 
-            if(pEntry->HasChildrenOnDemand())
+            if (pEntryData)
             {
-                bool bTheTestFlag = true;
-                pEntry->EnableChildrenOnDemand(false);
-                SvTreeListEntry* pChildEntry = pTheView->FirstChild(pEntry);
-                if (pChildEntry)
-                    pTheView->RemoveEntry(pChildEntry);
-
-                if(pEntryData!=nullptr)
-                {
-                    ScChangeAction* pScChangeAction=static_cast<ScChangeAction*>(pEntryData->pData);
+                ScChangeAction* pScChangeAction=static_cast<ScChangeAction*>(pEntryData->pData);
 
-                    GetDependents( pScChangeAction, aActionMap, pEntry );
+                GetDependents(pScChangeAction, aActionMap, rEntry);
 
-                    switch(pScChangeAction->GetType())
+                switch (pScChangeAction->GetType())
+                {
+                    case SC_CAT_CONTENT:
                     {
-                        case SC_CAT_CONTENT:
-                        {
-                            bTheTestFlag = InsertContentChildren( &aActionMap, pEntry );
-                            break;
-                        }
-                        case SC_CAT_DELETE_COLS:
-                        case SC_CAT_DELETE_ROWS:
-                        case SC_CAT_DELETE_TABS:
-                        {
-                            bTheTestFlag = InsertDeletedChildren( pScChangeAction, &aActionMap, pEntry );
-                            break;
-                        }
-                        default:
-                        {
-                            bTheTestFlag = InsertChildren( &aActionMap, pEntry );
-                            break;
-                        }
+                        bTheTestFlag = InsertContentChildren( &aActionMap, rEntry );
+                        break;
+                    }
+                    case SC_CAT_DELETE_COLS:
+                    case SC_CAT_DELETE_ROWS:
+                    case SC_CAT_DELETE_TABS:
+                    {
+                        bTheTestFlag = InsertDeletedChildren( pScChangeAction, &aActionMap, rEntry );
+                        break;
+                    }
+                    default:
+                    {
+                        bTheTestFlag = InsertChildren( &aActionMap, rEntry );
+                        break;
                     }
-                    aActionMap.clear();
-
-                }
-                else
-                {
-                    bTheTestFlag=InsertAcceptedORejected(pEntry);
                 }
-                if(bTheTestFlag) pTheView->InsertEntry(aStrNoEntry,nullptr,COL_GRAY,pEntry);
-            }
+                aActionMap.clear();
 
+            }
+            else
+            {
+                bTheTestFlag = InsertAcceptedORejected(rEntry);
+            }
+            if (bTheTestFlag)
+            {
+                std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+                rTreeView.insert(&rEntry, -1, &aStrNoEntry, nullptr, nullptr, nullptr, nullptr, false, xEntry.get());
+                rTreeView.set_font_color(*xEntry, COL_GRAY);
+            }
         }
+        m_xDialog->set_busy_cursor(false);
     }
-    SetPointer(PointerStyle::Arrow);
     return true;
 }
 
@@ -1366,9 +1326,10 @@ void ScAcceptChgDlg::AppendChanges(const ScChangeTrack* pChanges,sal_uLong nStar
 {
     if(pChanges!=nullptr)
     {
-        SvTreeListEntry* pParent=nullptr;
-        SetPointer(PointerStyle::Wait);
-        pTheView->SetUpdateMode(false);
+        std::unique_ptr<weld::TreeIter> xParent;
+        m_xDialog->set_busy_cursor(true);
+        weld::TreeView& rTreeView = pTheView->GetWidget();
+        rTreeView.freeze();
 
         bool bTheFlag = false;
 
@@ -1382,45 +1343,41 @@ void ScAcceptChgDlg::AppendChanges(const ScChangeTrack* pChanges,sal_uLong nStar
             const ScChangeAction* pScChangeAction=pChanges->GetAction(i);
             if(pScChangeAction==nullptr) continue;
 
-            switch(pScChangeAction->GetState())
+            switch (pScChangeAction->GetState())
             {
                 case SC_CAS_VIRGIN:
 
-                    if(pScChangeAction->IsDialogRoot())
+                    if (pScChangeAction->IsDialogRoot())
                     {
-                        if(pScChangeAction->IsDialogParent())
-                            pParent=AppendChangeAction(pScChangeAction);
+                        bool bOnDemandChildren = !bFilterFlag && pScChangeAction->IsDialogParent();
+                        if (pScChangeAction->IsDialogParent())
+                            xParent = AppendChangeAction(pScChangeAction, bOnDemandChildren);
                         else
-                            pParent=AppendFilteredAction(pScChangeAction,SC_CAS_VIRGIN);
+                            xParent = AppendFilteredAction(pScChangeAction, SC_CAS_VIRGIN, bOnDemandChildren);
                     }
                     else
-                        pParent=nullptr;
+                        xParent.reset();
 
                     bTheFlag=true;
                     break;
 
                 case SC_CAS_ACCEPTED:
-                    pParent=nullptr;
+                    xParent.reset();
                     nAcceptCount++;
                     break;
 
                 case SC_CAS_REJECTED:
-                    pParent=nullptr;
+                    xParent.reset();
                     nRejectCount++;
                     break;
             }
 
-            if(pParent!=nullptr && pScChangeAction->IsDialogParent())
+            if (xParent && pScChangeAction->IsDialogParent() && bFilterFlag)
             {
-                if(!bFilterFlag)
-                    pParent->EnableChildrenOnDemand();
-                else
-                {
-                    bool bTestFlag = bHasFilterEntry;
-                    bHasFilterEntry = false;
-                    if(Expand(pChanges,pScChangeAction,pParent,!bTestFlag)&&!bTestFlag)
-                        pTheView->RemoveEntry(pParent);
-                }
+                bool bTestFlag = bHasFilterEntry;
+                bHasFilterEntry = false;
+                if (Expand(pChanges,pScChangeAction,*xParent,!bTestFlag)&&!bTestFlag)
+                    rTreeView.remove(*xParent);
             }
         }
 
@@ -1432,66 +1389,69 @@ void ScAcceptChgDlg::AppendChanges(const ScChangeTrack* pChanges,sal_uLong nStar
         pTPView->EnableReject(bTheFlag);
         pTPView->EnableRejectAll(bTheFlag);
 
-        pTheView->SetUpdateMode(true);
-        SetPointer(PointerStyle::Arrow);
+        rTreeView.thaw();
+        m_xDialog->set_busy_cursor(false);
     }
 }
 
 void ScAcceptChgDlg::RemoveEntries(sal_uLong nStartAction,sal_uLong nEndAction)
 {
-
-    pTheView->SetUpdateMode(false);
-
-    SvTreeListEntry* pEntry=pTheView->GetCurEntry();
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    rTreeView.freeze();
 
     ScRedlinData *pEntryData=nullptr;
+    std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+    if (rTreeView.get_cursor(xEntry.get()))
+        pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(*xEntry).toInt64());
 
-    if(pEntry!=nullptr)
-        pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
+    rTreeView.get_iter_first(*xEntry);
 
     sal_uLong nAction=0;
-    if(pEntryData!=nullptr)
+    if (pEntryData)
         nAction=pEntryData->nActionNo;
 
-    if(nAction>=nStartAction && nAction<=nEndAction)
-        pTheView->SetCurEntry(pTheView->GetModel()->GetEntry(0));
+    if (nAction>=nStartAction && nAction<=nEndAction)
+        rTreeView.set_cursor(*xEntry);
 
+    std::vector<OUString> aIdsToRemove;
 
-    // MUST do it backwards, don't delete parents before children and GPF
-    pEntry=pTheView->Last();
-    while(pEntry!=nullptr)
+    do
     {
-        bool bRemove = false;
-        pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
-        if(pEntryData!=nullptr)
+        OUString sId(rTreeView.get_id(*xEntry));
+        pEntryData = reinterpret_cast<ScRedlinData *>(sId.toInt64());
+        if (pEntryData)
         {
-            nAction=pEntryData->nActionNo;
-
-            if(nStartAction<=nAction && nAction<=nEndAction) bRemove=true;
-
+            nAction = pEntryData->nActionNo;
+            if (nStartAction <= nAction && nAction <= nEndAction)
+                aIdsToRemove.push_back(sId);
         }
-        SvTreeListEntry* pPrevEntry = pTheView->Prev(pEntry);
-
-        if(bRemove)
-            pTheView->RemoveEntry(pEntry);
-
-        pEntry=pPrevEntry;
     }
-    pTheView->SetUpdateMode(true);
+    while (rTreeView.iter_next(*xEntry));
+
+    // MUST do it backwards, don't delete parents before children and GPF
+    for (auto it = aIdsToRemove.rbegin(); it != aIdsToRemove.rend(); ++it)
+        rTreeView.remove_id(*it);
 
+    rTreeView.thaw();
 }
 
 void ScAcceptChgDlg::UpdateEntries(const ScChangeTrack* pChgTrack, sal_uLong nStartAction,sal_uLong nEndAction)
 {
-    pTheView->SetUpdateMode(false);
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    rTreeView.freeze();
+
+    std::unique_ptr<weld::TreeIter> xEntry(rTreeView.make_iterator());
+    std::unique_ptr<weld::TreeIter> xLastEntry(rTreeView.make_iterator());
+    std::unique_ptr<weld::TreeIter> xNextEntry(rTreeView.make_iterator());
+
+    bool bEntry = rTreeView.get_iter_first(*xEntry);
+    bool bLastEntry = false;
 
-    SvTreeListEntry* pEntry=pTheView->First();
-    SvTreeListEntry* pLastEntry=nullptr;
-    while(pEntry!=nullptr)
+    while (bEntry)
     {
         bool bRemove = false;
-        ScRedlinData *pEntryData=static_cast<ScRedlinData *>(pEntry->GetUserData());
-        if(pEntryData!=nullptr)
+        ScRedlinData *pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(*xEntry).toInt64());
+        if (pEntryData)
         {
             ScChangeAction* pScChangeAction=
                     static_cast<ScChangeAction*>(pEntryData->pData);
@@ -1501,37 +1461,42 @@ void ScAcceptChgDlg::UpdateEntries(const ScChangeTrack* pChgTrack, sal_uLong nSt
             if(nStartAction<=nAction && nAction<=nEndAction) bRemove=true;
         }
 
-        SvTreeListEntry* pNextEntry;
-        if(bRemove)
+        bool bNextEntry;
+        if (bRemove)
         {
-            pTheView->RemoveEntry(pEntry);
+            rTreeView.remove(*xEntry);
 
-            if(pLastEntry==nullptr) pLastEntry=pTheView->First();
-            if(pLastEntry!=nullptr)
+            if (!bLastEntry)
+                bLastEntry = rTreeView.get_iter_first(*xLastEntry);
+            if (bLastEntry)
             {
-                pNextEntry=pTheView->Next(pLastEntry);
-
-                if(pNextEntry==nullptr)
+                rTreeView.copy_iterator(*xLastEntry, *xNextEntry);
+                bNextEntry = rTreeView.iter_next(*xNextEntry);
+                if (!bNextEntry)
                 {
-                    pNextEntry=pLastEntry;
-                    pLastEntry=nullptr;
+                    rTreeView.copy_iterator(*xLastEntry, *xNextEntry);
+                    bLastEntry = false;
                 }
             }
             else
-                pNextEntry=nullptr;
-
+                bNextEntry = false;
         }
         else
         {
-            pLastEntry = pEntry;
-            pNextEntry = pTheView->Next(pEntry);
+            rTreeView.copy_iterator(*xEntry, *xLastEntry);
+            bLastEntry = true;
+
+            rTreeView.copy_iterator(*xEntry, *xNextEntry);
+            bNextEntry = rTreeView.iter_next(*xNextEntry);
         }
-        pEntry=pNextEntry;
+
+        rTreeView.copy_iterator(*xNextEntry, *xEntry);
+        bEntry = bNextEntry;
     }
 
     AppendChanges(pChgTrack,nStartAction,nEndAction);
 
-    pTheView->SetUpdateMode(true);
+    rTreeView.thaw();
 }
 
 IMPL_LINK( ScAcceptChgDlg, ChgTrackModHdl, ScChangeTrack&, rChgTrack, void)
@@ -1569,10 +1534,11 @@ IMPL_LINK( ScAcceptChgDlg, ChgTrackModHdl, ScChangeTrack&, rChgTrack, void)
 
     aMsgQueue.clear();
 }
+
 IMPL_LINK_NOARG(ScAcceptChgDlg, ReOpenTimerHdl, Timer *, void)
 {
     ScSimpleRefDlgWrapper::SetAutoReOpen(true);
-    m_pAcceptChgCtr->ShowFilterPage();
+    m_xAcceptChgCtr->ShowFilterPage();
     RefHandle(nullptr);
 }
 
@@ -1582,14 +1548,13 @@ IMPL_LINK_NOARG(ScAcceptChgDlg, UpdateSelectionHdl, Timer *, void)
 
     bool bAcceptFlag = true;
     bool bRejectFlag = true;
-    bool bContMark = false;
 
     pTabView->DoneBlockMode();  // clears old marking
-    SvTreeListEntry* pEntry = pTheView->FirstSelected();
-    while( pEntry )
-    {
-        ScRedlinData* pEntryData = static_cast<ScRedlinData*>(pEntry->GetUserData());
-        if( pEntryData )
+    weld::TreeView& rTreeView = pTheView->GetWidget();
+    std::vector<const ScChangeAction*> aActions;
+    rTreeView.selected_foreach([&rTreeView, &bAcceptFlag, &bRejectFlag, &aActions](weld::TreeIter& rEntry){
+        ScRedlinData* pEntryData = reinterpret_cast<ScRedlinData*>(rTreeView.get_id(rEntry).toInt64());
+        if (pEntryData)
         {
             bRejectFlag &= pEntryData->bIsRejectable;
             bAcceptFlag &= pEntryData->bIsAcceptable;
@@ -1598,13 +1563,7 @@ IMPL_LINK_NOARG(ScAcceptChgDlg, UpdateSelectionHdl, Timer *, void)
             if( pScChangeAction && (pScChangeAction->GetType() != SC_CAT_DELETE_TABS) &&
                     (!pEntryData->bDisabled || pScChangeAction->IsVisible()) )
             {
-                const ScBigRange& rBigRange = pScChangeAction->GetBigRange();
-                if( rBigRange.IsValid( pDoc ) && IsActive() )
-                {
-                    bool bSetCursor = !pTheView->NextSelected( pEntry );
-                    pTabView->MarkRange( rBigRange.MakeRange(), bSetCursor, bContMark );
-                    bContMark = true;
-                }
+                aActions.push_back(pScChangeAction);
             }
         }
         else
@@ -1612,8 +1571,19 @@ IMPL_LINK_NOARG(ScAcceptChgDlg, UpdateSelectionHdl, Timer *, void)
             bAcceptFlag = false;
             bRejectFlag = false;
         }
+        return false;
+    });
 
-        pEntry = pTheView->NextSelected( pEntry );
+    bool bContMark = false;
+    for (size_t i = 0, nCount = aActions.size(); i < nCount; ++i)
+    {
+        const ScBigRange& rBigRange = aActions[i]->GetBigRange();
+        if (rBigRange.IsValid(pDoc) && m_xDialog->has_toplevel_focus())
+        {
+            bool bSetCursor = i == nCount - 1;
+            pTabView->MarkRange(rBigRange.MakeRange(), bSetCursor, bContMark);
+            bContMark = true;
+        }
     }
 
     ScChangeTrack* pChanges = pDoc->GetChangeTrack();
@@ -1622,83 +1592,58 @@ IMPL_LINK_NOARG(ScAcceptChgDlg, UpdateSelectionHdl, Timer *, void)
     pTPView->EnableReject( bRejectFlag && bEnable );
 }
 
-IMPL_LINK_NOARG(ScAcceptChgDlg, CommandHdl, SvSimpleTable*, void)
+IMPL_LINK(ScAcceptChgDlg, CommandHdl, const CommandEvent&, rCEvt, bool)
 {
+    if (rCEvt.GetCommand() != CommandEventId::ContextMenu)
+        return false;
 
-    const CommandEvent aCEvt(pTheView->GetCommandEvent());
-
-    if(aCEvt.GetCommand()==CommandEventId::ContextMenu)
-    {

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list