summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2019-01-14 09:17:36 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2019-01-15 08:43:02 +0100
commit339e866d09717b4919dafaad96ebf772d30ec9cb (patch)
treee3b25e09ea7d3f9ad981b77eb46db76dcfd6914f
parenta975d17e715bcf317e40d19ef47cc37660b81f7e (diff)
use unique_ptr in SwPostItMgr
Change-Id: Icc946b986f62d986e979e6a3f3ba0d2c28cb9adf Reviewed-on: https://gerrit.libreoffice.org/66312 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--sw/inc/PostItMgr.hxx4
-rw-r--r--sw/qa/extras/uiwriter/uiwriter.cxx2
-rw-r--r--sw/source/uibase/docvw/PostItMgr.cxx45
3 files changed, 25 insertions, 26 deletions
diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index 9650996c50f3..b6f8242864f0 100644
--- a/sw/inc/PostItMgr.hxx
+++ b/sw/inc/PostItMgr.hxx
@@ -130,7 +130,7 @@ class SwPostItMgr: public SfxListener
SwView* mpView;
SwWrtShell* mpWrtShell;
VclPtr<SwEditWin> mpEditWin;
- std::vector<SwSidebarItem*> mvPostItFields;
+ std::vector<std::unique_ptr<SwSidebarItem>> mvPostItFields;
std::vector<std::unique_ptr<SwPostItPageItem>> mPages;
ImplSVEvent * mnEventId;
bool mbWaitingForCalcRects;
@@ -178,7 +178,7 @@ class SwPostItMgr: public SfxListener
SwPostItMgr(SwView* aDoc);
virtual ~SwPostItMgr() override;
- typedef std::vector< SwSidebarItem* >::const_iterator const_iterator;
+ typedef std::vector< std::unique_ptr<SwSidebarItem> >::const_iterator const_iterator;
const_iterator begin() const { return mvPostItFields.begin(); }
const_iterator end() const { return mvPostItFields.end(); }
diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index bc05aeaa0445..5e9d9c639f75 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -4153,7 +4153,7 @@ void SwUiWriterTest::testTdf89720()
SwDoc* pDoc = createDoc("tdf89720.odt");
SwView* pView = pDoc->GetDocShell()->GetView();
SwPostItMgr* pPostItMgr = pView->GetPostItMgr();
- for (SwSidebarItem* pItem : *pPostItMgr)
+ for (std::unique_ptr<SwSidebarItem> const & pItem : *pPostItMgr)
{
if (pItem->pPostIt->IsFollow())
// This was non-0: reply comments had a text range overlay,
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
index 657d2d3b7c1d..73dba00005a4 100644
--- a/sw/source/uibase/docvw/PostItMgr.cxx
+++ b/sw/source/uibase/docvw/PostItMgr.cxx
@@ -105,7 +105,7 @@ namespace {
enum class CommentNotificationType { Add, Remove, Modify };
- bool comp_pos(const SwSidebarItem* a, const SwSidebarItem* b)
+ bool comp_pos(const std::unique_ptr<SwSidebarItem>& a, const std::unique_ptr<SwSidebarItem>& b)
{
// sort by anchor position
SwPosition aPosAnchorA = a->GetAnchorPosition();
@@ -243,21 +243,21 @@ void SwPostItMgr::CheckForRemovedPostIts()
{
IDocumentRedlineAccess const& rIDRA(mpWrtShell->getIDocumentRedlineAccess());
bool bRemoved = false;
- auto currentIt = mvPostItFields.begin();
- while(currentIt != mvPostItFields.end())
+ auto it = mvPostItFields.begin();
+ while(it != mvPostItFields.end())
{
- auto it = currentIt++;
if (!(*it)->UseElement(*mpWrtShell->GetLayout(), rIDRA))
{
EndListening(const_cast<SfxBroadcaster&>(*(*it)->GetBroadCaster()));
- SwSidebarItem* p = *it;
- currentIt = mvPostItFields.erase(std::remove(mvPostItFields.begin(), mvPostItFields.end(), *it), mvPostItFields.end());
+ std::unique_ptr<SwSidebarItem> p = std::move(*it);
+ it = mvPostItFields.erase(it);
if (GetActiveSidebarWin() == p->pPostIt)
SetActiveSidebarWin(nullptr);
p->pPostIt.disposeAndClear();
- delete p;
bRemoved = true;
}
+ else
+ ++it;
}
if ( bRemoved )
@@ -278,21 +278,21 @@ void SwPostItMgr::CheckForRemovedPostIts()
SwSidebarItem* SwPostItMgr::InsertItem(SfxBroadcaster* pItem, bool bCheckExistence, bool bFocus)
{
- SwSidebarItem* pAnnotationItem = nullptr;
if (bCheckExistence)
{
for (auto const& postItField : mvPostItFields)
{
if ( postItField->GetBroadCaster() == pItem )
- return pAnnotationItem;
+ return nullptr;
}
}
mbLayout = bFocus;
+ SwSidebarItem* pAnnotationItem = nullptr;
if (dynamic_cast< const SwFormatField *>( pItem ) != nullptr)
{
- pAnnotationItem = new SwAnnotationItem(static_cast<SwFormatField&>(*pItem), bFocus);
- mvPostItFields.push_back(pAnnotationItem);
+ mvPostItFields.push_back(std::make_unique<SwAnnotationItem>(static_cast<SwFormatField&>(*pItem), bFocus));
+ pAnnotationItem = mvPostItFields.back().get();
}
OSL_ENSURE(dynamic_cast< const SwFormatField *>( pItem ) != nullptr,"Mgr::InsertItem: seems like new stuff was added");
StartListening(*pItem);
@@ -303,10 +303,10 @@ void SwPostItMgr::RemoveItem( SfxBroadcaster* pBroadcast )
{
EndListening(*pBroadcast);
auto i = std::find_if(mvPostItFields.begin(), mvPostItFields.end(),
- [&pBroadcast](const SwSidebarItem* pField) { return pField->GetBroadCaster() == pBroadcast; });
+ [&pBroadcast](const std::unique_ptr<SwSidebarItem>& pField) { return pField->GetBroadCaster() == pBroadcast; });
if (i != mvPostItFields.end())
{
- SwSidebarItem* p = *i;
+ std::unique_ptr<SwSidebarItem> p = std::move(*i);
if (GetActiveSidebarWin() == p->pPostIt)
SetActiveSidebarWin(nullptr);
// tdf#120487 remove from list before dispose, so comment window
@@ -314,7 +314,6 @@ void SwPostItMgr::RemoveItem( SfxBroadcaster* pBroadcast )
// transferring from the pPostIt triggers relayout of postits
mvPostItFields.erase(i);
p->pPostIt.disposeAndClear();
- delete p;
}
mbLayout = true;
PrepareView();
@@ -406,7 +405,7 @@ void SwPostItMgr::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
// If LOK has disabled tiled annotations, emit annotation callbacks
if (comphelper::LibreOfficeKit::isActive() && !comphelper::LibreOfficeKit::isTiledAnnotations())
{
- lcl_CommentNotification(mpView, CommentNotificationType::Modify, postItField, 0);
+ lcl_CommentNotification(mpView, CommentNotificationType::Modify, postItField.get(), 0);
}
break;
}
@@ -607,7 +606,7 @@ bool SwPostItMgr::CalcRects()
for (unsigned long j=0; j<aPageNum - nNumberOfPages; ++j)
mPages.emplace_back( new SwPostItPageItem());
}
- mPages[aPageNum-1]->mvSidebarItems.push_back(pItem);
+ mPages[aPageNum-1]->mvSidebarItems.push_back(pItem.get());
mPages[aPageNum-1]->mPageRect = pItem->maLayoutInfo.mPageFrame;
mPages[aPageNum-1]->eSidebarPosition = pItem->maLayoutInfo.meSidebarPosition;
}
@@ -968,7 +967,7 @@ void SwPostItMgr::DrawNotesForPage(OutputDevice *pOutDev, sal_uInt32 nPage)
void SwPostItMgr::PaintTile(OutputDevice& rRenderContext)
{
- for (SwSidebarItem* pItem : mvPostItFields)
+ for (std::unique_ptr<SwSidebarItem>& pItem : mvPostItFields)
{
SwAnnotationWin* pPostIt = pItem->pPostIt;
if (!pPostIt)
@@ -1321,11 +1320,11 @@ void SwPostItMgr::AddPostIts(bool bCheckExistence, bool bFocus)
void SwPostItMgr::RemoveSidebarWin()
{
- for (auto const& postItField : mvPostItFields)
+ for (auto& postItField : mvPostItFields)
{
EndListening( *const_cast<SfxBroadcaster*>(postItField->GetBroadCaster()) );
postItField->pPostIt.disposeAndClear();
- delete postItField;
+ postItField.reset();
}
mvPostItFields.clear();
@@ -1413,7 +1412,7 @@ public:
//Fields more than once.
class FieldDocWatchingStack : public SfxListener
{
- std::vector<SwSidebarItem*>& sidebarItemVector;
+ std::vector<std::unique_ptr<SwSidebarItem>>& sidebarItemVector;
std::vector<const SwFormatField*> v;
SwDocShell& m_rDocShell;
FilterFunctor& m_rFilter;
@@ -1453,7 +1452,7 @@ class FieldDocWatchingStack : public SfxListener
}
public:
- FieldDocWatchingStack(std::vector<SwSidebarItem*>& in, SwDocShell &rDocShell, FilterFunctor& rFilter)
+ FieldDocWatchingStack(std::vector<std::unique_ptr<SwSidebarItem>>& in, SwDocShell &rDocShell, FilterFunctor& rFilter)
: sidebarItemVector(in)
, m_rDocShell(rDocShell)
, m_rFilter(rFilter)
@@ -1724,7 +1723,7 @@ SwAnnotationWin* SwPostItMgr::GetNextPostIt( sal_uInt16 aDirection,
if (mvPostItFields.size()>1)
{
auto i = std::find_if(mvPostItFields.begin(), mvPostItFields.end(),
- [&aPostIt](const SwSidebarItem* pField) { return pField->pPostIt == aPostIt; });
+ [&aPostIt](const std::unique_ptr<SwSidebarItem>& pField) { return pField->pPostIt == aPostIt; });
if (i == mvPostItFields.end())
return nullptr;
@@ -1898,7 +1897,7 @@ vcl::Window* SwPostItMgr::IsHitSidebarWindow(const Point& rPointLogic)
if (bEnableMapMode)
mpEditWin->EnableMapMode();
- for (SwSidebarItem* pItem : mvPostItFields)
+ for (std::unique_ptr<SwSidebarItem>& pItem : mvPostItFields)
{
SwAnnotationWin* pPostIt = pItem->pPostIt;
if (!pPostIt)