Add selectable Qt GUI Styles
[novacoin.git] / src / qt / bitcoingui.h
index 046186c..f4e72b3 100644 (file)
@@ -8,6 +8,17 @@ class TransactionTableModel;
 class ClientModel;
 class WalletModel;
 class TransactionView;
+class MintingView;
+class OverviewPage;
+class AddressBookPage;
+class SendCoinsDialog;
+class SignVerifyMessageDialog;
+class SecondAuthDialog;
+class MultisigDialog;
+class Notificator;
+class RPCConsole;
+class AboutDialog;
+class OptionsDialog;
 
 QT_BEGIN_NAMESPACE
 class QLabel;
@@ -16,76 +27,190 @@ class QTableView;
 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;
+    QWidget *mintingPage;
+    AddressBookPage *addressBookPage;
+    AddressBookPage *receiveCoinsPage;
+    SendCoinsDialog *sendCoinsPage;
+    SignVerifyMessageDialog *signVerifyMessageDialog;
+    SecondAuthDialog *secondAuthDialog;
+    MultisigDialog *multisigPage;
+
+    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 *mintingAction;
+    QAction *quitAction;
+    QAction *sendCoinsAction;
+    QAction *addressBookAction;
+    QAction *signMessageAction;
+    QAction *verifyMessageAction;
+    QAction *secondAuthAction;
+    QAction *multisigAction;
+    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;
+    MintingView *mintingView;
+    RPCConsole *rpcConsole;
+    AboutDialog *aboutDialog;
+    OptionsDialog *optionsDialog;
 
-    void createActions();
-    QWidget *createTabs();
+    QMovie *syncIconMovie;
+
+    /** Create the main UI actions. */
+    void createActions(int nQtStyle);
+    /** Create the menu bar and sub-menus. */
+    void createMenuBar();
+    /** Create the toolbars */
+    void createToolBars(int nQtStyle);
+    /** 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);
+
+    void gotoMultisigPage();
 
 private slots:
-    void sendCoinsClicked();
-    void addressbookClicked();
+    /** Switch to overview (home) page */
+    void gotoOverviewPage();
+    /** Switch to history (transactions) page */
+    void gotoHistoryPage();
+    /** Switch to minting page */
+    void gotoMintingPage();
+    /** 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 Second Auth dialog */
+    void gotoSecondAuthPage(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