modernize: Pass arguments by value and move in constructors
[quassel.git] / src / qtui / mainpage.cpp
index a0e5f11..9ebda87 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2015 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
+#include "mainpage.h"
+
 #include <QPushButton>
 #include <QImage>
 #include <QLabel>
 #include <QLayout>
 #include <QPainter>
 
-#include "mainpage.h"
-#include "coreconnectdlg.h"
 #include "client.h"
+#include "coreconnectdlg.h"
+#include "icon.h"
 
 MainPage::MainPage(QWidget *parent) : QWidget(parent)
 {
@@ -37,15 +39,30 @@ MainPage::MainPage(QWidget *parent) : QWidget(parent)
     layout->addWidget(label);
 
     if (Quassel::runMode() != Quassel::Monolithic) {
-        QPushButton *connectButton = new QPushButton(QIcon::fromTheme("network-connect"), tr("Connect to Core..."));
-        connect(connectButton, &QPushButton::clicked, [this](){
-            CoreConnectDlg dlg(this);
-            if (dlg.exec() == QDialog::Accepted) {
-                AccountId accId = dlg.selectedAccount();
-                if (accId.isValid())
-                    Client::coreConnection()->connectToCore(accId);
-            }
-        });
-        layout->addWidget(connectButton);
+        _connectButton = new QPushButton(icon::get("network-connect"), tr("Connect to Core..."));
+        _connectButton->setEnabled(Client::coreConnection()->state() == CoreConnection::Disconnected);
+
+        connect(Client::coreConnection(), SIGNAL(stateChanged(CoreConnection::ConnectionState)), this, SLOT(coreConnectionStateChanged()));
+        connect(_connectButton, SIGNAL(clicked(bool)), this, SLOT(showCoreConnectionDlg()));
+        layout->addWidget(_connectButton);
+    }
+}
+
+void MainPage::showCoreConnectionDlg()
+{
+    CoreConnectDlg dlg(this);
+    if (dlg.exec() == QDialog::Accepted) {
+        AccountId accId = dlg.selectedAccount();
+        if (accId.isValid())
+            Client::coreConnection()->connectToCore(accId);
+    }
+}
+
+void MainPage::coreConnectionStateChanged()
+{
+    if (Client::coreConnection()->state() == CoreConnection::Disconnected) {
+        _connectButton->setEnabled(true);
+    } else {
+        _connectButton->setDisabled(true);
     }
 }