#include "editaddressdialog.h"
#include "optionsmodel.h"
#include "transactiondescdialog.h"
+#include "addresstablemodel.h"
-#include "main.h"
+#include "headers.h"
#include <QApplication>
#include <QMainWindow>
#include <QSortFilterProxyModel>
#include <QClipboard>
#include <QMessageBox>
+#include <QProgressBar>
#include <QDebug>
hbox_balance->addSpacing(5);/* Add some spacing between the label and the text */
labelBalance = new QLabel();
- labelBalance->setFont(QFont("Monospace"));
+ labelBalance->setFont(QFont("Monospace", -1, QFont::Bold));
labelBalance->setToolTip(tr("Your current balance"));
hbox_balance->addWidget(labelBalance);
hbox_balance->addStretch(1);
// Create status bar
statusBar();
-
+
labelConnections = new QLabel();
labelConnections->setFrameStyle(QFrame::Panel | QFrame::Sunken);
- labelConnections->setMinimumWidth(130);
+ labelConnections->setMinimumWidth(150);
labelConnections->setToolTip(tr("Number of connections to other clients"));
-
+
labelBlocks = new QLabel();
labelBlocks->setFrameStyle(QFrame::Panel | QFrame::Sunken);
labelBlocks->setMinimumWidth(130);
labelTransactions->setMinimumWidth(130);
labelTransactions->setToolTip(tr("Number of transactions in your wallet"));
+ // Progress bar for blocks download
+ progressBarLabel = new QLabel(tr("Synchronizing with network..."));
+ 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(labelConnections);
statusBar()->addPermanentWidget(labelBlocks);
statusBar()->addPermanentWidget(labelTransactions);
-
+
// Action bindings
connect(button_new, SIGNAL(clicked()), this, SLOT(newAddressClicked()));
connect(button_clipboard, SIGNAL(clicked()), this, SLOT(copyClipboardClicked()));
addressbook->setToolTip(tr("Edit the list of stored addresses and labels"));
about = new QAction(QIcon(":/icons/bitcoin"), tr("&About"), this);
about->setToolTip(tr("Show information about Bitcoin"));
- receivingAddresses = new QAction(QIcon(":/icons/receiving-addresses"), tr("Your &Receiving Addresses..."), this);
+ receivingAddresses = new QAction(QIcon(":/icons/receiving_addresses"), tr("Your &Receiving Addresses..."), this);
receivingAddresses->setToolTip(tr("Show the list of receiving addresses and edit their labels"));
options = new QAction(QIcon(":/icons/options"), tr("&Options..."), this);
options->setToolTip(tr("Modify configuration options for bitcoin"));
setNumBlocks(model->getNumBlocks());
connect(model, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int)));
- setAddress(model->getAddress());
- connect(model, SIGNAL(addressChanged(QString)), this, SLOT(setAddress(QString)));
+ setAddress(model->getAddressTableModel()->getDefaultAddress());
+ connect(model->getAddressTableModel(), SIGNAL(defaultAddressChanged(QString)), this, SLOT(setAddress(QString)));
// Report errors from network/worker thread
connect(model, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
if(dlg.exec())
{
QString newAddress = dlg.saveCurrentRow();
- // Set returned address as new default addres
- if(!newAddress.isEmpty())
- {
- model->setAddress(newAddress);
- }
}
}
void BitcoinGUI::setNumConnections(int count)
{
- labelConnections->setText(QLocale::system().toString(count)+" "+tr("connections(s)", "", count));
+ QString icon;
+ switch(count)
+ {
+ case 0: icon = ":/icons/connect_0"; break;
+ case 1: case 2: case 3: icon = ":/icons/connect_1"; break;
+ case 4: case 5: case 6: icon = ":/icons/connect_2"; break;
+ case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
+ default: icon = ":/icons/connect_4"; break;
+ }
+ labelConnections->setTextFormat(Qt::RichText);
+ labelConnections->setText("<img src=\""+icon+"\"> " + tr("%n connection(s)", "", count));
}
void BitcoinGUI::setNumBlocks(int count)
{
- labelBlocks->setText(QLocale::system().toString(count)+" "+tr("block(s)", "", count));
+ int total = model->getTotalBlocksEstimate();
+ if(count < total)
+ {
+ progressBarLabel->setVisible(true);
+ progressBar->setVisible(true);
+ progressBar->setMaximum(total);
+ progressBar->setValue(count);
+ }
+ else
+ {
+ progressBarLabel->setVisible(false);
+ progressBar->setVisible(false);
+ }
+
+ labelBlocks->setText(tr("%n block(s)", "", count));
}
void BitcoinGUI::setNumTransactions(int count)
{
- labelTransactions->setText(QLocale::system().toString(count)+" "+tr("transaction(s)", "", count));
+ labelTransactions->setText(tr("%n transaction(s)", "", count));
}
void BitcoinGUI::error(const QString &title, const QString &message)
void BitcoinGUI::transactionDetails(const QModelIndex& idx)
{
- /* A transaction is doubleclicked */
+ // A transaction is doubleclicked
TransactionDescDialog dlg(idx);
dlg.exec();
}
.data(Qt::EditRole).toULongLong();
qint64 debit = ttm->index(start, TransactionTableModel::Debit, parent)
.data(Qt::EditRole).toULongLong();
- if((credit+debit)>0)
+ if((credit+debit)>0 && !model->inInitialBlockDownload())
{
- /* On incoming transaction, make an info balloon */
+ // On incoming transaction, make an info balloon
+ // Unless the initial block download is in progress, to prevent balloon-spam
QString date = ttm->index(start, TransactionTableModel::Date, parent)
.data().toString();
QString description = ttm->index(start, TransactionTableModel::Description, parent)