/***************************************************************************
- * Copyright (C) 2005-2015 by the Quassel Project *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "coreaccountsettingspage.h"
-#include <QIcon>
-
#include "client.h"
#include "clientsettings.h"
#include "coreaccountmodel.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(QIcon::fromTheme("list-add"));
- ui.editAccountButton->setIcon(QIcon::fromTheme("document-edit"));
- ui.deleteAccountButton->setIcon(QIcon::fromTheme("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);
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());
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();
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 QModelIndex& index, int start, int end)
{
_lastAutoConnectId = _lastAccountId = 0;
if (index.isValid() || start != end)
_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;
_lastAccountId = _lastAutoConnectId = 0;
}
-
AccountId CoreAccountSettingsPage::selectedAccount() const
{
QModelIndex index = ui.accountView->currentIndex();
return index.data(CoreAccountModel::AccountIdRole).value<AccountId>();
}
-
void CoreAccountSettingsPage::setSelectedAccount(AccountId accId)
{
QModelIndex index = filteredModel()->mapFromSource(model()->accountIndex(accId));
ui.accountView->setCurrentIndex(index);
}
-
void CoreAccountSettingsPage::on_addAccountButton_clicked()
{
CoreAccountEditDlg dlg(CoreAccount(), this);
}
}
-
void CoreAccountSettingsPage::on_editAccountButton_clicked()
{
QModelIndex idx = ui.accountView->selectionModel()->currentIndex();
editAccount(idx);
}
-
-void CoreAccountSettingsPage::editAccount(const QModelIndex &index)
+void CoreAccountSettingsPage::editAccount(const QModelIndex& index)
{
if (!index.isValid())
return;
}
}
-
void CoreAccountSettingsPage::on_deleteAccountButton_clicked()
{
if (!ui.accountView->selectionModel()->selectedIndexes().count())
}
}
-
-void CoreAccountSettingsPage::on_accountView_doubleClicked(const QModelIndex &index)
+void CoreAccountSettingsPage::on_accountView_doubleClicked(const QModelIndex& index)
{
if (!index.isValid())
return;
editAccount(index);
}
-
void CoreAccountSettingsPage::setWidgetStates()
{
AccountId accId = selectedAccount();
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);
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"));
setWindowTitle(tr("Add Core Account"));
}
-
CoreAccount CoreAccountEditDlg::account()
{
_account.setAccountName(ui.accountName->text().trimmed());
_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;