class ClientModel;
class WalletModel;
class TransactionView;
+class OverviewPage;
+class AddressBookPage;
+class SendCoinsDialog;
+class SignVerifyMessageDialog;
+class Notificator;
+class RPCConsole;
QT_BEGIN_NAMESPACE
class QLabel;
class QAbstractItemModel;
class QModelIndex;
class QProgressBar;
+class QStackedWidget;
+class QUrl;
QT_END_NAMESPACE
+/**
+ Bitcoin GUI main class. This class represents the main window of the Bitcoin UI. It communicates with both the client and
+ wallet models to give the user an up-to-date view of the current core state.
+*/
class BitcoinGUI : public QMainWindow
{
Q_OBJECT
public:
explicit BitcoinGUI(QWidget *parent = 0);
+ ~BitcoinGUI();
+
+ /** Set the client model.
+ The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic.
+ */
void setClientModel(ClientModel *clientModel);
+ /** Set the wallet model.
+ The wallet model represents a bitcoin wallet, and offers access to the list of transactions, address book and sending
+ functionality.
+ */
void setWalletModel(WalletModel *walletModel);
-
- /* Transaction table tab indices */
- enum {
- AllTransactions = 0,
- SentReceived = 1,
- Sent = 2,
- Received = 3
- } TabIndex;
protected:
void changeEvent(QEvent *e);
void closeEvent(QCloseEvent *event);
+ void dragEnterEvent(QDragEnterEvent *event);
+ void dropEvent(QDropEvent *event);
private:
ClientModel *clientModel;
WalletModel *walletModel;
- QLabel *labelBalance;
- QLabel *labelConnections;
+ QStackedWidget *centralWidget;
+
+ OverviewPage *overviewPage;
+ QWidget *transactionsPage;
+ AddressBookPage *addressBookPage;
+ AddressBookPage *receiveCoinsPage;
+ SendCoinsDialog *sendCoinsPage;
+ SignVerifyMessageDialog *signVerifyMessageDialog;
+
+ QLabel *labelEncryptionIcon;
QLabel *labelConnectionsIcon;
- QLabel *labelBlocks;
- QLabel *labelTransactions;
+ QLabel *labelBlocksIcon;
+ QLabel *labelMiningIcon;
QLabel *progressBarLabel;
QProgressBar *progressBar;
- QAction *quit;
- QAction *sendCoins;
- QAction *addressbook;
- QAction *about;
- QAction *receiveCoins;
- QAction *options;
- QAction *openBitcoin;
+ QMenuBar *appMenuBar;
+ QAction *overviewAction;
+ QAction *historyAction;
+ QAction *quitAction;
+ QAction *sendCoinsAction;
+ QAction *addressBookAction;
+ QAction *signMessageAction;
+ QAction *verifyMessageAction;
+ QAction *aboutAction;
+ QAction *receiveCoinsAction;
+ QAction *optionsAction;
+ QAction *toggleHideAction;
+ QAction *exportAction;
+ QAction *encryptWalletAction;
+ QAction *lockWalletAction;
+ QAction *unlockWalletAction;
+ QAction *unlockWalletMiningAction;
+ QAction *backupWalletAction;
+ QAction *dumpWalletAction;
+ QAction *importWalletAction;
+ QAction *changePassphraseAction;
+ QAction *aboutQtAction;
+ QAction *openRPCConsoleAction;
QSystemTrayIcon *trayIcon;
+ Notificator *notificator;
TransactionView *transactionView;
+ RPCConsole *rpcConsole;
+ QMovie *syncIconMovie;
+
+ /** Create the main UI actions. */
void createActions();
- QWidget *createTabs();
+ /** Create the menu bar and sub-menus. */
+ void createMenuBar();
+ /** Create the toolbars */
+ void createToolBars();
+ /** Create system tray (notification) icon */
void createTrayIcon();
public slots:
- void setBalance(qint64 balance);
+ /** Set number of connections shown in the UI */
void setNumConnections(int count);
- void setNumBlocks(int count);
- void setNumTransactions(int count);
- void error(const QString &title, const QString &message);
- /* It is currently not possible to pass a return value to another thread through
- BlockingQueuedConnection, so use an indirected pointer.
- http://bugreports.qt.nokia.com/browse/QTBUG-10440
+ /** Set number of blocks shown in the UI */
+ void setNumBlocks(int count, int nTotalBlocks);
+ /** Set stake miner status in the UI */
+ void updateMining();
+ /** Set the encryption status as shown in the UI.
+ @param[in] status current encryption status
+ @see WalletModel::EncryptionStatus
+ */
+ void setEncryptionStatus(int status);
+
+ /** Notify the user of an error in the network or transaction handling code. */
+ void error(const QString &title, const QString &message, bool modal);
+ void message(const QString &title, const QString &message, unsigned int style, const QString &detail=QString());
+
+ /** Asks the user whether to pay the transaction fee or to cancel the transaction.
+ It is currently not possible to pass a return value to another thread through
+ BlockingQueuedConnection, so an indirected pointer is used.
+ https://bugreports.qt-project.org/browse/QTBUG-10440
+
+ @param[in] nFeeRequired the required fee
+ @param[out] payFee true to pay the fee, false to not pay the fee
*/
void askFee(qint64 nFeeRequired, bool *payFee);
+ void handleURI(QString strURI);
private slots:
- void sendCoinsClicked();
- void addressbookClicked();
+ /** Switch to overview (home) page */
+ void gotoOverviewPage();
+ /** Switch to history (transactions) page */
+ void gotoHistoryPage();
+ /** Switch to address book page */
+ void gotoAddressBookPage();
+ /** Switch to receive coins page */
+ void gotoReceiveCoinsPage();
+ /** Switch to send coins page */
+ void gotoSendCoinsPage();
+
+ /** Show Sign/Verify Message dialog and switch to sign message tab */
+ void gotoSignMessageTab(QString addr = "");
+ /** Show Sign/Verify Message dialog and switch to verify message tab */
+ void gotoVerifyMessageTab(QString addr = "");
+
+ /** Show configuration dialog */
void optionsClicked();
- void receiveCoinsClicked();
+ /** Show about dialog */
void aboutClicked();
+#ifndef Q_OS_MAC
+ /** Handle tray icon clicked */
void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
- void transactionDetails(const QModelIndex& idx);
+#endif
+ /** Show incoming transaction notification for new transactions.
+
+ The new items are those between start and end inclusive, under the given parent item.
+ */
void incomingTransaction(const QModelIndex & parent, int start, int end);
+ /** Encrypt the wallet */
+ void encryptWallet(bool status);
+ /** Backup the wallet */
+ void backupWallet();
+ /** Change encrypted wallet passphrase */
+
+ void dumpWallet();
+ void importWallet();
+
+ void changePassphrase();
+ /** Ask for passphrase to unlock wallet temporarily */
+ void lockWallet();
+ void unlockWallet();
+ void unlockWalletMining(bool status);
+
+ /** Show window if hidden, unminimize when minimized, rise when obscured or show if hidden and fToggleHidden is true */
+ void showNormalIfMinimized(bool fToggleHidden = false);
+ /** simply calls showNormalIfMinimized(true) for use in SLOT() macro */
+ void toggleHidden();
};
#endif