diff options
author | Takeshi Abe <tabe@fixedpoint.jp> | 2018-01-05 19:46:22 +0900 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-01-06 07:44:46 +0100 |
commit | d25465aed6cc15cf51529d92bdf3475d2b6d551f (patch) | |
tree | 82c47fa3ecf0a6024e9df15e1ebe6a522149d56e /svtools | |
parent | 0c1ca08318bd370280e124ea05d9bf0d2535d3e1 (diff) |
svtools: Simplify HeaderBar with std::unique_ptr
Change-Id: I5376616ed1b1a1087dd8bac6830d31212252e4bd
Reviewed-on: https://gerrit.libreoffice.org/47459
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/control/headbar.cxx | 121 |
1 files changed, 50 insertions, 71 deletions
diff --git a/svtools/source/control/headbar.cxx b/svtools/source/control/headbar.cxx index bd66dbc52c02..42c0f9cd092c 100644 --- a/svtools/source/control/headbar.cxx +++ b/svtools/source/control/headbar.cxx @@ -56,7 +56,6 @@ public: void HeaderBar::ImplInit( WinBits nWinStyle ) { - mpItemList = new ImplHeadItemList; mnBorderOff1 = 0; mnBorderOff2 = 0; mnOffset = 0; @@ -103,22 +102,7 @@ HeaderBar::HeaderBar( vcl::Window* pParent, WinBits nWinStyle ) : SetSizePixel( CalcWindowSizePixel() ); } -HeaderBar::~HeaderBar() -{ - disposeOnce(); -} - -void HeaderBar::dispose() -{ - if (mpItemList) - { - for (ImplHeadItem* i : *mpItemList) - delete i; - delete mpItemList; - mpItemList = nullptr; - } - Window::dispose(); -} +HeaderBar::~HeaderBar() = default; void HeaderBar::ApplySettings(vcl::RenderContext& rRenderContext) { @@ -153,14 +137,14 @@ long HeaderBar::ImplGetItemPos( sal_uInt16 nPos ) const { long nX = -mnOffset; for ( size_t i = 0; i < nPos; i++ ) - nX += (*mpItemList)[ i ]->mnSize; + nX += mvItemList[ i ]->mnSize; return nX; } tools::Rectangle HeaderBar::ImplGetItemRect( sal_uInt16 nPos ) const { tools::Rectangle aRect( ImplGetItemPos( nPos ), 0, 0, mnDY-1 ); - aRect.Right() = aRect.Left() + (*mpItemList)[ nPos ]->mnSize - 1; + aRect.Right() = aRect.Left() + mvItemList[ nPos ]->mnSize - 1; // check for overflow on various systems if ( aRect.Right() > 16000 ) aRect.Right() = 16000; @@ -170,14 +154,13 @@ tools::Rectangle HeaderBar::ImplGetItemRect( sal_uInt16 nPos ) const sal_uInt16 HeaderBar::ImplHitTest( const Point& rPos, long& nMouseOff, sal_uInt16& nPos ) const { - ImplHeadItem* pItem; - size_t nCount = (sal_uInt16)mpItemList->size(); + size_t nCount = (sal_uInt16)mvItemList.size(); bool bLastFixed = true; long nX = -mnOffset; for ( size_t i = 0; i < nCount; i++ ) { - pItem = (*mpItemList)[ i ]; + auto& pItem = mvItemList[ i ]; if ( rPos.X() < (nX+pItem->mnSize) ) { @@ -215,7 +198,7 @@ sal_uInt16 HeaderBar::ImplHitTest( const Point& rPos, if ( !bLastFixed ) { - pItem = (*mpItemList)[ nCount-1 ]; + auto& pItem = mvItemList[ nCount-1 ]; if ( (pItem->mnSize < 4) && (rPos.X() < (nX+HEADERBAR_SPLITOFF)) ) { nPos = nCount-1; @@ -302,7 +285,7 @@ void HeaderBar::ImplDrawItem(vcl::RenderContext& rRenderContext, sal_uInt16 nPos return; } - ImplHeadItem* pItem = (*mpItemList)[nPos]; + auto& pItem = mvItemList[nPos]; HeaderBarItemBits nBits = pItem->mnBits; const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); @@ -617,7 +600,7 @@ void HeaderBar::ImplUpdate(sal_uInt16 nPos, bool bEnd) return; tools::Rectangle aRect; - size_t nItemCount = mpItemList->size(); + size_t nItemCount = mvItemList.size(); if (nPos < nItemCount) aRect = ImplGetItemRect(nPos); else @@ -641,7 +624,7 @@ void HeaderBar::ImplStartDrag( const Point& rMousePos, bool bCommand ) return; mbDrag = false; - ImplHeadItem* pItem = (*mpItemList)[ nPos ]; + auto& pItem = mvItemList[ nPos ]; if ( nHitTest & HEAD_HITTEST_DIVIDER ) mbDrag = true; else @@ -708,7 +691,7 @@ void HeaderBar::ImplDrag( const Point& rMousePos ) // if needed switch on ItemDrag if ( bNewOutDrag && mbDragable && !mbItemDrag && - !((*mpItemList)[ nPos ]->mnBits & HeaderBarItemBits::FIXEDPOS) ) + !(mvItemList[ nPos ]->mnBits & HeaderBarItemBits::FIXEDPOS) ) { if ( (rMousePos.Y() >= aItemRect.Top()) && (rMousePos.Y() <= aItemRect.Bottom()) ) { @@ -740,13 +723,13 @@ void HeaderBar::ImplDrag( const Point& rMousePos ) // do not use non-movable items if ( mnItemDragPos < nPos ) { - while ( ((*mpItemList)[ mnItemDragPos ]->mnBits & HeaderBarItemBits::FIXEDPOS) && + while ( (mvItemList[ mnItemDragPos ]->mnBits & HeaderBarItemBits::FIXEDPOS) && (mnItemDragPos < nPos) ) mnItemDragPos++; } else if ( mnItemDragPos > nPos ) { - while ( ((*mpItemList)[ mnItemDragPos ]->mnBits & HeaderBarItemBits::FIXEDPOS) && + while ( (mvItemList[ mnItemDragPos ]->mnBits & HeaderBarItemBits::FIXEDPOS) && (mnItemDragPos > nPos) ) mnItemDragPos--; } @@ -836,7 +819,7 @@ void HeaderBar::ImplEndDrag( bool bCancel ) long nDelta = mnDragPos - mnStartPos; if ( nDelta ) { - ImplHeadItem* pItem = (*mpItemList)[ nPos ]; + auto& pItem = mvItemList[ nPos ]; pItem->mnSize += nDelta; ImplUpdate( nPos, true ); } @@ -864,7 +847,7 @@ void HeaderBar::MouseButtonDown( const MouseEvent& rMEvt ) sal_uInt16 nHitTest = ImplHitTest( rMEvt.GetPosPixel(), nTemp, nPos ); if ( nHitTest ) { - ImplHeadItem* pItem = (*mpItemList)[ nPos ]; + auto& pItem = mvItemList[ nPos ]; if ( nHitTest & HEAD_HITTEST_DIVIDER ) mbItemMode = false; else @@ -924,7 +907,7 @@ void HeaderBar::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle nCurItemPos = GetItemPos(mnCurItemId); else nCurItemPos = HEADERBAR_ITEM_NOTFOUND; - sal_uInt16 nItemCount = static_cast<sal_uInt16>(mpItemList->size()); + sal_uInt16 nItemCount = static_cast<sal_uInt16>(mvItemList.size()); for (sal_uInt16 i = 0; i < nItemCount; i++) ImplDrawItem(rRenderContext, i, (i == nCurItemPos), &rRect); } @@ -966,11 +949,11 @@ void HeaderBar::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, } tools::Rectangle aItemRect( aRect ); - size_t nItemCount = mpItemList->size(); + size_t nItemCount = mvItemList.size(); for ( size_t i = 0; i < nItemCount; i++ ) { aItemRect.Left() = aRect.Left()+ImplGetItemPos( i ); - aItemRect.Right() = aItemRect.Left() + (*mpItemList)[ i ]->mnSize - 1; + aItemRect.Right() = aItemRect.Left() + mvItemList[ i ]->mnSize - 1; // check for overflow on some systems if ( aItemRect.Right() > 16000 ) aItemRect.Right() = 16000; @@ -1021,7 +1004,7 @@ void HeaderBar::RequestHelp( const HelpEvent& rHEvt ) OUString aStr = GetHelpText( nItemId ); if ( aStr.isEmpty() || !(rHEvt.GetMode() & HelpEventMode::BALLOON) ) { - ImplHeadItem* pItem = (*mpItemList)[ GetItemPos( nItemId ) ]; + auto& pItem = mvItemList[ GetItemPos( nItemId ) ]; // Quick-help is only displayed if the text is not fully visible. // Otherwise we display Helptext only if the items do not contain text if ( pItem->maOutText != pItem->maText ) @@ -1116,17 +1099,17 @@ void HeaderBar::InsertItem( sal_uInt16 nItemId, const OUString& rText, "HeaderBar::InsertItem(): ItemId already exists" ); // create item and insert in the list - ImplHeadItem* pItem = new ImplHeadItem; + std::unique_ptr<ImplHeadItem> pItem(new ImplHeadItem); pItem->mnId = nItemId; pItem->mnBits = nBits; pItem->mnSize = nSize; pItem->maText = rText; - if ( nPos < mpItemList->size() ) { - ImplHeadItemList::iterator it = mpItemList->begin(); - ::std::advance( it, nPos ); - mpItemList->insert( it, pItem ); + if ( nPos < mvItemList.size() ) { + auto it = mvItemList.begin(); + it += nPos; + mvItemList.insert( it, std::move(pItem) ); } else { - mpItemList->push_back( pItem ); + mvItemList.push_back( std::move(pItem) ); } // update display @@ -1138,11 +1121,10 @@ void HeaderBar::RemoveItem( sal_uInt16 nItemId ) sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) { - if ( nPos < mpItemList->size() ) { - ImplHeadItemList::iterator it = mpItemList->begin(); - ::std::advance( it, nPos ); - delete *it; - mpItemList->erase( it ); + if ( nPos < mvItemList.size() ) { + auto it = mvItemList.begin(); + it += nPos; + mvItemList.erase( it ); } } } @@ -1156,25 +1138,22 @@ void HeaderBar::MoveItem( sal_uInt16 nItemId, sal_uInt16 nNewPos ) if ( nPos == nNewPos ) return; - ImplHeadItemList::iterator it = mpItemList->begin(); - ::std::advance( it, nPos ); - ImplHeadItem* pItem = *it; - mpItemList->erase( it ); + auto it = mvItemList.begin(); + it += nPos; + std::unique_ptr<ImplHeadItem> pItem = std::move(*it); + mvItemList.erase( it ); if ( nNewPos < nPos ) nPos = nNewPos; - it = mpItemList->begin(); - ::std::advance( it, nNewPos ); - mpItemList->insert( it, pItem ); + it = mvItemList.begin(); + it += nNewPos; + mvItemList.insert( it, std::move(pItem) ); ImplUpdate( nPos, true); } void HeaderBar::Clear() { // delete all items - for (ImplHeadItem* i : *mpItemList) { - delete i; - } - mpItemList->clear(); + mvItemList.clear(); ImplUpdate( 0, true ); } @@ -1190,13 +1169,13 @@ void HeaderBar::SetOffset( long nNewOffset ) sal_uInt16 HeaderBar::GetItemCount() const { - return (sal_uInt16)mpItemList->size(); + return (sal_uInt16)mvItemList.size(); } sal_uInt16 HeaderBar::GetItemPos( sal_uInt16 nItemId ) const { - for ( size_t i = 0, n = mpItemList->size(); i < n; ++i ) { - ImplHeadItem* pItem = (*mpItemList)[ i ]; + for ( size_t i = 0, n = mvItemList.size(); i < n; ++i ) { + auto& pItem = mvItemList[ i ]; if ( pItem->mnId == nItemId ) return (sal_uInt16)i; } @@ -1205,7 +1184,7 @@ sal_uInt16 HeaderBar::GetItemPos( sal_uInt16 nItemId ) const sal_uInt16 HeaderBar::GetItemId( sal_uInt16 nPos ) const { - ImplHeadItem* pItem = (nPos < mpItemList->size() ) ? (*mpItemList)[ nPos ] : nullptr; + ImplHeadItem* pItem = (nPos < mvItemList.size() ) ? mvItemList[ nPos ].get() : nullptr; if ( pItem ) return pItem->mnId; else @@ -1214,7 +1193,7 @@ sal_uInt16 HeaderBar::GetItemId( sal_uInt16 nPos ) const sal_uInt16 HeaderBar::GetItemId( const Point& rPos ) const { - for ( size_t i = 0, n = mpItemList->size(); i < n; ++i ) { + for ( size_t i = 0, n = mvItemList.size(); i < n; ++i ) { if ( ImplGetItemRect( i ).IsInside( rPos ) ) { return GetItemId( i ); } @@ -1236,7 +1215,7 @@ void HeaderBar::SetItemSize( sal_uInt16 nItemId, long nNewSize ) sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) { - ImplHeadItem* pItem = (*mpItemList)[ nPos ]; + auto& pItem = mvItemList[ nPos ]; if ( pItem->mnSize != nNewSize ) { pItem->mnSize = nNewSize; @@ -1249,7 +1228,7 @@ long HeaderBar::GetItemSize( sal_uInt16 nItemId ) const { sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) - return (*mpItemList)[ nPos ]->mnSize; + return mvItemList[ nPos ]->mnSize; else return 0; } @@ -1259,7 +1238,7 @@ void HeaderBar::SetItemBits( sal_uInt16 nItemId, HeaderBarItemBits nNewBits ) sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) { - ImplHeadItem* pItem = (*mpItemList)[ nPos ]; + auto& pItem = mvItemList[ nPos ]; if ( pItem->mnBits != nNewBits ) { pItem->mnBits = nNewBits; @@ -1272,7 +1251,7 @@ HeaderBarItemBits HeaderBar::GetItemBits( sal_uInt16 nItemId ) const { sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) - return (*mpItemList)[ nPos ]->mnBits; + return mvItemList[ nPos ]->mnBits; else return HeaderBarItemBits::NONE; } @@ -1282,7 +1261,7 @@ void HeaderBar::SetItemText( sal_uInt16 nItemId, const OUString& rText ) sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) { - (*mpItemList)[ nPos ]->maText = rText; + mvItemList[ nPos ]->maText = rText; ImplUpdate( nPos ); } } @@ -1291,7 +1270,7 @@ OUString HeaderBar::GetItemText( sal_uInt16 nItemId ) const { sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) - return (*mpItemList)[ nPos ]->maText; + return mvItemList[ nPos ]->maText; return OUString(); } @@ -1300,7 +1279,7 @@ OUString HeaderBar::GetHelpText( sal_uInt16 nItemId ) const sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) { - ImplHeadItem* pItem = (*mpItemList)[ nPos ]; + auto& pItem = mvItemList[ nPos ]; if ( pItem->maHelpText.isEmpty() && !pItem->maHelpId.isEmpty() ) { Help* pHelp = Application::GetHelp(); @@ -1318,7 +1297,7 @@ OString HeaderBar::GetHelpId( sal_uInt16 nItemId ) const { sal_uInt16 nPos = GetItemPos( nItemId ); if ( nPos != HEADERBAR_ITEM_NOTFOUND ) - return (*mpItemList)[ nPos ]->maHelpId; + return mvItemList[ nPos ]->maHelpId; return OString(); } @@ -1327,7 +1306,7 @@ Size HeaderBar::CalcWindowSizePixel() const long nMaxImageSize = 0; Size aSize( 0, GetTextHeight() ); - for (ImplHeadItem* pItem : *mpItemList) + for (auto& pItem : mvItemList) { // take image size into account long nImageHeight = pItem->maImage.GetSizePixel().Height(); |