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 int64_t getPruneMiB() const; 40 41 /** 42 * Determine data directory. Let the user choose if the current one doesn't exist. 43 * Let the user configure additional preferences such as pruning. 44 * 45 * @returns true if a data directory was selected, false if the user cancelled the selection 46 * dialog. 47 * 48 * @note do NOT call global gArgs.GetDataDirNet() before calling this function, this 49 * will cause the wrong path to be cached. 50 */ 51 static bool showIfNeeded(bool& did_show_intro, int64_t& prune_MiB); 52 53 Q_SIGNALS: 54 void requestCheck(); 55 56 public Q_SLOTS: 57 void setStatus(int status, const QString &message, quint64 bytesAvailable); 58 59 private Q_SLOTS: 60 void on_dataDirectory_textChanged(const QString &arg1); 61 void on_ellipsisButton_clicked(); 62 void on_dataDirDefault_clicked(); 63 void on_dataDirCustom_clicked(); 64 65 private: 66 Ui::Intro *ui; 67 QThread *thread; 68 QMutex mutex; 69 bool signalled; 70 QString pathToCheck; 71 const int64_t m_blockchain_size_gb; 72 const int64_t m_chain_state_size_gb; 73 //! Total required space (in GB) depending on user choice (prune or not prune). 74 int64_t m_required_space_gb{0}; 75 uint64_t m_bytes_available{0}; 76 int64_t m_prune_target_gb; 77 78 void startThread(); 79 void checkPath(const QString &dataDir); 80 QString getPathToCheck(); 81 void UpdatePruneLabels(bool prune_checked); 82 void UpdateFreeSpaceLabel(); 83 84 friend class FreespaceChecker; 85 }; 86 87 #endif // BITCOIN_QT_INTRO_H 88