Continuing my personal crusade against Buffer.
[quassel.git] / src / qtui / mainwin.h
index b84a85c..28c94d1 100644 (file)
 #include "ui_mainwin.h"
 
 #include "qtui.h"
-#include "bufferviewfilter.h"
+#include "titlesetter.h"
+
+#include <QSystemTrayIcon>
+#include <QTimer>
 
-class ServerListDlg;
-class CoreConnectDlg;
 class Buffer;
-class SettingsDlg;
-class QtUi;
+class BufferViewConfig;
+class MsgProcessorStatusWidget;
 class Message;
 class NickListWidget;
 
-class DebugConsole;
+#ifdef HAVE_DBUS
+#  include "desktopnotifications.h"
+#endif
 
 //!\brief The main window of Quassel's QtUi.
 class MainWin : public QMainWindow {
   Q_OBJECT
 
-  public:
-    MainWin(QtUi *gui, QWidget *parent = 0);
-    virtual ~MainWin();
-
-    void init();
-    QDockWidget *addBufferView(const QString &, QAbstractItemModel *, const BufferViewFilter::Modes &, const QList<NetworkId> &);
-
-    AbstractUiMsg *layoutMsg(const Message &);
-
-  protected:
-    void closeEvent(QCloseEvent *event);
-
-  protected slots:
-    void connectedToCore();
-    void disconnectedFromCore();
-
-  private slots:
-
-    void showServerList();
-    void showSettingsDlg();
-    void showDebugConsole();
-    void showCoreConnectionDlg(bool autoConnect = false);
-    void coreConnectionDlgFinished(int result);
+public:
+  MainWin(QWidget *parent = 0);
+  virtual ~MainWin();
 
-  signals:
-    void connectToCore(const QVariantMap &connInfo);
-    void disconnectFromCore();
-    void requestBacklog(BufferInfo, QVariant, QVariant);
+  void init();
+  void addBufferView(BufferViewConfig *config = 0);
 
-  private:
-    Ui::MainWin ui;
-    QtUi *gui;
+  void displayTrayIconMessage(const QString &title, const QString &message);
 
-    void setupMenus();
-    void setupViews();
-    void setupSettingsDlg();
-
-    void enableMenus();
-
-    QSystemTrayIcon *systray;
-
-    ServerListDlg *serverListDlg;
-    CoreConnectDlg *coreConnectDlg;
-    SettingsDlg *settingsDlg;
-
-    BufferId currentBuffer;
-    QString currentProfile;
-
-    QList<QDockWidget *> netViews;
-    QDockWidget *nickDock;
-    NickListWidget *nickListWidget;
+#ifdef HAVE_DBUS
+  void sendDesktopNotification(const QString &title, const QString &message);
+#endif
 
-    DebugConsole *debugConsole;
-    friend class QtUi;
+  virtual bool event(QEvent *event);
+
+public slots:
+  void setTrayIconActivity(bool active = false);
+
+protected:
+  void closeEvent(QCloseEvent *event);
+  virtual void changeEvent(QEvent *event);
+                                        
+protected slots:
+  void connectedToCore();
+  void setConnectedState();
+  void updateLagIndicator(int lag);
+  void securedConnection();
+  void disconnectedFromCore();
+  void setDisconnectedState();
+  void systrayActivated( QSystemTrayIcon::ActivationReason );
+                                                           
+private slots:
+  void addBufferView(int bufferViewConfigId);
+  void removeBufferView(int bufferViewConfigId);
+  void messagesInserted(const QModelIndex &parent, int start, int end);
+  void showChannelList(NetworkId netId = NetworkId());
+  void showCoreInfoDlg();
+  void showSettingsDlg();
+  void on_actionEditNetworks_triggered();
+  void on_actionManageViews_triggered();
+  void on_actionLockDockPositions_toggled(bool lock);
+  void showAboutDlg();
+  void on_actionDebugNetworkModel_triggered(bool);
+  
+  void showCoreConnectionDlg(bool autoConnect = false);
+  
+  void clientNetworkCreated(NetworkId);
+  void clientNetworkRemoved(NetworkId);
+  void clientNetworkUpdated();
+  void connectOrDisconnectFromNet();
+  
+  void makeTrayIconBlink();
+  void saveStatusBarStatus(bool enabled);
+
+  void loadLayout();
+  void saveLayout();
+  
+#ifdef HAVE_DBUS
+  void desktopNotificationClosed(uint id, uint reason);
+  void desktopNotificationInvoked(uint id, const QString & action);
+#endif
+  
+signals:
+  void connectToCore(const QVariantMap &connInfo);
+  void disconnectFromCore();
+  void requestBacklog(BufferInfo, QVariant, QVariant);
+  
+private:
+  Ui::MainWin ui;
+  
+  QMenu *systrayMenu;
+  QLabel *coreLagLabel;
+  QLabel *sslLabel;
+  MsgProcessorStatusWidget *msgProcessorStatusWidget;
+  
+  TitleSetter _titleSetter;
+  
+  void setupMenus();
+  void setupViews();
+  void setupNickWidget();
+  void setupChatMonitor();
+  void setupInputWidget();
+  void setupTopicWidget();
+  void setupStatusBar();
+  void setupSystray();
+  
+  void toggleVisibility();
+  
+  void enableMenus();
+  
+  QSystemTrayIcon *systray;
+  QIcon activeTrayIcon;
+  QIcon onlineTrayIcon;
+  QIcon offlineTrayIcon;
+  bool trayIconActive;
+  QTimer *timer;
+
+  BufferId currentBuffer;
+  QString currentProfile;
+  
+  QList<QDockWidget *> _netViews;
+  NickListWidget *nickListWidget;
+  
+#ifdef HAVE_DBUS
+  org::freedesktop::Notifications *desktopNotifications;
+  quint32 notificationId;
+#endif
+  
+  friend class QtUi;
 };
 
 #endif