1 // Copyright (c) 2011-2015 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 Ui {
17     class Intro;
18 }
19 
20 /** Introduction screen (pre-GUI startup).
21   Allows the user to choose a data directory,
22   in which the wallet and block chain will be stored.
23  */
24 class Intro : public QDialog
25 {
26     Q_OBJECT
27 
28 public:
29     explicit Intro(QWidget *parent = 0);
30     ~Intro();
31 
32     QString getDataDirectory();
33     void setDataDirectory(const QString &dataDir);
34 
35     /**
36      * Determine data directory. Let the user choose if the current one doesn't exist.
37      *
38      * @returns true if a data directory was selected, false if the user cancelled the selection
39      * dialog.
40      *
41      * @note do NOT call global GetDataDir() before calling this function, this
42      * will cause the wrong path to be cached.
43      */
44     static bool pickDataDirectory();
45 
46     /**
47      * Determine default data directory for operating system.
48      */
49     static QString getDefaultDataDirectory();
50 
51 Q_SIGNALS:
52     void requestCheck();
53     void stopThread();
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 
71     void startThread();
72     void checkPath(const QString &dataDir);
73     QString getPathToCheck();
74 
75     friend class FreespaceChecker;
76 };
77 
78 #endif // BITCOIN_QT_INTRO_H
79