Fix status bar not displaying Alerts.
authorMatt Corallo <matt@bluematt.me>
Tue, 13 Dec 2011 19:00:21 +0000 (14:00 -0500)
committerLuke Dashjr <luke-jr+git@utopios.org>
Tue, 13 Dec 2011 21:17:58 +0000 (16:17 -0500)
src/qt/bitcoin.cpp
src/qt/bitcoingui.cpp
src/qt/bitcoingui.h
src/qt/clientmodel.cpp
src/qt/clientmodel.h

index 6afa967..2142db5 100644 (file)
@@ -91,6 +91,8 @@ void UIThreadCall(boost::function0<void> fn)
 
 void MainFrameRepaint()
 {
+    if(guiref)
+        QMetaObject::invokeMethod(guiref, "refreshStatusBar", Qt::QueuedConnection);
 }
 
 void InitMessage(const std::string &message)
index 8641c72..5968aab 100644 (file)
@@ -2,6 +2,7 @@
  * Qt4 bitcoin GUI.
  *
  * W.J. van der Laan 2011
+ * The Bitcoin Developers 2011
  */
 #include "bitcoingui.h"
 #include "transactiontablemodel.h"
@@ -412,15 +413,31 @@ void BitcoinGUI::setNumBlocks(int count)
 
     if(count < total)
     {
-        progressBarLabel->setVisible(true);
-        progressBar->setVisible(true);
-        progressBar->setMaximum(total - initTotal);
-        progressBar->setValue(count - initTotal);
+        if (clientModel->getStatusBarWarnings() == "")
+        {
+            progressBarLabel->setVisible(true);
+            progressBarLabel->setText(tr("Synchronizing with network..."));
+            progressBar->setVisible(true);
+            progressBar->setMaximum(total - initTotal);
+            progressBar->setValue(count - initTotal);
+        }
+        else
+        {
+            progressBarLabel->setText(clientModel->getStatusBarWarnings());
+            progressBarLabel->setVisible(true);
+            progressBar->setVisible(false);
+        }
         tooltip = tr("Downloaded %1 of %2 blocks of transaction history.").arg(count).arg(total);
     }
     else
     {
-        progressBarLabel->setVisible(false);
+        if (clientModel->getStatusBarWarnings() == "")
+            progressBarLabel->setVisible(false);
+        else
+        {
+            progressBarLabel->setText(clientModel->getStatusBarWarnings());
+            progressBarLabel->setVisible(true);
+        }
         progressBar->setVisible(false);
         tooltip = tr("Downloaded %1 blocks of transaction history.").arg(count);
     }
@@ -469,6 +486,19 @@ void BitcoinGUI::setNumBlocks(int count)
     progressBar->setToolTip(tooltip);
 }
 
+void BitcoinGUI::refreshStatusBar()
+{
+    /* Might display multiple times in the case of multiple alerts
+    static QString prevStatusBar;
+    QString newStatusBar = clientModel->getStatusBarWarnings();
+    if (prevStatusBar != newStatusBar)
+    {
+        prevStatusBar = newStatusBar;
+        error(tr("Network Alert"), newStatusBar);
+    }*/
+    setNumBlocks(clientModel->getNumBlocks());
+}
+
 void BitcoinGUI::error(const QString &title, const QString &message)
 {
     // Report errors from network/worker thread
index a912192..581d393 100644 (file)
@@ -96,6 +96,8 @@ public slots:
     void setNumConnections(int count);
     void setNumBlocks(int count);
     void setEncryptionStatus(int status);
+    /** Set the status bar text if there are any warnings (removes sync progress bar if applicable) */
+    void refreshStatusBar();
 
     void error(const QString &title, const QString &message);
     /* It is currently not possible to pass a return value to another thread through
index 2ed3ce5..5a0b4aa 100644 (file)
@@ -72,6 +72,11 @@ int ClientModel::getNumBlocksOfPeers() const
     return GetNumBlocksOfPeers();
 }
 
+QString ClientModel::getStatusBarWarnings() const
+{
+    return QString::fromStdString(GetWarnings("statusbar"));
+}
+
 OptionsModel *ClientModel::getOptionsModel()
 {
     return optionsModel;
index c68fb0f..0b7c16d 100644 (file)
@@ -33,6 +33,8 @@ public:
     bool inInitialBlockDownload() const;
     // Return conservative estimate of total number of blocks, or 0 if unknown
     int getNumBlocksOfPeers() const;
+    //! Return warnings to be displayed in status bar
+    QString getStatusBarWarnings() const;
 
     QString formatFullVersion() const;