diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-12-10 14:13:24 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-12-11 07:33:08 +0100 |
commit | 99111155770183ce3239dc2a074a8aa344233cab (patch) | |
tree | 96f0b636fba75c8d5ef4fe26e5d92653e790d1f2 /svtools | |
parent | 1cd32bcf1b92bd53320717626601135623dadd55 (diff) |
loplugin:useuniqueptr in SvxIconChoiceCtrl_Impl
Change-Id: I5bd4fb6b4942cea02168a8a92682fa215deae8cf
Reviewed-on: https://gerrit.libreoffice.org/64878
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/contnr/imivctl.hxx | 52 | ||||
-rw-r--r-- | svtools/source/contnr/imivctl1.cxx | 114 | ||||
-rw-r--r-- | svtools/source/contnr/imivctl2.cxx | 20 | ||||
-rw-r--r-- | svtools/source/contnr/ivctrl.cxx | 2 |
4 files changed, 61 insertions, 127 deletions
diff --git a/svtools/source/contnr/imivctl.hxx b/svtools/source/contnr/imivctl.hxx index b02ab4539b07..b0a8530787bd 100644 --- a/svtools/source/contnr/imivctl.hxx +++ b/svtools/source/contnr/imivctl.hxx @@ -97,45 +97,6 @@ struct LocalFocus }; -// Entry-List - -class EntryList_Impl -{ -private: - std::vector< SvxIconChoiceCtrlEntry* > maIconChoiceCtrlEntryList; - SvxIconChoiceCtrl_Impl* _pOwner; - -public: - explicit EntryList_Impl( SvxIconChoiceCtrl_Impl* ); - ~EntryList_Impl(); - - void clear(); - - size_t size() - { - return maIconChoiceCtrlEntryList.size(); - } - size_t size() const - { - return maIconChoiceCtrlEntryList.size(); - } - - SvxIconChoiceCtrlEntry* operator[]( size_t nPos ) - { - return ( nPos < maIconChoiceCtrlEntryList.size() ) - ? maIconChoiceCtrlEntryList[ nPos ] - : nullptr; - } - SvxIconChoiceCtrlEntry* operator[]( size_t nPos ) const - { - return ( nPos < maIconChoiceCtrlEntryList.size() ) - ? maIconChoiceCtrlEntryList[ nPos ] - : nullptr; - } - void insert( size_t nPos, SvxIconChoiceCtrlEntry* pEntry ); -}; - - // Implementation-class of IconChoiceCtrl @@ -145,11 +106,10 @@ typedef std::vector<SvxIconChoiceCtrlEntry*> SvxIconChoiceCtrlEntryPtrVec; class SvxIconChoiceCtrl_Impl { friend class IcnCursor_Impl; - friend class EntryList_Impl; friend class IcnGridMap_Impl; bool bChooseWithCursor; - EntryList_Impl aEntries; + std::vector< std::unique_ptr<SvxIconChoiceCtrlEntry> > maEntries; VclPtr<ScrollBar> aVerSBar; VclPtr<ScrollBar> aHorSBar; VclPtr<ScrollBarBox> aScrBarBox; @@ -177,7 +137,7 @@ class SvxIconChoiceCtrl_Impl ImplSVEvent * nUserEventAdjustScrBars; SvxIconChoiceCtrlEntry* pCurHighlightFrame; bool bHighlightFramePressed; - SvxIconChoiceCtrlEntry* pHead; // top left entry + SvxIconChoiceCtrlEntry* pHead = nullptr; // top left entry SvxIconChoiceCtrlEntry* pCursor; SvxIconChoiceCtrlEntry* pHdlEntry; VclPtr<VirtualDevice> pDDDev; @@ -302,7 +262,7 @@ public: void Clear( bool bInCtor ); void SetStyle( WinBits nWinStyle ); WinBits GetStyle() const { return nWinBits; } - void InsertEntry( SvxIconChoiceCtrlEntry*, size_t nPos ); + void InsertEntry( std::unique_ptr<SvxIconChoiceCtrlEntry>, size_t nPos ); void CreateAutoMnemonics( MnemonicGenerator* _pGenerator ); void FontModified(); void SelectAll(); @@ -421,14 +381,14 @@ public: SvxIconChoiceCtrlEntry* pEntry ); #endif - size_t GetEntryCount() const { return aEntries.size(); } + size_t GetEntryCount() const { return maEntries.size(); } SvxIconChoiceCtrlEntry* GetEntry( size_t nPos ) { - return aEntries[ nPos ]; + return maEntries[ nPos ].get(); } SvxIconChoiceCtrlEntry* GetEntry( size_t nPos ) const { - return aEntries[ nPos ]; + return maEntries[ nPos ].get(); } SvxIconChoiceCtrlEntry* GetFirstSelectedEntry() const; void SetSelectionMode( SelectionMode eMode ) { eSelectionMode=eMode; } diff --git a/svtools/source/contnr/imivctl1.cxx b/svtools/source/contnr/imivctl1.cxx index ca8f3a124611..8c867d5d2904 100644 --- a/svtools/source/contnr/imivctl1.cxx +++ b/svtools/source/contnr/imivctl1.cxx @@ -56,7 +56,6 @@ SvxIconChoiceCtrl_Impl::SvxIconChoiceCtrl_Impl( SvtIconChoiceCtrl* pCurView, WinBits nWinStyle ) : - aEntries( this ), aVerSBar( VclPtr<ScrollBar>::Create(pCurView, WB_DRAG | WB_VSCROLL) ), aHorSBar( VclPtr<ScrollBar>::Create(pCurView, WB_DRAG | WB_HSCROLL) ), aScrBarBox( VclPtr<ScrollBarBox>::Create(pCurView) ), @@ -167,13 +166,7 @@ void SvxIconChoiceCtrl_Impl::Clear( bool bInCtor ) pView->Invalidate(InvalidateFlags::NoChildren); } AdjustScrollBars(); - size_t nCount = aEntries.size(); - for( size_t nCur = 0; nCur < nCount; nCur++ ) - { - SvxIconChoiceCtrlEntry* pCur = aEntries[ nCur ]; - delete pCur; - } - aEntries.clear(); + maEntries.clear(); DocRectChanged(); VisRectChanged(); } @@ -220,11 +213,21 @@ void SvxIconChoiceCtrl_Impl::FontModified() ShowCursor( true ); } -void SvxIconChoiceCtrl_Impl::InsertEntry( SvxIconChoiceCtrlEntry* pEntry, size_t nPos) +void SvxIconChoiceCtrl_Impl::InsertEntry( std::unique_ptr<SvxIconChoiceCtrlEntry> pEntry1, size_t nPos) { - aEntries.insert( nPos, pEntry ); - if( (nFlags & IconChoiceFlags::EntryListPosValid) && nPos >= aEntries.size() - 1 ) - pEntry->nPos = aEntries.size() - 1; + auto pEntry = pEntry1.get(); + + if ( nPos < maEntries.size() ) { + maEntries.insert( maEntries.begin() + nPos, std::move(pEntry1) ); + } else { + maEntries.push_back( std::move(pEntry1) ); + } + + if( pHead ) + pEntry->SetBacklink( pHead->pblink ); + + if( (nFlags & IconChoiceFlags::EntryListPosValid) && nPos >= maEntries.size() - 1 ) + pEntry->nPos = maEntries.size() - 1; else nFlags &= ~IconChoiceFlags::EntryListPosValid; @@ -292,11 +295,10 @@ void SvxIconChoiceCtrl_Impl::SetListPositions() if( nFlags & IconChoiceFlags::EntryListPosValid ) return; - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pEntry = aEntries[ nCur ]; - pEntry->nPos = nCur; + maEntries[ nCur ]->nPos = nCur; } nFlags |= IconChoiceFlags::EntryListPosValid; } @@ -373,10 +375,10 @@ void SvxIconChoiceCtrl_Impl::ResetVirtSize() { aVirtOutputSize.setWidth( 0 ); aVirtOutputSize.setHeight( 0 ); - const size_t nCount = aEntries.size(); + const size_t nCount = maEntries.size(); for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pCur = aEntries[ nCur ]; + SvxIconChoiceCtrlEntry* pCur = maEntries[ nCur ].get(); pCur->ClearFlags( SvxIconViewFlags::POS_MOVED ); if( pCur->IsPosLocked() ) { @@ -445,24 +447,24 @@ void SvxIconChoiceCtrl_Impl::AdjustVirtSize( const tools::Rectangle& rRect ) void SvxIconChoiceCtrl_Impl::InitPredecessors() { DBG_ASSERT(!pHead,"SvxIconChoiceCtrl_Impl::InitPredecessors() >> Already initialized"); - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); if( nCount ) { - SvxIconChoiceCtrlEntry* pPrev = aEntries[ 0 ]; + SvxIconChoiceCtrlEntry* pPrev = maEntries[ 0 ].get(); for( size_t nCur = 1; nCur <= nCount; nCur++ ) { pPrev->ClearFlags( SvxIconViewFlags::POS_LOCKED | SvxIconViewFlags::POS_MOVED ); SvxIconChoiceCtrlEntry* pNext; if( nCur == nCount ) - pNext = aEntries[ 0 ]; + pNext = maEntries[ 0 ].get(); else - pNext = aEntries[ nCur ]; + pNext = maEntries[ nCur ].get(); pPrev->pflink = pNext; pNext->pblink = pPrev; pPrev = pNext; } - pHead = aEntries[ 0 ]; + pHead = maEntries[ 0 ].get(); } else pHead = nullptr; @@ -472,10 +474,10 @@ void SvxIconChoiceCtrl_Impl::ClearPredecessors() { if( pHead ) { - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pCur = aEntries[ nCur ]; + SvxIconChoiceCtrlEntry* pCur = maEntries[ nCur ].get(); pCur->pflink = nullptr; pCur->pblink = nullptr; } @@ -572,7 +574,7 @@ void SvxIconChoiceCtrl_Impl::Paint(vcl::RenderContext& rRenderContext, const too rRenderContext.SetLineColor(aOldColor); #endif - if (!aEntries.size()) + if (!maEntries.size()) return; if (!pCursor) { @@ -589,7 +591,7 @@ void SvxIconChoiceCtrl_Impl::Paint(vcl::RenderContext& rRenderContext, const too } if (!bfound) - pCursor = aEntries[ 0 ]; + pCursor = maEntries[ 0 ].get(); } size_t nCount = maZOrderList.size(); @@ -1089,7 +1091,7 @@ bool SvxIconChoiceCtrl_Impl::KeyInput( const KeyEvent& rKEvt ) case KEY_END: if( pCursor ) { - pNewCursor = aEntries[ aEntries.size() - 1 ]; + pNewCursor = maEntries.back().get(); SetCursor_Impl( pOldCursor, pNewCursor, bMod1, bShift ); } break; @@ -1097,7 +1099,7 @@ bool SvxIconChoiceCtrl_Impl::KeyInput( const KeyEvent& rKEvt ) case KEY_HOME: if( pCursor ) { - pNewCursor = aEntries[ 0 ]; + pNewCursor = maEntries[ 0 ].get(); SetCursor_Impl( pOldCursor, pNewCursor, bMod1, bShift ); } break; @@ -1789,13 +1791,13 @@ void SvxIconChoiceCtrl_Impl::RecalcAllBoundingRectsSmart() maZOrderList.clear(); size_t nCur; SvxIconChoiceCtrlEntry* pEntry; - const size_t nCount = aEntries.size(); + const size_t nCount = maEntries.size(); if( !IsAutoArrange() || !pHead ) { for( nCur = 0; nCur < nCount; nCur++ ) { - pEntry = aEntries[ nCur ]; + pEntry = maEntries[ nCur ].get(); if( IsBoundingRectValid( pEntry->aRect )) { Size aBoundSize( pEntry->aRect.GetSize() ); @@ -2141,10 +2143,10 @@ void SvxIconChoiceCtrl_Impl::DeselectAllBut( SvxIconChoiceCtrlEntry const * pThi // TODO: work through z-order list, if necessary! - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pEntry = aEntries[ nCur ]; + SvxIconChoiceCtrlEntry* pEntry = maEntries[ nCur ].get(); if( pEntry != pThisEntryNot && pEntry->IsSelected() ) SelectEntry( pEntry, false, true ); } @@ -2650,12 +2652,12 @@ SvxIconChoiceCtrlEntry* SvxIconChoiceCtrl_Impl::GetFirstSelectedEntry() const return pCurHighlightFrame; } - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); if( !pHead ) { for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pEntry = aEntries[ nCur ]; + SvxIconChoiceCtrlEntry* pEntry = maEntries[ nCur ].get(); if( pEntry->IsSelected() ) { return pEntry; @@ -2684,10 +2686,10 @@ SvxIconChoiceCtrlEntry* SvxIconChoiceCtrl_Impl::GetFirstSelectedEntry() const void SvxIconChoiceCtrl_Impl::SelectAll() { - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pEntry = aEntries[ nCur ]; + SvxIconChoiceCtrlEntry* pEntry = maEntries[ nCur ].get(); SelectEntry( pEntry, true/*bSelect*/, true ); } nFlags &= ~IconChoiceFlags::AddMode; @@ -2740,34 +2742,6 @@ void SvxIconChoiceCtrl_Impl::InitSettings() AdjustScrollBars(); } -EntryList_Impl::EntryList_Impl( SvxIconChoiceCtrl_Impl* pOwner ) : - _pOwner( pOwner ) -{ - _pOwner->pHead = nullptr; -} - -EntryList_Impl::~EntryList_Impl() -{ - _pOwner->pHead = nullptr; -} - -void EntryList_Impl::clear() -{ - _pOwner->pHead = nullptr; - maIconChoiceCtrlEntryList.clear(); -} - -void EntryList_Impl::insert( size_t nPos, SvxIconChoiceCtrlEntry* pEntry ) -{ - if ( nPos < maIconChoiceCtrlEntryList.size() ) { - maIconChoiceCtrlEntryList.insert( maIconChoiceCtrlEntryList.begin() + nPos, pEntry ); - } else { - maIconChoiceCtrlEntryList.push_back( pEntry ); - } - if( _pOwner->pHead ) - pEntry->SetBacklink( _pOwner->pHead->pblink ); -} - void SvxIconChoiceCtrl_Impl::SetPositionMode( SvxIconChoiceCtrlPositionMode eMode ) { if( eMode == ePositionMode ) @@ -2775,14 +2749,14 @@ void SvxIconChoiceCtrl_Impl::SetPositionMode( SvxIconChoiceCtrlPositionMode eMod SvxIconChoiceCtrlPositionMode eOldMode = ePositionMode; ePositionMode = eMode; - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); if( eOldMode == SvxIconChoiceCtrlPositionMode::AutoArrange ) { // when positioning moved entries "hard", there are problems with // unwanted overlaps, as these entries aren't taken into account in // Arrange. - if( aEntries.size() ) + if( maEntries.size() ) aAutoArrangeIdle.Start(); return; } @@ -2791,12 +2765,12 @@ void SvxIconChoiceCtrl_Impl::SetPositionMode( SvxIconChoiceCtrlPositionMode eMod { for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pEntry = aEntries[ nCur ]; + SvxIconChoiceCtrlEntry* pEntry = maEntries[ nCur ].get(); if( pEntry->GetFlags() & SvxIconViewFlags(SvxIconViewFlags::POS_LOCKED | SvxIconViewFlags::POS_MOVED)) SetEntryPos(pEntry, GetEntryBoundRect( pEntry ).TopLeft()); } - if( aEntries.size() ) + if( maEntries.size() ) aAutoArrangeIdle.Start(); } } @@ -2857,13 +2831,13 @@ SvxIconChoiceCtrlEntry* SvxIconChoiceCtrl_Impl::FindEntryPredecessor( SvxIconCho tools::Rectangle aCenterRect( CalcBmpRect( pEntry, &aPos )); Point aNewPos( aCenterRect.Center() ); sal_uLong nGrid = GetPredecessorGrid( aNewPos ); - size_t nCount = aEntries.size(); + size_t nCount = maEntries.size(); if( nGrid == ULONG_MAX ) return nullptr; if( nGrid >= nCount ) nGrid = nCount - 1; if( !pHead ) - return aEntries[ nGrid ]; + return maEntries[ nGrid ].get(); SvxIconChoiceCtrlEntry* pCur = pHead; // Grid 0 // TODO: go through list from the end if nGrid > nCount/2 diff --git a/svtools/source/contnr/imivctl2.cxx b/svtools/source/contnr/imivctl2.cxx index 1a452e9e5cee..57135065a120 100644 --- a/svtools/source/contnr/imivctl2.cxx +++ b/svtools/source/contnr/imivctl2.cxx @@ -70,10 +70,10 @@ void IcnCursor_Impl::ImplCreate() xColumns.reset(new IconChoiceMap); xRows.reset(new IconChoiceMap); - size_t nCount = pView->aEntries.size(); + size_t nCount = pView->maEntries.size(); for( size_t nCur = 0; nCur < nCount; nCur++ ) { - SvxIconChoiceCtrlEntry* pEntry = pView->aEntries[ nCur ]; + SvxIconChoiceCtrlEntry* pEntry = pView->maEntries[ nCur ].get(); // const Rectangle& rRect = pView->GetEntryBoundRect( pEntry ); tools::Rectangle rRect( pView->CalcBmpRect( pEntry ) ); short nY = static_cast<short>( ((rRect.Top()+rRect.Bottom())/2) / nDeltaHeight ); @@ -341,8 +341,8 @@ SvxIconChoiceCtrlEntry* IcnCursor_Impl::GoPageUpDown( SvxIconChoiceCtrlEntry* pS if( bDown ) { nNewPos += nEntriesInView; - if( nNewPos >= static_cast<long>(pView->aEntries.size()) ) - nNewPos = pView->aEntries.size() - 1; + if( nNewPos >= static_cast<long>(pView->maEntries.size()) ) + nNewPos = pView->maEntries.size() - 1; } else { @@ -351,7 +351,7 @@ SvxIconChoiceCtrlEntry* IcnCursor_Impl::GoPageUpDown( SvxIconChoiceCtrlEntry* pS nNewPos = 0; } if( nPos != nNewPos ) - return pView->aEntries[ static_cast<size_t>(nNewPos) ]; + return pView->maEntries[ static_cast<size_t>(nNewPos) ].get(); return nullptr; } long nOpt = pView->GetEntryBoundRect( pStart ).Top(); @@ -394,10 +394,10 @@ SvxIconChoiceCtrlEntry* IcnCursor_Impl::GoUpDown( SvxIconChoiceCtrlEntry* pCtrlE if( pView->IsAutoArrange() && !(pView->nWinBits & WB_ALIGN_TOP) ) { sal_uLong nPos = pView->GetEntryListPos( pCtrlEntry ); - if( bDown && nPos < (pView->aEntries.size() - 1) ) - return pView->aEntries[ nPos + 1 ]; + if( bDown && nPos < (pView->maEntries.size() - 1) ) + return pView->maEntries[ nPos + 1 ].get(); else if( !bDown && nPos > 0 ) - return pView->aEntries[ nPos - 1 ]; + return pView->maEntries[ nPos - 1 ].get(); return nullptr; } @@ -524,9 +524,9 @@ void IcnGridMap_Impl::Create_Impl() _pGridMap.reset( new bool[nCellCount] ); memset(_pGridMap.get(), 0, nCellCount * sizeof(bool)); - const size_t nCount = _pView->aEntries.size(); + const size_t nCount = _pView->maEntries.size(); for( size_t nCur=0; nCur < nCount; nCur++ ) - OccupyGrids( _pView->aEntries[ nCur ] ); + OccupyGrids( _pView->maEntries[ nCur ].get() ); } void IcnGridMap_Impl::GetMinMapSize( sal_uInt16& rDX, sal_uInt16& rDY ) const diff --git a/svtools/source/contnr/ivctrl.cxx b/svtools/source/contnr/ivctrl.cxx index 64f03e372d4e..82d027d2fdf7 100644 --- a/svtools/source/contnr/ivctrl.cxx +++ b/svtools/source/contnr/ivctrl.cxx @@ -98,7 +98,7 @@ SvxIconChoiceCtrlEntry* SvtIconChoiceCtrl::InsertEntry( const OUString& rText, c { SvxIconChoiceCtrlEntry* pEntry = new SvxIconChoiceCtrlEntry( rText, rImage); - _pImpl->InsertEntry(pEntry, _pImpl->GetEntryCount()); + _pImpl->InsertEntry(std::unique_ptr<SvxIconChoiceCtrlEntry>(pEntry), _pImpl->GetEntryCount()); return pEntry; } |