1 // Copyright (c) 2011-2019 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_INTRO_H 6 #define BITCOIN_QT_INTRO_H 7 8 #include <QDialog> 9 #include <QMutex> 10 #include <QThread> 11 12 static const bool DEFAULT_CHOOSE_DATADIR = false; 13 14 class FreespaceChecker; 15 16 namespace interfaces { 17 class Node; 18 } 19 20 namespace Ui { 21 class Intro; 22 } 23 24 /** Introduction screen (pre-GUI startup). 25 Allows the user to choose a data directory, 26 in which the wallet and block chain will be stored. 27 */ 28 class Intro : public QDialog 29 { 30 Q_OBJECT 31 32 public: 33 explicit Intro(QWidget *parent = nullptr, 34 int64_t blockchain_size_gb = 0, int64_t chain_state_size_gb = 0); 35 ~Intro(); 36 37 QString getDataDirectory(); 38 void setDataDirectory(const QString &dataDir); 39 40 /** 41 * Determine data directory. Let the user choose if the current one doesn't exist. 42 * Let the user configure additional preferences such as pruning. 43 * 44 * @returns true if a data directory was selected, false if the user cancelled the selection 45 * dialog. 46 * 47 * @note do NOT call global GetDataDir() before calling this function, this 48 * will cause the wrong path to be cached. 49 */ 50 static bool showIfNeeded(bool& did_show_intro, bool& prune); 51 52 Q_SIGNALS: 53 void requestCheck(); 54 55 public Q_SLOTS: 56 void setStatus(int status, const QString &message, quint64 bytesAvailable); 57 58 private Q_SLOTS: 59 void on_dataDirectory_textChanged(const QString &arg1); 60 void on_ellipsisButton_clicked(); 61 void on_dataDirDefault_clicked(); 62 void on_dataDirCustom_clicked(); 63 64 private: 65 Ui::Intro *ui; 66 QThread *thread; 67 QMutex mutex; 68 bool signalled; 69 QString pathToCheck; 70 const int64_t m_blockchain_size_gb; 71 const int64_t m_chain_state_size_gb; 72 //! Total required space (in GB) depending on user choice (prune or not prune). 73 int64_t m_required_space_gb{0}; 74 uint64_t m_bytes_available{0}; 75 const int64_t m_prune_target_gb; 76 77 void startThread(); 78 void checkPath(const QString &dataDir); 79 QString getPathToCheck(); 80 void UpdatePruneLabels(bool prune_checked); 81 void UpdateFreeSpaceLabel(); 82 83 friend class FreespaceChecker; 84 }; 85 86 #endif // BITCOIN_QT_INTRO_H 87