1 // Copyright (c) 2011-2020 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_QT_WALLETFRAME_H
6 #define BITCOIN_QT_WALLETFRAME_H
7 
8 #include <QFrame>
9 #include <QMap>
10 
11 class ClientModel;
12 class PlatformStyle;
13 class SendCoinsRecipient;
14 class WalletModel;
15 class WalletView;
16 
17 QT_BEGIN_NAMESPACE
18 class QStackedWidget;
19 QT_END_NAMESPACE
20 
21 /**
22  * A container for embedding all wallet-related
23  * controls into BitcoinGUI. The purpose of this class is to allow future
24  * refinements of the wallet controls with minimal need for further
25  * modifications to BitcoinGUI, thus greatly simplifying merges while
26  * reducing the risk of breaking top-level stuff.
27  */
28 class WalletFrame : public QFrame
29 {
30     Q_OBJECT
31 
32 public:
33     explicit WalletFrame(const PlatformStyle* platformStyle, QWidget* parent);
34     ~WalletFrame();
35 
36     void setClientModel(ClientModel *clientModel);
37 
38     bool addWallet(WalletModel* walletModel, WalletView* walletView);
39     void setCurrentWallet(WalletModel* wallet_model);
40     void removeWallet(WalletModel* wallet_model);
41     void removeAllWallets();
42 
43     bool handlePaymentRequest(const SendCoinsRecipient& recipient);
44 
45     void showOutOfSyncWarning(bool fShow);
46 
sizeHint()47     QSize sizeHint() const override { return m_size_hint; }
48 
49 Q_SIGNALS:
50     void createWalletButtonClicked();
51 
52 private:
53     QStackedWidget *walletStack;
54     ClientModel *clientModel;
55     QMap<WalletModel*, WalletView*> mapWalletViews;
56 
57     bool bOutOfSync;
58 
59     const PlatformStyle *platformStyle;
60 
61     const QSize m_size_hint;
62 
63 public:
64     WalletView* currentWalletView() const;
65     WalletModel* currentWalletModel() const;
66 
67 public Q_SLOTS:
68     /** Switch to overview (home) page */
69     void gotoOverviewPage();
70     /** Switch to history (transactions) page */
71     void gotoHistoryPage();
72     /** Switch to receive coins page */
73     void gotoReceiveCoinsPage();
74     /** Switch to send coins page */
75     void gotoSendCoinsPage(QString addr = "");
76 
77     /** Show Sign/Verify Message dialog and switch to sign message tab */
78     void gotoSignMessageTab(QString addr = "");
79     /** Show Sign/Verify Message dialog and switch to verify message tab */
80     void gotoVerifyMessageTab(QString addr = "");
81 
82     /** Load Partially Signed Bitcoin Transaction */
83     void gotoLoadPSBT(bool from_clipboard = false);
84 
85     /** Encrypt the wallet */
86     void encryptWallet();
87     /** Backup the wallet */
88     void backupWallet();
89     /** Change encrypted wallet passphrase */
90     void changePassphrase();
91     /** Ask for passphrase to unlock wallet temporarily */
92     void unlockWallet();
93 
94     /** Show used sending addresses */
95     void usedSendingAddresses();
96     /** Show used receiving addresses */
97     void usedReceivingAddresses();
98 };
99 
100 #endif // BITCOIN_QT_WALLETFRAME_H
101