src: Yearly copyright bump
[quassel.git] / src / qtui / settingspages / coreaccountsettingspage.cpp
index 8709986..d4b61ae 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2019 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 #include "client.h"
 #include "clientsettings.h"
 #include "coreaccountmodel.h"
-#include "iconloader.h"
+#include "icon.h"
+#include "util.h"
 
-CoreAccountSettingsPage::CoreAccountSettingsPage(QWidget *parent)
-    : SettingsPage(tr("Remote Cores"), QString(), parent),
-    _lastAccountId(0),
-    _lastAutoConnectId(0),
-    _standalone(false)
+CoreAccountSettingsPage::CoreAccountSettingsPage(QWidget* parent)
+    : SettingsPage(tr("Remote Cores"), QString(), parent)
+    , _lastAccountId(0)
+    , _lastAutoConnectId(0)
 {
     ui.setupUi(this);
     initAutoWidgets();
-    ui.addAccountButton->setIcon(SmallIcon("list-add"));
-    ui.editAccountButton->setIcon(SmallIcon("document-edit"));
-    ui.deleteAccountButton->setIcon(SmallIcon("edit-delete"));
+    ui.addAccountButton->setIcon(icon::get("list-add"));
+    ui.editAccountButton->setIcon(icon::get("document-edit"));
+    ui.deleteAccountButton->setIcon(icon::get("edit-delete"));
 
     _model = new CoreAccountModel(Client::coreAccountModel(), this);
     _filteredModel = new FilteredCoreAccountModel(_model, this);
@@ -43,21 +43,19 @@ CoreAccountSettingsPage::CoreAccountSettingsPage(QWidget *parent)
     ui.accountView->setModel(filteredModel());
     ui.autoConnectAccount->setModel(filteredModel());
 
-    connect(filteredModel(), SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), SLOT(rowsAboutToBeRemoved(QModelIndex, int, int)));
-    connect(filteredModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(rowsInserted(QModelIndex, int, int)));
+    connect(filteredModel(), &QAbstractItemModel::rowsAboutToBeRemoved, this, &CoreAccountSettingsPage::rowsAboutToBeRemoved);
+    connect(filteredModel(), &QAbstractItemModel::rowsInserted, this, &CoreAccountSettingsPage::rowsInserted);
 
-    connect(ui.accountView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), SLOT(setWidgetStates()));
-    connect(ui.autoConnectAccount, SIGNAL(currentIndexChanged(int)), SLOT(widgetHasChanged()));
+    connect(ui.accountView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &CoreAccountSettingsPage::setWidgetStates);
+    connect(ui.autoConnectAccount, selectOverload<int>(&QComboBox::currentIndexChanged), this, &CoreAccountSettingsPage::widgetHasChanged);
     setWidgetStates();
 }
 
-
 void CoreAccountSettingsPage::setStandAlone(bool standalone)
 {
     _standalone = standalone;
 }
 
-
 void CoreAccountSettingsPage::load()
 {
     model()->update(Client::coreAccountModel());
@@ -81,9 +79,10 @@ void CoreAccountSettingsPage::load()
     ui.autoConnectAccount->setCurrentIndex(idx.isValid() ? idx.row() : 0);
     ui.autoConnectAccount->setProperty("storedValue", ui.autoConnectAccount->currentIndex());
     setWidgetStates();
+    // Mark as no changes made, we just loaded settings
+    setChangedState(false);
 }
 
-
 void CoreAccountSettingsPage::save()
 {
     SettingsPage::save();
@@ -95,10 +94,9 @@ void CoreAccountSettingsPage::save()
     ui.autoConnectAccount->setProperty("storedValue", ui.autoConnectAccount->currentIndex());
 }
 
-
 // TODO: Qt 4.6 - replace by proper rowsMoved() semantics
 // NOTE: This is the filtered model
-void CoreAccountSettingsPage::rowsAboutToBeRemoved(const QModelIndex &index, int start, int end)
+void CoreAccountSettingsPage::rowsAboutToBeRemoved(const QModelIndexindex, int start, int end)
 {
     _lastAutoConnectId = _lastAccountId = 0;
     if (index.isValid() || start != end)
@@ -112,8 +110,7 @@ void CoreAccountSettingsPage::rowsAboutToBeRemoved(const QModelIndex &index, int
         _lastAutoConnectId = id;
 }
 
-
-void CoreAccountSettingsPage::rowsInserted(const QModelIndex &index, int start, int end)
+void CoreAccountSettingsPage::rowsInserted(const QModelIndex& index, int start, int end)
 {
     if (index.isValid() || start != end)
         return;
@@ -127,7 +124,6 @@ void CoreAccountSettingsPage::rowsInserted(const QModelIndex &index, int start,
     _lastAccountId = _lastAutoConnectId = 0;
 }
 
-
 AccountId CoreAccountSettingsPage::selectedAccount() const
 {
     QModelIndex index = ui.accountView->currentIndex();
@@ -136,7 +132,6 @@ AccountId CoreAccountSettingsPage::selectedAccount() const
     return index.data(CoreAccountModel::AccountIdRole).value<AccountId>();
 }
 
-
 void CoreAccountSettingsPage::setSelectedAccount(AccountId accId)
 {
     QModelIndex index = filteredModel()->mapFromSource(model()->accountIndex(accId));
@@ -144,7 +139,6 @@ void CoreAccountSettingsPage::setSelectedAccount(AccountId accId)
         ui.accountView->setCurrentIndex(index);
 }
 
-
 void CoreAccountSettingsPage::on_addAccountButton_clicked()
 {
     CoreAccountEditDlg dlg(CoreAccount(), this);
@@ -155,7 +149,6 @@ void CoreAccountSettingsPage::on_addAccountButton_clicked()
     }
 }
 
-
 void CoreAccountSettingsPage::on_editAccountButton_clicked()
 {
     QModelIndex idx = ui.accountView->selectionModel()->currentIndex();
@@ -165,8 +158,7 @@ void CoreAccountSettingsPage::on_editAccountButton_clicked()
     editAccount(idx);
 }
 
-
-void CoreAccountSettingsPage::editAccount(const QModelIndex &index)
+void CoreAccountSettingsPage::editAccount(const QModelIndex& index)
 {
     if (!index.isValid())
         return;
@@ -179,7 +171,6 @@ void CoreAccountSettingsPage::editAccount(const QModelIndex &index)
     }
 }
 
-
 void CoreAccountSettingsPage::on_deleteAccountButton_clicked()
 {
     if (!ui.accountView->selectionModel()->selectedIndexes().count())
@@ -192,8 +183,7 @@ void CoreAccountSettingsPage::on_deleteAccountButton_clicked()
     }
 }
 
-
-void CoreAccountSettingsPage::on_accountView_doubleClicked(const QModelIndex &index)
+void CoreAccountSettingsPage::on_accountView_doubleClicked(const QModelIndex& index)
 {
     if (!index.isValid())
         return;
@@ -204,7 +194,6 @@ void CoreAccountSettingsPage::on_accountView_doubleClicked(const QModelIndex &in
         editAccount(index);
 }
 
-
 void CoreAccountSettingsPage::setWidgetStates()
 {
     AccountId accId = selectedAccount();
@@ -214,29 +203,28 @@ void CoreAccountSettingsPage::setWidgetStates()
     ui.deleteAccountButton->setEnabled(editable);
 }
 
-
 void CoreAccountSettingsPage::widgetHasChanged()
 {
     setChangedState(testHasChanged());
     setWidgetStates();
 }
 
-
 bool CoreAccountSettingsPage::testHasChanged()
 {
-    if (ui.autoConnectAccount->currentIndex() != ui.autoConnectAccount->property("storedValue").toInt())
+    if (ui.autoConnectAccount->currentIndex() != ui.autoConnectAccount->property("storedValue").toInt()) {
         return true;
-    if (!(*model() == *Client::coreAccountModel()))
+    }
+    if (*model() != *Client::coreAccountModel()) {
         return true;
+    }
 
     return false;
 }
 
-
 /*****************************************************************************************
  * CoreAccountEditDlg
  *****************************************************************************************/
-CoreAccountEditDlg::CoreAccountEditDlg(const CoreAccount &acct, QWidget *parent)
+CoreAccountEditDlg::CoreAccountEditDlg(const CoreAccount& acct, QWidget* parent)
     : QDialog(parent)
 {
     ui.setupUi(this);
@@ -249,12 +237,40 @@ CoreAccountEditDlg::CoreAccountEditDlg(const CoreAccount &acct, QWidget *parent)
     ui.user->setText(acct.user());
     ui.password->setText(acct.password());
     ui.rememberPassword->setChecked(acct.storePassword());
-    ui.useProxy->setChecked(acct.useProxy());
-    ui.proxyHostName->setText(acct.proxyHostName());
-    ui.proxyPort->setValue(acct.proxyPort());
-    ui.proxyType->setCurrentIndex(acct.proxyType() == QNetworkProxy::Socks5Proxy ? 0 : 1);
-    ui.proxyUser->setText(acct.proxyUser());
-    ui.proxyPassword->setText(acct.proxyPassword());
+
+    ui.buttonGroupProxyType->setId(ui.radioButtonNoProxy, 0);
+    ui.buttonGroupProxyType->setId(ui.radioButtonSystemProxy, 1);
+    ui.buttonGroupProxyType->setId(ui.radioButtonManualProxy, 2);
+
+    bool manualProxy = false;
+    switch (acct.proxyType()) {
+    case QNetworkProxy::NoProxy:
+        ui.buttonGroupProxyType->button(0)->setChecked(true);
+        break;
+    case QNetworkProxy::DefaultProxy:
+        ui.buttonGroupProxyType->button(1)->setChecked(true);
+        break;
+    case QNetworkProxy::Socks5Proxy:
+        ui.buttonGroupProxyType->button(2)->setChecked(true);
+        ui.proxyType->setCurrentIndex(0);
+        manualProxy = true;
+        break;
+    case QNetworkProxy::HttpProxy:
+        ui.buttonGroupProxyType->button(2)->setChecked(true);
+        ui.proxyType->setCurrentIndex(1);
+        manualProxy = true;
+        break;
+    default:
+        break;
+    }
+
+    if (manualProxy) {
+        ui.proxyHostName->setText(acct.proxyHostName());
+        ui.proxyPort->setValue(acct.proxyPort());
+        ui.proxyType->setEnabled(true);
+        ui.proxyUser->setText(acct.proxyUser());
+        ui.proxyPassword->setText(acct.proxyPassword());
+    }
 
     if (acct.accountId().isValid())
         setWindowTitle(tr("Edit Core Account"));
@@ -262,7 +278,6 @@ CoreAccountEditDlg::CoreAccountEditDlg(const CoreAccount &acct, QWidget *parent)
         setWindowTitle(tr("Add Core Account"));
 }
 
-
 CoreAccount CoreAccountEditDlg::account()
 {
     _account.setAccountName(ui.accountName->text().trimmed());
@@ -271,58 +286,79 @@ CoreAccount CoreAccountEditDlg::account()
     _account.setUser(ui.user->text().trimmed());
     _account.setPassword(ui.password->text());
     _account.setStorePassword(ui.rememberPassword->isChecked());
-    _account.setUseProxy(ui.useProxy->isChecked());
-    _account.setProxyHostName(ui.proxyHostName->text().trimmed());
-    _account.setProxyPort(ui.proxyPort->value());
-    _account.setProxyType(ui.proxyType->currentIndex() == 0 ? QNetworkProxy::Socks5Proxy : QNetworkProxy::HttpProxy);
-    _account.setProxyUser(ui.proxyUser->text().trimmed());
-    _account.setProxyPassword(ui.proxyPassword->text());
+
+    QNetworkProxy::ProxyType proxyType = QNetworkProxy::NoProxy;
+    int checkedId = ui.buttonGroupProxyType->checkedId();
+
+    switch (checkedId) {
+    case NoProxy:  // QNetworkProxy::NoProxy
+        QNetworkProxyFactory::setUseSystemConfiguration(false);
+        _account.setProxyType(proxyType);
+        break;
+    case SystemProxy:  // QNetworkProxy::DefaultProxy:
+        QNetworkProxyFactory::setUseSystemConfiguration(true);
+        _account.setProxyType(QNetworkProxy::DefaultProxy);
+        break;
+    case ManualProxy:  // QNetworkProxy::Socks5Proxy || QNetworkProxy::HttpProxy
+        proxyType = ui.proxyType->currentIndex() == 0 ? QNetworkProxy::Socks5Proxy : QNetworkProxy::HttpProxy;
+        QNetworkProxyFactory::setUseSystemConfiguration(false);
+        _account.setProxyHostName(ui.proxyHostName->text().trimmed());
+        _account.setProxyPort(ui.proxyPort->value());
+        _account.setProxyType(proxyType);
+        _account.setProxyUser(ui.proxyUser->text().trimmed());
+        _account.setProxyPassword(ui.proxyPassword->text());
+        break;
+    default:
+        break;
+    }
     return _account;
 }
 
-
 void CoreAccountEditDlg::setWidgetStates()
 {
-    bool ok = !ui.accountName->text().trimmed().isEmpty()
-              && !ui.user->text().trimmed().isEmpty()
-              && !ui.hostName->text().isEmpty();
+    bool ok = !ui.accountName->text().trimmed().isEmpty() && !ui.user->text().trimmed().isEmpty() && !ui.hostName->text().isEmpty();
     ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(ok);
 }
 
-
-void CoreAccountEditDlg::on_hostName_textChanged(const QString &text)
+void CoreAccountEditDlg::on_hostName_textChanged(const QString& text)
 {
     Q_UNUSED(text);
     setWidgetStates();
 }
 
-
-void CoreAccountEditDlg::on_accountName_textChanged(const QString &text)
+void CoreAccountEditDlg::on_accountName_textChanged(const QString& text)
 {
     Q_UNUSED(text);
     setWidgetStates();
 }
 
-
-void CoreAccountEditDlg::on_user_textChanged(const QString &text)
+void CoreAccountEditDlg::on_user_textChanged(const QString& text)
 {
     Q_UNUSED(text)
     setWidgetStates();
 }
 
+void CoreAccountEditDlg::on_radioButtonManualProxy_toggled(bool checked)
+{
+    ui.proxyType->setEnabled(checked);
+    ui.proxyHostName->setEnabled(checked);
+    ui.proxyPort->setEnabled(checked);
+    ui.proxyUser->setEnabled(checked);
+    ui.proxyPassword->setEnabled(checked);
+}
 
 /*****************************************************************************************
  * FilteredCoreAccountModel
  *****************************************************************************************/
 
-FilteredCoreAccountModel::FilteredCoreAccountModel(CoreAccountModel *model, QObject *parent) : QSortFilterProxyModel(parent)
+FilteredCoreAccountModel::FilteredCoreAccountModel(CoreAccountModel* model, QObject* parent)
+    : QSortFilterProxyModel(parent)
 {
     _internalAccount = model->internalAccount();
     setSourceModel(model);
 }
 
-
-bool FilteredCoreAccountModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
+bool FilteredCoreAccountModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
 {
     if (Quassel::runMode() == Quassel::Monolithic)
         return true;