Fixing a client crash that could be triggered under certain preconditions if a ircUse...
[quassel.git] / src / qtui / mainwin.cpp
index 2ae203d..027f7de 100644 (file)
 #include "mainwin.h"
 
 #include "aboutdlg.h"
-#include "chatwidget.h"
 #include "bufferview.h"
 #include "bufferviewconfig.h"
 #include "bufferviewfilter.h"
 #include "bufferviewmanager.h"
 #include "channellistdlg.h"
+#include "chatmonitorfilter.h"
+#include "chatview.h"
 #include "client.h"
 #include "clientbacklogmanager.h"
 #include "coreinfodlg.h"
@@ -45,8 +46,6 @@
 #include "qtuisettings.h"
 #include "jumpkeyhandler.h"
 
-#include "uisettings.h"
-
 #include "selectionmodelsynchronizer.h"
 #include "mappedselectionmodel.h"
 
@@ -59,7 +58,7 @@
 #include "settingspages/highlightsettingspage.h"
 #include "settingspages/identitiessettingspage.h"
 #include "settingspages/networkssettingspage.h"
-
+#include "settingspages/notificationssettingspage.h"
 
 #include "debugconsole.h"
 #include "global.h"
@@ -83,12 +82,12 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent)
 {
   UiSettings uiSettings;
   loadTranslation(uiSettings.value("Locale", QLocale::system()).value<QLocale>());
-  
+
   QString style = uiSettings.value("Style", QString("")).toString();
   if(style != "") {
     QApplication::setStyle(style);
   }
-  
+
   ui.setupUi(this);
   setWindowTitle("Quassel IRC");
   setWindowIcon(offlineTrayIcon);
@@ -100,12 +99,6 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent)
 
   installEventFilter(new JumpKeyHandler(this));
 
-  UiSettings uiSettings;
-  QString style = uiSettings.value("Style", QString("")).toString();
-  if(style != "") {
-    QApplication::setStyle(style);
-  }
-
 #ifdef HAVE_DBUS
   desktopNotifications = new org::freedesktop::Notifications(
                             "org.freedesktop.Notifications",
@@ -158,9 +151,9 @@ void MainWin::init() {
   // restore mainwin state
   restoreState(s.value("MainWinState").toByteArray());
 
-  // restore locked state of docks  
+  // restore locked state of docks
   ui.actionLockDockPositions->setChecked(s.value("LockDocks", false).toBool());
-  
+
 
   setDisconnectedState();  // Disable menus and stuff
   showCoreConnectionDlg(true); // autoconnect if appropriate
@@ -212,7 +205,7 @@ void MainWin::addBufferView(BufferViewConfig *config) {
   view->show();
 
   connect(&view->showChannelList, SIGNAL(triggered()), this, SLOT(showChannelList()));
-  
+
   Client::bufferModel()->synchronizeView(view);
 
   dock->setWidget(view);
@@ -249,6 +242,7 @@ void MainWin::setupSettingsDlg() {
   settingsDlg->registerSettingsPage(new GeneralSettingsPage(settingsDlg));
   settingsDlg->registerSettingsPage(new HighlightSettingsPage(settingsDlg));
   settingsDlg->registerSettingsPage(new AliasesSettingsPage(settingsDlg));
+  settingsDlg->registerSettingsPage(new NotificationsSettingsPage(settingsDlg));
   //Category: General
   settingsDlg->registerSettingsPage(new IdentitiesSettingsPage(settingsDlg));
   settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg));
@@ -293,26 +287,17 @@ void MainWin::setupNickWidget() {
 }
 
 void MainWin::setupChatMonitor() {
-#ifndef SPUTDEV
   VerticalDock *dock = new VerticalDock(tr("Chat Monitor"), this);
   dock->setObjectName("ChatMonitorDock");
 
-  ChatWidget *chatWidget = new ChatWidget(0, this);
-  chatWidget->show();
-  dock->setWidget(chatWidget);
+  ChatMonitorFilter *filter = new ChatMonitorFilter(Client::messageModel(), this);
+  ChatView *chatView = new ChatView(filter, this);
+  chatView->show();
+  dock->setWidget(chatView);
   dock->show();
 
-  Buffer *buf = Client::monitorBuffer();
-  if(!buf)
-    return;
-
-  chatWidget->setContents(buf->contents());
-  connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), chatWidget, SLOT(appendMsg(AbstractUiMsg *)));
-  connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), chatWidget, SLOT(prependMsg(AbstractUiMsg *)));
-
   addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical);
   ui.menuViews->addAction(dock->toggleViewAction());
-#endif /* SPUTDEV */
 }
 
 void MainWin::setupInputWidget() {
@@ -607,21 +592,21 @@ void MainWin::receiveMessage(const Message &msg) {
 
     UiSettings uiSettings;
 
-#ifndef SPUTDEV
     bool displayBubble = uiSettings.value("NotificationBubble", QVariant(true)).toBool();
     bool displayDesktop = uiSettings.value("NotificationDesktop", QVariant(true)).toBool();
     if(displayBubble || displayDesktop) {
-      // FIXME don't invoke style engine for this!
-      QString text = QtUi::style()->styleString(Message::mircToInternal(msg.contents())).plainText;
-      if(displayBubble) displayTrayIconMessage(title, text);
+      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);
+        if(displayDesktop) sendDesktopNotification(title, text);
 #  endif
-    }
-#endif
-    if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) {
-      QApplication::alert(this);
-      setTrayIconActivity(true);
+      }
+      if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) {
+        QApplication::alert(this);
+        setTrayIconActivity(true);
+      }
     }
   }
 }
@@ -661,24 +646,27 @@ void MainWin::sendDesktopNotification(const QString &title, const QString &messa
 
   if(!reply.isValid()) {
     /* ERROR */
-    qDebug() << "Error on sending notification...";
+    // could also happen if no notification service runs, so... whatever :)
+    //qDebug() << "Error on sending notification..." << reply.error();
     return;
   }
 
   notificationId = reply.value();
 
-  qDebug() << "ID: " << notificationId << " Time: " << QTime::currentTime().toString();
+  // qDebug() << "ID: " << notificationId << " Time: " << QTime::currentTime().toString();
 }
 
 
 void MainWin::desktopNotificationClosed(uint id, uint reason) {
-  qDebug() << "OID: " << notificationId << " ID: " << id << " Reason: " << reason << " Time: " << QTime::currentTime().toString();
+  Q_UNUSED(id); Q_UNUSED(reason);
+  // qDebug() << "OID: " << notificationId << " ID: " << id << " Reason: " << reason << " Time: " << QTime::currentTime().toString();
   notificationId = 0;
 }
 
 
 void MainWin::desktopNotificationInvoked(uint id, const QString & action) {
-  qDebug() << "OID: " << notificationId << " ID: " << id << " Action: " << action << " Time: " << QTime::currentTime().toString();
+  Q_UNUSED(id); Q_UNUSED(action);
+  // qDebug() << "OID: " << notificationId << " ID: " << id << " Action: " << action << " Time: " << QTime::currentTime().toString();
 }
 
 #endif /* HAVE_DBUS */
@@ -757,7 +745,7 @@ void MainWin::clientNetworkRemoved(NetworkId id) {
   QAction *action = findChild<QAction *>(QString("NetworkAction-%1").arg(id.toInt()));
   if(!action)
     return;
-  
+
   action->deleteLater();
 }
 
@@ -770,3 +758,16 @@ void MainWin::connectOrDisconnectFromNet() {
   else net->requestDisconnect();
 }
 
+
+
+void MainWin::on_actionDebugNetworkModel_triggered(bool) {
+  QTreeView *view = new QTreeView;
+  view->setAttribute(Qt::WA_DeleteOnClose);
+  view->setWindowTitle("Debug NetworkModel View");
+  view->setModel(Client::networkModel());
+  view->setColumnWidth(0, 250);
+  view->setColumnWidth(1, 250);
+  view->setColumnWidth(2, 80);
+  view->resize(610, 300);
+  view->show();
+}