From 90d64a004b15e4809138c4968e36d2ebb6b21ba6 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Wed, 28 Dec 2022 16:07:30 +0100 Subject: [PATCH] qml: make dialog content flickable for small displays for CloseChannelDialog, OpemChannelDialog and InvoiceDialog --- .../gui/qml/components/CloseChannelDialog.qml | 192 +++---- electrum/gui/qml/components/InvoiceDialog.qml | 472 +++++++++--------- .../gui/qml/components/OpenChannelDialog.qml | 216 ++++---- 3 files changed, 452 insertions(+), 428 deletions(-) diff --git a/electrum/gui/qml/components/CloseChannelDialog.qml b/electrum/gui/qml/components/CloseChannelDialog.qml index c5b332170..e02c66340 100644 --- a/electrum/gui/qml/components/CloseChannelDialog.qml +++ b/electrum/gui/qml/components/CloseChannelDialog.qml @@ -32,121 +32,129 @@ ElDialog { anchors.fill: parent spacing: 0 - GridLayout { - id: layout - Layout.preferredWidth: parent.width - 2*constants.paddingLarge - Layout.leftMargin: constants.paddingLarge - Layout.rightMargin: constants.paddingLarge - columns: 2 - - Label { - Layout.fillWidth: true - visible: channeldetails.name - text: qsTr('Channel name') - color: Material.accentColor - } + Flickable { + Layout.preferredWidth: parent.width + Layout.fillHeight: true - Label { - Layout.fillWidth: true - visible: channeldetails.name - text: channeldetails.name - } + leftMargin: constants.paddingLarge + rightMargin: constants.paddingLarge - Label { - text: qsTr('Remote node ID') - Layout.columnSpan: 2 - color: Material.accentColor - } + contentHeight: rootLayout.height + clip:true + interactive: height < contentHeight - TextHighlightPane { - Layout.columnSpan: 2 - Layout.fillWidth: true - padding: 0 - leftPadding: constants.paddingSmall + GridLayout { + id: rootLayout + width: parent.width + columns: 2 Label { - width: parent.width - text: channeldetails.pubkey - font.pixelSize: constants.fontSizeLarge - font.family: FixedFont Layout.fillWidth: true - wrapMode: Text.Wrap + visible: channeldetails.name + text: qsTr('Channel name') + color: Material.accentColor } - } - - Label { - text: qsTr('Short channel ID') - color: Material.accentColor - } - - Label { - text: channeldetails.short_cid - } - Item { Layout.preferredHeight: constants.paddingMedium; Layout.preferredWidth: 1; Layout.columnSpan: 2 } - - InfoTextArea { - Layout.columnSpan: 2 - Layout.fillWidth: true - text: qsTr(channeldetails.message_force_close) - } - - Label { - text: qsTr('Choose closing method') - Layout.columnSpan: 2 - color: Material.accentColor - } + Label { + Layout.fillWidth: true + visible: channeldetails.name + text: channeldetails.name + } - ColumnLayout { - Layout.columnSpan: 2 - Layout.alignment: Qt.AlignHCenter + Label { + text: qsTr('Remote node ID') + Layout.columnSpan: 2 + color: Material.accentColor + } - ButtonGroup { - id: closetypegroup + TextHighlightPane { + Layout.columnSpan: 2 + Layout.fillWidth: true + padding: 0 + leftPadding: constants.paddingSmall + + Label { + width: parent.width + text: channeldetails.pubkey + font.pixelSize: constants.fontSizeLarge + font.family: FixedFont + Layout.fillWidth: true + wrapMode: Text.Wrap + } } - RadioButton { - ButtonGroup.group: closetypegroup - property string closetype: 'cooperative' - checked: true - enabled: !closing && channeldetails.canCoopClose - text: qsTr('Cooperative close') + Label { + text: qsTr('Short channel ID') + color: Material.accentColor } - RadioButton { - ButtonGroup.group: closetypegroup - property string closetype: 'remote_force' - enabled: !closing && channeldetails.canForceClose - text: qsTr('Request Force-close') + + Label { + text: channeldetails.short_cid } - RadioButton { - ButtonGroup.group: closetypegroup - property string closetype: 'local_force' - enabled: !closing && channeldetails.canForceClose && !channeldetails.isBackup - text: qsTr('Local Force-close') + + Item { Layout.preferredHeight: constants.paddingMedium; Layout.preferredWidth: 1; Layout.columnSpan: 2 } + + InfoTextArea { + Layout.columnSpan: 2 + Layout.fillWidth: true + text: qsTr(channeldetails.message_force_close) } - } - ColumnLayout { - Layout.columnSpan: 2 - Layout.alignment: Qt.AlignHCenter Label { - id: errorText - visible: !closing && errorText - wrapMode: Text.Wrap - Layout.preferredWidth: layout.width + text: qsTr('Choose closing method') + Layout.columnSpan: 2 + color: Material.accentColor } - Label { - text: qsTr('Closing...') - visible: closing + + ColumnLayout { + Layout.columnSpan: 2 + Layout.alignment: Qt.AlignHCenter + + ButtonGroup { + id: closetypegroup + } + + RadioButton { + ButtonGroup.group: closetypegroup + property string closetype: 'cooperative' + checked: true + enabled: !closing && channeldetails.canCoopClose + text: qsTr('Cooperative close') + } + RadioButton { + ButtonGroup.group: closetypegroup + property string closetype: 'remote_force' + enabled: !closing && channeldetails.canForceClose + text: qsTr('Request Force-close') + } + RadioButton { + ButtonGroup.group: closetypegroup + property string closetype: 'local_force' + enabled: !closing && channeldetails.canForceClose && !channeldetails.isBackup + text: qsTr('Local Force-close') + } } - BusyIndicator { - visible: closing + + ColumnLayout { + Layout.columnSpan: 2 + Layout.alignment: Qt.AlignHCenter + Label { + id: errorText + visible: !closing && errorText + wrapMode: Text.Wrap + Layout.preferredWidth: layout.width + } + Label { + text: qsTr('Closing...') + visible: closing + } + BusyIndicator { + visible: closing + } } } } - Item { Layout.fillHeight: true; Layout.preferredWidth: 1 } - FlatButton { Layout.columnSpan: 2 Layout.fillWidth: true diff --git a/electrum/gui/qml/components/InvoiceDialog.qml b/electrum/gui/qml/components/InvoiceDialog.qml index 910688c16..ddf0a348a 100644 --- a/electrum/gui/qml/components/InvoiceDialog.qml +++ b/electrum/gui/qml/components/InvoiceDialog.qml @@ -30,305 +30,313 @@ ElDialog { property bool _canMax: invoice.invoiceType == Invoice.OnchainInvoice ColumnLayout { - width: parent.width - height: parent.height + anchors.fill: parent spacing: 0 - GridLayout { - id: layout - width: parent.width - Layout.leftMargin: constants.paddingLarge - Layout.rightMargin: constants.paddingLarge - columns: 2 + Flickable { + Layout.preferredWidth: parent.width + Layout.fillHeight: true - Label { - text: qsTr('Type') - color: Material.accentColor - } + leftMargin: constants.paddingLarge + rightMargin: constants.paddingLarge - RowLayout { - Layout.fillWidth: true - Image { - Layout.preferredWidth: constants.iconSizeSmall - Layout.preferredHeight: constants.iconSizeSmall - source: invoice.invoiceType == Invoice.LightningInvoice - ? "../../icons/lightning.png" - : "../../icons/bitcoin.png" - } + contentHeight: rootLayout.height + clip:true + interactive: height < contentHeight + + GridLayout { + id: rootLayout + width: parent.width + + columns: 2 Label { - text: invoice.invoiceType == Invoice.OnchainInvoice - ? qsTr('On chain') - : invoice.invoiceType == Invoice.LightningInvoice - ? qsTr('Lightning') - : '' + text: qsTr('Type') + color: Material.accentColor + } + + RowLayout { Layout.fillWidth: true + Image { + Layout.preferredWidth: constants.iconSizeSmall + Layout.preferredHeight: constants.iconSizeSmall + source: invoice.invoiceType == Invoice.LightningInvoice + ? "../../icons/lightning.png" + : "../../icons/bitcoin.png" + } + + Label { + text: invoice.invoiceType == Invoice.OnchainInvoice + ? qsTr('On chain') + : invoice.invoiceType == Invoice.LightningInvoice + ? qsTr('Lightning') + : '' + Layout.fillWidth: true + } } - } - Label { - text: qsTr('Status') - color: Material.accentColor - } + Label { + text: qsTr('Status') + color: Material.accentColor + } - Label { - text: invoice.status_str - } + Label { + text: invoice.status_str + } - Label { - visible: invoice.invoiceType == Invoice.OnchainInvoice - Layout.columnSpan: 2 - text: qsTr('Address') - color: Material.accentColor - } + Label { + visible: invoice.invoiceType == Invoice.OnchainInvoice + Layout.columnSpan: 2 + text: qsTr('Address') + color: Material.accentColor + } + + TextHighlightPane { + visible: invoice.invoiceType == Invoice.OnchainInvoice - TextHighlightPane { - visible: invoice.invoiceType == Invoice.OnchainInvoice + Layout.columnSpan: 2 + Layout.fillWidth: true - Layout.columnSpan: 2 - Layout.fillWidth: true + padding: 0 + leftPadding: constants.paddingMedium - padding: 0 - leftPadding: constants.paddingMedium + Label { + width: parent.width + text: invoice.address + font.family: FixedFont + wrapMode: Text.Wrap + } + } Label { - width: parent.width - text: invoice.address - font.family: FixedFont - wrapMode: Text.Wrap + visible: invoice.invoiceType == Invoice.LightningInvoice + text: qsTr('Remote Pubkey') + color: Material.accentColor } - } - Label { - visible: invoice.invoiceType == Invoice.LightningInvoice - text: qsTr('Remote Pubkey') - color: Material.accentColor - } + TextHighlightPane { + visible: invoice.invoiceType == Invoice.LightningInvoice - TextHighlightPane { - visible: invoice.invoiceType == Invoice.LightningInvoice + Layout.columnSpan: 2 + Layout.fillWidth: true - Layout.columnSpan: 2 - Layout.fillWidth: true + padding: 0 + leftPadding: constants.paddingMedium - padding: 0 - leftPadding: constants.paddingMedium + Label { + width: parent.width + text: 'pubkey' in invoice.lnprops ? invoice.lnprops.pubkey : '' + font.family: FixedFont + wrapMode: Text.Wrap + } + } Label { - width: parent.width - text: 'pubkey' in invoice.lnprops ? invoice.lnprops.pubkey : '' - font.family: FixedFont - wrapMode: Text.Wrap + visible: invoice.invoiceType == Invoice.LightningInvoice + text: qsTr('Payment hash') + color: Material.accentColor } - } - Label { - visible: invoice.invoiceType == Invoice.LightningInvoice - text: qsTr('Payment hash') - color: Material.accentColor - } + TextHighlightPane { + visible: invoice.invoiceType == Invoice.LightningInvoice - TextHighlightPane { - visible: invoice.invoiceType == Invoice.LightningInvoice + Layout.columnSpan: 2 + Layout.fillWidth: true - Layout.columnSpan: 2 - Layout.fillWidth: true + padding: 0 + leftPadding: constants.paddingMedium - padding: 0 - leftPadding: constants.paddingMedium + Label { + width: parent.width + text: 'payment_hash' in invoice.lnprops ? invoice.lnprops.payment_hash : '' + font.family: FixedFont + wrapMode: Text.Wrap + } + } Label { - width: parent.width - text: 'payment_hash' in invoice.lnprops ? invoice.lnprops.payment_hash : '' - font.family: FixedFont - wrapMode: Text.Wrap + text: qsTr('Description') + visible: invoice.message + Layout.columnSpan: 2 + color: Material.accentColor } - } - Label { - text: qsTr('Description') - visible: invoice.message - Layout.columnSpan: 2 - color: Material.accentColor - } + TextHighlightPane { + visible: invoice.message - TextHighlightPane { - visible: invoice.message + Layout.columnSpan: 2 + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter - Layout.columnSpan: 2 - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter + padding: 0 + leftPadding: constants.paddingMedium - padding: 0 - leftPadding: constants.paddingMedium + Label { + text: invoice.message + width: parent.width + font.pixelSize: constants.fontSizeXLarge + wrapMode: Text.Wrap + elide: Text.ElideRight + } + } Label { - text: invoice.message - width: parent.width - font.pixelSize: constants.fontSizeXLarge - wrapMode: Text.Wrap - elide: Text.ElideRight + text: qsTr('Amount to send') + color: Material.accentColor + Layout.columnSpan: 2 } - } - Label { - text: qsTr('Amount to send') - color: Material.accentColor - Layout.columnSpan: 2 - } + TextHighlightPane { + id: amountContainer - TextHighlightPane { - id: amountContainer + Layout.columnSpan: 2 + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter - Layout.columnSpan: 2 - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter + padding: 0 + leftPadding: constants.paddingXXLarge - padding: 0 - leftPadding: constants.paddingXXLarge + property bool editmode: false - property bool editmode: false + RowLayout { + id: amountLayout + width: parent.width - RowLayout { - id: amountLayout - width: parent.width - - GridLayout { - visible: !amountContainer.editmode - columns: 2 - - Label { - visible: invoice.amount.isMax - Layout.columnSpan: 2 - font.pixelSize: constants.fontSizeXLarge - font.bold: true - Layout.fillWidth: true - text: qsTr('All on-chain funds') - } + GridLayout { + visible: !amountContainer.editmode + columns: 2 - Label { - visible: !invoice.amount.isMax - font.pixelSize: constants.fontSizeXLarge - font.family: FixedFont - font.bold: true - text: Config.formatSats(invoice.amount, false) - } + Label { + visible: invoice.amount.isMax + Layout.columnSpan: 2 + font.pixelSize: constants.fontSizeXLarge + font.bold: true + Layout.fillWidth: true + text: qsTr('All on-chain funds') + } - Label { - visible: !invoice.amount.isMax - Layout.fillWidth: true - text: Config.baseUnit - color: Material.accentColor - font.pixelSize: constants.fontSizeXLarge - } + Label { + visible: !invoice.amount.isMax + font.pixelSize: constants.fontSizeXLarge + font.family: FixedFont + font.bold: true + text: Config.formatSats(invoice.amount, false) + } - Label { - id: fiatValue - visible: Daemon.fx.enabled && !invoice.amount.isMax - text: Daemon.fx.fiatValue(invoice.amount, false) - font.pixelSize: constants.fontSizeMedium - color: constants.mutedForeground - } + Label { + visible: !invoice.amount.isMax + Layout.fillWidth: true + text: Config.baseUnit + color: Material.accentColor + font.pixelSize: constants.fontSizeXLarge + } - Label { - visible: Daemon.fx.enabled && !invoice.amount.isMax - Layout.fillWidth: true - text: Daemon.fx.fiatCurrency - font.pixelSize: constants.fontSizeMedium - color: constants.mutedForeground - } + Label { + id: fiatValue + visible: Daemon.fx.enabled && !invoice.amount.isMax + text: Daemon.fx.fiatValue(invoice.amount, false) + font.pixelSize: constants.fontSizeMedium + color: constants.mutedForeground + } - } + Label { + visible: Daemon.fx.enabled && !invoice.amount.isMax + Layout.fillWidth: true + text: Daemon.fx.fiatCurrency + font.pixelSize: constants.fontSizeMedium + color: constants.mutedForeground + } - ToolButton { - visible: !amountContainer.editmode - icon.source: '../../icons/pen.png' - icon.color: 'transparent' - onClicked: { - amountBtc.text = invoice.amount.satsInt == 0 ? '' : Config.formatSats(invoice.amount) - amountMax.checked = invoice.amount.isMax - amountContainer.editmode = true - amountBtc.focus = true - } - } - GridLayout { - visible: amountContainer.editmode - Layout.fillWidth: true - columns: 3 - BtcField { - id: amountBtc - fiatfield: amountFiat - enabled: !amountMax.checked } - Label { - text: Config.baseUnit - color: Material.accentColor - Layout.fillWidth: amountMax.visible ? false : true - Layout.columnSpan: amountMax.visible ? 1 : 2 + ToolButton { + visible: !amountContainer.editmode + icon.source: '../../icons/pen.png' + icon.color: 'transparent' + onClicked: { + amountBtc.text = invoice.amount.satsInt == 0 ? '' : Config.formatSats(invoice.amount) + amountMax.checked = invoice.amount.isMax + amountContainer.editmode = true + amountBtc.focus = true + } } - Switch { - id: amountMax - text: qsTr('Max') - visible: _canMax + GridLayout { + visible: amountContainer.editmode Layout.fillWidth: true - checked: invoice.amount.isMax - onCheckedChanged: { - if (activeFocus) { - invoice.amount.isMax = checked + columns: 3 + BtcField { + id: amountBtc + fiatfield: amountFiat + enabled: !amountMax.checked + } + + Label { + text: Config.baseUnit + color: Material.accentColor + Layout.fillWidth: amountMax.visible ? false : true + Layout.columnSpan: amountMax.visible ? 1 : 2 + } + Switch { + id: amountMax + text: qsTr('Max') + visible: _canMax + Layout.fillWidth: true + checked: invoice.amount.isMax + onCheckedChanged: { + if (activeFocus) { + invoice.amount.isMax = checked + } } } - } - FiatField { - id: amountFiat - btcfield: amountBtc - visible: Daemon.fx.enabled && !amountMax.checked - enabled: !amountMax.checked - } + FiatField { + id: amountFiat + btcfield: amountBtc + visible: Daemon.fx.enabled && !amountMax.checked + enabled: !amountMax.checked + } - Label { - Layout.columnSpan: 2 - visible: Daemon.fx.enabled && !amountMax.checked - text: Daemon.fx.fiatCurrency - color: Material.accentColor + Label { + Layout.columnSpan: 2 + visible: Daemon.fx.enabled && !amountMax.checked + text: Daemon.fx.fiatCurrency + color: Material.accentColor + } } - } - ToolButton { - visible: amountContainer.editmode - Layout.fillWidth: false - icon.source: '../../icons/confirmed.png' - icon.color: 'transparent' - onClicked: { - amountContainer.editmode = false - invoice.amount = amountMax.checked ? MAX : Config.unitsToSats(amountBtc.text) - invoiceAmountChanged() + ToolButton { + visible: amountContainer.editmode + Layout.fillWidth: false + icon.source: '../../icons/confirmed.png' + icon.color: 'transparent' + onClicked: { + amountContainer.editmode = false + invoice.amount = amountMax.checked ? MAX : Config.unitsToSats(amountBtc.text) + invoiceAmountChanged() + } + } + ToolButton { + visible: amountContainer.editmode + Layout.fillWidth: false + icon.source: '../../icons/closebutton.png' + icon.color: 'transparent' + onClicked: amountContainer.editmode = false } } - ToolButton { - visible: amountContainer.editmode - Layout.fillWidth: false - icon.source: '../../icons/closebutton.png' - icon.color: 'transparent' - onClicked: amountContainer.editmode = false - } - } - } + } - Item { Layout.preferredHeight: constants.paddingLarge; Layout.preferredWidth: 1 } + Item { Layout.preferredHeight: constants.paddingLarge; Layout.preferredWidth: 1 } - InfoTextArea { - Layout.columnSpan: 2 - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: parent.width * 3/4 - visible: invoice.userinfo - text: invoice.userinfo + InfoTextArea { + Layout.columnSpan: 2 + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width * 3/4 + visible: invoice.userinfo + text: invoice.userinfo + } } } - Item { Layout.fillHeight: true; Layout.preferredWidth: 1 } - FlatButton { Layout.fillWidth: true text: qsTr('Pay') diff --git a/electrum/gui/qml/components/OpenChannelDialog.qml b/electrum/gui/qml/components/OpenChannelDialog.qml index b5160cf8b..c88cb0add 100644 --- a/electrum/gui/qml/components/OpenChannelDialog.qml +++ b/electrum/gui/qml/components/OpenChannelDialog.qml @@ -29,136 +29,144 @@ ElDialog { anchors.fill: parent spacing: 0 - GridLayout { - id: form - Layout.fillWidth: true - Layout.leftMargin: constants.paddingLarge - Layout.rightMargin: constants.paddingLarge + Flickable { + Layout.preferredWidth: parent.width + Layout.fillHeight: true - columns: 4 + leftMargin: constants.paddingLarge + rightMargin: constants.paddingLarge - Label { - text: qsTr('Node') - color: Material.accentColor - } + contentHeight: rootLayout.height + clip:true + interactive: height < contentHeight + + GridLayout { + id: rootLayout + width: parent.width - // gossip - TextArea { - id: node - visible: Config.useGossip - Layout.columnSpan: 2 - Layout.fillWidth: true - font.family: FixedFont - wrapMode: Text.Wrap - placeholderText: qsTr('Paste or scan node uri/pubkey') - onActiveFocusChanged: { - if (!activeFocus) - channelopener.nodeid = text + columns: 4 + + Label { + text: qsTr('Node') + color: Material.accentColor } - } - RowLayout { - visible: Config.useGossip - spacing: 0 - ToolButton { - icon.source: '../../icons/paste.png' - icon.height: constants.iconSizeMedium - icon.width: constants.iconSizeMedium - onClicked: { - if (channelopener.validate_nodeid(AppController.clipboardToText())) { - channelopener.nodeid = AppController.clipboardToText() - node.text = channelopener.nodeid - } + // gossip + TextArea { + id: node + visible: Config.useGossip + Layout.columnSpan: 2 + Layout.fillWidth: true + font.family: FixedFont + wrapMode: Text.Wrap + placeholderText: qsTr('Paste or scan node uri/pubkey') + onActiveFocusChanged: { + if (!activeFocus) + channelopener.nodeid = text } } - ToolButton { - icon.source: '../../icons/qrcode.png' - icon.height: constants.iconSizeMedium - icon.width: constants.iconSizeMedium - scale: 1.2 - onClicked: { - var page = app.stack.push(Qt.resolvedUrl('Scan.qml')) - page.onFound.connect(function() { - if (channelopener.validate_nodeid(page.scanData)) { - channelopener.nodeid = page.scanData + + RowLayout { + visible: Config.useGossip + spacing: 0 + ToolButton { + icon.source: '../../icons/paste.png' + icon.height: constants.iconSizeMedium + icon.width: constants.iconSizeMedium + onClicked: { + if (channelopener.validate_nodeid(AppController.clipboardToText())) { + channelopener.nodeid = AppController.clipboardToText() node.text = channelopener.nodeid } - app.stack.pop() - }) + } + } + ToolButton { + icon.source: '../../icons/qrcode.png' + icon.height: constants.iconSizeMedium + icon.width: constants.iconSizeMedium + scale: 1.2 + onClicked: { + var page = app.stack.push(Qt.resolvedUrl('Scan.qml')) + page.onFound.connect(function() { + if (channelopener.validate_nodeid(page.scanData)) { + channelopener.nodeid = page.scanData + node.text = channelopener.nodeid + } + app.stack.pop() + }) + } } } - } - // trampoline - ComboBox { - visible: !Config.useGossip - Layout.columnSpan: 3 - Layout.fillWidth: true - model: channelopener.trampolineNodeNames - onCurrentValueChanged: { - if (activeFocus) - channelopener.nodeid = currentValue - } - // preselect a random node - Component.onCompleted: { - if (!Config.useGossip) { - currentIndex = Math.floor(Math.random() * channelopener.trampolineNodeNames.length) - channelopener.nodeid = currentValue + // trampoline + ComboBox { + visible: !Config.useGossip + Layout.columnSpan: 3 + Layout.fillWidth: true + model: channelopener.trampolineNodeNames + onCurrentValueChanged: { + if (activeFocus) + channelopener.nodeid = currentValue + } + // preselect a random node + Component.onCompleted: { + if (!Config.useGossip) { + currentIndex = Math.floor(Math.random() * channelopener.trampolineNodeNames.length) + channelopener.nodeid = currentValue + } } } - } - Label { - text: qsTr('Amount') - color: Material.accentColor - } - - BtcField { - id: amount - fiatfield: amountFiat - Layout.preferredWidth: parent.width /3 - onTextChanged: channelopener.amount = Config.unitsToSats(amount.text) - enabled: !is_max.checked - } - - RowLayout { - Layout.columnSpan: 2 - Layout.fillWidth: true Label { - text: Config.baseUnit + text: qsTr('Amount') color: Material.accentColor } - Switch { - id: is_max - text: qsTr('Max') - onCheckedChanged: { - channelopener.amount = checked ? MAX : Config.unitsToSats(amount.text) + + BtcField { + id: amount + fiatfield: amountFiat + Layout.preferredWidth: parent.width /3 + onTextChanged: channelopener.amount = Config.unitsToSats(amount.text) + enabled: !is_max.checked + } + + RowLayout { + Layout.columnSpan: 2 + Layout.fillWidth: true + Label { + text: Config.baseUnit + color: Material.accentColor + } + Switch { + id: is_max + text: qsTr('Max') + onCheckedChanged: { + channelopener.amount = checked ? MAX : Config.unitsToSats(amount.text) + } } } - } - Item { width: 1; height: 1; visible: Daemon.fx.enabled } + Item { width: 1; height: 1; visible: Daemon.fx.enabled } - FiatField { - id: amountFiat - btcfield: amount - visible: Daemon.fx.enabled - Layout.preferredWidth: parent.width /3 - enabled: !is_max.checked - } + FiatField { + id: amountFiat + btcfield: amount + visible: Daemon.fx.enabled + Layout.preferredWidth: parent.width /3 + enabled: !is_max.checked + } - Label { - visible: Daemon.fx.enabled - text: Daemon.fx.fiatCurrency - color: Material.accentColor - Layout.fillWidth: true - } + Label { + visible: Daemon.fx.enabled + text: Daemon.fx.fiatCurrency + color: Material.accentColor + Layout.fillWidth: true + } - Item { visible: Daemon.fx.enabled ; height: 1; width: 1 } + Item { visible: Daemon.fx.enabled ; height: 1; width: 1 } + } } - Item { Layout.fillHeight: true; Layout.preferredWidth: 1 } - FlatButton { Layout.fillWidth: true text: qsTr('Open Channel')