From 4fc9a40ac1c6f34116cea134d4bfee8569e01c25 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Sun, 30 Nov 2008 05:20:18 +0100 Subject: [PATCH] Add AbstractActionProvider and accessors to AbstractUi That way, we can access our ActionProvider directly, without going through MainWin. Needs to be abstract here, because we need it in Client. --- src/client/quasselui.h | 24 ++++++++++++++++++++++++ src/qtui/mainwin.cpp | 3 +-- src/qtui/qtui.cpp | 5 ++++- src/qtui/qtui.h | 4 ++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/client/quasselui.h b/src/client/quasselui.h index 0a855fc2..e6e38591 100644 --- a/src/client/quasselui.h +++ b/src/client/quasselui.h @@ -24,8 +24,13 @@ #include #include "message.h" +class MessageFilter; class MessageModel; class AbstractMessageProcessor; +class AbstractActionProvider; + +class QAction; +class QMenu; class AbstractUi : public QObject { Q_OBJECT @@ -36,6 +41,7 @@ class AbstractUi : public QObject { virtual void init() {}; // called after the client is initialized virtual MessageModel *createMessageModel(QObject *parent) = 0; virtual AbstractMessageProcessor *createMessageProcessor(QObject *parent) = 0; + virtual AbstractActionProvider *actionProvider() const = 0; inline static bool isVisible() { return _visible; } inline static void setVisible(bool visible) { _visible = visible; } @@ -53,4 +59,22 @@ class AbstractUi : public QObject { static bool _visible; }; +class AbstractActionProvider : public QObject { + Q_OBJECT + + public: + AbstractActionProvider(QObject *parent = 0) : QObject(parent) {} + virtual ~AbstractActionProvider() {} + + virtual void addActions(QMenu *, const QModelIndex &index, QObject *receiver = 0, const char *method = 0, bool allowBufferHide = false) = 0; + virtual void addActions(QMenu *, const QList &indexList, QObject *receiver = 0, const char *method = 0, bool allowBufferHide = false) = 0; + virtual void addActions(QMenu *, BufferId id, QObject *receiver = 0, const char *method = 0) = 0; + virtual void addActions(QMenu *, MessageFilter *filter, QObject *receiver = 0, const char *method = 0) = 0; + + signals: + void showChannelList(NetworkId); + void showIgnoreList(NetworkId); + +}; + #endif diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 04681529..724a3c76 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -114,6 +114,7 @@ void MainWin::init() { connect(QApplication::instance(), SIGNAL(aboutToQuit()), SLOT(saveLayout())); connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), SLOT(clientNetworkCreated(NetworkId))); connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), SLOT(clientNetworkRemoved(NetworkId))); + connect(Client::mainUi()->actionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); // Setup Dock Areas setDockNestingEnabled(true); @@ -271,8 +272,6 @@ void MainWin::addBufferView(BufferViewConfig *config) { view->setFilteredModel(Client::bufferModel(), config); view->show(); - connect(&view->showChannelList, SIGNAL(triggered()), this, SLOT(showChannelList())); - Client::bufferModel()->synchronizeView(view); dock->setWidget(view); diff --git a/src/qtui/qtui.cpp b/src/qtui/qtui.cpp index d1c23ca0..a5727d64 100644 --- a/src/qtui/qtui.cpp +++ b/src/qtui/qtui.cpp @@ -20,10 +20,11 @@ #include "qtui.h" +#include "abstractnotificationbackend.h" #include "actioncollection.h" #include "chatlinemodel.h" #include "mainwin.h" -#include "abstractnotificationbackend.h" +#include "networkmodelactionprovider.h" #include "qtuimessageprocessor.h" #include "qtuisettings.h" #include "qtuistyle.h" @@ -42,6 +43,8 @@ QtUi::QtUi() : AbstractUi() { return; } + _actionProvider = new NetworkModelActionProvider(this); + QtUiSettings uiSettings; loadTranslation(uiSettings.value("Locale", QLocale::system()).value()); diff --git a/src/qtui/qtui.h b/src/qtui/qtui.h index 4baded89..52c06b3a 100644 --- a/src/qtui/qtui.h +++ b/src/qtui/qtui.h @@ -55,6 +55,7 @@ public: * @param category The category (default: "General") */ static ActionCollection *actionCollection(const QString &category = "General"); + inline AbstractActionProvider *actionProvider() const; /* Notifications */ @@ -75,6 +76,8 @@ protected slots: void disconnectedFromCore(); private: + AbstractActionProvider *_actionProvider; + static MainWin *_mainWin; static QHash _actionCollections; static QtUiStyle *_style; @@ -84,5 +87,6 @@ private: QtUiStyle *QtUi::style() { return _style; } MainWin *QtUi::mainWindow() { return _mainWin; } +AbstractActionProvider *QtUi::actionProvider() const { return _actionProvider; } #endif -- 2.20.1