Files
neochat/src/settings/NetworkProxyPage.qml
Thiago Sueto 396cc8e8ef Make top margin consistent across Neochat settings
This standardizes on the same value used for KirigamiAddons pages like AboutKDE and About, namely largeSpacing * 4.

Now, when switching between settings pages you no longer have settings inconsistently changing heights willy nilly, header notwithstanding.

The only page that's missing is the Spellchecking page, as that needs to be fixed in Kirigami Addons' private Sonnet page.
2024-11-16 14:37:01 +00:00

162 lines
5.2 KiB
QML

// SPDX-FileCopyrightText: 2022 Gary Wang <wzc782970009@gmail.com>
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
import QtQuick
import QtQuick.Controls as QQC2
import QtQuick.Layouts
import org.kde.kirigami as Kirigami
import org.kde.kirigamiaddons.formcard as FormCard
import org.kde.neochat
FormCard.FormCardPage {
title: i18nc("@title:window", "Proxy")
property int currentType
property bool proxyConfigChanged: false
FormCard.FormCard {
Layout.topMargin: Kirigami.Units.largeSpacing * 4
FormCard.FormRadioDelegate {
id: systemDefault
text: i18n("System Default")
checked: currentType === 0
enabled: !NeoChatConfig.isProxyTypeImmutable
onToggled: {
currentType = 0
}
}
FormCard.FormDelegateSeparator { below: systemDefault; above: noProxy }
FormCard.FormRadioDelegate {
id:noProxy
text: i18n("No Proxy")
checked: currentType === 3
enabled: !Config.isProxyTypeImmutable
onToggled: {
currentType = 3;
}
}
FormCard.FormDelegateSeparator { below: noProxy; above: http }
FormCard.FormRadioDelegate {
id: http
text: i18n("HTTP")
checked: currentType === 1
enabled: !NeoChatConfig.isProxyTypeImmutable
onToggled: {
currentType = 1
}
}
FormCard.FormDelegateSeparator { below: http; above: socks5 }
FormCard.FormRadioDelegate {
id: socks5
text: i18n("Socks5")
checked: currentType === 2
enabled: !NeoChatConfig.isProxyTypeImmutable
onToggled: {
currentType = 2
}
}
}
FormCard.FormHeader {
title: i18n("Proxy Settings")
}
FormCard.FormCard {
// It makes no sense to configure proxy settings for "System Default" and "No Proxy"
enabled: currentType !== 0 && currentType !== 3
FormCard.FormTextFieldDelegate {
id: hostField
label: i18n("Host")
text: NeoChatConfig.proxyHost
inputMethodHints: Qt.ImhUrlCharactersOnly
onEditingFinished: {
proxyConfigChanged = true
}
}
FormCard.FormDelegateSeparator { below: hostField; above: portField }
// we probably still need a FormSpinBoxDelegate
FormCard.AbstractFormDelegate {
Layout.fillWidth: true
contentItem: RowLayout {
QQC2.Label {
text: i18n("Port")
Layout.fillWidth: true
}
QQC2.SpinBox {
id: portField
value: NeoChatConfig.proxyPort
from: 0
to: 65536
validator: IntValidator {bottom: portField.from; top: portField.to}
textFromValue: function(value, locale) {
return value // it will add a thousands separator if we don't do this, not sure why
}
onValueChanged: {
proxyConfigChanged = true
}
}
}
}
FormCard.FormDelegateSeparator { below: portField; above: userField }
FormCard.FormTextFieldDelegate {
id: userField
label: i18n("User")
text: NeoChatConfig.proxyUser
inputMethodHints: Qt.ImhUrlCharactersOnly
onEditingFinished: {
proxyConfigChanged = true
}
}
FormCard.FormDelegateSeparator { below: userField; above: passwordField }
FormCard.FormTextFieldDelegate {
id: passwordField
label: i18n("Password")
text: NeoChatConfig.proxyPassword
echoMode: TextInput.Password
inputMethodHints: Qt.ImhUrlCharactersOnly
onEditingFinished: {
proxyConfigChanged = true
}
}
}
footer: QQC2.ToolBar {
height: visible ? implicitHeight : 0
contentItem: RowLayout {
Item {
Layout.fillWidth: true
}
QQC2.Button {
text: i18n("Apply")
icon.name: "dialog-ok-apply-symbolic"
enabled: currentType !== NeoChatConfig.proxyType || proxyConfigChanged
onClicked: {
NeoChatConfig.proxyType = currentType;
NeoChatConfig.proxyHost = hostField.text;
NeoChatConfig.proxyPort = portField.value;
NeoChatConfig.proxyUser = userField.text;
NeoChatConfig.proxyPassword = passwordField.text;
NeoChatConfig.save();
proxyConfigChanged = false;
ProxyController.setApplicationProxy();
}
}
}
}
Component.onCompleted: {
proxyConfigChanged = false; // Make doubly sure that stupid bindings haven't turned this on
currentType = NeoChatConfig.proxyType;
}
}