#include <QMessageBox>
#include <QProgressBar>
#include <QStackedWidget>
+#include <QDateTime>
#include <QDebug>
QVBoxLayout *vbox = new QVBoxLayout();
transactionView = new TransactionView(this);
- connect(transactionView, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(transactionDetails(const QModelIndex&)));
+ connect(transactionView, SIGNAL(doubleClicked(const QModelIndex&)), transactionView, SLOT(transactionDetails()));
vbox->addWidget(transactionView);
transactionsPage = new QWidget(this);
labelConnections = new QLabel();
labelConnections->setFrameStyle(QFrame::Panel | QFrame::Sunken);
labelConnections->setMinimumWidth(150);
+ labelConnections->setMaximumWidth(150);
labelConnections->setToolTip(tr("Number of connections to other clients"));
labelBlocks = new QLabel();
labelBlocks->setFrameStyle(QFrame::Panel | QFrame::Sunken);
- labelBlocks->setMinimumWidth(130);
+ labelBlocks->setMinimumWidth(150);
+ labelBlocks->setMaximumWidth(150);
labelBlocks->setToolTip(tr("Number of blocks in the block chain"));
// Progress bar for blocks download
connect(optionsAction, SIGNAL(triggered()), this, SLOT(optionsClicked()));
connect(aboutAction, SIGNAL(triggered()), this, SLOT(aboutClicked()));
connect(openBitcoinAction, SIGNAL(triggered()), this, SLOT(show()));
- connect(exportAction, SIGNAL(triggered()), this, SLOT(exportClicked()));
}
void BitcoinGUI::setClientModel(ClientModel *clientModel)
if(clientModel->isTestNet())
{
- QString title_testnet = tr("Bitcoin Wallet [testnet]");
+ QString title_testnet = windowTitle() + QString(" ") + tr("[testnet]");
setWindowTitle(title_testnet);
setWindowIcon(QIcon(":icons/bitcoin_testnet"));
if(trayIcon)
{
this->walletModel = walletModel;
- // Keep up to date with wallet
- setBalance(walletModel->getBalance());
- connect(walletModel, SIGNAL(balanceChanged(qint64)), this, SLOT(setBalance(qint64)));
-
- setNumTransactions(walletModel->getNumTransactions());
- connect(walletModel, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int)));
-
// Report errors from wallet thread
connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
// Put transaction list in tabs
- transactionView->setModel(walletModel->getTransactionTableModel());
+ transactionView->setModel(walletModel);
+ overviewPage->setModel(walletModel);
addressBookPage->setModel(walletModel->getAddressTableModel());
receiveCoinsPage->setModel(walletModel->getAddressTableModel());
sendCoinsPage->setModel(walletModel);
dlg.exec();
}
-void BitcoinGUI::setBalance(qint64 balance)
-{
- overviewPage->setBalance(balance);
-}
-
void BitcoinGUI::setNumConnections(int count)
{
QString icon;
progressBar->setVisible(false);
}
- labelBlocks->setText(tr("%n block(s)", "", count));
-}
+ QDateTime now = QDateTime::currentDateTime();
+ QDateTime lastBlockDate = clientModel->getLastBlockDate();
+ int secs = lastBlockDate.secsTo(now);
+ QString text;
+ QString icon = ":/icons/notsynced";
-void BitcoinGUI::setNumTransactions(int count)
-{
- overviewPage->setNumTransactions(count);
+ // "Up to date" icon, and outdated icon
+ if(secs < 30*60)
+ {
+ text = "Up to date";
+ icon = ":/icons/synced";
+ }
+ else if(secs < 60*60)
+ {
+ text = tr("%n minute(s) ago","",secs/60);
+ }
+ else if(secs < 24*60*60)
+ {
+ text = tr("%n hour(s) ago","",secs/(60*60));
+ }
+ else
+ {
+ text = tr("%n day(s) ago","",secs/(60*60*24));
+ }
+
+ labelBlocks->setText("<img src=\""+icon+"\"> " + text);
+ labelBlocks->setToolTip(tr("Downloaded %n block(s) of transaction history. Last block was generated %1.", "", count)
+ .arg(QLocale::system().toString(lastBlockDate)));
}
void BitcoinGUI::error(const QString &title, const QString &message)
*payFee = (retval == QMessageBox::Yes);
}
-void BitcoinGUI::transactionDetails(const QModelIndex& idx)
-{
- // A transaction is doubleclicked
- TransactionDescDialog dlg(idx);
- dlg.exec();
-}
-
void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int end)
{
TransactionTableModel *ttm = walletModel->getTransactionTableModel();
{
overviewAction->setChecked(true);
centralWidget->setCurrentWidget(overviewPage);
+
exportAction->setEnabled(false);
+ disconnect(exportAction, SIGNAL(triggered()), 0, 0);
}
void BitcoinGUI::gotoHistoryPage()
{
historyAction->setChecked(true);
centralWidget->setCurrentWidget(transactionsPage);
+
exportAction->setEnabled(true);
+ disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+ connect(exportAction, SIGNAL(triggered()), transactionView, SLOT(exportClicked()));
}
void BitcoinGUI::gotoAddressBookPage()
{
addressBookAction->setChecked(true);
centralWidget->setCurrentWidget(addressBookPage);
- exportAction->setEnabled(false); // TODO
+
+ exportAction->setEnabled(true);
+ disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+ connect(exportAction, SIGNAL(triggered()), addressBookPage, SLOT(exportClicked()));
}
void BitcoinGUI::gotoReceiveCoinsPage()
{
receiveCoinsAction->setChecked(true);
centralWidget->setCurrentWidget(receiveCoinsPage);
- exportAction->setEnabled(false); // TODO
+
+ exportAction->setEnabled(true);
+ disconnect(exportAction, SIGNAL(triggered()), 0, 0);
+ connect(exportAction, SIGNAL(triggered()), receiveCoinsPage, SLOT(exportClicked()));
}
void BitcoinGUI::gotoSendCoinsPage()
{
sendCoinsAction->setChecked(true);
+ sendCoinsPage->clear();
centralWidget->setCurrentWidget(sendCoinsPage);
- exportAction->setEnabled(false);
-}
-void BitcoinGUI::exportClicked()
-{
- // Redirect to the right view, as soon as export for other views
- // (such as address book) is implemented.
- transactionView->exportClicked();
+ exportAction->setEnabled(false);
+ disconnect(exportAction, SIGNAL(triggered()), 0, 0);
}