properly resetting core lag on disconnect
[quassel.git] / src / qtui / mainwin.cpp
index 431dacd..9bb37b4 100644 (file)
@@ -41,6 +41,7 @@
 #include "chatmonitorview.h"
 #include "chatview.h"
 #include "client.h"
 #include "chatmonitorview.h"
 #include "chatview.h"
 #include "client.h"
+#include "clientsyncer.h"
 #include "clientbacklogmanager.h"
 #include "coreinfodlg.h"
 #include "coreconnectdlg.h"
 #include "clientbacklogmanager.h"
 #include "coreinfodlg.h"
 #include "coreconnectdlg.h"
@@ -115,20 +116,6 @@ MainWin::MainWin(QWidget *parent)
 
   installEventFilter(new JumpKeyHandler(this));
 
 
   installEventFilter(new JumpKeyHandler(this));
 
-#ifndef HAVE_KDE
-    QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this));
-    QtUi::registerNotificationBackend(new SystrayNotificationBackend(this));
-#  ifdef HAVE_PHONON
-    QtUi::registerNotificationBackend(new PhononNotificationBackend(this));
-#  endif
-#  ifdef HAVE_DBUS
-    QtUi::registerNotificationBackend(new DesktopNotificationBackend(this));
-#  endif
-
-#else /* HAVE_KDE */
-    QtUi::registerNotificationBackend(new KNotificationBackend(this));
-#endif /* HAVE_KDE */
-
   QtUiApplication* app = qobject_cast<QtUiApplication*> qApp;
   connect(app, SIGNAL(saveStateToSession(const QString&)), SLOT(saveStateToSession(const QString&)));
   connect(app, SIGNAL(saveStateToSessionSettings(SessionSettings&)), SLOT(saveStateToSessionSettings(SessionSettings&)));
   QtUiApplication* app = qobject_cast<QtUiApplication*> qApp;
   connect(app, SIGNAL(saveStateToSession(const QString&)), SLOT(saveStateToSession(const QString&)));
   connect(app, SIGNAL(saveStateToSessionSettings(SessionSettings&)), SLOT(saveStateToSessionSettings(SessionSettings&)));
@@ -157,7 +144,6 @@ void MainWin::init() {
   setupActions();
   setupBufferWidget();
   setupMenus();
   setupActions();
   setupBufferWidget();
   setupMenus();
-  setupViews();
   setupTopicWidget();
   setupChatMonitor();
   setupNickWidget();
   setupTopicWidget();
   setupChatMonitor();
   setupNickWidget();
@@ -166,6 +152,20 @@ void MainWin::init() {
   setupSystray();
   setupTitleSetter();
 
   setupSystray();
   setupTitleSetter();
 
+#ifndef HAVE_KDE
+  QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this));
+  QtUi::registerNotificationBackend(new SystrayNotificationBackend(this));
+#  ifdef HAVE_PHONON
+  QtUi::registerNotificationBackend(new PhononNotificationBackend(this));
+#  endif
+#  ifdef HAVE_DBUS
+  QtUi::registerNotificationBackend(new DesktopNotificationBackend(this));
+#  endif
+
+#else /* HAVE_KDE */
+  QtUi::registerNotificationBackend(new KNotificationBackend(this));
+#endif /* HAVE_KDE */
+
   // restore mainwin state
   restoreState(s.value("MainWinState").toByteArray());
 
   // restore mainwin state
   restoreState(s.value("MainWinState").toByteArray());
 
@@ -175,7 +175,11 @@ void MainWin::init() {
   setDisconnectedState();  // Disable menus and stuff
 
   show();
   setDisconnectedState();  // Disable menus and stuff
 
   show();
-  showCoreConnectionDlg(true); // autoconnect if appropriate
+  if(Quassel::runMode() != Quassel::Monolithic) {
+    showCoreConnectionDlg(true); // autoconnect if appropriate
+  } else {
+    startInternalCore();
+  }
 }
 
 MainWin::~MainWin() {
 }
 
 MainWin::~MainWin() {
@@ -298,24 +302,20 @@ void MainWin::setupBufferWidget() {
   setCentralWidget(_bufferWidget);
 }
 
   setCentralWidget(_bufferWidget);
 }
 
-void MainWin::setupViews() {
-  addBufferView();
-}
-
 void MainWin::addBufferView(int bufferViewConfigId) {
   addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewConfigId));
 }
 
 void MainWin::addBufferView(BufferViewConfig *config) {
 void MainWin::addBufferView(int bufferViewConfigId) {
   addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewConfigId));
 }
 
 void MainWin::addBufferView(BufferViewConfig *config) {
-  BufferViewDock *dock;
-  if(config)
-    dock = new BufferViewDock(config, this);
-  else
-    dock = new BufferViewDock(this);
+  if(!config)
+    return;
+
+  BufferViewDock *dock = new BufferViewDock(config, this);
 
   //create the view and initialize it's filter
   BufferView *view = new BufferView(dock);
   view->setFilteredModel(Client::bufferModel(), config);
 
   //create the view and initialize it's filter
   BufferView *view = new BufferView(dock);
   view->setFilteredModel(Client::bufferModel(), config);
+  view->installEventFilter(_inputWidget->inputLine()); // for key presses
   view->show();
 
   Client::bufferModel()->synchronizeView(view);
   view->show();
 
   Client::bufferModel()->synchronizeView(view);
@@ -415,20 +415,20 @@ void MainWin::setupInputWidget() {
   VerticalDock *dock = new VerticalDock(tr("Inputline"), this);
   dock->setObjectName("InputDock");
 
   VerticalDock *dock = new VerticalDock(tr("Inputline"), this);
   dock->setObjectName("InputDock");
 
-  InputWidget *inputWidget = new InputWidget(dock);
-  dock->setWidget(inputWidget);
+  _inputWidget = new InputWidget(dock);
+  dock->setWidget(_inputWidget);
 
   addDockWidget(Qt::BottomDockWidgetArea, dock);
 
   _viewMenu->addAction(dock->toggleViewAction());
   dock->toggleViewAction()->setText(tr("Show Input Line"));
 
 
   addDockWidget(Qt::BottomDockWidgetArea, dock);
 
   _viewMenu->addAction(dock->toggleViewAction());
   dock->toggleViewAction()->setText(tr("Show Input Line"));
 
-  inputWidget->setModel(Client::bufferModel());
-  inputWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
+  _inputWidget->setModel(Client::bufferModel());
+  _inputWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
 
 
-  _bufferWidget->setFocusProxy(inputWidget);
+  _bufferWidget->setFocusProxy(_inputWidget);
 
 
-  inputWidget->inputLine()->installEventFilter(_bufferWidget);
+  _inputWidget->inputLine()->installEventFilter(_bufferWidget);
 }
 
 void MainWin::setupTopicWidget() {
 }
 
 void MainWin::setupTopicWidget() {
@@ -458,7 +458,7 @@ void MainWin::setupStatusBar() {
   connect(Client::messageProcessor(), SIGNAL(progressUpdated(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int)));
 
   // Core Lag:
   connect(Client::messageProcessor(), SIGNAL(progressUpdated(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int)));
 
   // Core Lag:
-  updateLagIndicator(0);
+  updateLagIndicator();
   statusBar()->addPermanentWidget(coreLagLabel);
   coreLagLabel->hide();
   connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), this, SLOT(updateLagIndicator(int)));
   statusBar()->addPermanentWidget(coreLagLabel);
   coreLagLabel->hide();
   connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), this, SLOT(updateLagIndicator(int)));
@@ -574,7 +574,12 @@ void MainWin::saveLayout() {
 }
 
 void MainWin::updateLagIndicator(int lag) {
 }
 
 void MainWin::updateLagIndicator(int lag) {
-  coreLagLabel->setText(QString(tr("Core Lag: %1 msec")).arg(lag));
+  QString text = tr("Core Lag: %1");
+  if(lag == -1)
+    text = text.arg('-');
+  else
+    text = text.arg("%1 msec").arg(lag);
+  coreLagLabel->setText(text);
 }
 
 
 }
 
 
@@ -614,10 +619,18 @@ void MainWin::setDisconnectedState() {
   statusBar()->showMessage(tr("Not connected to core."));
   sslLabel->setPixmap(QPixmap());
   sslLabel->hide();
   statusBar()->showMessage(tr("Not connected to core."));
   sslLabel->setPixmap(QPixmap());
   sslLabel->hide();
+  updateLagIndicator();
   coreLagLabel->hide();
   updateIcon();
 }
 
   coreLagLabel->hide();
   updateIcon();
 }
 
+void MainWin::startInternalCore() {
+  ClientSyncer *syncer = new ClientSyncer();
+  Client::registerClientSyncer(syncer);
+  connect(syncer, SIGNAL(syncFinished()), syncer, SLOT(deleteLater()), Qt::QueuedConnection);
+  syncer->useInternalCore();
+}
+
 void MainWin::showCoreConnectionDlg(bool autoConnect) {
   CoreConnectDlg(autoConnect, this).exec();
 }
 void MainWin::showCoreConnectionDlg(bool autoConnect) {
   CoreConnectDlg(autoConnect, this).exec();
 }