[Libreoffice-commits] core.git: include/svtools svtools/source
Takeshi Abe
tabe at fixedpoint.jp
Sun Jan 7 01:54:43 UTC 2018
include/svtools/tabbar.hxx | 2
svtools/source/control/tabbar.cxx | 109 ++++++++++++++++----------------------
2 files changed, 46 insertions(+), 65 deletions(-)
New commits:
commit 1a012a90b454604d127bbfb5babd5f92e2231524
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date: Sat Jan 6 21:22:24 2018 +0900
svtools: Simplify TabBar_Impl with std::unique_ptr
Change-Id: If477373f6e5a39ccd61332356a821f7c7d38d28d
Reviewed-on: https://gerrit.libreoffice.org/47488
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Takeshi Abe <tabe at fixedpoint.jp>
diff --git a/include/svtools/tabbar.hxx b/include/svtools/tabbar.hxx
index 7c13af5b9cee..8996cb0f60bf 100644
--- a/include/svtools/tabbar.hxx
+++ b/include/svtools/tabbar.hxx
@@ -25,7 +25,6 @@
#include <vcl/window.hxx>
#include <o3tl/typed_flags_set.hxx>
#include <memory>
-#include <vector>
/*
@@ -308,7 +307,6 @@ class TabBarEdit;
struct ImplTabBarItem;
struct TabBar_Impl;
-typedef std::vector<ImplTabBarItem*> ImplTabBarList;
class SVT_DLLPUBLIC TabBar : public vcl::Window
diff --git a/svtools/source/control/tabbar.cxx b/svtools/source/control/tabbar.cxx
index 8fab52d1fcbd..6857bf46cd13 100644
--- a/svtools/source/control/tabbar.cxx
+++ b/svtools/source/control/tabbar.cxx
@@ -33,7 +33,9 @@
#include <svtools/svtresid.hxx>
#include <svtools/strings.hrc>
#include <limits>
+#include <memory>
#include <utility>
+#include <vector>
#include <vcl/idle.hxx>
namespace
@@ -489,21 +491,10 @@ struct TabBar_Impl
ScopedVclPtr<ImplTabButton> mpLastButton;
ScopedVclPtr<ImplTabButton> mpAddButton;
ScopedVclPtr<TabBarEdit> mpEdit;
- ImplTabBarList mpItemList;
+ std::vector<std::unique_ptr<ImplTabBarItem>> mpItemList;
svt::AccessibleFactoryAccess maAccessibleFactory;
- TabBar_Impl() {}
-
- ~TabBar_Impl()
- {
- for (ImplTabBarItem* i : mpItemList)
- {
- delete i;
- }
- mpItemList.clear();
- }
-
sal_uInt16 getItemSize()
{
return static_cast<sal_uInt16>(mpItemList.size());
@@ -582,7 +573,7 @@ ImplTabBarItem* TabBar::seek( size_t i )
if ( i < mpImpl->mpItemList.size() )
{
maCurrentItemList = i;
- return mpImpl->mpItemList[maCurrentItemList];
+ return mpImpl->mpItemList[maCurrentItemList].get();
}
return nullptr;
}
@@ -591,7 +582,7 @@ ImplTabBarItem* TabBar::prev()
{
if ( maCurrentItemList > 0 )
{
- return mpImpl->mpItemList[--maCurrentItemList];
+ return mpImpl->mpItemList[--maCurrentItemList].get();
}
return nullptr;
}
@@ -600,7 +591,7 @@ ImplTabBarItem* TabBar::next()
{
if ( maCurrentItemList + 1 < mpImpl->mpItemList.size() )
{
- return mpImpl->mpItemList[++maCurrentItemList];
+ return mpImpl->mpItemList[++maCurrentItemList].get();
}
return nullptr;
}
@@ -675,7 +666,7 @@ bool TabBar::ImplCalcWidth()
}
bool bChanged = false;
- for (ImplTabBarItem* pItem : mpImpl->mpItemList)
+ for (auto& pItem : mpImpl->mpItemList)
{
long nNewWidth = GetTextWidth(pItem->GetRenderText());
if (mnCurMaxWidth && (nNewWidth > mnCurMaxWidth))
@@ -713,7 +704,7 @@ void TabBar::ImplFormat()
sal_uInt16 n = 0;
long x = mnOffX;
- for (ImplTabBarItem* pItem : mpImpl->mpItemList)
+ for (auto& pItem : mpImpl->mpItemList)
{
// At all non-visible tabs an empty rectangle is set
if ((n + 1 < mnFirstPos) || (x > mnLastOffX))
@@ -878,7 +869,7 @@ void TabBar::ImplShowPage( sal_uInt16 nPos )
// calculate width
long nWidth = GetOutputSizePixel().Width();
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
if (nPos < mnFirstPos)
SetFirstPageId( pItem->mnId );
else if (pItem->maRect.Right() > nWidth)
@@ -1009,7 +1000,7 @@ void TabBar::MouseButtonDown(const MouseEvent& rMEvt)
n = 0;
while (n < nCurPos)
{
- auto pItem = mpImpl->mpItemList[n];
+ auto& pItem = mpImpl->mpItemList[n];
bSelect = n >= nPos;
if (pItem->mbSelect != bSelect)
@@ -1032,7 +1023,7 @@ void TabBar::MouseButtonDown(const MouseEvent& rMEvt)
n = nCurPos;
while (n < nCount)
{
- auto pItem = mpImpl->mpItemList[n];
+ auto& pItem = mpImpl->mpItemList[n];
bSelect = n <= nPos;
@@ -1085,7 +1076,7 @@ void TabBar::MouseButtonDown(const MouseEvent& rMEvt)
if (nSelId != mnCurPageId)
{
sal_uInt16 nPos = GetPagePos(nSelId);
- auto pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
if (!pItem->mbSelect)
{
@@ -1095,14 +1086,13 @@ void TabBar::MouseButtonDown(const MouseEvent& rMEvt)
bUpdate = true;
// deselect all selected items
- for (ImplTabBarItem* i : mpImpl->mpItemList)
+ for (auto& xItem : mpImpl->mpItemList)
{
- pItem = i;
- if (pItem->mbSelect || (pItem->mnId == mnCurPageId))
+ if (xItem->mbSelect || (xItem->mnId == mnCurPageId))
{
- pItem->mbSelect = false;
+ xItem->mbSelect = false;
if (bUpdate)
- Invalidate(pItem->maRect);
+ Invalidate(xItem->maRect);
}
}
}
@@ -1417,7 +1407,7 @@ void TabBar::RequestHelp(const HelpEvent& rHEvt)
if (rHEvt.GetMode() & (HelpEventMode::QUICK | HelpEventMode::BALLOON))
{
sal_uInt16 nPos = GetPagePos(nItemId);
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
if (pItem->mbShort || (pItem->maRect.Right() - 5 > mnLastOffX))
{
tools::Rectangle aItemRect = GetPageRect(nItemId);
@@ -1556,7 +1546,7 @@ void TabBar::ImplPrePaint()
if (!(mnCurPageId && (mnFirstPos == 0) && !mbDropPos))
return;
- ImplTabBarItem* pItem = mpImpl->mpItemList[GetPagePos(mnCurPageId)];
+ auto& pItem = mpImpl->mpItemList[GetPagePos(mnCurPageId)];
if (pItem->maRect.IsEmpty())
{
// set mbDropPos (or misuse) to prevent Invalidate()
@@ -1632,16 +1622,16 @@ void TabBar::InsertPage(sal_uInt16 nPageId, const OUString& rText,
assert ((nBits <= TPB_DISPLAY_NAME_ALLFLAGS) && "TabBar::InsertPage(): Invalid flag set in nBits");
// create PageItem and insert in the item list
- ImplTabBarItem* pItem = new ImplTabBarItem( nPageId, rText, nBits );
+ std::unique_ptr<ImplTabBarItem> pItem(new ImplTabBarItem( nPageId, rText, nBits ));
if (nPos < mpImpl->mpItemList.size())
{
- ImplTabBarList::iterator it = mpImpl->mpItemList.begin();
- std::advance(it, nPos);
- mpImpl->mpItemList.insert(it, pItem);
+ auto it = mpImpl->mpItemList.begin();
+ it += nPos;
+ mpImpl->mpItemList.insert(it, std::move(pItem));
}
else
{
- mpImpl->mpItemList.push_back(pItem);
+ mpImpl->mpItemList.push_back(std::move(pItem));
}
mbSizeFormat = true;
@@ -1672,7 +1662,7 @@ void TabBar::SetTabBgColor(sal_uInt16 nPageId, const Color& aTabBgColor)
if (nPos == PAGE_NOT_FOUND)
return;
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
if (aTabBgColor != Color(COL_AUTO))
{
pItem->maTabBgColor = aTabBgColor;
@@ -1704,9 +1694,8 @@ void TabBar::RemovePage(sal_uInt16 nPageId)
mnFirstPos--;
// delete item data
- ImplTabBarList::iterator it = mpImpl->mpItemList.begin();
- std::advance(it, nPos);
- delete *it;
+ auto it = mpImpl->mpItemList.begin();
+ it += nPos;
mpImpl->mpItemList.erase(it);
// redraw bar
@@ -1732,19 +1721,19 @@ void TabBar::MovePage(sal_uInt16 nPageId, sal_uInt16 nNewPos)
return;
// move tabbar item in the list
- ImplTabBarList::iterator it = mpImpl->mpItemList.begin();
- std::advance(it, nPos);
- ImplTabBarItem* pItem = *it;
+ auto it = mpImpl->mpItemList.begin();
+ it += nPos;
+ std::unique_ptr<ImplTabBarItem> pItem = std::move(*it);
mpImpl->mpItemList.erase(it);
if (nNewPos < mpImpl->mpItemList.size())
{
it = mpImpl->mpItemList.begin();
- std::advance(it, nNewPos);
- mpImpl->mpItemList.insert(it, pItem);
+ it += nNewPos;
+ mpImpl->mpItemList.insert(it, std::move(pItem));
}
else
{
- mpImpl->mpItemList.push_back(pItem);
+ mpImpl->mpItemList.push_back(std::move(pItem));
}
// redraw bar
@@ -1757,10 +1746,6 @@ void TabBar::MovePage(sal_uInt16 nPageId, sal_uInt16 nNewPos)
void TabBar::Clear()
{
// delete all items
- for (ImplTabBarItem* i : mpImpl->mpItemList)
- {
- delete i;
- }
mpImpl->mpItemList.clear();
// remove items from the list
@@ -1790,7 +1775,7 @@ void TabBar::SetPageBits(sal_uInt16 nPageId, TabBarPageBits nBits)
if (nPos == PAGE_NOT_FOUND)
return;
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
if (pItem->mnBits != nBits)
{
@@ -1836,7 +1821,7 @@ sal_uInt16 TabBar::GetPagePos(sal_uInt16 nPageId) const
sal_uInt16 TabBar::GetPageId(const Point& rPos) const
{
- for (ImplTabBarItem* pItem : mpImpl->mpItemList)
+ for (auto& pItem : mpImpl->mpItemList)
{
if (pItem->maRect.IsInside(rPos))
return pItem->mnId;
@@ -1872,11 +1857,11 @@ void TabBar::SetCurPageId(sal_uInt16 nPageId)
if (IsReallyVisible() && IsUpdateMode())
bUpdate = true;
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
ImplTabBarItem* pOldItem;
if (mnCurPageId)
- pOldItem = mpImpl->mpItemList[GetPagePos(mnCurPageId)];
+ pOldItem = mpImpl->mpItemList[GetPagePos(mnCurPageId)].get();
else
pOldItem = nullptr;
@@ -1952,7 +1937,7 @@ void TabBar::MakeVisible(sal_uInt16 nPageId)
SetFirstPageId(nPageId);
else
{
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
// calculate visible area
long nWidth = mnLastOffX;
@@ -2022,7 +2007,7 @@ void TabBar::SelectPage(sal_uInt16 nPageId, bool bSelect)
if (nPos == PAGE_NOT_FOUND)
return;
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
if (pItem->mbSelect != bSelect)
{
@@ -2037,7 +2022,7 @@ void TabBar::SelectPage(sal_uInt16 nPageId, bool bSelect)
sal_uInt16 TabBar::GetSelectPageCount() const
{
sal_uInt16 nSelected = 0;
- for (ImplTabBarItem* pItem : mpImpl->mpItemList)
+ for (auto& pItem : mpImpl->mpItemList)
{
if (pItem->mbSelect)
nSelected++;
@@ -2254,7 +2239,7 @@ OUString TabBar::GetHelpText(sal_uInt16 nPageId) const
sal_uInt16 nPos = GetPagePos(nPageId);
if (nPos != PAGE_NOT_FOUND)
{
- ImplTabBarItem* pItem = mpImpl->mpItemList[nPos];
+ auto& pItem = mpImpl->mpItemList[nPos];
if (pItem->maHelpText.isEmpty() && !pItem->maHelpId.isEmpty())
{
Help* pHelp = Application::GetHelp();
@@ -2320,7 +2305,6 @@ bool TabBar::StartDrag(const CommandEvent& rCEvt, vcl::Region& rRegion)
sal_uInt16 TabBar::ShowDropPos(const Point& rPos)
{
- ImplTabBarItem* pItem;
sal_uInt16 nDropId;
sal_uInt16 nNewDropPos;
sal_uInt16 nItemCount = mpImpl->getItemSize();
@@ -2328,7 +2312,7 @@ sal_uInt16 TabBar::ShowDropPos(const Point& rPos)
if (rPos.X() > mnLastOffX-TABBAR_DRAG_SCROLLOFF)
{
- pItem = mpImpl->mpItemList[mpImpl->mpItemList.size() - 1];
+ auto& pItem = mpImpl->mpItemList[mpImpl->mpItemList.size() - 1];
if (!pItem->maRect.IsEmpty() && (rPos.X() > pItem->maRect.Right()))
nNewDropPos = mpImpl->getItemSize();
else
@@ -2397,7 +2381,7 @@ sal_uInt16 TabBar::ShowDropPos(const Point& rPos)
SetLineColor(aBlackColor);
SetFillColor(aBlackColor);
- pItem = mpImpl->mpItemList[mnDropPos];
+ auto& pItem = mpImpl->mpItemList[mnDropPos];
nX = pItem->maRect.Left();
if ( mnDropPos == nCurPos )
nX--;
@@ -2421,7 +2405,7 @@ sal_uInt16 TabBar::ShowDropPos(const Point& rPos)
SetLineColor(aBlackColor);
SetFillColor(aBlackColor);
- pItem = mpImpl->mpItemList[mnDropPos - 1];
+ auto& pItem = mpImpl->mpItemList[mnDropPos - 1];
nX = pItem->maRect.Right();
if (mnDropPos == nCurPos)
nX++;
@@ -2445,7 +2429,6 @@ void TabBar::HideDropPos()
if (!mbDropPos)
return;
- ImplTabBarItem* pItem;
long nX;
long nY1 = (maWinSize.Height() / 2) - 3;
long nY2 = nY1 + 5;
@@ -2453,7 +2436,7 @@ void TabBar::HideDropPos()
if (mnDropPos < nItemCount)
{
- pItem = mpImpl->mpItemList[mnDropPos];
+ auto& pItem = mpImpl->mpItemList[mnDropPos];
nX = pItem->maRect.Left();
// immediately call Paint, as it is not possible during drag and drop
tools::Rectangle aRect( nX-1, nY1, nX+3, nY2 );
@@ -2464,7 +2447,7 @@ void TabBar::HideDropPos()
}
if (mnDropPos > 0 && mnDropPos < nItemCount + 1)
{
- pItem = mpImpl->mpItemList[mnDropPos - 1];
+ auto& pItem = mpImpl->mpItemList[mnDropPos - 1];
nX = pItem->maRect.Right();
// immediately call Paint, as it is not possible during drag and drop
tools::Rectangle aRect(nX - 2, nY1, nX + 1, nY2);
@@ -2532,7 +2515,7 @@ Size TabBar::CalcWindowSizePixel() const
if (mpImpl->mpItemList.size() > 0)
{
const_cast<TabBar*>(this)->ImplCalcWidth();
- for (ImplTabBarItem* pItem : mpImpl->mpItemList)
+ for (auto& pItem : mpImpl->mpItemList)
{
nWidth += pItem->mnWidth;
}
More information about the Libreoffice-commits
mailing list