askpassphrasedialog.h raw
1 // Copyright (c) 2011-present 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_ASKPASSPHRASEDIALOG_H
6 #define BITCOIN_QT_ASKPASSPHRASEDIALOG_H
7
8 #include <QDialog>
9
10 #include <support/allocators/secure.h>
11
12 class WalletModel;
13
14 namespace Ui {
15 class AskPassphraseDialog;
16 }
17
18 /** Multifunctional dialog to ask for passphrases. Used for encryption, unlocking, and changing the passphrase.
19 */
20 class AskPassphraseDialog : public QDialog
21 {
22 Q_OBJECT
23
24 public:
25 enum Mode {
26 Encrypt, /**< Ask passphrase twice and encrypt */
27 Unlock, /**< Ask passphrase and unlock */
28 ChangePass, /**< Ask old passphrase + new passphrase twice */
29 UnlockMigration, /**< Ask passphrase for unlocking during migration */
30 };
31
32 explicit AskPassphraseDialog(Mode mode, QWidget *parent, SecureString* passphrase_out = nullptr);
33 ~AskPassphraseDialog();
34
35 void accept() override;
36
37 void setModel(WalletModel *model);
38
39 private:
40 Ui::AskPassphraseDialog *ui;
41 Mode mode;
42 WalletModel* model{nullptr};
43 bool fCapsLock{false};
44 SecureString* m_passphrase_out;
45
46 private Q_SLOTS:
47 void textChanged();
48 void secureClearPassFields();
49 void toggleShowPassword(bool);
50
51 protected:
52 bool event(QEvent *event) override;
53 bool eventFilter(QObject *object, QEvent *event) override;
54 };
55
56 #endif // BITCOIN_QT_ASKPASSPHRASEDIALOG_H
57