fixing BR #261 (making fields removable from the chatmonitor). Changes effect current...
[quassel.git] / src / qtui / mainwin.cpp
index 027f7de..9d0de30 100644 (file)
 #include "bufferviewfilter.h"
 #include "bufferviewmanager.h"
 #include "channellistdlg.h"
+#include "chatlinemodel.h"
 #include "chatmonitorfilter.h"
+#include "chatmonitorview.h"
 #include "chatview.h"
 #include "client.h"
 #include "clientbacklogmanager.h"
 #include "coreinfodlg.h"
 #include "coreconnectdlg.h"
+#include "msgprocessorstatuswidget.h"
+#include "qtuimessageprocessor.h"
 #include "networkmodel.h"
 #include "buffermodel.h"
 #include "nicklistwidget.h"
@@ -69,6 +73,7 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent)
     gui(_gui),
     coreLagLabel(new QLabel()),
     sslLabel(new QLabel()),
+    msgProcessorStatusWidget(new MsgProcessorStatusWidget()),
     _titleSetter(this),
     systray(new QSystemTrayIcon(this)),
     activeTrayIcon(":/icons/quassel-icon-active.png"),
@@ -291,7 +296,7 @@ void MainWin::setupChatMonitor() {
   dock->setObjectName("ChatMonitorDock");
 
   ChatMonitorFilter *filter = new ChatMonitorFilter(Client::messageModel(), this);
-  ChatView *chatView = new ChatView(filter, this);
+  ChatMonitorView *chatView = new ChatMonitorView(filter, this);
   chatView->show();
   dock->setWidget(chatView);
   dock->show();
@@ -334,6 +339,10 @@ void MainWin::setupTopicWidget() {
 }
 
 void MainWin::setupStatusBar() {
+  // MessageProcessor progress
+  statusBar()->addPermanentWidget(msgProcessorStatusWidget);
+  connect(Client::messageProcessor(), SIGNAL(progressUpdated(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int)));
+
   // Core Lag:
   updateLagIndicator(0);
   statusBar()->addPermanentWidget(coreLagLabel);
@@ -365,7 +374,8 @@ void MainWin::saveStatusBarStatus(bool enabled) {
 
 void MainWin::setupSystray() {
   connect(timer, SIGNAL(timeout()), this, SLOT(makeTrayIconBlink()));
-  connect(Client::instance(), SIGNAL(messageReceived(const Message &)), this, SLOT(receiveMessage(const Message &)));
+  connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+                            this, SLOT(messagesInserted(const QModelIndex &, int, int)));
 
   systrayMenu = new QMenu(this);
   systrayMenu->addAction(ui.actionAboutQuassel);
@@ -449,7 +459,7 @@ void MainWin::saveLayout() {
 }
 
 void MainWin::updateLagIndicator(int lag) {
-  coreLagLabel->setText(QString("Core Lag: %1 msec").arg(lag));
+  coreLagLabel->setText(QString(tr("Core Lag: %1 msec")).arg(lag));
 }
 
 
@@ -576,36 +586,44 @@ void MainWin::toggleVisibility() {
   }
 }
 
-void MainWin::receiveMessage(const Message &msg) {
+void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {
+  Q_UNUSED(parent);
   if(QApplication::activeWindow() != 0)
     return;
 
-  if(msg.flags() & Message::Highlight || msg.bufferInfo().type() == BufferInfo::QueryBuffer) {
-    QString title = msg.bufferInfo().bufferName();;
-    if(msg.bufferInfo().type() != BufferInfo::QueryBuffer) {
-      QString sender = msg.sender();
-      int i = sender.indexOf("!");
-      if(i != -1)
-        sender = sender.left(i);
-      title += QString(" - %1").arg(sender);
-    }
+  // FIXME
+  return;
 
-    UiSettings uiSettings;
-
-    bool displayBubble = uiSettings.value("NotificationBubble", QVariant(true)).toBool();
-    bool displayDesktop = uiSettings.value("NotificationDesktop", QVariant(true)).toBool();
-    if(displayBubble || displayDesktop) {
-      if(uiSettings.value("DisplayPopupMessages", QVariant(true)).toBool()) {
-        // FIXME don't invoke style engine for this!
-        QString text = QtUi::style()->styleString(msg.contents()).plainText;
-        if(displayBubble) displayTrayIconMessage(title, text);
-#  ifdef HAVE_DBUS
-        if(displayDesktop) sendDesktopNotification(title, text);
-#  endif
-      }
-      if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) {
-        QApplication::alert(this);
-        setTrayIconActivity(true);
+  for(int i = start; i <= end; i++) {
+    QModelIndex idx = Client::messageModel()->index(i, ChatLineModel::ContentsColumn);
+    if(!idx.isValid()) {
+      qDebug() << "MainWin::messagesInserted(): Invalid model index!";
+      continue;
+    }
+    Message::Flags flags = (Message::Flags)idx.data(ChatLineModel::FlagsRole).toInt();
+    BufferId bufId = idx.data(ChatLineModel::BufferIdRole).value<BufferId>();
+    BufferInfo::Type bufType = Client::networkModel()->bufferType(bufId);
+
+    if(flags & Message::Highlight || bufType == BufferInfo::QueryBuffer) {
+      QString title = Client::networkModel()->networkName(bufId) + " - " + Client::networkModel()->bufferName(bufId);
+
+      // FIXME Don't instantiate this for every highlight...
+      UiSettings uiSettings;
+
+      bool displayBubble = uiSettings.value("NotificationBubble", QVariant(true)).toBool();
+      bool displayDesktop = uiSettings.value("NotificationDesktop", QVariant(true)).toBool();
+      if(displayBubble || displayDesktop) {
+        if(uiSettings.value("DisplayPopupMessages", QVariant(true)).toBool()) {
+          QString text = idx.data(ChatLineModel::DisplayRole).toString();
+          if(displayBubble) displayTrayIconMessage(title, text);
+#   ifdef HAVE_DBUS
+          if(displayDesktop) sendDesktopNotification(title, text);
+#   endif
+        }
+        if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) {
+          QApplication::alert(this);
+          setTrayIconActivity(true);
+        }
       }
     }
   }