Fixing BR # 204 - double click on the sender column in the chatmonitor to switch...
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 11 Aug 2008 12:34:59 +0000 (14:34 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 11 Aug 2008 12:34:59 +0000 (14:34 +0200)
src/client/networkmodel.cpp
src/qtui/chatmonitorview.cpp
src/qtui/chatmonitorview.h

index 38561cc..777e809 100644 (file)
@@ -774,11 +774,10 @@ void NetworkModel::networkRemoved(const NetworkId &networkId) {
 }
 
 QModelIndex NetworkModel::bufferIndex(BufferId bufferId) {
-  BufferItem *bufferItem = findBufferItem(bufferId);
-  if(bufferItem)
-    return indexByItem(bufferItem);
-  else
+  if(!_bufferItemCache.contains(bufferId))
     return QModelIndex();
+
+  return indexByItem(_bufferItemCache[bufferId]);
 }
 
 BufferItem *NetworkModel::findBufferItem(const BufferInfo &bufferInfo) {
index 6b9fe60..6d5d667 100644 (file)
 
 #include "chatmonitorfilter.h"
 #include "chatlinemodel.h"
+#include "chatitem.h"
 #include "chatscene.h"
+#include "client.h"
+#include "networkmodel.h"
+#include "buffermodel.h"
+#include "messagemodel.h"
 #include "qtuisettings.h"
 
 ChatMonitorView::ChatMonitorView(ChatMonitorFilter *filter, QWidget *parent)
@@ -55,6 +60,23 @@ void ChatMonitorView::contextMenuEvent(QContextMenuEvent *event) {
   contextMenu.exec(QCursor::pos());
 }
 
+void ChatMonitorView::mouseDoubleClickEvent(QMouseEvent *event) {
+  if(scene()->sectionByScenePos(event->pos()) != ChatLineModel::SenderColumn)
+    return;
+
+  //ChatItem *chatItem = static_cast<ChatItem *>(itemAt(event->pos()));
+  ChatItem *chatItem = dynamic_cast<ChatItem *>(itemAt(event->pos()));
+  BufferId bufferId = chatItem->data(MessageModel::BufferIdRole).value<BufferId>();
+  if(!bufferId.isValid())
+    return;
+  
+  QModelIndex bufferIdx = Client::networkModel()->bufferIndex(bufferId);
+  if(!bufferIdx.isValid())
+    return;
+
+  Client::bufferModel()->setCurrentIndex(Client::bufferModel()->mapFromSource(bufferIdx));
+}
+
 void ChatMonitorView::showFieldsChanged(bool checked) {
   QAction *showAction = qobject_cast<QAction *>(sender());
   if(!showAction)
index bf0b334..5bb0eb0 100644 (file)
@@ -33,6 +33,7 @@ public:
 
 protected:
   virtual void contextMenuEvent(QContextMenuEvent *event);
+  virtual void mouseDoubleClickEvent(QMouseEvent *event);
 
 private slots:
   void showFieldsChanged(bool checked);