Add a new statusbar widget for displaying CoreConnection's state
[quassel.git] / src / qtui / mainwin.cpp
index 9030bfd..6871ae0 100644 (file)
 #include "chatmonitorview.h"
 #include "chatview.h"
 #include "client.h"
-#include "clientsyncer.h"
 #include "clientbacklogmanager.h"
 #include "clientbufferviewconfig.h"
 #include "clientbufferviewmanager.h"
 #include "clientignorelistmanager.h"
+#include "coreconnection.h"
+#include "coreconnectionstatuswidget.h"
 #include "coreinfodlg.h"
-#include "coreconnectdlg.h"
 #include "contextmenuactionprovider.h"
 #include "debugbufferviewoverlay.h"
 #include "debuglogwidget.h"
 #include "settingspages/chatmonitorsettingspage.h"
 #include "settingspages/chatviewsettingspage.h"
 #include "settingspages/connectionsettingspage.h"
+#include "settingspages/coreaccountsettingspage.h"
 #include "settingspages/generalsettingspage.h"
 #include "settingspages/highlightsettingspage.h"
 #include "settingspages/identitiessettingspage.h"
@@ -124,7 +125,8 @@ MainWin::MainWin(QWidget *parent)
 #endif
     coreLagLabel(new QLabel()),
     sslLabel(new QLabel()),
-    msgProcessorStatusWidget(new MsgProcessorStatusWidget()),
+    _msgProcessorStatusWidget(new MsgProcessorStatusWidget(this)),
+    _coreConnectionStatusWidget(new CoreConnectionStatusWidget(Client::coreConnection(), this)),
     _titleSetter(this),
     _awayLog(0),
     _layoutLoaded(false)
@@ -211,10 +213,11 @@ void MainWin::init() {
   QtUi::actionCollection("General")->action("LockLayout")->setChecked(s.value("LockLayout", false).toBool());
 
   if(Quassel::runMode() != Quassel::Monolithic) {
-    showCoreConnectionDlg(true); // autoconnect if appropriate
+    //showCoreConnectionDlg(true); // autoconnect if appropriate
   } else {
     startInternalCore();
   }
+  Client::coreConnection()->start();
 }
 
 MainWin::~MainWin() {
@@ -311,9 +314,9 @@ 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, QKeySequence::Find))->setCheckable(true);
+                                                0, 0, QKeySequence::Find))->setCheckable(true);
   coll->addAction("ShowAwayLog", new Action(tr("Show Away Log"), coll,
-                                           this, SLOT(showAwayLog())));
+                                            this, SLOT(showAwayLog())));
   coll->addAction("ToggleMenuBar", new Action(SmallIcon("show-menu"), tr("Show &Menubar"), coll,
                                                 0, 0, tr("Ctrl+M")))->setCheckable(true);
 
@@ -623,7 +626,11 @@ void MainWin::setupTitleSetter() {
 
 void MainWin::setupStatusBar() {
   // MessageProcessor progress
-  statusBar()->addPermanentWidget(msgProcessorStatusWidget);
+  statusBar()->addPermanentWidget(_msgProcessorStatusWidget);
+
+  // Connection state
+  _coreConnectionStatusWidget->update();
+  statusBar()->addPermanentWidget(_coreConnectionStatusWidget);
 
   // Core Lag:
   updateLagIndicator();
@@ -646,6 +653,8 @@ void MainWin::setupStatusBar() {
 
   connect(showStatusbar, SIGNAL(toggled(bool)), statusBar(), SLOT(setVisible(bool)));
   connect(showStatusbar, SIGNAL(toggled(bool)), this, SLOT(saveStatusBarStatus(bool)));
+
+  connect(Client::coreConnection(), SIGNAL(connectionMsg(QString)), statusBar(), SLOT(showMessage(QString)));
 }
 
 void MainWin::setupHotList() {
@@ -712,11 +721,11 @@ void MainWin::setConnectedState() {
       action->setVisible(!Client::internalCore());
   }
 
-  disconnect(Client::backlogManager(), SIGNAL(updateProgress(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int)));
+  disconnect(Client::backlogManager(), SIGNAL(updateProgress(int, int)), _msgProcessorStatusWidget, SLOT(setProgress(int, int)));
   disconnect(Client::backlogManager(), SIGNAL(messagesRequested(const QString &)), this, SLOT(showStatusBarMessage(const QString &)));
   disconnect(Client::backlogManager(), SIGNAL(messagesProcessed(const QString &)), this, SLOT(showStatusBarMessage(const QString &)));
   if(!Client::internalCore()) {
-    connect(Client::backlogManager(), SIGNAL(updateProgress(int, int)), msgProcessorStatusWidget, SLOT(setProgress(int, int)));
+    connect(Client::backlogManager(), SIGNAL(updateProgress(int, int)), _msgProcessorStatusWidget, SLOT(setProgress(int, int)));
     connect(Client::backlogManager(), SIGNAL(messagesRequested(const QString &)), this, SLOT(showStatusBarMessage(const QString &)));
     connect(Client::backlogManager(), SIGNAL(messagesProcessed(const QString &)), this, SLOT(showStatusBarMessage(const QString &)));
   }
@@ -746,14 +755,22 @@ void MainWin::setConnectedState() {
 
 void MainWin::loadLayout() {
   QtUiSettings s;
-  int accountId = Client::currentCoreAccount().toInt();
-  restoreState(s.value(QString("MainWinState-%1").arg(accountId)).toByteArray(), accountId);
+  int accountId = Client::currentCoreAccount().accountId().toInt();
+  QByteArray state = s.value(QString("MainWinState-%1").arg(accountId)).toByteArray();
+  if(state.isEmpty()) {
+    // Make sure that the default bufferview is shown
+    if(_bufferViews.count())
+      _bufferViews.at(0)->show();
+    return;
+  }
+
+  restoreState(state, accountId);
   _layoutLoaded = true;
 }
 
 void MainWin::saveLayout() {
   QtUiSettings s;
-  int accountId = Client::currentCoreAccount().toInt();
+  int accountId = Client::currentCoreAccount().accountId().toInt();
   if(accountId > 0) s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId));
 }
 
@@ -804,21 +821,14 @@ void MainWin::setDisconnectedState() {
   sslLabel->hide();
   updateLagIndicator();
   coreLagLabel->hide();
-  if(msgProcessorStatusWidget)
-    msgProcessorStatusWidget->setProgress(0, 0);
+  if(_msgProcessorStatusWidget)
+    _msgProcessorStatusWidget->setProgress(0, 0);
   updateIcon();
   systemTray()->setState(SystemTray::Inactive);
 }
 
 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::showChannelList(NetworkId netId) {
@@ -885,6 +895,10 @@ void MainWin::showSettingsDlg() {
   dlg->registerSettingsPage(new AliasesSettingsPage(dlg));
   dlg->registerSettingsPage(new IgnoreListSettingsPage(dlg));
 
+  if(Quassel::runMode() != Quassel::Monolithic) {
+    dlg->registerSettingsPage(new CoreAccountSettingsPage(dlg));
+  }
+
   dlg->show();
 }