Skip to content

Commit 8971438

Browse files
committed
qml: Introduce the Desktop Wallet Activity Page
1 parent a8d15db commit 8971438

22 files changed

+1116
-5
lines changed

src/Makefile.qt.include

+15-1
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,18 @@ QT_FORMS_UI = \
3737
QT_MOC_CPP = \
3838
qml/components/moc_blockclockdial.cpp \
3939
qml/controls/moc_linegraph.cpp \
40+
qml/models/moc_activitylistmodel.cpp \
4041
qml/models/moc_chainmodel.cpp \
4142
qml/models/moc_networktraffictower.cpp \
4243
qml/models/moc_nodemodel.cpp \
4344
qml/models/moc_options_model.cpp \
4445
qml/models/moc_peerdetailsmodel.cpp \
4546
qml/models/moc_peerlistsortproxy.cpp \
47+
qml/models/moc_transaction.cpp \
4648
qml/models/moc_walletlistmodel.cpp \
4749
qml/models/moc_walletqmlmodel.cpp \
4850
qml/moc_appmode.cpp \
51+
qml/moc_clipboard.cpp \
4952
qml/moc_walletqmlcontroller.cpp \
5053
qt/moc_addressbookpage.cpp \
5154
qt/moc_addresstablemodel.cpp \
@@ -120,15 +123,18 @@ QT_QRC_LOCALE = qt/bitcoin_locale.qrc
120123
BITCOIN_QT_H = \
121124
qml/components/blockclockdial.h \
122125
qml/controls/linegraph.h \
126+
qml/models/activitylistmodel.h \
123127
qml/models/chainmodel.h \
124128
qml/models/networktraffictower.h \
125129
qml/models/nodemodel.h \
126130
qml/models/options_model.h \
127131
qml/models/peerdetailsmodel.h \
128132
qml/models/peerlistsortproxy.h \
133+
qml/models/transaction.h \
129134
qml/models/walletlistmodel.h \
130135
qml/models/walletqmlmodel.h \
131136
qml/appmode.h \
137+
qml/clipboard.h \
132138
qml/bitcoin.h \
133139
qml/guiconstants.h \
134140
qml/imageprovider.h \
@@ -312,12 +318,14 @@ BITCOIN_QML_BASE_CPP = \
312318
qml/bitcoin.cpp \
313319
qml/components/blockclockdial.cpp \
314320
qml/controls/linegraph.cpp \
321+
qml/models/activitylistmodel.cpp \
315322
qml/models/chainmodel.cpp \
316323
qml/models/networktraffictower.cpp \
317324
qml/models/nodemodel.cpp \
318325
qml/models/options_model.cpp \
319326
qml/models/peerdetailsmodel.cpp \
320327
qml/models/peerlistsortproxy.cpp \
328+
qml/models/transaction.cpp \
321329
qml/models/walletlistmodel.cpp \
322330
qml/models/walletqmlmodel.cpp \
323331
qml/imageprovider.cpp \
@@ -340,6 +348,7 @@ QML_RES_ICONS = \
340348
qml/res/icons/caret-left.png \
341349
qml/res/icons/caret-right.png \
342350
qml/res/icons/check.png \
351+
qml/res/icons/coinbase.png \
343352
qml/res/icons/cross.png \
344353
qml/res/icons/error.png \
345354
qml/res/icons/export.png \
@@ -355,6 +364,8 @@ QML_RES_ICONS = \
355364
qml/res/icons/singlesig-wallet.png \
356365
qml/res/icons/storage-dark.png \
357366
qml/res/icons/storage-light.png \
367+
qml/res/icons/triangle-up.png \
368+
qml/res/icons/triangle-down.png \
358369
qml/res/icons/tooltip-arrow-dark.png \
359370
qml/res/icons/tooltip-arrow-light.png \
360371
qml/res/icons/wallet.png \
@@ -393,14 +404,15 @@ QML_RES_QML = \
393404
qml/controls/InformationPage.qml \
394405
qml/controls/IPAddressValueInput.qml \
395406
qml/controls/KeyValueRow.qml \
407+
qml/controls/LabeledTextInput.qml \
396408
qml/controls/NavButton.qml \
397-
qml/controls/PageIndicator.qml \
398409
qml/controls/NavigationBar.qml \
399410
qml/controls/NavigationBar2.qml \
400411
qml/controls/NavigationTab.qml \
401412
qml/controls/OptionButton.qml \
402413
qml/controls/OptionSwitch.qml \
403414
qml/controls/OutlineButton.qml \
415+
qml/controls/PageIndicator.qml \
404416
qml/controls/PageStack.qml \
405417
qml/controls/ProgressIndicator.qml \
406418
qml/controls/qmldir \
@@ -433,6 +445,8 @@ QML_RES_QML = \
433445
qml/pages/settings/SettingsProxy.qml \
434446
qml/pages/settings/SettingsStorage.qml \
435447
qml/pages/settings/SettingsTheme.qml \
448+
qml/pages/wallet/Activity.qml \
449+
qml/pages/wallet/ActivityDetails.qml \
436450
qml/pages/wallet/CreateBackup.qml \
437451
qml/pages/wallet/CreateConfirm.qml \
438452
qml/pages/wallet/CreateIntro.qml \

src/qml/bitcoin.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
#include <node/interface_ui.h>
1616
#include <noui.h>
1717
#include <qml/appmode.h>
18+
#include <qml/clipboard.h>
1819
#ifdef __ANDROID__
1920
#include <qml/androidnotifier.h>
2021
#endif
2122
#include <qml/components/blockclockdial.h>
2223
#include <qml/controls/linegraph.h>
2324
#include <qml/guiconstants.h>
25+
#include <qml/models/activitylistmodel.h>
2426
#include <qml/models/chainmodel.h>
2527
#include <qml/models/networktraffictower.h>
2628
#include <qml/models/nodemodel.h>
@@ -325,11 +327,14 @@ int QmlGuiMain(int argc, char* argv[])
325327
engine.rootContext()->setContextProperty("needOnboarding", need_onboarding);
326328

327329
AppMode app_mode = SetupAppMode();
330+
Clipboard clipboard;
328331

329332
qmlRegisterSingletonInstance<AppMode>("org.bitcoincore.qt", 1, 0, "AppMode", &app_mode);
333+
qmlRegisterSingletonInstance<Clipboard>("org.bitcoincore.qt", 1, 0, "Clipboard", &clipboard);
330334
qmlRegisterType<BlockClockDial>("org.bitcoincore.qt", 1, 0, "BlockClockDial");
331335
qmlRegisterType<LineGraph>("org.bitcoincore.qt", 1, 0, "LineGraph");
332336
qmlRegisterUncreatableType<PeerDetailsModel>("org.bitcoincore.qt", 1, 0, "PeerDetailsModel", "");
337+
qmlRegisterUncreatableType<Transaction>("org.bitcoincore.qt", 1, 0, "Transaction", "");
333338

334339
#ifdef ENABLE_WALLET
335340
qmlRegisterUncreatableType<WalletQmlModel>("org.bitcoincore.qt", 1, 0, "WalletQmlModel",

src/qml/bitcoin_qml.qrc

+7-1
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,15 @@
3030
<file>controls/InformationPage.qml</file>
3131
<file>controls/IPAddressValueInput.qml</file>
3232
<file>controls/KeyValueRow.qml</file>
33+
<file>controls/LabeledTextInput.qml</file>
3334
<file>controls/NavButton.qml</file>
34-
<file>controls/PageIndicator.qml</file>
3535
<file>controls/NavigationBar.qml</file>
3636
<file>controls/NavigationBar2.qml</file>
3737
<file>controls/NavigationTab.qml</file>
3838
<file>controls/OptionButton.qml</file>
3939
<file>controls/OptionSwitch.qml</file>
4040
<file>controls/OutlineButton.qml</file>
41+
<file>controls/PageIndicator.qml</file>
4142
<file>controls/PageStack.qml</file>
4243
<file>controls/ProgressIndicator.qml</file>
4344
<file>controls/qmldir</file>
@@ -70,6 +71,8 @@
7071
<file>pages/settings/SettingsProxy.qml</file>
7172
<file>pages/settings/SettingsStorage.qml</file>
7273
<file>pages/settings/SettingsTheme.qml</file>
74+
<file>pages/wallet/Activity.qml</file>
75+
<file>pages/wallet/ActivityDetails.qml</file>
7376
<file>pages/wallet/CreateBackup.qml</file>
7477
<file>pages/wallet/CreateConfirm.qml</file>
7578
<file>pages/wallet/CreateIntro.qml</file>
@@ -93,6 +96,7 @@
9396
<file alias="caret-left">res/icons/caret-left.png</file>
9497
<file alias="caret-right">res/icons/caret-right.png</file>
9598
<file alias="check">res/icons/check.png</file>
99+
<file alias="coinbase">res/icons/coinbase.png</file>
96100
<file alias="cross">res/icons/cross.png</file>
97101
<file alias="error">res/icons/error.png</file>
98102
<file alias="export">res/icons/export.png</file>
@@ -110,6 +114,8 @@
110114
<file alias="storage-light">res/icons/storage-light.png</file>
111115
<file alias="tooltip-arrow-dark">res/icons/tooltip-arrow-dark.png</file>
112116
<file alias="tooltip-arrow-light">res/icons/tooltip-arrow-light.png</file>
117+
<file alias="triangle-down">res/icons/triangle-down.png</file>
118+
<file alias="triangle-up">res/icons/triangle-up.png</file>
113119
<file alias="wallet">res/icons/wallet.png</file>
114120
<file alias="visible">res/icons/visible.png</file>
115121
</qresource>

src/qml/clipboard.h

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Copyright (c) 2024 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#ifndef BITCOIN_QML_CLIPBOARD_H
6+
#define BITCOIN_QML_CLIPBOARD_H
7+
8+
#include <QObject>
9+
#include <QClipboard>
10+
#include <QGuiApplication>
11+
12+
class Clipboard : public QObject
13+
{
14+
Q_OBJECT
15+
public:
16+
explicit Clipboard(QObject *parent = nullptr) : QObject(parent) {}
17+
18+
Q_INVOKABLE void setText(const QString &text) {
19+
QGuiApplication::clipboard()->setText(text);
20+
}
21+
22+
Q_INVOKABLE QString text() const {
23+
return QGuiApplication::clipboard()->text();
24+
}
25+
};
26+
27+
#endif // BITCOIN_QML_CLIPBOARD_H

src/qml/controls/LabeledTextInput.qml

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright (c) 2024 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
import QtQuick 2.15
6+
import QtQuick.Controls 2.15
7+
import QtQuick.Layouts 1.15
8+
9+
Item {
10+
property alias labelText: label.text
11+
property alias text: input.text
12+
property alias placeholderText: input.placeholderText
13+
property alias iconSource: icon.source
14+
property alias customIcon: iconContainer.data
15+
property alias enabled: input.enabled
16+
17+
signal iconClicked
18+
signal textEdited
19+
20+
id: root
21+
implicitHeight: input.height
22+
23+
CoreText {
24+
id: label
25+
anchors.left: parent.left
26+
anchors.verticalCenter: parent.verticalCenter
27+
horizontalAlignment: Text.AlignLeft
28+
width: 110
29+
color: Theme.color.neutral9
30+
font.pixelSize: 18
31+
}
32+
33+
TextField {
34+
id: input
35+
anchors.left: label.right
36+
anchors.right: iconContainer.left
37+
anchors.verticalCenter: parent.verticalCenter
38+
leftPadding: 0
39+
font.family: "Inter"
40+
font.styleName: "Regular"
41+
font.pixelSize: 18
42+
color: Theme.color.neutral9
43+
placeholderTextColor: Theme.color.neutral7
44+
background: Item {}
45+
selectByMouse: true
46+
onTextEdited: root.textEdited()
47+
}
48+
49+
Item {
50+
id: iconContainer
51+
anchors.right: parent.right
52+
anchors.verticalCenter: input.verticalCenter
53+
54+
Icon {
55+
id: icon
56+
source: ""
57+
color: Theme.color.neutral8
58+
size: 30
59+
enabled: source != ""
60+
onClicked: root.iconClicked()
61+
}
62+
}
63+
}

src/qml/imageprovider.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ QPixmap ImageProvider::requestPixmap(const QString& id, QSize* size, const QSize
7272
return QIcon(":/icons/caret-right").pixmap(requested_size);
7373
}
7474

75+
if (id == "coinbase") {
76+
*size = requested_size;
77+
return QIcon(":/icons/coinbase").pixmap(requested_size);
78+
}
79+
7580
if (id == "check") {
7681
*size = requested_size;
7782
return QIcon(":/icons/check").pixmap(requested_size);
@@ -152,6 +157,16 @@ QPixmap ImageProvider::requestPixmap(const QString& id, QSize* size, const QSize
152157
return QIcon(":/icons/tooltip-arrow-light").pixmap(requested_size);
153158
}
154159

160+
if (id == "triangle-up") {
161+
*size = requested_size;
162+
return QIcon(":/icons/triangle-up").pixmap(requested_size);
163+
}
164+
165+
if (id == "triangle-down") {
166+
*size = requested_size;
167+
return QIcon(":/icons/triangle-down").pixmap(requested_size);
168+
}
169+
155170
if (id == "add-wallet-dark") {
156171
*size = requested_size;
157172
return QIcon(":/icons/add-wallet-dark").pixmap(requested_size);

0 commit comments

Comments
 (0)