X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fcoreaccountsettingspage.cpp;h=d4b61ae52aed8195ca41846fa7ee58f086ed5969;hp=b7c1064b5e08f301a3861333b53090737930c4f2;hb=cc6e7c08709c4e761e2fd9c2e322751015497003;hpb=9d54503555534a2c554f09a33df6afa33d6308ec diff --git a/src/qtui/settingspages/coreaccountsettingspage.cpp b/src/qtui/settingspages/coreaccountsettingspage.cpp index b7c1064b..d4b61ae5 100644 --- a/src/qtui/settingspages/coreaccountsettingspage.cpp +++ b/src/qtui/settingspages/coreaccountsettingspage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 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 * @@ -23,19 +23,19 @@ #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(&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 QModelIndex& index, 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(); } - 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;