implemented OS independent progress bar style / moved one-time functions used on...
[novacoin.git] / src / qt / bitcoingui.cpp
index 464fb8c..8e7f345 100644 (file)
@@ -138,17 +138,21 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
     frameBlocksLayout->addWidget(labelBlocksIcon);
     frameBlocksLayout->addStretch();
 
-    // Progress bar for blocks download
-    progressBarLabel = new QLabel(tr("Synchronizing with network..."));
+    // Progress bar and label for blocks download
+    progressBarLabel = new QLabel();
     progressBarLabel->setVisible(false);
     progressBar = new QProgressBar();
-    progressBar->setToolTip(tr("Block chain synchronization in progress"));
     progressBar->setVisible(false);
 
     statusBar()->addWidget(progressBarLabel);
     statusBar()->addWidget(progressBar);
     statusBar()->addPermanentWidget(frameBlocks);
 
+    // define progress bar format
+    progressBar->setFormat(tr("~%m blocks remaining"));
+    // define OS independent progress bar style (has to be after addWidget(), otherwise we crash)
+    progressBar->setStyleSheet("QProgressBar { background-color: transparent; border: 1px solid grey; border-radius: 5px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 transparent, stop: 1 orange); margin: 0px; }");
+
     syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this);
 
     // Clicking on a transaction on the overview page simply sends you to transaction history page
@@ -332,12 +336,8 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
         setNumConnections(clientModel->getNumConnections());
         connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int)));
 
-        // don't display the sync. message, if we are not connected to the network
-        if (clientModel->getNumConnections() > 0)
-        {
-            setNumBlocks(clientModel->getNumBlocks());
-            connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int)));
-        }
+        setNumBlocks(clientModel->getNumBlocks());
+        connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int)));
 
         // Report errors from network/worker thread
         connect(clientModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
@@ -455,35 +455,31 @@ void BitcoinGUI::setNumConnections(int count)
 
 void BitcoinGUI::setNumBlocks(int count)
 {
-    if(!clientModel)
+    // don't show / hide progressBar and it's label if we have no connection(s) to the network
+    if (!clientModel || clientModel->getNumConnections() == 0)
+    {
+        progressBarLabel->setVisible(false);
+        progressBar->setVisible(false);
+
         return;
+    }
+
     int nTotal = clientModel->getNumBlocksOfPeers();
-    int nInitTotal = clientModel->getNumBlocksAtStartup();
-    int nPercentageLeft = 100 - (count / (nTotal / 100));
     QString tooltip;
 
     if(count < nTotal)
     {
+        int nCurMax = nTotal - count;
+        int nOnePercentCurMax = nCurMax / 100;
+        int nPercentageDone = (count / (nTotal / 100));
+
         if (clientModel->getStatusBarWarnings() == "")
         {
+            progressBarLabel->setText(tr("Synchronizing with network..."));
             progressBarLabel->setVisible(true);
+            progressBar->setMaximum(nCurMax);
+            progressBar->setValue(nOnePercentCurMax * nPercentageDone);
             progressBar->setVisible(true);
-            progressBar->setFormat(tr("%v of %m blocks (%p%)"));
-            progressBar->setAlignment(Qt::AlignCenter);
-            // display absolute bar if the difference between count and nTotal is > 10%
-            if (nPercentageLeft > 10)
-            {
-                progressBarLabel->setText(tr("Synchronizing with network... (abs. display)"));
-                progressBar->setMaximum(nTotal);
-                progressBar->setValue(count);
-            }
-            else
-            {
-                progressBarLabel->setText(tr("Synchronizing with network... (rel. display)"));
-                progressBar->setMaximum(nTotal - nInitTotal);
-                progressBar->setValue(count - nInitTotal);
-            }
-
         }
         else
         {
@@ -491,7 +487,7 @@ void BitcoinGUI::setNumBlocks(int count)
             progressBarLabel->setVisible(true);
             progressBar->setVisible(false);
         }
-        tooltip = tr("Downloaded %1 of %2 blocks of transaction history (%3% left).").arg(count).arg(nTotal).arg(nPercentageLeft);
+        tooltip = tr("Downloaded %1 of %2 blocks of transaction history (%3% done).").arg(count).arg(nTotal).arg(nPercentageDone);
     }
     else
     {