Basic implementation of indicators.
[quassel.git] / src / qtui / mainwin.cpp
index 0431468..963f7a2 100644 (file)
 #  include "knotificationbackend.h"
 #endif /* HAVE_KDE */
 
+#ifdef HAVE_INDICATEQT
+  #include "indicatornotificationbackend.h"
+#endif
+
 #include "settingspages/aliasessettingspage.h"
 #include "settingspages/appearancesettingspage.h"
 #include "settingspages/backlogsettingspage.h"
@@ -148,6 +152,7 @@ void MainWin::init() {
   connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
            SLOT(messagesInserted(const QModelIndex &, int, int)));
   connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId)));
+  connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString)));
 
   // Setup Dock Areas
   setDockNestingEnabled(true);
@@ -184,6 +189,12 @@ void MainWin::init() {
   QtUi::registerNotificationBackend(new KNotificationBackend(this));
 #endif /* HAVE_KDE */
 
+#ifdef HAVE_INDICATEQT
+  QtUi::registerNotificationBackend(new IndicatorNotificationBackend(this));
+#endif
+
+  connect(bufferWidget(), SIGNAL(currentChanged(BufferId)), SLOT(currentBufferChanged(BufferId)));
+
   setDisconnectedState();  // Disable menus and stuff
 
 #ifdef HAVE_KDE
@@ -810,6 +821,14 @@ void MainWin::showChannelList(NetworkId netId) {
   channelListDlg->show();
 }
 
+void MainWin::showIgnoreList(QString newRule) {
+  SettingsPageDlg dlg(new IgnoreListSettingsPage(this), this);
+  // prepare config dialog for new rule
+  if(!newRule.isEmpty())
+    qobject_cast<IgnoreListSettingsPage *>(dlg.currentPage())->editIgnoreRule(newRule);
+  dlg.exec();
+}
+
 void MainWin::showCoreInfoDlg() {
   CoreInfoDlg(this).exec();
 }
@@ -868,8 +887,11 @@ void MainWin::showShortcutsDlg() {
 /********************************************************************************************************/
 
 bool MainWin::event(QEvent *event) {
-  if(event->type() == QEvent::WindowActivate)
-    QtUi::closeNotifications();
+  if(event->type() == QEvent::WindowActivate) {
+    BufferId buffer = Client::bufferModel()->currentBuffer();
+    if(buffer.isValid())
+      QtUi::closeNotifications(buffer);
+  }
   return QMainWindow::event(event);
 }
 
@@ -977,7 +999,7 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {
     BufferId bufId = idx.data(ChatLineModel::BufferIdRole).value<BufferId>();
     BufferInfo::Type bufType = Client::networkModel()->bufferType(bufId);
 
-    if(hasFocus && bufId == _bufferWidget->currentBuffer())
+    if(hasFocus && bufId == Client::bufferModel()->currentBuffer())
       continue;
 
     if((flags & Message::Highlight || bufType == BufferInfo::QueryBuffer)
@@ -1003,6 +1025,11 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {
   }
 }
 
+void MainWin::currentBufferChanged(BufferId buffer) {
+  if(buffer.isValid())
+    QtUi::closeNotifications(buffer);
+}
+
 void MainWin::clientNetworkCreated(NetworkId id) {
   const Network *net = Client::network(id);
   QAction *act = new QAction(net->networkName(), this);