Add AbstractActionProvider and accessors to AbstractUi
authorManuel Nickschas <sputnick@quassel-irc.org>
Sun, 30 Nov 2008 04:20:18 +0000 (05:20 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 30 Nov 2008 04:24:41 +0000 (05:24 +0100)
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
src/qtui/mainwin.cpp
src/qtui/qtui.cpp
src/qtui/qtui.h

index 0a855fc..e6e3859 100644 (file)
 #include <QObject>
 #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<QModelIndex> &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
index 0468152..724a3c7 100644 (file)
@@ -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);
index d1c23ca..a5727d6 100644 (file)
 
 #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<QLocale>());
 
index 4baded8..52c06b3 100644 (file)
@@ -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<QString, ActionCollection *> _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