X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fnetworkmodelcontroller.h;h=1d691f7097fd36c52696de1ba975ce41365a808f;hp=05d4ee36217a512fb3a8a3486de1dac31a20d365;hb=61f33c7895e324f6e95034d86897ad2e963653f1;hpb=e6217df3a59b911d2c449d2a7b997a799d233ed4 diff --git a/src/uisupport/networkmodelcontroller.h b/src/uisupport/networkmodelcontroller.h index 05d4ee36..1d691f70 100644 --- a/src/uisupport/networkmodelcontroller.h +++ b/src/uisupport/networkmodelcontroller.h @@ -22,6 +22,9 @@ #include "uisupport-export.h" +#include +#include + #include #include "action.h" @@ -132,14 +135,24 @@ protected: inline QList indexList() const; inline MessageFilter *messageFilter() const; inline QString contextItem() const; ///< Channel name or nick to provide context menu for - inline QObject *receiver() const; - inline const char *method() const; void setIndexList(const QModelIndex &); void setIndexList(const QList &); void setMessageFilter(MessageFilter *); void setContextItem(const QString &); - void setSlot(QObject *receiver, const char *method); + + using ActionSlot = std::function; + + template + ActionSlot buildActionSlot(Receiver *receiver, Slot slot) + { + static_assert(!std::is_same::value, "Old-style slots not supported"); + return [receiver, slot = std::move(slot)](QAction *action) { + (receiver->*slot)(action); + }; + } + + void setSlot(ActionSlot slot); Action *registerAction(ActionType type, const QString &text, bool checkable = false); Action *registerAction(NetworkModelController::ActionType type, const QIcon &icon, const QString &text, bool checkable = false); @@ -186,8 +199,7 @@ private: QList _indexList; MessageFilter *_messageFilter{nullptr}; QString _contextItem; ///< Channel name or nick to provide context menu for - QObject *_receiver{nullptr}; - const char *_method; + ActionSlot _actionSlot; }; @@ -220,5 +232,3 @@ Action *NetworkModelController::action(ActionType type) const { return _actionBy QList NetworkModelController::indexList() const { return _indexList; } MessageFilter *NetworkModelController::messageFilter() const { return _messageFilter; } QString NetworkModelController::contextItem() const { return _contextItem; } -QObject *NetworkModelController::receiver() const { return _receiver; } -const char *NetworkModelController::method() const { return _method; }