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

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Dec 7 09:43:19 UTC 2018


 include/vcl/treelist.hxx            |   19 +++--------
 include/vcl/treelistbox.hxx         |    8 ----
 vcl/source/treelist/treelist.cxx    |   59 ++++++------------------------------
 vcl/source/treelist/treelistbox.cxx |   35 +--------------------
 4 files changed, 19 insertions(+), 102 deletions(-)

New commits:
commit 74816dd665fb2980823e01f81446147fe7fe6688
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Thu Dec 6 16:36:25 2018 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Fri Dec 7 10:42:55 2018 +0100

    SvTreeList only ever belongs to one and only one SvListView
    
    so simplify that
    
    Change-Id: I6db807c5aa8ed1e6487bdb4f5ac5c96cf8abbcf6
    Reviewed-on: https://gerrit.libreoffice.org/64752
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/include/vcl/treelist.hxx b/include/vcl/treelist.hxx
index 48fb5cb26c82..e4e2f21c0b3e 100644
--- a/include/vcl/treelist.hxx
+++ b/include/vcl/treelist.hxx
@@ -65,19 +65,15 @@ struct SvSortData
 
 class VCL_DLLPUBLIC SvTreeList final
 {
-    typedef std::vector<SvListView*> ListViewsType;
-
     friend class        SvListView;
 
-    ListViewsType       aViewList;
+    SvListView* const   mpOwnerListView;
     sal_uLong           nEntryCount;
 
     Link<SvTreeListEntry*, SvTreeListEntry*>  aCloneLink;
     Link<const SvSortData&, sal_Int32>        aCompareLink;
     SvSortMode          eSortMode;
 
-    sal_uInt16          nRefCount;
-
     bool                bAbsPositionsValid;
 
     bool mbEnableInvalidate;
@@ -134,12 +130,10 @@ class VCL_DLLPUBLIC SvTreeList final
 
 public:
 
-                        SvTreeList();
+                        SvTreeList() = delete;
+                        SvTreeList(SvListView*);
                         ~SvTreeList();
 
-    void                InsertView( SvListView* );
-    void                RemoveView( SvListView const * );
-
     void                Broadcast(
                             SvListAction nActionId,
                             SvTreeListEntry* pEntry1=nullptr,
@@ -213,9 +207,6 @@ public:
 
     SvTreeListEntry*    CloneEntry( SvTreeListEntry* pSource ) const; // Calls the Clone Link
 
-    sal_uInt16          GetRefCount() const { return nRefCount; }
-    void                SetRefCount( sal_uInt16 nRef ) { nRefCount = nRef; }
-
     void                SetSortMode( SvSortMode eMode ) { eSortMode = eMode; }
     SvSortMode          GetSortMode() const { return eSortMode; }
     sal_Int32           Compare(const SvTreeListEntry* pLeft, const SvTreeListEntry* pRight) const;
@@ -232,7 +223,7 @@ class VCL_DLLPUBLIC SvListView
     std::unique_ptr<Impl> m_pImpl;
 
 protected:
-    SvTreeList* pModel;
+    std::unique_ptr<SvTreeList> pModel;
 
     void                ExpandListEntry( SvTreeListEntry* pParent );
     void                CollapseListEntry( SvTreeListEntry* pParent );
@@ -240,9 +231,9 @@ protected:
 
 public:
                         SvListView();   // Sets the Model to 0
+    void                dispose();
     virtual             ~SvListView();
     void                Clear();
-    virtual void        SetModel( SvTreeList* );
     virtual void        ModelNotification(
                             SvListAction nActionId,
                             SvTreeListEntry* pEntry1,
diff --git a/include/vcl/treelistbox.hxx b/include/vcl/treelistbox.hxx
index 554bd734b421..43cee9dd8442 100644
--- a/include/vcl/treelistbox.hxx
+++ b/include/vcl/treelistbox.hxx
@@ -257,8 +257,6 @@ protected:
     sal_uInt16              nCurEntrySelPos;
 
 private:
-    void SetBaseModel(SvTreeList* pNewModel);
-
     DECL_DLLPRIVATE_LINK( CheckButtonClick, SvLBoxButtonData *, void );
     DECL_DLLPRIVATE_LINK( TextEditEndedHdl_Impl, SvInplaceEdit2&, void );
     // Handler that is called by TreeList to clone an Entry
@@ -335,13 +333,9 @@ public:
 
     SvTreeList* GetModel() const
     {
-        return pModel;
+        return pModel.get();
     }
 
-    using SvListView::SetModel;
-
-    void SetModel(SvTreeList* pNewModel) override;
-
     sal_uLong GetEntryCount() const
     {
         return pModel ? pModel->GetEntryCount() : 0;
diff --git a/vcl/source/treelist/treelist.cxx b/vcl/source/treelist/treelist.cxx
index cafccba11c13..5637b8ba2529 100644
--- a/vcl/source/treelist/treelist.cxx
+++ b/vcl/source/treelist/treelist.cxx
@@ -58,19 +58,18 @@ struct SvListView::Impl
 };
 
 
-SvTreeList::SvTreeList() :
+SvTreeList::SvTreeList(SvListView* listView) :
+    mpOwnerListView(listView),
     mbEnableInvalidate(true)
 {
     nEntryCount = 0;
     bAbsPositionsValid = false;
-    nRefCount = 1;
     pRootItem.reset(new SvTreeListEntry);
     eSortMode = SortNone;
 }
 
 SvTreeList::~SvTreeList()
 {
-    Clear();
 }
 
 void SvTreeList::Broadcast(
@@ -78,34 +77,11 @@ void SvTreeList::Broadcast(
     SvTreeListEntry* pEntry1,
     SvTreeListEntry* pEntry2,
     sal_uLong nPos
-) {
-    for (auto const& view : aViewList)
-    {
-        if(view)
-            view->ModelNotification(nActionId, pEntry1, pEntry2, nPos);
-    }
-}
-
-void SvTreeList::InsertView( SvListView* pView )
-{
-    if (std::find(aViewList.begin(), aViewList.end(), pView) != aViewList.end())
-        return;
-
-    aViewList.push_back( pView );
-    nRefCount++;
-}
-
-void SvTreeList::RemoveView( SvListView const * pView )
+)
 {
-    auto viewFound = std::find(aViewList.begin(), aViewList.end(), pView);
-    if (viewFound != aViewList.end())
-    {
-        aViewList.erase( viewFound );
-        --nRefCount;
-    }
+    mpOwnerListView->ModelNotification(nActionId, pEntry1, pEntry2, nPos);
 }
 
-
 // an entry is visible if all parents are expanded
 bool SvTreeList::IsEntryVisible( const SvListView* pView, SvTreeListEntry* pEntry ) const
 {
@@ -1098,8 +1074,14 @@ std::pair<SvTreeListEntries::iterator, SvTreeListEntries::iterator>
 
 SvListView::SvListView()
     : m_pImpl(new Impl(*this))
-    , pModel(nullptr)
 {
+    pModel.reset(new SvTreeList(this));
+    m_pImpl->InitTable();
+}
+
+void SvListView::dispose()
+{
+    pModel.reset();
 }
 
 SvListView::~SvListView()
@@ -1169,25 +1151,6 @@ void SvListView::Clear()
     }
 }
 
-void SvListView::SetModel( SvTreeList* pNewModel )
-{
-    bool bBroadcastCleared = false;
-    if ( pModel )
-    {
-        pModel->RemoveView( this );
-        bBroadcastCleared = true;
-        ModelNotification( SvListAction::CLEARING,nullptr,nullptr,0 );
-        if ( pModel->GetRefCount() == 0 )
-            delete pModel;
-    }
-    pModel = pNewModel;
-    m_pImpl->InitTable();
-    pNewModel->InsertView( this );
-    if( bBroadcastCleared )
-        ModelNotification( SvListAction::CLEARED,nullptr,nullptr,0 );
-}
-
-
 void SvListView::ModelHasCleared()
 {
 }
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index e4f41a51957a..cc79854dfb41 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -347,17 +347,14 @@ SvTreeListBox::SvTreeListBox(vcl::Window* pParent, WinBits nWinStyle) :
     nImpFlags = SvTreeListBoxFlags::NONE;
     pTargetEntry = nullptr;
     nDragDropMode = DragDropMode::NONE;
-    SvTreeList* pTempModel = new SvTreeList;
-    pTempModel->SetRefCount( 0 );
-    SetBaseModel(pTempModel);
     pModel->SetCloneLink( LINK(this, SvTreeListBox, CloneHdl_Impl ));
-    pModel->InsertView( this );
     pHdlEntry = nullptr;
     eSelMode = SelectionMode::Single;
     nDragDropMode = DragDropMode::NONE;
     SetType(WindowType::TREELISTBOX);
 
     InitTreeView();
+    pImpl->SetModel( pModel.get() );
 
     SetSublistOpenWithLeftRight();
 }
@@ -1353,16 +1350,7 @@ void SvTreeListBox::dispose()
 
         pEdCtrl.reset();
 
-        if( pModel )
-        {
-            pModel->RemoveView( this );
-            if ( pModel->GetRefCount() == 0 )
-            {
-                pModel->Clear();
-                delete pModel;
-                pModel = nullptr;
-            }
-        }
+        SvListView::dispose();
 
         SvTreeListBox::RemoveBoxFromDDList_Impl( *this );
 
@@ -1383,25 +1371,6 @@ void SvTreeListBox::SetNoAutoCurEntry( bool b )
     pImpl->SetNoAutoCurEntry( b );
 }
 
-void SvTreeListBox::SetModel( SvTreeList* pNewModel )
-{
-    pImpl->SetModel( pNewModel );
-    SetBaseModel(pNewModel);
-}
-
-void SvTreeListBox::SetBaseModel( SvTreeList* pNewModel )
-{
-    // does the CleanUp
-    SvListView::SetModel( pNewModel );
-    pModel->SetCloneLink( LINK(this, SvTreeListBox, CloneHdl_Impl ));
-    SvTreeListEntry* pEntry = First();
-    while( pEntry )
-    {
-        ModelHasInserted( pEntry );
-        pEntry = Next( pEntry );
-    }
-}
-
 void SvTreeListBox::SetSublistOpenWithReturn()
 {
     pImpl->bSubLstOpRet = true;


More information about the Libreoffice-commits mailing list