Implemented a basic notification system to show activity in the networkviews
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 11 Jun 2007 14:09:25 +0000 (14:09 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 11 Jun 2007 14:09:25 +0000 (14:09 +0000)
gui/mainwin.cpp
gui/mainwin.h
gui/networkview.cpp
gui/networkview.h

index d90abf9..ce57a99 100644 (file)
@@ -172,6 +172,7 @@ void MainWin::setupViews() {
 void MainWin::registerNetView(NetworkView *view) {
   connect(this, SIGNAL(bufferSelected(Buffer *)), view, SLOT(selectBuffer(Buffer *)));
   connect(this, SIGNAL(bufferUpdated(Buffer *)), view, SLOT(bufferUpdated(Buffer *)));
+  connect(this, SIGNAL(bufferActivity(uint, Buffer *)), view, SLOT(bufferActivity(uint, Buffer *)));
   connect(this, SIGNAL(bufferDestroyed(Buffer *)), view, SLOT(bufferDestroyed(Buffer *)));
   connect(view, SIGNAL(bufferSelected(Buffer *)), this, SLOT(showBuffer(Buffer *)));
   view->setBuffers(buffers.values());
@@ -305,6 +306,16 @@ void MainWin::recvMessage(Message msg) {
   }
   */
   Buffer *b = getBuffer(msg.buffer);
+  
+  uint level = NetworkView::OtherActivity;
+  if(msg.type == Message::Plain or msg.type == Message::Notice){
+    level |= NetworkView::NewMessage;
+  }
+  if(msg.flags & Message::Highlight){
+    level |= NetworkView::Highlight;
+  }
+    
+  emit bufferActivity(level, b);
   //b->displayMsg(msg);
   b->appendChatLine(new ChatLine(msg));
 }
index 06a12fe..8d9aeea 100644 (file)
@@ -59,6 +59,7 @@ class MainWin : public QMainWindow {
     void sendInput(BufferId, QString message);
     void bufferSelected(Buffer *);
     void bufferUpdated(Buffer *);
+    void bufferActivity(uint, Buffer *);
     void bufferDestroyed(Buffer *);
     void backlogReceived(Buffer *, QList<Message>);
     void requestBacklog(BufferId, QVariant, QVariant);
index 86a8376..6664758 100644 (file)
@@ -114,6 +114,31 @@ void NetworkView::bufferUpdated(Buffer *b) {
   }
 }
 
+void NetworkView::bufferActivity(uint level, Buffer *b) {
+  QColor c;
+  if(bufitems.contains(b) and b != currentBuffer) {
+    if(level & Highlight) {
+      c = QColor(Qt::red);
+    } else if(level & NewMessage) {
+      c = QColor(Qt::darkYellow);
+    } else if(level & OtherActivity) {
+      c = QColor(Qt::darkGreen);
+    }
+    bufitems[b]->setForeground(0, c);
+  }
+}
+
+void NetworkView::clearActivity(Buffer *b) {
+  QColor c;
+  // it should be sane not to check if b is in bufitems since we just checked before calling this function
+  if(b->isActive()) {
+      c = QColor(Qt::black);
+  } else {
+    c = QColor(Qt::gray);
+  }
+  bufitems[b]->setForeground(0, c);
+}
+
 bool NetworkView::shouldShow(Buffer *b) {
   // bool f = false;
   if((mode & NoActive) && b->isActive()) return false;
@@ -155,6 +180,7 @@ void NetworkView::selectBuffer(Buffer *b) {
   foreach(QTreeWidgetItem *i, sel) { if(i != item) i->setSelected(false); }
   if(item) {
     item->setSelected(true);
+    clearActivity(b);
     currentBuffer = b;
   } else {
     currentBuffer = 0;
index f6842b6..a85da6c 100644 (file)
@@ -58,7 +58,12 @@ class NetworkView : public QDockWidget {
       SomeNets = 0x04, AllNets = 0x08,
       NoChannels = 0x10, NoQueries = 0x20, NoServers = 0x40
     };
-
+  
+    enum ActivityLevel {
+      NoActivity = 0x00, OtherActivity = 0x01,
+      NewMessage = 0x02, Highlight = 0x40
+    };
+    
     NetworkView(QString name, int mode, QStringList nets = QStringList(), QWidget *parent = 0);
     void setMode(int mode, QStringList nets = QStringList());
     void setName(QString name);
@@ -66,6 +71,7 @@ class NetworkView : public QDockWidget {
 
   public slots:
     void bufferUpdated(Buffer *);
+    void bufferActivity(uint, Buffer *);
     void bufferDestroyed(Buffer *);
     void setBuffers(QList<Buffer *>);
     void selectBuffer(Buffer *);
@@ -90,6 +96,7 @@ class NetworkView : public QDockWidget {
     QTreeWidget *tree;
 
     bool shouldShow(Buffer *);
+    void clearActivity(Buffer *);
 };