From 0604b1b226eb02834b82d3873baa67b60e2e7398 Mon Sep 17 00:00:00 2001 From: CryptoManiac Date: Fri, 20 Jun 2014 03:06:06 +0400 Subject: [PATCH] Stake miner status icon --- src/qt/bitcoin.qrc | 2 + src/qt/bitcoingui.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ src/qt/bitcoingui.h | 3 ++ src/qt/clientmodel.cpp | 16 ++++++++++++++ src/qt/clientmodel.h | 3 ++ 5 files changed, 76 insertions(+), 0 deletions(-) diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index a1c6958..9cbd685 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -10,6 +10,8 @@ res/icons/connect2_16.png res/icons/connect3_16.png res/icons/connect4_16.png + res/icons/mining_active.png + res/icons/mining_inactive.png res/icons/transaction0.png res/icons/transaction2.png res/icons/clock1.png diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index d8ef290..c6d4b41 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -130,11 +130,14 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); labelEncryptionIcon = new QLabel(); + labelMiningIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); frameBlocksLayout->addStretch(); + frameBlocksLayout->addWidget(labelMiningIcon); + frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); @@ -362,6 +365,7 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel) setNumBlocks(clientModel->getNumBlocks(), clientModel->getNumBlocksOfPeers()); connect(clientModel, SIGNAL(numBlocksChanged(int,int)), this, SLOT(setNumBlocks(int,int))); + connect(clientModel, SIGNAL(numBlocksChanged(int,int)), this, SLOT(updateMining())); // Report errors from network/worker thread connect(clientModel, SIGNAL(error(QString,QString,bool)), this, SLOT(error(QString,QString,bool))); @@ -585,6 +589,54 @@ void BitcoinGUI::setNumBlocks(int count, int nTotalBlocks) progressBar->setToolTip(tooltip); } +void BitcoinGUI::updateMining() +{ + if(!walletModel) + return; + + labelMiningIcon->setPixmap(QIcon(":/icons/mining_inactive").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + + if (!clientModel->getNumConnections()) + labelMiningIcon->setToolTip(tr("Wallet is offline")); + + if (walletModel->getEncryptionStatus() == WalletModel::Locked) + labelMiningIcon->setToolTip(tr("Wallet is locked")); + + if (clientModel->inInitialBlockDownload() || clientModel->getNumBlocksOfPeers() > clientModel->getNumBlocks()) + labelMiningIcon->setToolTip(tr("Blockchain download is in progress")); + + uint64 nMinWeight = 0, nMaxWeight = 0, nTotalWeight = 0; + walletModel->getStakeWeight(nMinWeight, nMaxWeight, nTotalWeight); + + if (nTotalWeight > 0) + { + labelMiningIcon->setPixmap(QIcon(":/icons/mining_active").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + + double dNetworkWeight = clientModel->getPoSKernelPS(); +/* + double dDifficulty = clientModel->getDifficulty(true); + QString msg; + + int nApproxTime = 4294967297 * dDifficulty / nTotalWeight; + + if (nApproxTime < 60) + msg = tr("%n second(s)", "", nApproxTime); + else if (nApproxTime < 60*60) + msg = tr("%n minute(s)", "", nApproxTime / 60); + else if (nApproxTime < 24*60*60) + msg = tr("%n hour(s)", "", nApproxTime / 3600); + else + msg = tr("%n day(s)", "", nApproxTime / 86400); + + labelMiningIcon->setToolTip(tr("Stake miner is active\nYour current stake weight is %1\nNetwork weight is %2\nAverage block generation time is %3").arg(nTotalWeight).arg(dNetworkWeight).arg(msg)); +*/ + + labelMiningIcon->setToolTip(tr("Stake miner is active\nYour current stake weight is %1\nNetwork weight is %2").arg(nTotalWeight).arg(dNetworkWeight)); + } + else + labelMiningIcon->setToolTip(tr("No suitable inputs were found")); +} + void BitcoinGUI::error(const QString &title, const QString &message, bool modal) { // Report errors from network/worker thread diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index b4dd750..8d5266b 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -69,6 +69,7 @@ private: QLabel *labelEncryptionIcon; QLabel *labelConnectionsIcon; QLabel *labelBlocksIcon; + QLabel *labelMiningIcon; QLabel *progressBarLabel; QProgressBar *progressBar; @@ -114,6 +115,8 @@ public slots: void setNumConnections(int count); /** 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 diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 3b3af1e..064882b 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -11,6 +11,9 @@ #include #include +extern double GetPoSKernelPS(); +extern double GetDifficulty(const CBlockIndex* blockindex); + static const int64 nClientStartupTime = GetTime(); ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) : @@ -32,6 +35,19 @@ ClientModel::~ClientModel() unsubscribeFromCoreSignals(); } +double ClientModel::getPoSKernelPS() +{ + return GetPoSKernelPS(); +} + +double ClientModel::getDifficulty(bool fProofofStake) +{ + if (fProofofStake) + return GetDifficulty(GetLastBlockIndex(pindexBest,true)); + else + return GetDifficulty(GetLastBlockIndex(pindexBest,false)); +} + int ClientModel::getNumConnections() const { return vNodes.size(); diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 70d816b..43c863d 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -23,6 +23,9 @@ public: OptionsModel *getOptionsModel(); + double getPoSKernelPS(); + double getDifficulty(bool fProofofStake); + int getNumConnections() const; int getNumBlocks() const; int getNumBlocksAtStartup(); -- 1.7.1