Revamp InputLine
[quassel.git] / src / qtui / mainwin.cpp
index 9769de7..5df3a19 100644 (file)
@@ -240,7 +240,7 @@ void MainWin::setupActions() {
   connect(lockAct, SIGNAL(toggled(bool)), SLOT(on_actionLockLayout_toggled(bool)));
 
   coll->addAction("ToggleSearchBar", new Action(SmallIcon("edit-find"), tr("Show &Search Bar"), coll,
-                                               0, 0, tr("Ctrl+F")))->setCheckable(true);
+                                               0, 0, QKeySequence::Find))->setCheckable(true);
   coll->addAction("ShowAwayLog", new Action(tr("Show Away Log"), coll,
                                            this, SLOT(showAwayLog())));
   coll->addAction("ToggleStatusBar", new Action(tr("Show Status &Bar"), coll,
@@ -382,9 +382,26 @@ void MainWin::bufferViewToggled(bool enabled) {
   BufferViewDock *dock = qobject_cast<BufferViewDock *>(action->parent());
   Q_ASSERT(dock);
   if(enabled) {
-    Client::bufferViewManager()->bufferViewOverlay()->addView(dock->bufferViewId());
+    Client::bufferViewOverlay()->addView(dock->bufferViewId());
+    BufferViewConfig *config = dock->config();
+    if(config && config->isInitialized()) {
+      BufferIdList buffers;
+      if(config->networkId().isValid()) {
+        foreach(BufferId bufferId, config->bufferList()) {
+          if(Client::networkModel()->networkId(bufferId) == config->networkId())
+            buffers << bufferId;
+        }
+        foreach(BufferId bufferId, config->temporarilyRemovedBuffers().toList()) {
+          if(Client::networkModel()->networkId(bufferId) == config->networkId())
+            buffers << bufferId;
+        }
+      } else {
+        buffers = BufferIdList::fromSet(config->bufferList().toSet() + config->temporarilyRemovedBuffers());
+      }
+      Client::backlogManager()->checkForBacklog(buffers);
+    }
   } else {
-    Client::bufferViewManager()->bufferViewOverlay()->removeView(dock->bufferViewId());
+    Client::bufferViewOverlay()->removeView(dock->bufferViewId());
   }
 }
 
@@ -550,7 +567,7 @@ void MainWin::setupToolBars() {
 #ifdef Q_WS_MAC
   setUnifiedTitleAndToolBarOnMac(true);
 #endif
-  _mainToolBar = addToolBar("Main Toolbar");
+  _mainToolBar = addToolBar(tr("Main Toolbar"));
   _mainToolBar->setObjectName("MainToolBar");
 
   QtUi::toolBarActionProvider()->addActions(_mainToolBar, ToolBarActionProvider::MainToolBar);
@@ -811,8 +828,7 @@ void MainWin::toggleMinimizedToTray() {
 void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {
   Q_UNUSED(parent);
 
-  if(QApplication::activeWindow() != 0)
-    return;
+  bool hasFocus = QApplication::activeWindow() != 0;
 
   for(int i = start; i <= end; i++) {
     QModelIndex idx = Client::messageModel()->index(i, ChatLineModel::ContentsColumn);
@@ -821,18 +837,33 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) {
       continue;
     }
     Message::Flags flags = (Message::Flags)idx.data(ChatLineModel::FlagsRole).toInt();
-    if(flags.testFlag(Message::Backlog) || flags.testFlag(Message::Self)) continue;
+    if(flags.testFlag(Message::Backlog) || flags.testFlag(Message::Self))
+      continue;
     flags |= Message::Backlog;  // we only want to trigger a highlight once!
     Client::messageModel()->setData(idx, (int)flags, ChatLineModel::FlagsRole);
 
     BufferId bufId = idx.data(ChatLineModel::BufferIdRole).value<BufferId>();
     BufferInfo::Type bufType = Client::networkModel()->bufferType(bufId);
 
+    if(hasFocus && bufId == _bufferWidget->currentBuffer())
+      continue;
+
     if(flags & Message::Highlight || bufType == BufferInfo::QueryBuffer) {
       QModelIndex senderIdx = Client::messageModel()->index(i, ChatLineModel::SenderColumn);
       QString sender = senderIdx.data(ChatLineModel::EditRole).toString();
       QString contents = idx.data(ChatLineModel::DisplayRole).toString();
-      QtUi::invokeNotification(bufId, sender, contents);
+      AbstractNotificationBackend::NotificationType type;
+
+      if(bufType == BufferInfo::QueryBuffer && !hasFocus)
+        type = AbstractNotificationBackend::PrivMsg;
+      else if(bufType == BufferInfo::QueryBuffer && hasFocus)
+        type = AbstractNotificationBackend::PrivMsgFocused;
+      else if(flags & Message::Highlight && !hasFocus)
+        type = AbstractNotificationBackend::Highlight;
+      else
+        type = AbstractNotificationBackend::HighlightFocused;
+
+      QtUi::invokeNotification(bufId, type, sender, contents);
     }
   }
 }
@@ -919,7 +950,7 @@ void MainWin::on_actionDebugBufferViewOverlay_triggered() {
   QTreeView *view = new QTreeView;
   view->setAttribute(Qt::WA_DeleteOnClose);
   view->setWindowTitle("Debug BufferViewOverlay View");
-  BufferViewOverlayFilter *filter = new BufferViewOverlayFilter(Client::bufferModel(), Client::bufferViewManager()->bufferViewOverlay());
+  BufferViewOverlayFilter *filter = new BufferViewOverlayFilter(Client::bufferModel(), Client::bufferViewOverlay());
   filter->setParent(view);
   view->setModel(filter);
   view->setColumnWidth(0, 250);