X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=522766b7d03acb670285eb03170a073b3119cabd;hp=1191d88f934f62e4a685d4259bcc7a5478ed9575;hb=bf86381e85cd97ef04a9dc45c2b1a063035391fa;hpb=39cf1e00fdc1108a393103433b3f5854b6df673e diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 1191d88f..522766b7 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -51,13 +51,14 @@ #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 "coreinfodlg.h" #include "coreconnectdlg.h" +#include "coreconnection.h" +#include "coreconnectionstatuswidget.h" +#include "coreinfodlg.h" #include "contextmenuactionprovider.h" #include "debugbufferviewoverlay.h" #include "debuglogwidget.h" @@ -105,6 +106,7 @@ #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 +126,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) @@ -210,10 +213,10 @@ void MainWin::init() { // restore locked state of docks QtUi::actionCollection("General")->action("LockLayout")->setChecked(s.value("LockLayout", false).toBool()); - if(Quassel::runMode() != Quassel::Monolithic) { - showCoreConnectionDlg(true); // autoconnect if appropriate - } else { - startInternalCore(); + CoreConnection *conn = Client::coreConnection(); + if(!conn->connectToCore()) { + // No autoconnect selected (or no accounts) + showCoreConnectionDlg(); } } @@ -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); @@ -469,6 +472,7 @@ void MainWin::removeBufferView(int bufferViewConfigId) { if(dock && actionData.toInt() == bufferViewConfigId) { removeAction(action); _bufferViews.removeAll(dock); + Client::bufferViewOverlay()->removeView(dock->bufferViewId()); dock->deleteLater(); } } @@ -479,6 +483,11 @@ void MainWin::bufferViewToggled(bool enabled) { Q_ASSERT(action); BufferViewDock *dock = qobject_cast(action->parent()); Q_ASSERT(dock); + + // Make sure we don't toggle backlog fetch for a view we've already removed + if(!_bufferViews.contains(dock)) + return; + if(enabled) { Client::bufferViewOverlay()->addView(dock->bufferViewId()); BufferViewConfig *config = dock->config(); @@ -617,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(); @@ -640,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() { @@ -706,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 &))); } @@ -740,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)); } @@ -776,6 +799,7 @@ void MainWin::disconnectedFromCore() { if(dock && actionData.toInt() != -1) { removeAction(action); _bufferViews.removeAll(dock); + Client::bufferViewOverlay()->removeView(dock->bufferViewId()); dock->deleteLater(); } } @@ -797,21 +821,23 @@ 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::showCoreConnectionDlg() { + CoreConnectDlg dlg(this); + if(dlg.exec() == QDialog::Accepted) { + AccountId accId = dlg.selectedAccount(); + if(accId.isValid()) + Client::coreConnection()->connectToCore(accId); + } } void MainWin::showChannelList(NetworkId netId) { @@ -878,6 +904,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(); }