aa250f0453
Generally useless information. Only updates on connect time, not after that. Peers can easily lie and the median filter is not effective in preventing that. In the past it was used for progress display in the GUI but `CheckPoints::guessVerificationProgress` provides a better way that is now used. It was too easy to mislead it. Peers do lie about it in practice, see issue #4065. From the RPC, `getpeerinfo` gives the peer raw values, which are more useful.
196 lines
6.2 KiB
C++
196 lines
6.2 KiB
C++
// Copyright (c) 2011-2014 The Bitcoin developers
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOINGUI_H
|
|
#define BITCOINGUI_H
|
|
|
|
#if defined(HAVE_CONFIG_H)
|
|
#include "bitcoin-config.h"
|
|
#endif
|
|
|
|
#include <QMainWindow>
|
|
#include <QMap>
|
|
#include <QSystemTrayIcon>
|
|
|
|
class ClientModel;
|
|
class Notificator;
|
|
class RPCConsole;
|
|
class SendCoinsRecipient;
|
|
class WalletFrame;
|
|
class WalletModel;
|
|
|
|
class CWallet;
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
class QAction;
|
|
class QLabel;
|
|
class QProgressBar;
|
|
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:
|
|
static const QString DEFAULT_WALLET;
|
|
|
|
explicit BitcoinGUI(bool fIsTestnet = false, 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);
|
|
|
|
#ifdef ENABLE_WALLET
|
|
/** Set the wallet model.
|
|
The wallet model represents a bitcoin wallet, and offers access to the list of transactions, address book and sending
|
|
functionality.
|
|
*/
|
|
bool addWallet(const QString& name, WalletModel *walletModel);
|
|
bool setCurrentWallet(const QString& name);
|
|
void removeAllWallets();
|
|
#endif
|
|
|
|
protected:
|
|
void changeEvent(QEvent *e);
|
|
void closeEvent(QCloseEvent *event);
|
|
void dragEnterEvent(QDragEnterEvent *event);
|
|
void dropEvent(QDropEvent *event);
|
|
bool eventFilter(QObject *object, QEvent *event);
|
|
|
|
private:
|
|
ClientModel *clientModel;
|
|
WalletFrame *walletFrame;
|
|
|
|
QLabel *labelEncryptionIcon;
|
|
QLabel *labelConnectionsIcon;
|
|
QLabel *labelBlocksIcon;
|
|
QLabel *progressBarLabel;
|
|
QProgressBar *progressBar;
|
|
|
|
QMenuBar *appMenuBar;
|
|
QAction *overviewAction;
|
|
QAction *historyAction;
|
|
QAction *quitAction;
|
|
QAction *sendCoinsAction;
|
|
QAction *usedSendingAddressesAction;
|
|
QAction *usedReceivingAddressesAction;
|
|
QAction *signMessageAction;
|
|
QAction *verifyMessageAction;
|
|
QAction *aboutAction;
|
|
QAction *receiveCoinsAction;
|
|
QAction *optionsAction;
|
|
QAction *toggleHideAction;
|
|
QAction *encryptWalletAction;
|
|
QAction *backupWalletAction;
|
|
QAction *changePassphraseAction;
|
|
QAction *aboutQtAction;
|
|
QAction *openRPCConsoleAction;
|
|
QAction *openAction;
|
|
QAction *showHelpMessageAction;
|
|
|
|
QSystemTrayIcon *trayIcon;
|
|
Notificator *notificator;
|
|
RPCConsole *rpcConsole;
|
|
|
|
/** Keep track of previous number of blocks, to detect progress */
|
|
int prevBlocks;
|
|
int spinnerFrame;
|
|
|
|
/** Create the main UI actions. */
|
|
void createActions(bool fIsTestnet);
|
|
/** Create the menu bar and sub-menus. */
|
|
void createMenuBar();
|
|
/** Create the toolbars */
|
|
void createToolBars();
|
|
/** Create system tray icon and notification */
|
|
void createTrayIcon(bool fIsTestnet);
|
|
/** Create system tray menu (or setup the dock menu) */
|
|
void createTrayIconMenu();
|
|
|
|
/** Enable or disable all wallet-related actions */
|
|
void setWalletActionsEnabled(bool enabled);
|
|
|
|
/** Connect core signals to GUI client */
|
|
void subscribeToCoreSignals();
|
|
/** Disconnect core signals from GUI client */
|
|
void unsubscribeFromCoreSignals();
|
|
|
|
signals:
|
|
/** Signal raised when a URI was entered or dragged to the GUI */
|
|
void receivedURI(const QString &uri);
|
|
|
|
public slots:
|
|
/** Set number of connections shown in the UI */
|
|
void setNumConnections(int count);
|
|
/** Set number of blocks shown in the UI */
|
|
void setNumBlocks(int count);
|
|
|
|
/** Notify the user of an event from the core network or transaction handling code.
|
|
@param[in] title the message box / notification title
|
|
@param[in] message the displayed text
|
|
@param[in] style modality and style definitions (icon and used buttons - buttons only for message boxes)
|
|
@see CClientUIInterface::MessageBoxFlags
|
|
@param[in] ret pointer to a bool that will be modified to whether Ok was clicked (modal only)
|
|
*/
|
|
void message(const QString &title, const QString &message, unsigned int style, bool *ret = NULL);
|
|
|
|
#ifdef ENABLE_WALLET
|
|
/** Set the encryption status as shown in the UI.
|
|
@param[in] status current encryption status
|
|
@see WalletModel::EncryptionStatus
|
|
*/
|
|
void setEncryptionStatus(int status);
|
|
|
|
bool handlePaymentRequest(const SendCoinsRecipient& recipient);
|
|
|
|
/** Show incoming transaction notification for new transactions. */
|
|
void incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address);
|
|
#endif
|
|
|
|
private slots:
|
|
#ifdef ENABLE_WALLET
|
|
/** Switch to overview (home) page */
|
|
void gotoOverviewPage();
|
|
/** Switch to history (transactions) page */
|
|
void gotoHistoryPage();
|
|
/** Switch to receive coins page */
|
|
void gotoReceiveCoinsPage();
|
|
/** Switch to send coins page */
|
|
void gotoSendCoinsPage(QString addr = "");
|
|
|
|
/** 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 open dialog */
|
|
void openClicked();
|
|
#endif
|
|
/** Show configuration dialog */
|
|
void optionsClicked();
|
|
/** Show about dialog */
|
|
void aboutClicked();
|
|
/** Show help message dialog */
|
|
void showHelpMessageClicked();
|
|
#ifndef Q_OS_MAC
|
|
/** Handle tray icon clicked */
|
|
void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
|
|
#endif
|
|
|
|
/** 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();
|
|
|
|
/** called by a timer to check if fRequestShutdown has been set **/
|
|
void detectShutdown();
|
|
};
|
|
|
|
#endif // BITCOINGUI_H
|