X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fbitcoingui.cpp;h=70a33133099e0496fb1c1fd18cf79b21d2695a58;hb=fa2544e79faf75923766624acd638e3cbdb9be0d;hp=464fb8c482be1fb0a3703c8964e6868c4e363c78;hpb=9ceae8acea658d3e9d6bfe851e0d904c191c6f81;p=novacoin.git diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 464fb8c..70a3313 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -138,17 +138,20 @@ 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 OS independent progress bar style (has to be placed after addWidget(), otherwise we crash) + // we did this, because with some OSes default style, text on the progress bar is unreadable + progressBar->setStyleSheet("QProgressBar { background-color: transparent; border: 1px solid grey; border-radius: 2px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, 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,15 +335,11 @@ 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))); + connect(clientModel, SIGNAL(error(QString,QString, bool)), this, SLOT(error(QString,QString,bool))); } } @@ -350,7 +349,7 @@ void BitcoinGUI::setWalletModel(WalletModel *walletModel) if(walletModel) { // Report errors from wallet thread - connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString))); + connect(walletModel, SIGNAL(error(QString,QString,bool)), this, SLOT(error(QString,QString,bool))); // Put transaction list in tabs transactionView->setModel(walletModel); @@ -455,35 +454,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)); + } + + int nTotalBlocks = clientModel->getNumBlocksOfPeers(); QString tooltip; - if(count < nTotal) + if(count < nTotalBlocks) { + int nRemainingBlocks = nTotalBlocks - count; + float nPercentageDone = count / (nTotalBlocks * 0.01f); + if (clientModel->getStatusBarWarnings() == "") { + progressBarLabel->setText(tr("Synchronizing with network...")); progressBarLabel->setVisible(true); + progressBar->setFormat(tr("~%n block(s) remaining", "", nRemainingBlocks)); + progressBar->setMaximum(nTotalBlocks); + progressBar->setValue(count); 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 +486,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(nTotalBlocks).arg(nPercentageDone, 0, 'f', 2); } else { @@ -534,7 +529,7 @@ void BitcoinGUI::setNumBlocks(int count) } // Set icon state: spinning if catching up, tick otherwise - if(secs < 30*60) + if(secs < 90*60) { tooltip = tr("Up to date") + QString(".\n") + tooltip; labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); @@ -557,23 +552,15 @@ 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) +void BitcoinGUI::error(const QString &title, const QString &message, bool modal) { // Report errors from network/worker thread - notificator->notify(Notificator::Critical, title, message); + if(modal) + { + QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok); + } else { + notificator->notify(Notificator::Critical, title, message); + } } void BitcoinGUI::changeEvent(QEvent *e) @@ -728,7 +715,7 @@ void BitcoinGUI::gotoMessagePage(QString addr) void BitcoinGUI::dragEnterEvent(QDragEnterEvent *event) { - // Accept only URLs + // Accept only URIs if(event->mimeData()->hasUrls()) event->acceptProposedAction(); } @@ -738,20 +725,20 @@ void BitcoinGUI::dropEvent(QDropEvent *event) if(event->mimeData()->hasUrls()) { gotoSendCoinsPage(); - QList urls = event->mimeData()->urls(); - foreach(const QUrl &url, urls) + QList uris = event->mimeData()->urls(); + foreach(const QUrl &uri, uris) { - sendCoinsPage->handleURL(url.toString()); + sendCoinsPage->handleURI(uri.toString()); } } event->acceptProposedAction(); } -void BitcoinGUI::handleURL(QString strURL) +void BitcoinGUI::handleURI(QString strURI) { gotoSendCoinsPage(); - sendCoinsPage->handleURL(strURL); + sendCoinsPage->handleURI(strURI); if(!isActiveWindow()) activateWindow();