diff options
| author | 2016-08-07 13:04:20 -0400 | |
|---|---|---|
| committer | 2016-08-07 23:12:47 -0400 | |
| commit | 119ba5b60f308116163832178d3e8a160d364a4b (patch) | |
| tree | 38e7430dcbd872ce507e0e666c8dc652789d01bb /src/modules/links | |
| parent | SocketSpy: Move to unordered_set (diff) | |
| download | KVIrc-119ba5b60f308116163832178d3e8a160d364a4b.tar.gz KVIrc-119ba5b60f308116163832178d3e8a160d364a4b.tar.bz2 KVIrc-119ba5b60f308116163832178d3e8a160d364a4b.zip | |
Links: Refactor links window and links widget
Diffstat (limited to 'src/modules/links')
| -rw-r--r-- | src/modules/links/LinksWindow.cpp | 33 | ||||
| -rw-r--r-- | src/modules/links/LinksWindow.h | 5 | ||||
| -rw-r--r-- | src/modules/links/libkvilinks.cpp | 15 |
3 files changed, 24 insertions, 29 deletions
diff --git a/src/modules/links/LinksWindow.cpp b/src/modules/links/LinksWindow.cpp index a6ad4a1ef..cacd961de 100644 --- a/src/modules/links/LinksWindow.cpp +++ b/src/modules/links/LinksWindow.cpp @@ -41,12 +41,15 @@ #include <QMouseEvent> #include <QHeaderView> -extern KviPointerList<LinksWindow> * g_pLinksWindowList; +#include <unordered_set> +#include <utility> + +extern std::unordered_set<LinksWindow *> g_pLinksWindowList; LinksWindow::LinksWindow(KviConsoleWindow * lpConsole) : KviWindow(KviWindow::Links, "links", lpConsole), KviExternalServerDataParser() { - g_pLinksWindowList->append(this); + g_pLinksWindowList.insert(this); m_pTopSplitter = new KviTalSplitter(Qt::Horizontal, this); m_pTopSplitter->setObjectName("top_splitter"); @@ -84,9 +87,6 @@ LinksWindow::LinksWindow(KviConsoleWindow * lpConsole) m_pIrcView = new KviIrcView(m_pVertSplitter, this); - m_pLinkList = new KviPointerList<KviLink>; - m_pLinkList->setAutoDelete(true); - m_pHostPopup = new QMenu(); connect(m_pHostPopup, SIGNAL(triggered(QAction *)), this, SLOT(hostPopupClicked(QAction *))); @@ -99,9 +99,8 @@ LinksWindow::LinksWindow(KviConsoleWindow * lpConsole) LinksWindow::~LinksWindow() { - g_pLinksWindowList->removeRef(this); + g_pLinksWindowList.erase(this); m_pConsole->context()->setLinksWindowPointer(nullptr); - delete m_pLinkList; delete m_pHostPopup; } @@ -209,7 +208,7 @@ void LinksWindow::endOfLinks() KviCString szMaxHop, szMaxLinks; m_pListView->setUpdatesEnabled(false); - for(KviLink * l = m_pLinkList->first(); l; l = m_pLinkList->next()) + for(auto & l : m_pLinkList) { totalHosts++; if(l->hops == 0) @@ -245,7 +244,7 @@ void LinksWindow::endOfLinks() } if(l->host.contains('*')) wildServers++; - it = insertLink(l); + it = insertLink(l.get()); if(!it) { output(KVI_OUT_SYSTEMERROR, __tr2qs("Broken link: missing parent (%s) for %s (%d hops): %s (used /LINKS <mask> ?)"), @@ -330,8 +329,7 @@ void LinksWindow::endOfLinks() updateCaption(); - while(!m_pLinkList->isEmpty()) - m_pLinkList->removeFirst(); + m_pLinkList.clear(); m_pListView->resizeColumnToContents(0); m_pListView->setUpdatesEnabled(true); @@ -456,14 +454,13 @@ void LinksWindow::hostPopupClicked(QAction * pAction) void LinksWindow::reset() { outputNoFmt(KVI_OUT_SYSTEMMESSAGE, __tr2qs("Reset")); - while(!m_pLinkList->isEmpty()) - m_pLinkList->removeFirst(); + m_pLinkList.clear(); } void LinksWindow::processData(KviIrcMessage * msg) { output(KVI_OUT_SYSTEMMESSAGE, __tr2qs("Processing link: %s"), msg->allParams()); - KviLink * l = new KviLink; + std::unique_ptr<KviLink> l(new KviLink); l->host = msg->safeParam(1); l->parent = msg->safeParam(2); @@ -486,17 +483,17 @@ void LinksWindow::processData(KviIrcMessage * msg) while(*tr && (*tr == ' ')) tr++; l->description = tr; - uint idx = 0; - for(KviLink * m = m_pLinkList->first(); m; m = m_pLinkList->next()) + std::size_t idx = 0; + for(auto & m : m_pLinkList) { if(m->hops >= l->hops) { - m_pLinkList->insert(idx, l); + m_pLinkList.insert(m_pLinkList.begin() + idx, std::move(l)); return; } idx++; } - m_pLinkList->append(l); + m_pLinkList.push_back(std::move(l)); } void LinksWindow::applyOptions() diff --git a/src/modules/links/LinksWindow.h b/src/modules/links/LinksWindow.h index 7f991b8bd..89b4b40b6 100644 --- a/src/modules/links/LinksWindow.h +++ b/src/modules/links/LinksWindow.h @@ -35,6 +35,9 @@ #include <QToolButton> #include <QMenu> +#include <memory> +#include <vector> + class KviThemedLabel; typedef struct _KviLink @@ -69,7 +72,7 @@ protected: QSplitter * m_pVertSplitter; QSplitter * m_pTopSplitter; LinksListView * m_pListView; - KviPointerList<KviLink> * m_pLinkList; + std::vector<std::unique_ptr<KviLink>> m_pLinkList; QMenu * m_pHostPopup; QString m_szRootServer; QToolButton * m_pRequestButton; diff --git a/src/modules/links/libkvilinks.cpp b/src/modules/links/libkvilinks.cpp index 16f5d7068..35ab344ef 100644 --- a/src/modules/links/libkvilinks.cpp +++ b/src/modules/links/libkvilinks.cpp @@ -30,8 +30,9 @@ #include "KviLocale.h" #include <QSplitter> +#include <unordered_set> -KviPointerList<LinksWindow> * g_pLinksWindowList = nullptr; +std::unordered_set<LinksWindow *> g_pLinksWindowList; /* @doc: links.open @@ -80,26 +81,20 @@ static bool links_kvs_cmd_open(KviKvsModuleCommandCall * c) static bool links_module_init(KviModule * m) { - g_pLinksWindowList = new KviPointerList<LinksWindow>; - g_pLinksWindowList->setAutoDelete(false); - KVSM_REGISTER_SIMPLE_COMMAND(m, "open", links_kvs_cmd_open); - return true; } static bool links_module_cleanup(KviModule *) { - while(g_pLinksWindowList->first()) - g_pLinksWindowList->first()->die(); - delete g_pLinksWindowList; - g_pLinksWindowList = nullptr; + for(auto & l : g_pLinksWindowList) + l->die(); return true; } static bool links_module_can_unload(KviModule *) { - return (g_pLinksWindowList->isEmpty()); + return (g_pLinksWindowList.empty()); } KVIRC_MODULE( |
