QTcpSocket *socket = new QTcpSocket(this);
#endif
-// TODO: Handle system proxy
#ifndef QT_NO_NETWORKPROXY
- if (_account.useProxy()) {
- QNetworkProxy proxy(_account.proxyType(), _account.proxyHostName(), _account.proxyPort(), _account.proxyUser(), _account.proxyPassword());
+ QNetworkProxy proxy;
+ proxy.setType(_account.proxyType());
+ if (_account.proxyType() == QNetworkProxy::Socks5Proxy ||
+ _account.proxyType() == QNetworkProxy::HttpProxy) {
+ proxy.setHostName(_account.proxyHostName());
+ proxy.setPort(_account.proxyPort());
+ proxy.setUser(_account.proxyUser());
+ proxy.setPassword(_account.proxyPassword());
+ }
+
+ if (_account.proxyType() == QNetworkProxy::DefaultProxy) {
+ QNetworkProxyFactory::setUseSystemConfiguration(true);
+ } else {
+ QNetworkProxyFactory::setUseSystemConfiguration(false);
socket->setProxy(proxy);
}
#endif
_port = 4242;
_storePassword = false;
_useSsl = true;
- _useProxy = false;
- _proxyType = QNetworkProxy::Socks5Proxy;
+ _proxyType = QNetworkProxy::DefaultProxy;
_proxyPort = 8080;
}
}
-void CoreAccount::setUseProxy(bool useProxy)
-{
- _useProxy = useProxy;
-}
-
-
void CoreAccount::setProxyType(QNetworkProxy::ProxyType type)
{
_proxyType = type;
v["HostName"] = hostName();
v["Port"] = port();
v["UseSSL"] = useSsl();
- v["UseProxy"] = useProxy();
v["ProxyType"] = proxyType();
v["ProxyUser"] = proxyUser();
v["ProxyPassword"] = proxyPassword();
setHostName(v.value("HostName").toString());
setPort(v.value("Port").toUInt());
setUseSsl(v.value("UseSSL").toBool());
- setUseProxy(v.value("UseProxy").toBool());
setProxyType((QNetworkProxy::ProxyType)v.value("ProxyType").toInt());
setProxyUser(v.value("ProxyUser").toString());
setProxyPassword(v.value("ProxyPassword").toString());
inline uint port() const { return _port; }
inline bool useSsl() const { return _useSsl; }
- inline bool useProxy() const { return _useProxy; }
inline QNetworkProxy::ProxyType proxyType() const { return _proxyType; }
inline QString proxyUser() const { return _proxyUser; }
inline QString proxyHostName() const { return _proxyHostName; }
void setPort(uint port);
void setUseSsl(bool);
- void setUseProxy(bool);
void setProxyType(QNetworkProxy::ProxyType);
void setProxyUser(const QString &);
void setProxyHostName(const QString &);
<rect>
<x>0</x>
<y>0</y>
- <width>378</width>
- <height>455</height>
+ <width>398</width>
+ <height>602</height>
</rect>
</property>
<property name="windowTitle">
</widget>
</item>
<item>
- <widget class="QGroupBox" name="useProxy">
+ <widget class="QGroupBox" name="groupBox_2">
<property name="title">
- <string>Use a Proxy</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- <property name="checked">
- <bool>false</bool>
+ <string>Proxy Settings</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label_5">
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_7">
<property name="text">
- <string>Proxy Type:</string>
+ <string>Port:</string>
</property>
</widget>
</item>
- <item row="0" column="1" colspan="2">
+ <item row="1" column="2" colspan="2">
<widget class="QComboBox" name="proxyType">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<item>
<property name="text">
<string>SOCKS 5</string>
</item>
</widget>
</item>
- <item row="0" column="3">
+ <item row="1" column="4">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</spacer>
</item>
- <item row="1" column="0">
+ <item row="2" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Hostname:</string>
</property>
</widget>
</item>
- <item row="1" column="1" colspan="4">
+ <item row="2" column="2" colspan="4">
<widget class="QLineEdit" name="proxyHostName">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="text">
<string>localhost</string>
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Port:</string>
+ <item row="4" column="2" colspan="3">
+ <widget class="QLineEdit" name="proxyUser">
+ <property name="enabled">
+ <bool>false</bool>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="3" column="2">
<widget class="QSpinBox" name="proxyPort">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
</property>
</widget>
</item>
- <item row="2" column="2" colspan="2">
+ <item row="3" column="3" colspan="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</spacer>
</item>
- <item row="3" column="0">
+ <item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>User:</string>
</property>
</widget>
</item>
- <item row="3" column="1" colspan="3">
- <widget class="QLineEdit" name="proxyUser"/>
- </item>
- <item row="4" column="0">
+ <item row="5" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Password:</string>
</property>
</widget>
</item>
- <item row="4" column="1" colspan="3">
+ <item row="5" column="2" colspan="3">
<widget class="QLineEdit" name="proxyPassword">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
- <item row="3" column="4">
+ <item row="4" column="5">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</spacer>
</item>
- <item row="4" column="4">
+ <item row="5" column="5">
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</spacer>
</item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Proxy Type:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <layout class="QVBoxLayout" name="verticalLayoutProxyRadioGroup">
+ <item>
+ <widget class="QRadioButton" name="radioButtonNoProxy">
+ <property name="text">
+ <string>No pro&xy</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">buttonGroupProxyType</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radioButtonSystemProxy">
+ <property name="text">
+ <string>S&ystem proxy</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">buttonGroupProxyType</string>
+ </attribute>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="radioButtonManualProxy">
+ <property name="text">
+ <string>&Manual proxy configuration</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string notr="true">buttonGroupProxyType</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
</item>
<tabstop>user</tabstop>
<tabstop>password</tabstop>
<tabstop>rememberPassword</tabstop>
- <tabstop>useProxy</tabstop>
<tabstop>proxyType</tabstop>
<tabstop>proxyHostName</tabstop>
<tabstop>proxyPort</tabstop>
</hints>
</connection>
</connections>
+ <buttongroups>
+ <buttongroup name="buttonGroupProxyType"/>
+ </buttongroups>
</ui>
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"));
CoreAccount CoreAccountEditDlg::account()
{
- _account.setAccountName(ui.accountName->text().trimmed());
- _account.setHostName(ui.hostName->text().trimmed());
- _account.setPort(ui.port->value());
- _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.setAccountName(ui.accountName->text().trimmed());
+ _account.setHostName(ui.hostName->text().trimmed());
+ _account.setPort(ui.port->value());
+ _account.setUser(ui.user->text().trimmed());
+ _account.setPassword(ui.password->text());
+ _account.setStorePassword(ui.rememberPassword->isChecked());
+ _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;
}
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
#define COREACCOUNTSETTINGSPAGE_H_
#include <QSortFilterProxyModel>
+#include <QNetworkProxy>
#include "settingspage.h"
void on_hostName_textChanged(const QString &);
void on_accountName_textChanged(const QString &);
void on_user_textChanged(const QString &);
+ void on_radioButtonManualProxy_toggled(bool checked);
void setWidgetStates();
private:
Ui::CoreAccountEditDlg ui;
CoreAccount _account;
+ enum ProxyType { NoProxy, SystemProxy, ManualProxy };
};