Skip to content

Commit

Permalink
qml: Introduce RequestPayment page
Browse files Browse the repository at this point in the history
This page contains the form for the user to fill out to create
a payment request.
  • Loading branch information
johnny9 committed Nov 22, 2024
1 parent ff6a1e2 commit 798f48b
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/Makefile.qt.include
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,7 @@ QML_RES_QML = \
qml/pages/wallet/CreatePassword.qml \
qml/pages/wallet/CreateWalletWizard.qml \
qml/pages/wallet/DesktopWallets.qml \
qml/pages/wallet/RequestPayment.qml \
qml/pages/wallet/WalletBadge.qml \
qml/pages/wallet/WalletSelect.qml

Expand Down
1 change: 1 addition & 0 deletions src/qml/bitcoin_qml.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
<file>pages/wallet/CreatePassword.qml</file>
<file>pages/wallet/CreateWalletWizard.qml</file>
<file>pages/wallet/DesktopWallets.qml</file>
<file>pages/wallet/RequestPayment.qml</file>
<file>pages/wallet/WalletBadge.qml</file>
<file>pages/wallet/WalletSelect.qml</file>
</qresource>
Expand Down
3 changes: 1 addition & 2 deletions src/qml/pages/wallet/DesktopWallets.qml
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,8 @@ Page {
id: sendTab
CoreText { text: "Send" }
}
Item {
RequestPayment {
id: receiveTab
CoreText { text: "Receive" }
}
Item {
id: blockClockTab
Expand Down
151 changes: 151 additions & 0 deletions src/qml/pages/wallet/RequestPayment.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
// Copyright (c) 2024 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
import org.bitcoincore.qt 1.0

import "../../controls"
import "../../components"
import "../settings"

StackView {
id: stackView
initialItem: pageComponent

Component {
id: pageComponent
Page {
id: root
background: null

header: NavigationBar2 {
id: navbar
centerItem: Item {
id: header
Layout.fillWidth: true

CoreText {
anchors.left: parent.left
text: qsTr("Request a payment")
font.pixelSize: 21
bold: true
}
}
}

ScrollView {
clip: true
width: parent.width
height: parent.height
contentWidth: width

ColumnLayout {
id: columnLayout
anchors.horizontalCenter: parent.horizontalCenter
width: Math.min(parent.width, 450)
spacing: 30

CoreText {
Layout.alignment: Qt.AlignHCenter
text: qsTr("All fields are optional.")
color: Theme.color.neutral7
font.pixelSize: 15
}

LabeledTextInput {
id: label
Layout.fillWidth: true
labelText: qsTr("Label")
placeholderText: qsTr("Enter label...")
}

Item {
BitcoinAmount {
id: bitcoinAmount
}

height: 50
Layout.fillWidth: true
CoreText {
anchors.left: parent.left
anchors.top: parent.top
color: Theme.color.neutral7
text: "Amount"
font.pixelSize: 15
}

TextField {
id: amountInput
anchors.left: parent.left
anchors.bottom: parent.bottom
leftPadding: 0
font.family: "Inter"
font.styleName: "Regular"
font.pixelSize: 18
color: Theme.color.neutral9
placeholderTextColor: Theme.color.neutral7
background: Item {}
placeholderText: "0.00000000"
onTextEdited: {
amountInput.text = bitcoinAmount.sanitize(amountInput.text)
}
}
Item {
width: unitLabel.width + flipIcon.width
height: Math.max(unitLabel.height, flipIcon.height)
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
MouseArea {
anchors.fill: parent
onClicked: {
if (bitcoinAmount.unit == BitcoinAmount.BTC) {
amountInput.text = bitcoinAmount.convert(amountInput.text, BitcoinAmount.BTC)
bitcoinAmount.unit = BitcoinAmount.SAT
} else {
amountInput.text = bitcoinAmount.convert(amountInput.text, BitcoinAmount.SAT)
bitcoinAmount.unit = BitcoinAmount.BTC
}
}
}
CoreText {
id: unitLabel
anchors.right: flipIcon.left
anchors.verticalCenter: parent.verticalCenter
text: bitcoinAmount.unitLabel
font.pixelSize: 18
color: Theme.color.neutral7
}
Icon {
id: flipIcon
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
source: "image://images/flip-vertical"
color: Theme.color.neutral8
size: 30
}
}
}

LabeledTextInput {
id: message
Layout.fillWidth: true
labelText: qsTr("Message")
placeholderText: qsTr("Enter message...")
}

ContinueButton {
id: continueButton
Layout.preferredWidth: Math.min(300, parent.width - 2 * Layout.leftMargin)
Layout.leftMargin: 20
Layout.rightMargin: 20
Layout.alignment: Qt.AlignCenter
text: qsTr("Continue")
}
}
}
}
}
}

0 comments on commit 798f48b

Please sign in to comment.