Make _mainWin a QPointer, to avoid problems with double deletion in case we use KDE
[quassel.git] / src / qtui / qtui.h
index 93e9457..9a00ef4 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#ifndef _QTUI_H_
-#define _QTUI_H_
+#ifndef QTUI_H
+#define QTUI_H
 
-#include "qtuistyle.h"
 #include "quasselui.h"
 
+#include "abstractnotificationbackend.h"
+#include "mainwin.h"
+
+class ActionCollection;
 class MainWin;
+class MessageModel;
+class QtUiMessageProcessor;
+class QtUiStyle;
 
 //! This class encapsulates Quassel's Qt-based GUI.
 /** This is basically a wrapper around MainWin, which is necessary because we cannot derive MainWin
@@ -33,21 +39,55 @@ class MainWin;
 class QtUi : public AbstractUi {
   Q_OBJECT
 
-  public:
-    QtUi();
-    ~QtUi();
-    void init();
-    AbstractUiMsg *layoutMsg(const Message &);
+public:
+  QtUi();
+  ~QtUi();
+
+  MessageModel *createMessageModel(QObject *parent);
+  AbstractMessageProcessor *createMessageProcessor(QObject *parent);
+
+  inline static QtUiStyle *style();
+  inline static MainWin *mainWindow();
+
+  //! Access global ActionCollections.
+  /** These ActionCollections are associated with the main window, i.e. they contain global
+   *  actions (and thus, shortcuts). Widgets providing application-wide shortcuts should
+   *  create appropriate Action objects using QtUi::actionCollection(cat)->add\<Action\>().
+   *  @param category The category (default: "General")
+   */
+  static ActionCollection *actionCollection(const QString &category = "General");
+  inline AbstractActionProvider *actionProvider() const;
 
-    static QtUiStyle *style();
+  /* Notifications */
 
-  protected slots:
-    void connectedToCore();
-    void disconnectedFromCore();
+  static void registerNotificationBackend(AbstractNotificationBackend *);
+  static void unregisterNotificationBackend(AbstractNotificationBackend *);
+  static void unregisterAllNotificationBackends();
+  static const QList<AbstractNotificationBackend *> &notificationBackends();
+  static uint invokeNotification(BufferId bufId, const QString &sender, const QString &text);
+  static void closeNotification(uint notificationId);
+  static void closeNotifications(BufferId bufferId = BufferId());
+  static const QList<AbstractNotificationBackend::Notification> &activeNotifications();
 
-  private:
-    MainWin *mainWin;
-    static QtUiStyle *_style;
+public slots:
+  void init();
+
+protected slots:
+  void connectedToCore();
+  void disconnectedFromCore();
+
+private:
+  AbstractActionProvider *_actionProvider;
+
+  static QPointer<MainWin> _mainWin;
+  static QHash<QString, ActionCollection *> _actionCollections;
+  static QtUiStyle *_style;
+  static QList<AbstractNotificationBackend *> _notificationBackends;
+  static QList<AbstractNotificationBackend::Notification> _notifications;
 };
 
+QtUiStyle *QtUi::style() { return _style; }
+MainWin *QtUi::mainWindow() { return _mainWin; }
+AbstractActionProvider *QtUi::actionProvider() const { return _actionProvider; }
+
 #endif