aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/links
diff options
context:
space:
mode:
authorGravatar staticfox2016-08-07 13:04:20 -0400
committerGravatar staticfox2016-08-07 23:12:47 -0400
commit119ba5b60f308116163832178d3e8a160d364a4b (patch)
tree38e7430dcbd872ce507e0e666c8dc652789d01bb /src/modules/links
parentSocketSpy: Move to unordered_set (diff)
downloadKVIrc-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.cpp33
-rw-r--r--src/modules/links/LinksWindow.h5
-rw-r--r--src/modules/links/libkvilinks.cpp15
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(