Files
pallectrum/electrum/gui/qml/components/controls/ProxyConfig.qml

144 lines
3.6 KiB
QML

import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
Item {
id: pc
implicitHeight: rootLayout.height
property alias proxy_enabled: proxy_enabled_cb.checked
property alias proxy_type: proxytype.currentIndex
property alias proxy_address: address.text
property alias proxy_port: port.text
property alias username: username_tf.text
property alias password: password_tf.text
property var proxy_type_map: [
{ text: qsTr('SOCKS5/TOR'), value: 'socks5' },
{ text: qsTr('SOCKS4'), value: 'socks4' }
]
property bool _probing: false
function toProxyDict() {
var p = {}
p['enabled'] = pc.proxy_enabled
var type = proxy_type_map[pc.proxy_type]['value']
p['mode'] = type
p['host'] = pc.proxy_address
p['port'] = pc.proxy_port
p['user'] = pc.username
p['password'] = pc.password
return p
}
ColumnLayout {
id: rootLayout
width: parent.width
spacing: constants.paddingLarge
CheckBox {
id: proxy_enabled_cb
text: qsTr('Enable Proxy')
}
ElComboBox {
id: proxytype
enabled: proxy_enabled_cb.checked
textRole: 'text'
valueRole: 'value'
model: proxy_type_map
}
GridLayout {
columns: 2
Layout.fillWidth: true
Label {
text: qsTr("Address")
enabled: address.enabled
}
TextField {
id: address
enabled: proxy_enabled_cb.checked
inputMethodHints: Qt.ImhNoPredictiveText
}
Label {
text: qsTr("Port")
enabled: port.enabled
}
TextField {
id: port
enabled: proxy_enabled_cb.checked
inputMethodHints: Qt.ImhDigitsOnly
}
Label {
text: qsTr("Username")
enabled: username_tf.enabled
}
TextField {
id: username_tf
enabled: proxy_enabled_cb.checked
inputMethodHints: Qt.ImhNoPredictiveText
}
Label {
text: qsTr("Password")
enabled: password_tf.enabled
}
PasswordField {
id: password_tf
enabled: proxy_enabled_cb.checked
}
}
Pane {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: constants.paddingLarge
padding: 0
background: Rectangle {
color: constants.darkerDialogBackground
}
FlatButton {
enabled: proxy_enabled_cb.checked && !_probing
text: qsTr('Detect Tor proxy')
onClicked: {
_probing = true
Network.probeTor()
}
}
}
BusyIndicator {
id: spinner
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: constants.paddingSmall
Layout.preferredWidth: constants.iconSizeXLarge
Layout.preferredHeight: constants.iconSizeXLarge
running: visible
visible: _probing
}
}
Connections {
target: Network
function onTorProbeFinished(host, port) {
_probing = false
if (host && port) {
proxytype.currentIndex = 0
proxy_port = ""+port
proxy_address = host
}
}
}
}