X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=ea361d9666d8a4972a536887d940c38cc0957a2b;hb=3fb23d04b25cd0a88b4f806070d7a16be8e3ffbd;hp=c7792107b5bb97a25e3d88f77f29048e760aa0e3;hpb=e4491717487ddbff71b9b5a59d7b4cba3eb67629;p=quassel.git diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index c7792107..ea361d96 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -55,6 +55,7 @@ #include "clientbufferviewconfig.h" #include "clientbufferviewmanager.h" #include "clientignorelistmanager.h" +#include "coreconfigwizard.h" #include "coreconnectdlg.h" #include "coreconnection.h" #include "coreconnectionstatuswidget.h" @@ -69,6 +70,7 @@ #include "irclistmodel.h" #include "ircconnectionwizard.h" #include "jumpkeyhandler.h" +#include "legacysystemtray.h" #include "msgprocessorstatuswidget.h" #include "nicklistwidget.h" #include "qtuiapplication.h" @@ -77,7 +79,6 @@ #include "qtuistyle.h" #include "settingsdlg.h" #include "settingspagedlg.h" -#include "systemtray.h" #include "toolbaractionprovider.h" #include "topicwidget.h" #include "verticaldock.h" @@ -111,7 +112,7 @@ #include "settingspages/chatviewsettingspage.h" #include "settingspages/connectionsettingspage.h" #include "settingspages/coreaccountsettingspage.h" -#include "settingspages/generalsettingspage.h" +#include "settingspages/coreconnectionsettingspage.h" #include "settingspages/highlightsettingspage.h" #include "settingspages/identitiessettingspage.h" #include "settingspages/ignorelistsettingspage.h" @@ -128,18 +129,12 @@ MainWin::MainWin(QWidget *parent) #else : QMainWindow(parent), #endif - coreLagLabel(new QLabel()), - sslLabel(new QLabel()), _msgProcessorStatusWidget(new MsgProcessorStatusWidget(this)), _coreConnectionStatusWidget(new CoreConnectionStatusWidget(Client::coreConnection(), this)), _titleSetter(this), _awayLog(0), _layoutLoaded(false) { -#ifdef Q_WS_WIN - dwTickCount = 0; -#endif - QtUiSettings uiSettings; QString style = uiSettings.value("Style", QString()).toString(); if(!style.isEmpty()) { @@ -162,6 +157,9 @@ void MainWin::init() { SLOT(messagesInserted(const QModelIndex &, int, int))); connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showIgnoreList(QString)), SLOT(showIgnoreList(QString))); + + connect(Client::coreConnection(), SIGNAL(startCoreSetup(QVariantList)), SLOT(showCoreConfigWizard(QVariantList))); + connect(Client::coreConnection(), SIGNAL(connectionErrorPopup(QString)), SLOT(handleCoreConnectionError(QString))); connect(Client::coreConnection(), SIGNAL(userAuthenticationRequired(CoreAccount *, bool *, QString)), SLOT(userAuthenticationRequired(CoreAccount *, bool *, QString))); connect(Client::coreConnection(), SIGNAL(handleNoSslInClient(bool*)), SLOT(handleNoSslInClient(bool *))); connect(Client::coreConnection(), SIGNAL(handleNoSslInCore(bool*)), SLOT(handleNoSslInCore(bool *))); @@ -181,9 +179,9 @@ void MainWin::init() { setupBufferWidget(); setupMenus(); setupTopicWidget(); - setupChatMonitor(); setupNickWidget(); setupInputWidget(); + setupChatMonitor(); setupStatusBar(); setupToolBars(); setupSystray(); @@ -192,7 +190,9 @@ void MainWin::init() { #ifndef HAVE_KDE QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this)); +# ifndef QT_NO_SYSTEMTRAYICON QtUi::registerNotificationBackend(new SystrayNotificationBackend(this)); +# endif # ifdef HAVE_PHONON QtUi::registerNotificationBackend(new PhononNotificationBackend(this)); # endif @@ -275,8 +275,8 @@ void MainWin::restoreStateFromSettings(UiSettings &s) { move(_normalPos); #endif - if(s.value("MainWinHidden").toBool()) - hideToTray(); + if(s.value("MainWinHidden").toBool() && QtUi::haveSystemTray()) + QtUi::hideMainWidget(); else if(s.value("MainWinMinimized").toBool()) showMinimized(); else if(maximized) @@ -583,9 +583,10 @@ void MainWin::setupChatMonitor() { dock->setObjectName("ChatMonitorDock"); ChatMonitorFilter *filter = new ChatMonitorFilter(Client::messageModel(), this); - ChatMonitorView *chatView = new ChatMonitorView(filter, this); - chatView->show(); - dock->setWidget(chatView); + _chatMonitorView = new ChatMonitorView(filter, this); + _chatMonitorView->setFocusProxy(_inputWidget); + _chatMonitorView->show(); + dock->setWidget(_chatMonitorView); dock->hide(); addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical); @@ -611,17 +612,19 @@ void MainWin::setupInputWidget() { _bufferWidget->setFocusProxy(_inputWidget); _inputWidget->inputLine()->installEventFilter(_bufferWidget); + + connect(_topicWidget, SIGNAL(switchedPlain()), _bufferWidget, SLOT(setFocus())); } void MainWin::setupTopicWidget() { VerticalDock *dock = new VerticalDock(tr("Topic"), this); dock->setObjectName("TopicDock"); - TopicWidget *topicwidget = new TopicWidget(dock); + _topicWidget = new TopicWidget(dock); - dock->setWidget(topicwidget); + dock->setWidget(_topicWidget); - topicwidget->setModel(Client::bufferModel()); - topicwidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); + _topicWidget->setModel(Client::bufferModel()); + _topicWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical); @@ -642,17 +645,6 @@ void MainWin::setupStatusBar() { _coreConnectionStatusWidget->update(); statusBar()->addPermanentWidget(_coreConnectionStatusWidget); - // Core Lag: - updateLagIndicator(); - statusBar()->addPermanentWidget(coreLagLabel); - coreLagLabel->hide(); - connect(Client::signalProxy(), SIGNAL(lagUpdated(int)), this, SLOT(updateLagIndicator(int))); - - // SSL indicator - sslLabel->setPixmap(QPixmap()); - statusBar()->addPermanentWidget(sslLabel); - sslLabel->hide(); - QAction *showStatusbar = QtUi::actionCollection("General")->action("ToggleStatusBar"); QtUiSettings uiSettings; @@ -684,7 +676,12 @@ void MainWin::saveStatusBarStatus(bool enabled) { } void MainWin::setupSystray() { - _systemTray = new SystemTray(this); +#ifndef QT_NO_SYSTEMTRAYICON + _systemTray = new LegacySystemTray(this); +#else + _systemTray = new SystemTray(this); // dummy +#endif + _systemTray->init(); } void MainWin::setupToolBars() { @@ -746,14 +743,7 @@ void MainWin::setConnectedState() { else statusBar()->clearMessage(); - if(Client::signalProxy()->isSecure()) { - sslLabel->setPixmap(SmallIcon("security-high")); - } else { - sslLabel->setPixmap(SmallIcon("security-low")); - } - - sslLabel->setVisible(!Client::internalCore()); - coreLagLabel->setVisible(!Client::internalCore()); + _coreConnectionStatusWidget->setVisible(!Client::internalCore()); updateIcon(); systemTray()->setState(SystemTray::Active); @@ -784,15 +774,6 @@ void MainWin::saveLayout() { if(accountId > 0) s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId)); } -void MainWin::updateLagIndicator(int lag) { - QString text = tr("Core Lag: %1"); - if(lag == -1) - text = text.arg('-'); - else - text = text.arg("%1 msec").arg(lag); - coreLagLabel->setText(text); -} - void MainWin::disconnectedFromCore() { // save core specific layout and remove bufferviews; saveLayout(); @@ -827,18 +808,10 @@ void MainWin::setDisconnectedState() { coll->action("CoreInfo")->setEnabled(false); //_viewMenu->setEnabled(false); statusBar()->showMessage(tr("Not connected to core.")); - sslLabel->setPixmap(QPixmap()); - sslLabel->hide(); - updateLagIndicator(); - coreLagLabel->hide(); if(_msgProcessorStatusWidget) _msgProcessorStatusWidget->setProgress(0, 0); updateIcon(); - systemTray()->setState(SystemTray::Inactive); -} - -void MainWin::startInternalCore() { - + systemTray()->setState(SystemTray::Passive); } void MainWin::userAuthenticationRequired(CoreAccount *account, bool *valid, const QString &errorMessage) { @@ -905,6 +878,10 @@ void MainWin::handleSslErrors(const QSslSocket *socket, bool *accepted, bool *pe #endif /* HAVE_SSL */ +void MainWin::handleCoreConnectionError(const QString &error) { + QMessageBox::critical(this, tr("Core Connection Error"), error, QMessageBox::Ok); +} + void MainWin::showCoreConnectionDlg() { CoreConnectDlg dlg(this); if(dlg.exec() == QDialog::Accepted) { @@ -914,6 +891,12 @@ void MainWin::showCoreConnectionDlg() { } } +void MainWin::showCoreConfigWizard(const QVariantList &backends) { + CoreConfigWizard *wizard = new CoreConfigWizard(Client::coreConnection(), backends, this); + + wizard->show(); +} + void MainWin::showChannelList(NetworkId netId) { ChannelListDlg *channelListDlg = new ChannelListDlg(); @@ -961,25 +944,26 @@ void MainWin::showSettingsDlg() { //Category: Interface dlg->registerSettingsPage(new AppearanceSettingsPage(dlg)); dlg->registerSettingsPage(new ChatViewSettingsPage(dlg)); + dlg->registerSettingsPage(new ChatMonitorSettingsPage(dlg)); dlg->registerSettingsPage(new ItemViewSettingsPage(dlg)); + dlg->registerSettingsPage(new BufferViewSettingsPage(dlg)); dlg->registerSettingsPage(new InputWidgetSettingsPage(dlg)); dlg->registerSettingsPage(new TopicWidgetSettingsPage(dlg)); dlg->registerSettingsPage(new HighlightSettingsPage(dlg)); dlg->registerSettingsPage(new NotificationsSettingsPage(dlg)); dlg->registerSettingsPage(new BacklogSettingsPage(dlg)); - dlg->registerSettingsPage(new BufferViewSettingsPage(dlg)); - dlg->registerSettingsPage(new ChatMonitorSettingsPage(dlg)); - //Category: Misc - dlg->registerSettingsPage(new GeneralSettingsPage(dlg)); + //Category: IRC dlg->registerSettingsPage(new ConnectionSettingsPage(dlg)); dlg->registerSettingsPage(new IdentitiesSettingsPage(dlg)); dlg->registerSettingsPage(new NetworksSettingsPage(dlg)); dlg->registerSettingsPage(new AliasesSettingsPage(dlg)); dlg->registerSettingsPage(new IgnoreListSettingsPage(dlg)); + // Category: Remote Cores if(Quassel::runMode() != Quassel::Monolithic) { dlg->registerSettingsPage(new CoreAccountSettingsPage(dlg)); + dlg->registerSettingsPage(new CoreConnectionSettingsPage(dlg)); } dlg->show(); @@ -1024,8 +1008,8 @@ void MainWin::closeEvent(QCloseEvent *event) { QtUiSettings s; QtUiApplication* app = qobject_cast qApp; Q_ASSERT(app); - if(!app->isAboutToQuit() && s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnClose").toBool()) { - hideToTray(); + if(!app->isAboutToQuit() && QtUi::haveSystemTray() && s.value("MinimizeOnClose").toBool()) { + QtUi::hideMainWidget(); event->ignore(); } else { event->accept(); @@ -1033,71 +1017,6 @@ void MainWin::closeEvent(QCloseEvent *event) { } } -void MainWin::changeEvent(QEvent *event) { -#ifdef Q_WS_WIN - if(event->type() == QEvent::ActivationChange) - dwTickCount = GetTickCount(); // needed for toggleMinimizedToTray() -#endif - - QMainWindow::changeEvent(event); -} - -void MainWin::hideToTray() { - if(!systemTray()->isSystemTrayAvailable()) { - qWarning() << Q_FUNC_INFO << "was called with no SystemTray available!"; - return; - } - hide(); - systemTray()->setIconVisible(); -} - -void MainWin::toggleMinimizedToTray() { -#ifdef Q_WS_WIN - // the problem is that we lose focus when the systray icon is activated - // and we don't know the former active window - // therefore we watch for activation event and use our stopwatch :) - // courtesy: KSystemTrayIcon - if(GetTickCount() - dwTickCount >= 300) - // we weren't active in the last 300ms -> activate - forceActivated(); - else - hideToTray(); - -#else - - if(!isVisible() || isMinimized()) - // restore - forceActivated(); - else - hideToTray(); - -#endif -} - -void MainWin::forceActivated() { -#ifdef HAVE_KDE - show(); - KWindowSystem::forceActiveWindow(winId()); -#else - -#ifdef Q_WS_X11 - // Bypass focus stealing prevention - QX11Info::setAppUserTime(QX11Info::appTime()); -#endif - - if(windowState() & Qt::WindowMinimized) { - // restore - setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); - } - - // this does not actually work on all platforms... and causes more evil than good - // move(frameGeometry().topLeft()); // avoid placement policies - show(); - raise(); - activateWindow(); -#endif /* HAVE_KDE */ -} - void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { Q_UNUSED(parent);