diff --git a/electrum/gui/qml/components/Addresses.qml b/electrum/gui/qml/components/Addresses.qml
index aecd75415..368a04662 100644
--- a/electrum/gui/qml/components/Addresses.qml
+++ b/electrum/gui/qml/components/Addresses.qml
@@ -109,6 +109,7 @@ Pane {
verticalPadding: 0
horizontalPadding: 0
+ bottomPadding: 1
background: PaneInsetBackground {}
ElListView {
@@ -249,6 +250,8 @@ Pane {
ButtonContainer {
Layout.fillWidth: true
+ headerComponent: null
+
FlatButton {
Layout.fillWidth: true
Layout.preferredWidth: 1
diff --git a/electrum/gui/qml/components/BIP39RecoveryDialog.qml b/electrum/gui/qml/components/BIP39RecoveryDialog.qml
index 6910d3de8..97e9d0a47 100644
--- a/electrum/gui/qml/components/BIP39RecoveryDialog.qml
+++ b/electrum/gui/qml/components/BIP39RecoveryDialog.qml
@@ -37,6 +37,7 @@ ElDialog {
InfoTextArea {
Layout.fillWidth: true
Layout.margins: constants.paddingMedium
+ backgroundColor: constants.darkerDialogBackground
text: bip39RecoveryListModel.state == Bip39RecoveryListModel.Scanning
? qsTr('Scanning for accounts...')
@@ -65,7 +66,9 @@ ElDialog {
verticalPadding: 0
horizontalPadding: 0
- background: PaneInsetBackground {}
+ background: PaneInsetBackground {
+ baseColor: constants.darkerDialogBackground
+ }
ColumnLayout {
spacing: 0
diff --git a/electrum/gui/qml/components/Channels.qml b/electrum/gui/qml/components/Channels.qml
index 4369c8fbc..8a7d80055 100644
--- a/electrum/gui/qml/components/Channels.qml
+++ b/electrum/gui/qml/components/Channels.qml
@@ -63,9 +63,6 @@ Pane {
Layout.fillWidth: true
Layout.fillHeight: true
Layout.topMargin: constants.paddingLarge
- Layout.bottomMargin: constants.paddingLarge
- Layout.leftMargin: constants.paddingMedium
- Layout.rightMargin: constants.paddingMedium
verticalPadding: 0
horizontalPadding: 0
@@ -121,6 +118,8 @@ Pane {
ButtonContainer {
Layout.fillWidth: true
+ headerComponent: null
+
FlatButton {
Layout.fillWidth: true
Layout.preferredWidth: 1
diff --git a/electrum/gui/qml/components/Constants.qml b/electrum/gui/qml/components/Constants.qml
index 7935a8c5d..ea08a2fac 100644
--- a/electrum/gui/qml/components/Constants.qml
+++ b/electrum/gui/qml/components/Constants.qml
@@ -29,9 +29,10 @@ Item {
property color mutedForeground: 'gray' //Qt.lighter(Material.background, 2)
property color darkerBackground: Qt.darker(Material.background, 1.20)
- property color lighterBackground: Qt.lighter(Material.background, 1.10)
property color darkerDialogBackground: Qt.darker(Material.dialogColor, 1.20)
+ property color highlightBackground: Qt.lighter(Material.background, 1.30)
property color dialogColor: Material.dialogColor
+ property color seedTextAreaBackground: Qt.darker(darkerDialogBackground, 1.20)
property color notificationBackground: Qt.lighter(Material.background, 1.5)
property color colorCredit: "#ff80ff80"
diff --git a/electrum/gui/qml/components/ExportTxDialog.qml b/electrum/gui/qml/components/ExportTxDialog.qml
index 249f07c18..998079d03 100644
--- a/electrum/gui/qml/components/ExportTxDialog.qml
+++ b/electrum/gui/qml/components/ExportTxDialog.qml
@@ -76,7 +76,7 @@ ElDialog {
}
}
- ButtonContainer {
+ DialogButtonContainer {
id: buttons
Layout.fillWidth: true
diff --git a/electrum/gui/qml/components/GenericShareDialog.qml b/electrum/gui/qml/components/GenericShareDialog.qml
index afaa75f62..4f5886d48 100644
--- a/electrum/gui/qml/components/GenericShareDialog.qml
+++ b/electrum/gui/qml/components/GenericShareDialog.qml
@@ -88,7 +88,7 @@ ElDialog {
}
}
- ButtonContainer {
+ DialogButtonContainer {
Layout.fillWidth: true
FlatButton {
diff --git a/electrum/gui/qml/components/InvoiceDialog.qml b/electrum/gui/qml/components/InvoiceDialog.qml
index 882c97bf8..a5465f3d7 100644
--- a/electrum/gui/qml/components/InvoiceDialog.qml
+++ b/electrum/gui/qml/components/InvoiceDialog.qml
@@ -458,7 +458,7 @@ ElDialog {
}
}
- ButtonContainer {
+ DialogButtonContainer {
Layout.fillWidth: true
FlatButton {
diff --git a/electrum/gui/qml/components/MessageDialog.qml b/electrum/gui/qml/components/MessageDialog.qml
index a2211ff75..4452b3baa 100644
--- a/electrum/gui/qml/components/MessageDialog.qml
+++ b/electrum/gui/qml/components/MessageDialog.qml
@@ -46,8 +46,13 @@ ElDialog {
}
}
- ButtonContainer {
+ DialogButtonContainer {
Layout.fillWidth: true
+ function beforeLayout() {
+ if (!dialog.text) {
+ headerComponent = null
+ }
+ }
FlatButton {
Layout.fillWidth: true
diff --git a/electrum/gui/qml/components/NostrConfigDialog.qml b/electrum/gui/qml/components/NostrConfigDialog.qml
index f53646826..b9e2aa8c4 100644
--- a/electrum/gui/qml/components/NostrConfigDialog.qml
+++ b/electrum/gui/qml/components/NostrConfigDialog.qml
@@ -50,6 +50,7 @@ ElDialog {
Layout.fillHeight: true
Layout.leftMargin: constants.paddingLarge
Layout.rightMargin: constants.paddingLarge
+ Layout.bottomMargin: constants.paddingLarge
TextHighlightPane {
Layout.fillWidth: true
@@ -65,6 +66,7 @@ ElDialog {
RowLayout {
Layout.fillWidth: true
+ Layout.topMargin: constants.paddingLarge
ElTextArea {
id: relays_ta
Layout.fillWidth: true
@@ -96,14 +98,18 @@ ElDialog {
}
}
- FlatButton {
+ DialogButtonContainer {
Layout.fillWidth: true
- text: qsTr('Ok')
- enabled: valid
- icon.source: '../../icons/confirmed.png'
- onClicked: {
- Config.nostrRelays = clean_array(relays_ta.text).join(",")
- rootItem.close()
+
+ FlatButton {
+ Layout.fillWidth: true
+ text: qsTr('Ok')
+ enabled: valid
+ icon.source: '../../icons/confirmed.png'
+ onClicked: {
+ Config.nostrRelays = clean_array(relays_ta.text).join(",")
+ rootItem.close()
+ }
}
}
}
diff --git a/electrum/gui/qml/components/OpenWalletDialog.qml b/electrum/gui/qml/components/OpenWalletDialog.qml
index 51ec37e61..dbc5dad70 100644
--- a/electrum/gui/qml/components/OpenWalletDialog.qml
+++ b/electrum/gui/qml/components/OpenWalletDialog.qml
@@ -41,23 +41,20 @@ ElDialog {
InfoTextArea {
id: notice
+ Layout.fillWidth: true
+ Layout.bottomMargin: constants.paddingSmall
text: Daemon.singlePasswordEnabled || isStartup
? qsTr('Please enter password')
: qsTr('Wallet %1 requires password to unlock').arg(name)
- iconStyle: InfoTextArea.IconStyle.Warn
- Layout.fillWidth: true
- }
-
- Label {
- text: qsTr('Password')
- Layout.fillWidth: true
- color: Material.accentColor
+ compact: true
+ iconStyle: InfoTextArea.IconStyle.Info
+ backgroundColor: constants.darkerDialogBackground
}
PasswordField {
id: password
Layout.fillWidth: true
- Layout.leftMargin: constants.paddingXLarge
+ placeholderText: qsTr('Password')
onTextChanged: {
unlockButton.enabled = true
@@ -77,16 +74,19 @@ ElDialog {
}
}
- FlatButton {
- id: unlockButton
+ DialogButtonContainer {
Layout.fillWidth: true
- icon.source: '../../icons/unlock.png'
- text: qsTr("Unlock")
- onClicked: {
- unlock()
+
+ FlatButton {
+ id: unlockButton
+ Layout.fillWidth: true
+ icon.source: '../../icons/unlock.png'
+ text: qsTr("Unlock")
+ onClicked: {
+ unlock()
+ }
}
}
-
}
function unlock() {
diff --git a/electrum/gui/qml/components/ProxyConfigDialog.qml b/electrum/gui/qml/components/ProxyConfigDialog.qml
index c3d6bf31b..fb31db19f 100644
--- a/electrum/gui/qml/components/ProxyConfigDialog.qml
+++ b/electrum/gui/qml/components/ProxyConfigDialog.qml
@@ -32,13 +32,17 @@ ElDialog {
Item { Layout.fillHeight: true; Layout.preferredWidth: 1 }
- FlatButton {
+ DialogButtonContainer {
Layout.fillWidth: true
- text: qsTr('Ok')
- icon.source: '../../icons/confirmed.png'
- onClicked: {
- Network.proxy = proxyconfig.toProxyDict()
- rootItem.close()
+
+ FlatButton {
+ Layout.fillWidth: true
+ text: qsTr('Ok')
+ icon.source: '../../icons/confirmed.png'
+ onClicked: {
+ Network.proxy = proxyconfig.toProxyDict()
+ rootItem.close()
+ }
}
}
}
diff --git a/electrum/gui/qml/components/ReceiveDetailsDialog.qml b/electrum/gui/qml/components/ReceiveDetailsDialog.qml
index c29df76b9..964bdd2d0 100644
--- a/electrum/gui/qml/components/ReceiveDetailsDialog.qml
+++ b/electrum/gui/qml/components/ReceiveDetailsDialog.qml
@@ -95,7 +95,7 @@ ElDialog {
}
}
- ButtonContainer {
+ DialogButtonContainer {
Layout.fillWidth: true
FlatButton {
diff --git a/electrum/gui/qml/components/ReceiveDialog.qml b/electrum/gui/qml/components/ReceiveDialog.qml
index 19982d05f..9b7ca92db 100644
--- a/electrum/gui/qml/components/ReceiveDialog.qml
+++ b/electrum/gui/qml/components/ReceiveDialog.qml
@@ -143,7 +143,7 @@ ElDialog {
}
- ButtonContainer {
+ DialogButtonContainer {
id: buttons
Layout.fillWidth: true
diff --git a/electrum/gui/qml/components/SendDialog.qml b/electrum/gui/qml/components/SendDialog.qml
index 256012ffd..6244823f8 100644
--- a/electrum/gui/qml/components/SendDialog.qml
+++ b/electrum/gui/qml/components/SendDialog.qml
@@ -66,7 +66,7 @@ ElDialog {
}
}
- ButtonContainer {
+ DialogButtonContainer {
Layout.fillWidth: true
FlatButton {
diff --git a/electrum/gui/qml/components/ServerConfigDialog.qml b/electrum/gui/qml/components/ServerConfigDialog.qml
index 9fed62953..688cf0f54 100644
--- a/electrum/gui/qml/components/ServerConfigDialog.qml
+++ b/electrum/gui/qml/components/ServerConfigDialog.qml
@@ -26,27 +26,31 @@ ElDialog {
ColumnLayout {
Layout.fillWidth: true
Layout.fillHeight: true
- Layout.leftMargin: constants.paddingLarge
- Layout.rightMargin: constants.paddingLarge
ServerConfig {
id: serverconfig
Layout.fillWidth: true
Layout.fillHeight: true
+ Layout.leftMargin: constants.paddingLarge
+ Layout.rightMargin: constants.paddingLarge
}
}
- FlatButton {
+ DialogButtonContainer {
Layout.fillWidth: true
- text: qsTr('Ok')
- enabled: serverconfig.addressValid
- icon.source: '../../icons/confirmed.png'
- onClicked: {
- let auto_connect = serverconfig.serverConnectMode == ServerConnectModeComboBox.Mode.Autoconnect
- let server = serverconfig.address
- let one_server = serverconfig.serverConnectMode == ServerConnectModeComboBox.Mode.Single
- Network.setServerParameters(server, auto_connect, one_server)
- rootItem.close()
+
+ FlatButton {
+ Layout.fillWidth: true
+ text: qsTr('Ok')
+ enabled: serverconfig.addressValid
+ icon.source: '../../icons/confirmed.png'
+ onClicked: {
+ let auto_connect = serverconfig.serverConnectMode == ServerConnectModeComboBox.Mode.Autoconnect
+ let server = serverconfig.address
+ let one_server = serverconfig.serverConnectMode == ServerConnectModeComboBox.Mode.Single
+ Network.setServerParameters(server, auto_connect, one_server)
+ rootItem.close()
+ }
}
}
}
diff --git a/electrum/gui/qml/components/SignVerifyMessageDialog.qml b/electrum/gui/qml/components/SignVerifyMessageDialog.qml
index 4a6321bac..a37ce2c78 100644
--- a/electrum/gui/qml/components/SignVerifyMessageDialog.qml
+++ b/electrum/gui/qml/components/SignVerifyMessageDialog.qml
@@ -179,8 +179,9 @@ ElDialog {
}
}
- ButtonContainer {
+ DialogButtonContainer {
Layout.fillWidth: true
+
FlatButton {
Layout.fillWidth: true
Layout.preferredWidth: 1
diff --git a/electrum/gui/qml/components/SwapDialog.qml b/electrum/gui/qml/components/SwapDialog.qml
index 126b602b0..02f02a82d 100644
--- a/electrum/gui/qml/components/SwapDialog.qml
+++ b/electrum/gui/qml/components/SwapDialog.qml
@@ -282,7 +282,7 @@ ElDialog {
Item { Layout.fillHeight: true; Layout.preferredWidth: 1 }
- ButtonContainer {
+ DialogButtonContainer {
Layout.columnSpan: 2
Layout.fillWidth: true
FlatButton {
diff --git a/electrum/gui/qml/components/SweepDialog.qml b/electrum/gui/qml/components/SweepDialog.qml
index 849a70356..14d2898ed 100644
--- a/electrum/gui/qml/components/SweepDialog.qml
+++ b/electrum/gui/qml/components/SweepDialog.qml
@@ -60,6 +60,8 @@ ElDialog {
Layout.fillWidth: true
TextHighlightPane {
Layout.fillWidth: true
+ backgroundColor: constants.darkerDialogBackground
+
Label {
text: qsTr('Enter the list of private keys to sweep into this wallet')
width: parent.width
@@ -133,24 +135,29 @@ ElDialog {
iconStyle: InfoTextArea.IconStyle.Warn
Layout.fillWidth: true
Layout.margins: constants.paddingMedium
+ backgroundColor: constants.darkerDialogBackground
visible: text
}
}
}
- FlatButton {
+ DialogButtonContainer {
Layout.fillWidth: true
- Layout.preferredWidth: 1
- enabled: valid
- icon.source: '../../icons/tab_send.png'
- text: qsTr('Sweep...')
- onClicked: {
- console.log('sweeping')
- root.privateKeys = sweepkeys.text
- root.accept()
+ headerComponent: null
+
+ FlatButton {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 1
+ enabled: valid
+ icon.source: '../../icons/tab_send.png'
+ text: qsTr('Sweep...')
+ onClicked: {
+ console.log('sweeping')
+ root.privateKeys = sweepkeys.text
+ root.accept()
+ }
}
}
-
}
Bitcoin {
diff --git a/electrum/gui/qml/components/Wallets.qml b/electrum/gui/qml/components/Wallets.qml
index b38fdf78a..0d0435695 100644
--- a/electrum/gui/qml/components/Wallets.qml
+++ b/electrum/gui/qml/components/Wallets.qml
@@ -32,7 +32,6 @@ Pane {
ColumnLayout {
Layout.fillWidth: true
- Layout.margins: constants.paddingLarge
Heading {
text: qsTr('Wallets')
diff --git a/electrum/gui/qml/components/controls/ButtonContainer.qml b/electrum/gui/qml/components/controls/ButtonContainer.qml
index 527897c0b..511168d38 100644
--- a/electrum/gui/qml/components/controls/ButtonContainer.qml
+++ b/electrum/gui/qml/components/controls/ButtonContainer.qml
@@ -7,11 +7,26 @@ Container {
id: root
property bool showSeparator: true
+ property color separatorColor: constants.darkerBackground
+ property Component headerComponent: Component {
+ Rectangle {
+ Layout.fillWidth: true
+ Layout.preferredHeight: 2
+ Layout.leftMargin: constants.paddingSmall
+ Layout.rightMargin: constants.paddingSmall
+ color: root.separatorColor
+ }
+ }
+ property var _contentRootItem
+ property var _headerItem
property Item _layout
function fillContentItem() {
- var contentRoot = containerLayout.createObject(root)
+ var outerLayout = rootLayout.createObject(root)
+ if (headerComponent != null)
+ _headerItem = headerComponent.createObject(outerLayout)
+ var contentRoot = containerLayout.createObject(outerLayout)
contentRoot.children.length = 0 // empty array
let total = contentChildren.length
@@ -32,7 +47,8 @@ Container {
contentRoot.children.push(button)
}
- contentItem = contentRoot
+ contentItem = outerLayout //contentRoot
+ _contentRootItem = contentRoot
}
// override this function to dynamically add buttons.
@@ -43,6 +59,13 @@ Container {
fillContentItem()
}
+ Component {
+ id: rootLayout
+ ColumnLayout {
+ spacing: 0
+ }
+ }
+
Component {
id: containerLayout
RowLayout {
@@ -59,7 +82,7 @@ Container {
Layout.preferredWidth: showSeparator ? 2 : 0
Layout.preferredHeight: pheight
Layout.alignment: Qt.AlignVCenter
- color: constants.darkerBackground
+ color: root.separatorColor
Component.onCompleted: {
// create binding here, we need to be able to have stable ref master_idx
visible = Qt.binding(function() {
diff --git a/electrum/gui/qml/components/controls/DialogButtonContainer.qml b/electrum/gui/qml/components/controls/DialogButtonContainer.qml
new file mode 100644
index 000000000..35e526921
--- /dev/null
+++ b/electrum/gui/qml/components/controls/DialogButtonContainer.qml
@@ -0,0 +1,3 @@
+ButtonContainer {
+ separatorColor: constants.darkerDialogBackground
+}
diff --git a/electrum/gui/qml/components/controls/ElDialog.qml b/electrum/gui/qml/components/controls/ElDialog.qml
index 74bd44c21..2c7572816 100644
--- a/electrum/gui/qml/components/controls/ElDialog.qml
+++ b/electrum/gui/qml/components/controls/ElDialog.qml
@@ -106,10 +106,10 @@ Dialog {
Rectangle {
Layout.fillWidth: true
- Layout.leftMargin: constants.paddingXXSmall
- Layout.rightMargin: constants.paddingXXSmall
- height: 1
- color: Qt.rgba(0,0,0,0.5)
+ Layout.leftMargin: constants.paddingSmall
+ Layout.rightMargin: constants.paddingSmall
+ Layout.preferredHeight: 2
+ color: constants.darkerDialogBackground
}
}
diff --git a/electrum/gui/qml/components/controls/HelpDialog.qml b/electrum/gui/qml/components/controls/HelpDialog.qml
index ac7dac0ad..28724b538 100644
--- a/electrum/gui/qml/components/controls/HelpDialog.qml
+++ b/electrum/gui/qml/components/controls/HelpDialog.qml
@@ -35,7 +35,7 @@ ElDialog {
implicitHeight: rootLayout.height + topPadding + bottomPadding
padding: constants.paddingLarge
background: Rectangle {
- color: constants.lighterBackground
+ color: constants.highlightBackground
}
ColumnLayout {
id: rootLayout
diff --git a/electrum/gui/qml/components/controls/PasswordField.qml b/electrum/gui/qml/components/controls/PasswordField.qml
index e9fc0e10d..064ed6480 100644
--- a/electrum/gui/qml/components/controls/PasswordField.qml
+++ b/electrum/gui/qml/components/controls/PasswordField.qml
@@ -7,6 +7,7 @@ RowLayout {
property alias text: password_tf.text
property alias tf: password_tf
property alias echoMode: password_tf.echoMode
+ property alias placeholderText: password_tf.placeholderText
property bool showReveal: true
signal accepted
diff --git a/electrum/gui/qml/components/controls/SeedKeyboardKey.qml b/electrum/gui/qml/components/controls/SeedKeyboardKey.qml
index fa5fcc9f9..68b08c3d5 100644
--- a/electrum/gui/qml/components/controls/SeedKeyboardKey.qml
+++ b/electrum/gui/qml/components/controls/SeedKeyboardKey.qml
@@ -19,6 +19,10 @@ Pane {
kbd.keyEvent(keycode, key)
}
+ background: Rectangle {
+ color: constants.darkerDialogBackground
+ }
+
FlatButton {
anchors.fill: parent
diff --git a/electrum/gui/qml/components/controls/SeedTextArea.qml b/electrum/gui/qml/components/controls/SeedTextArea.qml
index 76952ccad..9674c008f 100644
--- a/electrum/gui/qml/components/controls/SeedTextArea.qml
+++ b/electrum/gui/qml/components/controls/SeedTextArea.qml
@@ -35,10 +35,11 @@ Pane {
TextArea {
id: seedtextarea
Layout.fillWidth: true
- Layout.minimumHeight: fontMetrics.height * 3 + topPadding + bottomPadding
+ Layout.minimumHeight: fontMetrics.lineSpacing * 3 + topPadding + bottomPadding
rightPadding: constants.paddingLarge
leftPadding: constants.paddingLarge
+ bottomPadding: constants.paddingXLarge
wrapMode: TextInput.WordWrap
font.bold: true
@@ -47,8 +48,9 @@ Pane {
inputMethodHints: Qt.ImhSensitiveData | Qt.ImhLowercaseOnly | Qt.ImhNoPredictiveText
readOnly: AppController.isAndroid()
- background: Rectangle {
- color: constants.darkerBackground
+ Component.onCompleted: {
+ background.filled = true
+ background.fillColor = constants.seedTextAreaBackground
}
onTextChanged: {
@@ -66,16 +68,19 @@ Pane {
Rectangle {
anchors.fill: contentText
color: root.indicatorValid ? 'green' : 'red'
- border.color: Material.accentColor
- radius: 2
+ radius: 3
}
Label {
id: contentText
text: root.indicatorText
anchors.right: parent.right
anchors.bottom: parent.bottom
- leftPadding: root.indicatorText != '' ? constants.paddingLarge : 0
- rightPadding: root.indicatorText != '' ? constants.paddingLarge : 0
+ anchors.rightMargin: constants.paddingXXSmall
+ anchors.bottomMargin: constants.paddingXXSmall
+ leftPadding: root.indicatorText != '' ? constants.paddingMedium : 0
+ rightPadding: root.indicatorText != '' ? constants.paddingMedium : 0
+ topPadding: root.indicatorText != '' ? constants.paddingXXSmall/2 : 0
+ bottomPadding: root.indicatorText != '' ? constants.paddingXXSmall/2 : 0
font.bold: false
font.pixelSize: constants.fontSizeSmall
}
@@ -99,7 +104,7 @@ Pane {
Layout.margins: constants.paddingXXSmall
width: suggestionLabel.width
height: suggestionLabel.height
- color: constants.lighterBackground
+ color: constants.darkerDialogBackground
radius: constants.paddingXXSmall
Label {
id: suggestionLabel
@@ -127,7 +132,7 @@ Pane {
Layout.fillWidth: true
Layout.preferredHeight: kbd.width / 1.75
visible: !root.readOnly
- onKeyEvent: {
+ onKeyEvent: (keycode, text) => {
if (keycode == Qt.Key_Backspace) {
if (seedtextarea.text.length > 0)
seedtextarea.text = seedtextarea.text.substring(0, seedtextarea.text.length-1)
diff --git a/electrum/gui/qml/components/controls/ServerConfig.qml b/electrum/gui/qml/components/controls/ServerConfig.qml
index aae493bae..0df5cb786 100644
--- a/electrum/gui/qml/components/controls/ServerConfig.qml
+++ b/electrum/gui/qml/components/controls/ServerConfig.qml
@@ -43,7 +43,7 @@ Item {
HelpButton {
Layout.alignment: Qt.AlignRight
- heading: qsTr('Connection mode')+':'
+ heading: qsTr('Connection mode') + ':'
helptext: Config.getTranslatedMessage('MSG_CONNECTMODE_SERVER_HELP') + '
' +
Config.getTranslatedMessage('MSG_CONNECTMODE_NODES_HELP') + '