diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2012-05-06 19:40:58 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2012-05-20 10:44:50 +0200 |
commit | ab1b288fa7994db5f036e93d5f8ba73372017c40 (patch) | |
tree | 6454168811d3f2c011e907770b3ac7cfe8c49495 /src/ui_interface.h | |
parent | fe4a655042f7de31dce120aeed72345579f1b59f (diff) |
Convert UI interface to boost::signals2.
- Signals now go directly from the core to WalletModel/ClientModel.
- WalletModel subscribes to signals on CWallet: Prepares for multi-wallet support, by no longer assuming an implicit global wallet.
- Gets rid of noui.cpp, the few lines that were left are merged into init.cpp
- Rename wxXXX message flags to MF_XXX, to make them UI indifferent.
- ThreadSafeMessageBox no longer returns the value `4` which was never used, converted to void.
Diffstat (limited to 'src/ui_interface.h')
-rw-r--r-- | src/ui_interface.h | 127 |
1 files changed, 73 insertions, 54 deletions
diff --git a/src/ui_interface.h b/src/ui_interface.h index c1ed265a01..954a781005 100644 --- a/src/ui_interface.h +++ b/src/ui_interface.h @@ -6,40 +6,47 @@ #include <string> #include "util.h" // for int64 +#include <boost/signals2/signal.hpp> +#include <boost/signals2/last_value.hpp> class CBasicKeyStore; class CWallet; class uint256; -#define wxYES 0x00000002 -#define wxOK 0x00000004 -#define wxNO 0x00000008 -#define wxYES_NO (wxYES|wxNO) -#define wxCANCEL 0x00000010 -#define wxAPPLY 0x00000020 -#define wxCLOSE 0x00000040 -#define wxOK_DEFAULT 0x00000000 -#define wxYES_DEFAULT 0x00000000 -#define wxNO_DEFAULT 0x00000080 -#define wxCANCEL_DEFAULT 0x80000000 -#define wxICON_EXCLAMATION 0x00000100 -#define wxICON_HAND 0x00000200 -#define wxICON_WARNING wxICON_EXCLAMATION -#define wxICON_ERROR wxICON_HAND -#define wxICON_QUESTION 0x00000400 -#define wxICON_INFORMATION 0x00000800 -#define wxICON_STOP wxICON_HAND -#define wxICON_ASTERISK wxICON_INFORMATION -#define wxICON_MASK (0x00000100|0x00000200|0x00000400|0x00000800) -#define wxFORWARD 0x00001000 -#define wxBACKWARD 0x00002000 -#define wxRESET 0x00004000 -#define wxHELP 0x00008000 -#define wxMORE 0x00010000 -#define wxSETUP 0x00020000 -// Force blocking, modal message box dialog (not just notification) -#define wxMODAL 0x00040000 +/** Flags for CClientUIInterface::ThreadSafeMessageBox */ +enum MessageBoxFlags +{ + MF_YES = 0x00000002, + MF_OK = 0x00000004, + MF_NO = 0x00000008, + MF_YES_NO = (MF_YES|MF_NO), + MF_CANCEL = 0x00000010, + MF_APPLY = 0x00000020, + MF_CLOSE = 0x00000040, + MF_OK_DEFAULT = 0x00000000, + MF_YES_DEFAULT = 0x00000000, + MF_NO_DEFAULT = 0x00000080, + MF_CANCEL_DEFAULT = 0x80000000, + MF_ICON_EXCLAMATION = 0x00000100, + MF_ICON_HAND = 0x00000200, + MF_ICON_WARNING = MF_ICON_EXCLAMATION, + MF_ICON_ERROR = MF_ICON_HAND, + MF_ICON_QUESTION = 0x00000400, + MF_ICON_INFORMATION = 0x00000800, + MF_ICON_STOP = MF_ICON_HAND, + MF_ICON_ASTERISK = MF_ICON_INFORMATION, + MF_ICON_MASK = (0x00000100|0x00000200|0x00000400|0x00000800), + MF_FORWARD = 0x00001000, + MF_BACKWARD = 0x00002000, + MF_RESET = 0x00004000, + MF_HELP = 0x00008000, + MF_MORE = 0x00010000, + MF_SETUP = 0x00020000, +// Force blocking, modal message box dialog (not just OS notification) + MF_MODAL = 0x00040000 +}; +/** General change type (added, updated, removed). */ enum ChangeType { CT_NEW, @@ -47,39 +54,51 @@ enum ChangeType CT_DELETED }; -/* These UI communication functions are implemented in bitcoin.cpp (for ui) and noui.cpp (no ui) */ +/** Signals for UI communication. */ +class CClientUIInterface +{ +public: + /** Show message box. */ + boost::signals2::signal<void (const std::string& message, const std::string& caption, int style)> ThreadSafeMessageBox; -extern int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style=wxOK); -extern bool ThreadSafeAskFee(int64 nFeeRequired, const std::string& strCaption); -extern void ThreadSafeHandleURI(const std::string& strURI); -extern void QueueShutdown(); -extern void InitMessage(const std::string &message); -extern std::string _(const char* psz); + /** Ask the user whether he want to pay a fee or not. */ + boost::signals2::signal<bool (int64 nFeeRequired, const std::string& strCaption), boost::signals2::last_value<bool> > ThreadSafeAskFee; -/* Block chain changed. */ -extern void NotifyBlocksChanged(); + /** Handle an URL passed on the command line. */ + boost::signals2::signal<void (const std::string& strURI)> ThreadSafeHandleURI; -/* Wallet status (encrypted, locked) changed. - * Note: Called without locks held. - */ -extern void NotifyKeyStoreStatusChanged(CBasicKeyStore *wallet); + /** Progress message during initialization. */ + boost::signals2::signal<void (const std::string &message)> InitMessage; -/* Address book entry changed. - * Note: called with lock cs_wallet held. - */ -extern void NotifyAddressBookChanged(CWallet *wallet, const std::string &address, const std::string &label, ChangeType status); + /** Initiate client shutdown. */ + boost::signals2::signal<void ()> QueueShutdown; -/* Wallet transaction added, removed or updated. - * Note: called with lock cs_wallet held. - */ -extern void NotifyTransactionChanged(CWallet *wallet, const uint256 &hashTx, ChangeType status); + /** Translate a message to the native language of the user. */ + boost::signals2::signal<std::string (const char* psz)> Translate; -/* Number of connections changed. */ -extern void NotifyNumConnectionsChanged(int newNumConnections); + /** Block chain changed. */ + boost::signals2::signal<void ()> NotifyBlocksChanged; -/* New, updated or cancelled alert. - * Note: called with lock cs_mapAlerts held. + /** Number of network connections changed. */ + boost::signals2::signal<void (int newNumConnections)> NotifyNumConnectionsChanged; + + /** + * New, updated or cancelled alert. + * @note called with lock cs_mapAlerts held. + */ + boost::signals2::signal<void (const uint256 &hash, ChangeType status)> NotifyAlertChanged; +}; + +extern CClientUIInterface uiInterface; + +/** + * Translation function: Call Translate signal on UI interface, which returns a boost::optional result. + * If no translation slot is registered, nothing is returned, and simply return the input. */ -extern void NotifyAlertChanged(const uint256 &hash, ChangeType status); +inline std::string _(const char* psz) +{ + boost::optional<std::string> rv = uiInterface.Translate(psz); + return rv ? (*rv) : psz; +} #endif |