modernize: Migrate action-related things to PMF connects
[quassel.git] / src / qtui / chatmonitorview.cpp
index 6e00778..07facb5 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -15,7 +15,7 @@
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
 #include "chatmonitorview.h"
 #include <QMenu>
 #include <QContextMenuEvent>
 
+#include "action.h"
+#include "buffermodel.h"
 #include "chatmonitorfilter.h"
 #include "chatlinemodel.h"
 #include "chatitem.h"
 #include "chatscene.h"
 #include "client.h"
+#include "clientignorelistmanager.h"
+#include "icon.h"
 #include "networkmodel.h"
-#include "buffermodel.h"
 #include "messagemodel.h"
 #include "qtuisettings.h"
+#include "settingspagedlg.h"
+#include "settingspages/chatmonitorsettingspage.h"
 
 ChatMonitorView::ChatMonitorView(ChatMonitorFilter *filter, QWidget *parent)
-  : ChatView(filter, parent),
+    : ChatView(filter, parent),
     _filter(filter)
 {
-  scene()->setSenderCutoffMode(ChatScene::CutoffLeft);
+    scene()->setSenderCutoffMode(ChatScene::CutoffLeft);
+    // The normal message prefixes get replaced by the network and buffer name.  Re-add brackets for
+    // all message types.
+    scene()->setAlwaysBracketSender(true);
+    connect(Client::instance(), &Client::coreConnectionStateChanged, this, &ChatMonitorView::coreConnectionStateChanged);
 }
 
-void ChatMonitorView::addActionsToMenu(QMenu *menu, const QPointF &pos) {
-  ChatView::addActionsToMenu(menu, pos);
-  menu->addSeparator();
-  QAction *showOwnNicksAction = menu->addAction(tr("Show Own Messages"), _filter, SLOT(setShowOwnMessages(bool)));
-  showOwnNicksAction->setCheckable(true);
-  showOwnNicksAction->setChecked(_filter->showOwnMessages());
 
-  if(scene()->columnByScenePos(pos) == ChatLineModel::SenderColumn) {
+void ChatMonitorView::addActionsToMenu(QMenu *menu, const QPointF &pos)
+{
+    ChatView::addActionsToMenu(menu, pos);
     menu->addSeparator();
+    auto showOwnNicksAction = new Action(tr("Show Own Messages"), menu, _filter, &ChatMonitorFilter::setShowOwnMessages);
+    showOwnNicksAction->setCheckable(true);
+    showOwnNicksAction->setChecked(_filter->showOwnMessages());
+    menu->addAction(showOwnNicksAction);
+
+    if (scene()->columnByScenePos(pos) == ChatLineModel::SenderColumn) {
+        menu->addSeparator();
+
+        auto showNetworkAction = new Action(tr("Show Network Name"), menu, this, &ChatMonitorView::showFieldsChanged);
+        showNetworkAction->setCheckable(true);
+        showNetworkAction->setChecked(_filter->showFields() & ChatMonitorFilter::NetworkField);
+        showNetworkAction->setData(ChatMonitorFilter::NetworkField);
+        menu->addAction(showNetworkAction);
+
+        auto showBufferAction = new Action(tr("Show Buffer Name"), menu, this, &ChatMonitorView::showFieldsChanged);
+        showBufferAction->setCheckable(true);
+        showBufferAction->setChecked(_filter->showFields() & ChatMonitorFilter::BufferField);
+        showBufferAction->setData(ChatMonitorFilter::BufferField);
+        menu->addAction(showBufferAction);
+    }
+
+    menu->addSeparator();
+    menu->addAction(new Action(icon::get("configure"), tr("Configure..."), menu, this, &ChatMonitorView::showSettingsPage));
+}
 
-    QAction *showNetworkAction = menu->addAction(tr("Show Network Name"), this, SLOT(showFieldsChanged(bool)));
-    showNetworkAction->setCheckable(true);
-    showNetworkAction->setChecked(_filter->showFields() & ChatMonitorFilter::NetworkField);
-    showNetworkAction->setData(ChatMonitorFilter::NetworkField);
 
-    QAction *showBufferAction = menu->addAction(tr("Show Buffer Name"), this, SLOT(showFieldsChanged(bool)));
-    showBufferAction->setCheckable(true);
-    showBufferAction->setChecked(_filter->showFields() & ChatMonitorFilter::BufferField);
-    showBufferAction->setData(ChatMonitorFilter::BufferField);
-  }
+void ChatMonitorView::mouseDoubleClickEvent(QMouseEvent *event)
+{
+    if (scene()->columnByScenePos(event->pos()) != ChatLineModel::SenderColumn) {
+        ChatView::mouseDoubleClickEvent(event);
+        return;
+    }
+
+    ChatItem *chatItem = scene()->chatItemAt(mapToScene(event->pos()));
+    if (!chatItem) {
+        event->ignore();
+        return;
+    }
+
+    event->accept();
+    BufferId bufferId = chatItem->data(MessageModel::BufferIdRole).value<BufferId>();
+    if (!bufferId.isValid())
+        return;
+
+    Client::bufferModel()->switchToBuffer(bufferId);
 }
 
-void ChatMonitorView::mouseDoubleClickEvent(QMouseEvent *event) {
-  if(scene()->columnByScenePos(event->pos()) != ChatLineModel::SenderColumn) {
-    ChatView::mouseDoubleClickEvent(event);
-    return;
-  }
 
-  ChatItem *chatItem = dynamic_cast<ChatItem *>(itemAt(event->pos()));
-  if(!chatItem) {
-    event->ignore();
-    return;
-  }
+void ChatMonitorView::showFieldsChanged(bool checked)
+{
+    auto *showAction = qobject_cast<QAction *>(sender());
+    if (!showAction)
+        return;
+
+    if (checked)
+        _filter->addShowField(showAction->data().toInt());
+    else
+        _filter->removeShowField(showAction->data().toInt());
+}
 
-  event->accept();
-  BufferId bufferId = chatItem->data(MessageModel::BufferIdRole).value<BufferId>();
-  if(!bufferId.isValid())
-    return;
 
-  Client::bufferModel()->switchToBuffer(bufferId);
+void ChatMonitorView::showSettingsPage()
+{
+    SettingsPageDlg dlg(new ChatMonitorSettingsPage(), this);
+    dlg.exec();
 }
 
-void ChatMonitorView::showFieldsChanged(bool checked) {
-  QAction *showAction = qobject_cast<QAction *>(sender());
-  if(!showAction)
-    return;
 
-  if(checked)
-    _filter->addShowField(showAction->data().toInt());
-  else
-    _filter->removeShowField(showAction->data().toInt());
+// connect only after client is synced to core since ChatMonitorView is created before
+// the ignoreListManager
+void ChatMonitorView::coreConnectionStateChanged(bool connected)
+{
+    if (connected)
+        connect(Client::ignoreListManager(), &ClientIgnoreListManager::ignoreListChanged, _filter, &ChatMonitorFilter::invalidateFilter);
 }