From a6e8797b9d3b6de55aba1f2a9d945858a4364025 Mon Sep 17 00:00:00 2001 From: John Maguire Date: Thu, 6 Oct 2011 13:11:18 +0200 Subject: [PATCH] Add some syntactic sugar to closures. --- src/core/closure.cpp | 6 ++++++ src/core/closure.h | 31 +++++++++++++++++++++++++++++ src/internet/groovesharkservice.cpp | 14 ++++++------- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/core/closure.cpp b/src/core/closure.cpp index 9db845a1a..66595bab6 100644 --- a/src/core/closure.cpp +++ b/src/core/closure.cpp @@ -63,3 +63,9 @@ void Closure::Cleanup() { disconnect(); deleteLater(); } + +Closure* NewClosure( + QObject* sender, const char* signal, + QObject* receiver, const char* slot) { + return new Closure(sender, signal, receiver, slot); +} diff --git a/src/core/closure.h b/src/core/closure.h index 482cfa9a6..fe215a67c 100644 --- a/src/core/closure.h +++ b/src/core/closure.h @@ -73,4 +73,35 @@ class Closure : public QObject { #define C_ARG(type, data) new ClosureArgument(data) +Closure* NewClosure( + QObject* sender, + const char* signal, + QObject* receiver, + const char* slot); + +template +Closure* NewClosure( + QObject* sender, + const char* signal, + QObject* receiver, + const char* slot, + const T& val0) { + return new Closure( + sender, signal, receiver, slot, + C_ARG(T, val0)); +} + +template +Closure* NewClosure( + QObject* sender, + const char* signal, + QObject* receiver, + const char* slot, + const T0& val0, + const T1& val1) { + return new Closure( + sender, signal, receiver, slot, + C_ARG(T0, val0), C_ARG(T1, val1)); +} + #endif // CLOSURE_H diff --git a/src/internet/groovesharkservice.cpp b/src/internet/groovesharkservice.cpp index b0d6b35ae..aac115a87 100644 --- a/src/internet/groovesharkservice.cpp +++ b/src/internet/groovesharkservice.cpp @@ -173,10 +173,9 @@ int GroovesharkService::SearchAlbums(const QString& query) { const int id = next_pending_search_id_++; - new Closure(reply, SIGNAL(finished()), - this, SLOT(SearchAlbumsFinished(QNetworkReply*,int)), - C_ARG(QNetworkReply*, reply), - C_ARG(int, id)); + NewClosure(reply, SIGNAL(finished()), + this, SLOT(SearchAlbumsFinished(QNetworkReply*,int)), + reply, id); return id; } @@ -222,10 +221,9 @@ void GroovesharkService::FetchSongsForAlbum(int id, quint64 album_id) { << Param("country", ""); QNetworkReply* reply = CreateRequest("getAlbumSongs", parameters, false); - new Closure(reply, SIGNAL(finished()), - this, SLOT(GetAlbumSongsFinished(QNetworkReply*,int)), - C_ARG(QNetworkReply*, reply), - C_ARG(int, id)); + NewClosure(reply, SIGNAL(finished()), + this, SLOT(GetAlbumSongsFinished(QNetworkReply*,int)), + reply, id); } void GroovesharkService::GetAlbumSongsFinished(