Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/gui-functional-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,6 @@ jobs:
run: |
python3 test/functional/qml_test_bridge_sanity.py
python3 test/functional/qml_test_onboarding.py
python3 test/functional/qml_test_external_signer.py
python3 test/functional/qml_test_peers.py
python3 test/functional/qml_test_proxy.py
5 changes: 3 additions & 2 deletions qml/bitcoin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -318,8 +318,9 @@ int QmlGuiMain(int argc, char* argv[])
QObject::connect(&node_model, &NodeModel::nodeInitialized,
&ban_list_model, &BanListModel::refresh);

LoadFontResource(":/fonts/inter/regular");
LoadFontResource(":/fonts/inter/semibold");
LoadFontResource(":/fonts/bitcoincoresans/regular");
LoadFontResource(":/fonts/bitcoincoresans/semibold");
LoadFontResource(":/fonts/robotomono/regular");

QQmlApplicationEngine engine;

Expand Down
12 changes: 10 additions & 2 deletions qml/bitcoin_qml.qrc
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/qml">
<file>components/AboutOptions.qml</file>
<file>components/BitcoinAddressDisplayField.qml</file>
<file>components/BitcoinAddressInputField.qml</file>
<file>components/BitcoinAmountDisplayField.qml</file>
<file>components/BitcoinAmountInputField.qml</file>
<file>components/BlockClock.qml</file>
<file>components/BlockClockDisplayMode.qml</file>
<file>components/BlockCounter.qml</file>
<file>components/ConnectionOptions.qml</file>
<file>components/ConnectionSettings.qml</file>
<file>components/DeveloperOptions.qml</file>
<file>components/ExternalSignerReviewActions.qml</file>
<file>components/ExternalPopup.qml</file>
<file>components/FeeSelection.qml</file>
<file>components/NetworkTrafficGraph.qml</file>
Expand All @@ -23,6 +26,8 @@
<file>components/ThemeSettings.qml</file>
<file>components/TotalBytesIndicator.qml</file>
<file>components/Tooltip.qml</file>
<file>components/LabeledValueField.qml</file>
<file>components/WalletSettings.qml</file>
<file>controls/AddWalletButton.qml</file>
<file>controls/CaretRightIcon.qml</file>
<file>controls/ContinueButton.qml</file>
Expand Down Expand Up @@ -82,13 +87,15 @@
<file>pages/settings/SettingsDeveloper.qml</file>
<file>pages/settings/SettingsDisplay.qml</file>
<file>pages/settings/SettingsProxy.qml</file>
<file>pages/settings/SettingsWallet.qml</file>
<file>pages/settings/SettingsStorage.qml</file>
<file>pages/settings/SettingsTheme.qml</file>
<file>pages/wallet/Activity.qml</file>
<file>pages/wallet/ActivityDetails.qml</file>
<file>pages/wallet/CoinSelection.qml</file>
<file>pages/wallet/CreateBackup.qml</file>
<file>pages/wallet/CreateConfirm.qml</file>
<file>pages/wallet/CreateExternalWallet.qml</file>
<file>pages/wallet/CreateIntro.qml</file>
<file>pages/wallet/CreateName.qml</file>
<file>pages/wallet/CreatePassword.qml</file>
Expand Down Expand Up @@ -158,7 +165,8 @@
<file alias="visible">res/icons/visible.png</file>
</qresource>
<qresource prefix="/fonts">
<file alias="inter/regular">res/fonts/Inter-Regular.otf</file>
<file alias="inter/semibold">res/fonts/Inter-SemiBold.otf</file>
<file alias="bitcoincoresans/regular">res/fonts/BitcoinCoreSans-Regular.otf</file>
<file alias="bitcoincoresans/semibold">res/fonts/BitcoinCoreSans-SemiBold.otf</file>
<file alias="robotomono/regular">res/fonts/RobotoMono-Regular.ttf</file>
</qresource>
</RCC>
109 changes: 109 additions & 0 deletions qml/components/BitcoinAddressDisplayField.qml
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: Missing Accessible property for name and role of this component.

Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
// Copyright (c) 2026 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 "../controls"

Item {
id: root

property string labelText: qsTr("Send to")
property string text: ""
property string fullText: ""
property string expandedObjectName: ""
property bool expanded: false
property int labelPixelSize: 18
property color labelColor: Theme.color.neutral9
readonly property bool showLabel: labelText.length > 0
readonly property bool expandable: fullText.length > 0

Layout.fillWidth: true
implicitHeight: Math.max(showLabel ? label.implicitHeight + 6 : 0, addressContainer.implicitHeight)

onExpandableChanged: {
if (!expandable) {
expanded = false
}
}

function click() {
if (expandable && !expanded) {
expanded = true
}
}

CoreText {
id: label
visible: root.showLabel
width: 110
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: 6
horizontalAlignment: Text.AlignLeft
text: root.labelText
font.pixelSize: root.labelPixelSize
color: root.labelColor
}

Item {
id: addressContainer
anchors.left: root.showLabel ? label.right : parent.left
anchors.right: parent.right
anchors.top: parent.top
implicitHeight: addressColumn.implicitHeight
height: implicitHeight

Column {
id: addressColumn
width: parent.width
spacing: root.expandable && root.expanded ? 6 : 0

CoreText {
id: addressText
width: parent.width
text: root.text
wrap: true
wrapMode: Text.WordWrap
horizontalAlignment: root.expandable ? Text.AlignRight : Text.AlignLeft
verticalAlignment: Text.AlignTop
height: Math.max(implicitHeight, 32)
font.pixelSize: 18
color: Theme.color.neutral9

HoverHandler {
enabled: root.expandable
cursorShape: Qt.PointingHandCursor
}

TapHandler {
enabled: root.expandable
onTapped: root.expanded = !root.expanded
}
}

TextArea {
id: fullAddressText
objectName: root.expandedObjectName
width: parent.width
visible: root.expandable && root.expanded
readOnly: true
text: root.fullText
wrapMode: Text.WordWrap
leftPadding: 0
topPadding: 0
rightPadding: 0
bottomPadding: 0
height: visible ? Math.max(contentHeight, 32) : 0
font.family: "Inter"
font.styleName: "Regular"
font.pixelSize: 18
color: Theme.color.neutral7
background: Item {}
}
}
}
}
3 changes: 2 additions & 1 deletion qml/components/BitcoinAddressInputField.qml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ ColumnLayout {
property string errorText: ""
property string labelText: qsTr("Send to")
property bool enabled: true
property alias inputObjectName: addressInput.objectName

signal editingFinished()

Expand Down Expand Up @@ -52,7 +53,7 @@ ColumnLayout {
rightPadding: 0
bottomPadding: 0
height: Math.max(contentHeight, 32)
font.family: "Inter"
font.family: "Roboto Mono"
font.styleName: "Regular"
font.pixelSize: 18
color: Theme.color.neutral9
Expand Down
60 changes: 60 additions & 0 deletions qml/components/BitcoinAmountDisplayField.qml
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: Missing Accessible property for name and role of this component.

Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// Copyright (c) 2026 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 "../controls"

Item {
id: root

property string labelText: qsTr("Amount")
property string amountText: ""
property string unitText: ""
property string text: unitText.length > 0 ? amountText + " " + unitText : amountText
property int labelWidth: 110
property int labelPixelSize: 18
property color labelColor: Theme.color.neutral9

Layout.fillWidth: true
implicitHeight: Math.max(label.implicitHeight, amountValue.implicitHeight, unitLabel.implicitHeight)

CoreText {
id: label
width: root.labelWidth
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignLeft
wrap: false
text: root.labelText
font.pixelSize: root.labelPixelSize
color: root.labelColor
}

CoreText {
id: amountValue
anchors.left: label.right
anchors.right: unitLabel.left
anchors.rightMargin: unitLabel.visible ? 12 : 0
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignRight
wrap: false
elide: Text.ElideRight
text: root.amountText
font.pixelSize: 18
color: Theme.color.neutral9
}

CoreText {
id: unitLabel
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
visible: root.unitText.length > 0
text: root.unitText
font.pixelSize: 18
color: Theme.color.neutral7
}
}
2 changes: 1 addition & 1 deletion qml/components/BitcoinAmountInputField.qml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ ColumnLayout {
anchors.verticalCenter: parent.verticalCenter
leftPadding: 0
enabled: root.enabled
font.family: "Inter"
font.family: "BitcoinCoreSans"
font.styleName: "Regular"
font.pixelSize: 18
color: Theme.color.neutral9
Expand Down
4 changes: 2 additions & 2 deletions qml/components/BlockClock.qml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Item {
Label {
id: mainText
anchors.centerIn: dial
font.family: "Inter"
font.family: "BitcoinCoreSans"
font.styleName: "Semi Bold"
font.pixelSize: dial.width * (4/25)
color: Theme.color.neutral9
Expand All @@ -97,7 +97,7 @@ Item {
anchors.top: mainText.bottom
property bool estimating: root.estimating
anchors.horizontalCenter: root.horizontalCenter
font.family: "Inter"
font.family: "BitcoinCoreSans"
font.styleName: "Semi Bold"
font.pixelSize: dial.width * (9/100)
color: Theme.color.neutral4
Expand Down
2 changes: 1 addition & 1 deletion qml/components/BlockCounter.qml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Label {
padding: 16
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.family: "Inter"
font.family: "BitcoinCoreSans"
font.styleName: "Semi Bold"
font.pixelSize: 20
text: blockHeight
Expand Down
Loading
Loading