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 | 206 ++++--- electrum/gui/qml/components/InvoiceDialog.qml | 566 +++++++++--------- .../gui/qml/components/OpenChannelDialog.qml | 230 +++---- 3 files changed, 513 insertions(+), 489 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 + Flickable { + Layout.preferredWidth: parent.width + Layout.fillHeight: true - Label { - Layout.fillWidth: true - visible: channeldetails.name - text: qsTr('Channel name') - color: Material.accentColor - } + leftMargin: constants.paddingLarge + rightMargin: constants.paddingLarge - Label { - Layout.fillWidth: true - visible: channeldetails.name - text: channeldetails.name - } + contentHeight: rootLayout.height + clip:true + interactive: height < contentHeight - Label { - text: qsTr('Remote node ID') - Layout.columnSpan: 2 - color: Material.accentColor - } - - 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 - } - } - - 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 - } - - ColumnLayout { - Layout.columnSpan: 2 - Layout.alignment: Qt.AlignHCenter - - ButtonGroup { - id: closetypegroup + visible: channeldetails.name + text: qsTr('Channel name') + color: Material.accentColor } - 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') - } - } - - ColumnLayout { - Layout.columnSpan: 2 - Layout.alignment: Qt.AlignHCenter Label { - id: errorText - visible: !closing && errorText - wrapMode: Text.Wrap - Layout.preferredWidth: layout.width + Layout.fillWidth: true + visible: channeldetails.name + text: channeldetails.name } + Label { - text: qsTr('Closing...') - visible: closing + text: qsTr('Remote node ID') + Layout.columnSpan: 2 + color: Material.accentColor } - BusyIndicator { - visible: closing + + 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 + } + } + + 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 + } + + 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') + } + } + + 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') - : '' - Layout.fillWidth: true + text: qsTr('Type') + color: Material.accentColor } - } - - Label { - text: qsTr('Status') - color: Material.accentColor - } - - Label { - text: invoice.status_str - } - - Label { - visible: invoice.invoiceType == Invoice.OnchainInvoice - Layout.columnSpan: 2 - text: qsTr('Address') - color: Material.accentColor - } - - TextHighlightPane { - visible: invoice.invoiceType == Invoice.OnchainInvoice - - Layout.columnSpan: 2 - Layout.fillWidth: true - - padding: 0 - leftPadding: constants.paddingMedium - - Label { - width: parent.width - text: invoice.address - font.family: FixedFont - wrapMode: Text.Wrap - } - } - - Label { - visible: invoice.invoiceType == Invoice.LightningInvoice - text: qsTr('Remote Pubkey') - color: Material.accentColor - } - - TextHighlightPane { - visible: invoice.invoiceType == Invoice.LightningInvoice - - Layout.columnSpan: 2 - Layout.fillWidth: true - - padding: 0 - leftPadding: constants.paddingMedium - - Label { - width: parent.width - text: 'pubkey' in invoice.lnprops ? invoice.lnprops.pubkey : '' - font.family: FixedFont - wrapMode: Text.Wrap - } - } - - Label { - visible: invoice.invoiceType == Invoice.LightningInvoice - text: qsTr('Payment hash') - color: Material.accentColor - } - - TextHighlightPane { - visible: invoice.invoiceType == Invoice.LightningInvoice - - Layout.columnSpan: 2 - Layout.fillWidth: true - - 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 { - text: qsTr('Description') - visible: invoice.message - Layout.columnSpan: 2 - color: Material.accentColor - } - - TextHighlightPane { - visible: invoice.message - - Layout.columnSpan: 2 - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - - padding: 0 - leftPadding: constants.paddingMedium - - Label { - text: invoice.message - width: parent.width - font.pixelSize: constants.fontSizeXLarge - wrapMode: Text.Wrap - elide: Text.ElideRight - } - } - - Label { - text: qsTr('Amount to send') - color: Material.accentColor - Layout.columnSpan: 2 - } - - TextHighlightPane { - id: amountContainer - - Layout.columnSpan: 2 - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - - padding: 0 - leftPadding: constants.paddingXXLarge - - property bool editmode: false 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') - } - - 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.fillWidth: true - text: Config.baseUnit - color: Material.accentColor - font.pixelSize: constants.fontSizeXLarge - } - - 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 - } - + Layout.fillWidth: true + Image { + Layout.preferredWidth: constants.iconSizeSmall + Layout.preferredHeight: constants.iconSizeSmall + source: invoice.invoiceType == Invoice.LightningInvoice + ? "../../icons/lightning.png" + : "../../icons/bitcoin.png" } - 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 + Label { + text: invoice.invoiceType == Invoice.OnchainInvoice + ? qsTr('On chain') + : invoice.invoiceType == Invoice.LightningInvoice + ? qsTr('Lightning') + : '' 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 - } - 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 - } - - 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/closebutton.png' - icon.color: 'transparent' - onClicked: amountContainer.editmode = false } } - } + Label { + text: qsTr('Status') + color: Material.accentColor + } - Item { Layout.preferredHeight: constants.paddingLarge; Layout.preferredWidth: 1 } + Label { + text: invoice.status_str + } - InfoTextArea { - Layout.columnSpan: 2 - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: parent.width * 3/4 - visible: invoice.userinfo - text: invoice.userinfo + Label { + visible: invoice.invoiceType == Invoice.OnchainInvoice + Layout.columnSpan: 2 + text: qsTr('Address') + color: Material.accentColor + } + + TextHighlightPane { + visible: invoice.invoiceType == Invoice.OnchainInvoice + + Layout.columnSpan: 2 + Layout.fillWidth: true + + padding: 0 + leftPadding: constants.paddingMedium + + Label { + width: parent.width + text: invoice.address + font.family: FixedFont + wrapMode: Text.Wrap + } + } + + Label { + visible: invoice.invoiceType == Invoice.LightningInvoice + text: qsTr('Remote Pubkey') + color: Material.accentColor + } + + TextHighlightPane { + visible: invoice.invoiceType == Invoice.LightningInvoice + + Layout.columnSpan: 2 + Layout.fillWidth: true + + padding: 0 + leftPadding: constants.paddingMedium + + Label { + width: parent.width + text: 'pubkey' in invoice.lnprops ? invoice.lnprops.pubkey : '' + font.family: FixedFont + wrapMode: Text.Wrap + } + } + + Label { + visible: invoice.invoiceType == Invoice.LightningInvoice + text: qsTr('Payment hash') + color: Material.accentColor + } + + TextHighlightPane { + visible: invoice.invoiceType == Invoice.LightningInvoice + + Layout.columnSpan: 2 + Layout.fillWidth: true + + 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 { + text: qsTr('Description') + visible: invoice.message + Layout.columnSpan: 2 + color: Material.accentColor + } + + TextHighlightPane { + visible: invoice.message + + Layout.columnSpan: 2 + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + + padding: 0 + leftPadding: constants.paddingMedium + + Label { + text: invoice.message + width: parent.width + font.pixelSize: constants.fontSizeXLarge + wrapMode: Text.Wrap + elide: Text.ElideRight + } + } + + Label { + text: qsTr('Amount to send') + color: Material.accentColor + Layout.columnSpan: 2 + } + + TextHighlightPane { + id: amountContainer + + Layout.columnSpan: 2 + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + + padding: 0 + leftPadding: constants.paddingXXLarge + + property bool editmode: false + + 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') + } + + 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.fillWidth: true + text: Config.baseUnit + color: Material.accentColor + font.pixelSize: constants.fontSizeXLarge + } + + 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 + } + 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 + } + + 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/closebutton.png' + icon.color: 'transparent' + onClicked: amountContainer.editmode = false + } + } + + } + + 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 + } } } - 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 - // 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 + GridLayout { + id: rootLayout + width: parent.width + + 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 + } + } + + 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 + } + } + } + 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() + }) } } } - 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 } + + 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 + } + + Item { visible: Daemon.fx.enabled ; height: 1; width: 1 } } - - 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 - } - - 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 { Layout.fillHeight: true; Layout.preferredWidth: 1 } - FlatButton { Layout.fillWidth: true text: qsTr('Open Channel')