X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fwalletmodel.h;h=6aeace745e7a76a9a8a519ed163c841a7032e242;hb=HEAD;hp=4123240e90a2688e0e41b4ff533fe0ee8a9148e3;hpb=4efbda3f257bd8e635715377d85862d322c57c4b;p=novacoin.git diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index 4123240..6aeace7 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -2,16 +2,30 @@ #define WALLETMODEL_H #include +#include +#include -#include "util.h" +#include "allocators.h" /* for SecureString */ class OptionsModel; class AddressTableModel; class TransactionTableModel; +class MintingTableModel; class CWallet; - -struct SendCoinsRecipient +class CKeyID; +class CPubKey; +class COutput; +class COutPoint; +class uint256; +class CCoinControl; + +QT_BEGIN_NAMESPACE +class QTimer; +QT_END_NAMESPACE + +class SendCoinsRecipient { +public: QString address; QString label; qint64 amount; @@ -21,8 +35,10 @@ struct SendCoinsRecipient class WalletModel : public QObject { Q_OBJECT + public: explicit WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent = 0); + ~WalletModel(); enum StatusCode // Returned by sendCoins { @@ -34,8 +50,7 @@ public: DuplicateAddress, TransactionCreationFailed, // Error returned when wallet is still locked TransactionCommitFailed, - Aborted, - MiscError + Aborted }; enum EncryptionStatus @@ -47,10 +62,15 @@ public: OptionsModel *getOptionsModel(); AddressTableModel *getAddressTableModel(); + MintingTableModel *getMintingTableModel(); TransactionTableModel *getTransactionTableModel(); + bool haveWatchOnly() const; qint64 getBalance() const; + qint64 getBalanceWatchOnly() const; + qint64 getStake() const; qint64 getUnconfirmedBalance() const; + qint64 getImmatureBalance() const; int getNumTransactions() const; EncryptionStatus getEncryptionStatus() const; @@ -60,7 +80,7 @@ public: // Return status record for SendCoins, contains error id + information struct SendCoinsReturn { - SendCoinsReturn(StatusCode status, + SendCoinsReturn(StatusCode status=Aborted, qint64 fee=0, QString hex=QString()): status(status), fee(fee), hex(hex) {} @@ -70,7 +90,7 @@ public: }; // Send coins to a list of recipients - SendCoinsReturn sendCoins(const QList &recipients); + SendCoinsReturn sendCoins(const QList &recipients, const CCoinControl *coinControl=NULL); // Wallet encryption bool setWalletEncrypted(bool encrypted, const SecureString &passphrase); @@ -80,11 +100,16 @@ public: // Wallet backup bool backupWallet(const QString &filename); + bool dumpWallet(const QString &filename); + bool importWallet(const QString &filename); + + void getStakeWeightFromValue(const int64_t& nTime, const int64_t& nValue, uint64_t& nWeight); + // RAI object for unlocking wallet, returned by requestUnlock() class UnlockContext { public: - UnlockContext(WalletModel *wallet, bool valid, bool relock); + UnlockContext(WalletModel *wallet, bool valid, bool relock, bool mintflag); ~UnlockContext(); bool isValid() const { return valid; } @@ -96,31 +121,65 @@ public: WalletModel *wallet; bool valid; mutable bool relock; // mutable, as it can be set to false by copying + bool mintflag; void CopyFrom(const UnlockContext& rhs); }; UnlockContext requestUnlock(); + bool getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; + void getOutputs(const std::vector& vOutpoints, std::vector& vOutputs); + void listCoins(std::map >& mapCoins) const; + bool isLockedCoin(uint256 hash, unsigned int n) const; + void lockCoin(COutPoint& output); + void unlockCoin(COutPoint& output); + void listLockedCoins(std::vector& vOutpts); + void clearOrphans(); + CWallet* getWallet(); + private: CWallet *wallet; + bool fHaveWatchOnly; // Wallet has an options model for wallet-specific options // (transaction fee, for example) OptionsModel *optionsModel; AddressTableModel *addressTableModel; + MintingTableModel *mintingTableModel; TransactionTableModel *transactionTableModel; // Cache some values to be able to detect changes qint64 cachedBalance; + qint64 cachedStake; qint64 cachedUnconfirmedBalance; + qint64 cachedImmatureBalance; qint64 cachedNumTransactions; EncryptionStatus cachedEncryptionStatus; + int cachedNumBlocks; + + QTimer *pollTimer; + + void subscribeToCoreSignals(); + void unsubscribeFromCoreSignals(); + void checkBalanceChanged(); + +public slots: + /* Wallet status might have changed */ + void updateStatus(); + /* New transaction, or transaction changed status */ + void updateTransaction(const QString &hash, int status); + /* New, updated or removed address book entry */ + void updateAddressBook(const QString &address, const QString &label, bool isMine, int status); + /* Watchonly added */ + void updateWatchOnlyFlag(bool fHaveWatchonly); + /* Current, immature or unconfirmed balance might have changed - emit 'balanceChanged' if so */ + void pollBalanceChanged(); signals: // Signal that balance in wallet changed - void balanceChanged(qint64 balance, qint64 unconfirmedBalance); + void balanceChanged(qint64 total, qint64 watchOnly, qint64 stake, qint64 unconfirmedBalance, qint64 immatureBalance); // Number of transactions in wallet changed void numTransactionsChanged(int count); @@ -134,12 +193,10 @@ signals: void requireUnlock(); // Asynchronous error notification - void error(const QString &title, const QString &message); - -public slots: + void error(const QString &title, const QString &message, bool modal); -private slots: - void update(); + // Watch-only address added + void notifyWatchonlyChanged(bool fHaveWatchonly); };