Merge branch 'nullmodels' of https://github.com/laanwj/bitcoin
This commit is contained in:
commit
ba1fce94b5
11 changed files with 172 additions and 99 deletions
|
@ -12,7 +12,10 @@ AboutDialog::AboutDialog(QWidget *parent) :
|
||||||
|
|
||||||
void AboutDialog::setModel(ClientModel *model)
|
void AboutDialog::setModel(ClientModel *model)
|
||||||
{
|
{
|
||||||
ui->versionLabel->setText(model->formatFullVersion());
|
if(model)
|
||||||
|
{
|
||||||
|
ui->versionLabel->setText(model->formatFullVersion());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AboutDialog::~AboutDialog()
|
AboutDialog::~AboutDialog()
|
||||||
|
|
|
@ -57,6 +57,8 @@ AddressBookPage::~AddressBookPage()
|
||||||
void AddressBookPage::setModel(AddressTableModel *model)
|
void AddressBookPage::setModel(AddressTableModel *model)
|
||||||
{
|
{
|
||||||
this->model = model;
|
this->model = model;
|
||||||
|
if(!model)
|
||||||
|
return;
|
||||||
// Refresh list from core
|
// Refresh list from core
|
||||||
model->updateList();
|
model->updateList();
|
||||||
|
|
||||||
|
@ -96,16 +98,13 @@ void AddressBookPage::setModel(AddressTableModel *model)
|
||||||
selectionChanged();
|
selectionChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
QTableView *AddressBookPage::getCurrentTable()
|
|
||||||
{
|
|
||||||
return ui->tableView;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AddressBookPage::on_copyToClipboard_clicked()
|
void AddressBookPage::on_copyToClipboard_clicked()
|
||||||
{
|
{
|
||||||
// Copy currently selected address to clipboard
|
// Copy currently selected address to clipboard
|
||||||
// (or nothing, if nothing selected)
|
// (or nothing, if nothing selected)
|
||||||
QTableView *table = getCurrentTable();
|
QTableView *table = ui->tableView;
|
||||||
|
if(!table->selectionModel())
|
||||||
|
return;
|
||||||
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
|
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
|
||||||
|
|
||||||
foreach (QModelIndex index, indexes)
|
foreach (QModelIndex index, indexes)
|
||||||
|
@ -117,6 +116,8 @@ void AddressBookPage::on_copyToClipboard_clicked()
|
||||||
|
|
||||||
void AddressBookPage::on_newAddressButton_clicked()
|
void AddressBookPage::on_newAddressButton_clicked()
|
||||||
{
|
{
|
||||||
|
if(!model)
|
||||||
|
return;
|
||||||
EditAddressDialog dlg(
|
EditAddressDialog dlg(
|
||||||
tab == SendingTab ?
|
tab == SendingTab ?
|
||||||
EditAddressDialog::NewSendingAddress :
|
EditAddressDialog::NewSendingAddress :
|
||||||
|
@ -139,7 +140,9 @@ void AddressBookPage::on_newAddressButton_clicked()
|
||||||
|
|
||||||
void AddressBookPage::on_deleteButton_clicked()
|
void AddressBookPage::on_deleteButton_clicked()
|
||||||
{
|
{
|
||||||
QTableView *table = getCurrentTable();
|
QTableView *table = ui->tableView;
|
||||||
|
if(!table->selectionModel())
|
||||||
|
return;
|
||||||
QModelIndexList indexes = table->selectionModel()->selectedRows();
|
QModelIndexList indexes = table->selectionModel()->selectedRows();
|
||||||
if(!indexes.isEmpty())
|
if(!indexes.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -150,7 +153,9 @@ void AddressBookPage::on_deleteButton_clicked()
|
||||||
void AddressBookPage::selectionChanged()
|
void AddressBookPage::selectionChanged()
|
||||||
{
|
{
|
||||||
// Set button states based on selected tab and selection
|
// Set button states based on selected tab and selection
|
||||||
QTableView *table = getCurrentTable();
|
QTableView *table = ui->tableView;
|
||||||
|
if(!table->selectionModel())
|
||||||
|
return;
|
||||||
|
|
||||||
if(table->selectionModel()->hasSelection())
|
if(table->selectionModel()->hasSelection())
|
||||||
{
|
{
|
||||||
|
@ -174,12 +179,14 @@ void AddressBookPage::selectionChanged()
|
||||||
|
|
||||||
void AddressBookPage::done(int retval)
|
void AddressBookPage::done(int retval)
|
||||||
{
|
{
|
||||||
|
QTableView *table = ui->tableView;
|
||||||
|
if(!table->selectionModel() || !table->model())
|
||||||
|
return;
|
||||||
// When this is a tab/widget and not a model dialog, ignore "done"
|
// When this is a tab/widget and not a model dialog, ignore "done"
|
||||||
if(mode == ForEditing)
|
if(mode == ForEditing)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Figure out which address was selected, and return it
|
// Figure out which address was selected, and return it
|
||||||
QTableView *table = getCurrentTable();
|
|
||||||
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
|
QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address);
|
||||||
|
|
||||||
foreach (QModelIndex index, indexes)
|
foreach (QModelIndex index, indexes)
|
||||||
|
|
|
@ -47,8 +47,6 @@ private:
|
||||||
QString returnValue;
|
QString returnValue;
|
||||||
QSortFilterProxyModel *proxyModel;
|
QSortFilterProxyModel *proxyModel;
|
||||||
|
|
||||||
QTableView *getCurrentTable();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_deleteButton_clicked();
|
void on_deleteButton_clicked();
|
||||||
void on_newAddressButton_clicked();
|
void on_newAddressButton_clicked();
|
||||||
|
|
|
@ -72,6 +72,8 @@ void AskPassphraseDialog::setModel(WalletModel *model)
|
||||||
void AskPassphraseDialog::accept()
|
void AskPassphraseDialog::accept()
|
||||||
{
|
{
|
||||||
std::string oldpass, newpass1, newpass2;
|
std::string oldpass, newpass1, newpass2;
|
||||||
|
if(!model)
|
||||||
|
return;
|
||||||
// TODO: mlock memory / munlock on return so they will not be swapped out, really need "mlockedstring" wrapper class to do this safely
|
// TODO: mlock memory / munlock on return so they will not be swapped out, really need "mlockedstring" wrapper class to do this safely
|
||||||
oldpass.reserve(MAX_PASSPHRASE_SIZE);
|
oldpass.reserve(MAX_PASSPHRASE_SIZE);
|
||||||
newpass1.reserve(MAX_PASSPHRASE_SIZE);
|
newpass1.reserve(MAX_PASSPHRASE_SIZE);
|
||||||
|
|
|
@ -267,58 +267,62 @@ void BitcoinGUI::createToolBars()
|
||||||
void BitcoinGUI::setClientModel(ClientModel *clientModel)
|
void BitcoinGUI::setClientModel(ClientModel *clientModel)
|
||||||
{
|
{
|
||||||
this->clientModel = clientModel;
|
this->clientModel = clientModel;
|
||||||
|
if(clientModel)
|
||||||
if(clientModel->isTestNet())
|
|
||||||
{
|
{
|
||||||
QString title_testnet = windowTitle() + QString(" ") + tr("[testnet]");
|
if(clientModel->isTestNet())
|
||||||
setWindowTitle(title_testnet);
|
|
||||||
#ifndef Q_WS_MAC
|
|
||||||
setWindowIcon(QIcon(":icons/bitcoin_testnet"));
|
|
||||||
#else
|
|
||||||
MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin_testnet"));
|
|
||||||
#endif
|
|
||||||
if(trayIcon)
|
|
||||||
{
|
{
|
||||||
trayIcon->setToolTip(title_testnet);
|
QString title_testnet = windowTitle() + QString(" ") + tr("[testnet]");
|
||||||
trayIcon->setIcon(QIcon(":/icons/toolbar_testnet"));
|
setWindowTitle(title_testnet);
|
||||||
|
#ifndef Q_WS_MAC
|
||||||
|
setWindowIcon(QIcon(":icons/bitcoin_testnet"));
|
||||||
|
#else
|
||||||
|
MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin_testnet"));
|
||||||
|
#endif
|
||||||
|
if(trayIcon)
|
||||||
|
{
|
||||||
|
trayIcon->setToolTip(title_testnet);
|
||||||
|
trayIcon->setIcon(QIcon(":/icons/toolbar_testnet"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Keep up to date with client
|
||||||
|
setNumConnections(clientModel->getNumConnections());
|
||||||
|
connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Keep up to date with client
|
|
||||||
setNumConnections(clientModel->getNumConnections());
|
|
||||||
connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(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)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinGUI::setWalletModel(WalletModel *walletModel)
|
void BitcoinGUI::setWalletModel(WalletModel *walletModel)
|
||||||
{
|
{
|
||||||
this->walletModel = walletModel;
|
this->walletModel = walletModel;
|
||||||
|
if(walletModel)
|
||||||
|
{
|
||||||
|
// Report errors from wallet thread
|
||||||
|
connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
|
||||||
|
|
||||||
// Report errors from wallet thread
|
// Put transaction list in tabs
|
||||||
connect(walletModel, SIGNAL(error(QString,QString)), this, SLOT(error(QString,QString)));
|
transactionView->setModel(walletModel);
|
||||||
|
|
||||||
// Put transaction list in tabs
|
overviewPage->setModel(walletModel);
|
||||||
transactionView->setModel(walletModel);
|
addressBookPage->setModel(walletModel->getAddressTableModel());
|
||||||
|
receiveCoinsPage->setModel(walletModel->getAddressTableModel());
|
||||||
|
sendCoinsPage->setModel(walletModel);
|
||||||
|
|
||||||
overviewPage->setModel(walletModel);
|
setEncryptionStatus(walletModel->getEncryptionStatus());
|
||||||
addressBookPage->setModel(walletModel->getAddressTableModel());
|
connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int)));
|
||||||
receiveCoinsPage->setModel(walletModel->getAddressTableModel());
|
|
||||||
sendCoinsPage->setModel(walletModel);
|
|
||||||
|
|
||||||
setEncryptionStatus(walletModel->getEncryptionStatus());
|
// Balloon popup for new transaction
|
||||||
connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int)));
|
connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
|
||||||
|
this, SLOT(incomingTransaction(QModelIndex,int,int)));
|
||||||
|
|
||||||
// Balloon popup for new transaction
|
// Ask for passphrase if needed
|
||||||
connect(walletModel->getTransactionTableModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
|
connect(walletModel, SIGNAL(requireUnlock()), this, SLOT(unlockWallet()));
|
||||||
this, SLOT(incomingTransaction(QModelIndex,int,int)));
|
}
|
||||||
|
|
||||||
// Ask for passphrase if needed
|
|
||||||
connect(walletModel, SIGNAL(requireUnlock()), this, SLOT(unlockWallet()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinGUI::createTrayIcon()
|
void BitcoinGUI::createTrayIcon()
|
||||||
|
@ -369,6 +373,8 @@ void BitcoinGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason)
|
||||||
|
|
||||||
void BitcoinGUI::optionsClicked()
|
void BitcoinGUI::optionsClicked()
|
||||||
{
|
{
|
||||||
|
if(!clientModel || !clientModel->getOptionsModel())
|
||||||
|
return;
|
||||||
OptionsDialog dlg;
|
OptionsDialog dlg;
|
||||||
dlg.setModel(clientModel->getOptionsModel());
|
dlg.setModel(clientModel->getOptionsModel());
|
||||||
dlg.exec();
|
dlg.exec();
|
||||||
|
@ -398,6 +404,8 @@ void BitcoinGUI::setNumConnections(int count)
|
||||||
|
|
||||||
void BitcoinGUI::setNumBlocks(int count)
|
void BitcoinGUI::setNumBlocks(int count)
|
||||||
{
|
{
|
||||||
|
if(!clientModel)
|
||||||
|
return;
|
||||||
int initTotal = clientModel->getNumBlocksAtStartup();
|
int initTotal = clientModel->getNumBlocksAtStartup();
|
||||||
int total = clientModel->getNumBlocksOfPeers();
|
int total = clientModel->getNumBlocksOfPeers();
|
||||||
QString tooltip;
|
QString tooltip;
|
||||||
|
@ -492,13 +500,16 @@ void BitcoinGUI::changeEvent(QEvent *e)
|
||||||
|
|
||||||
void BitcoinGUI::closeEvent(QCloseEvent *event)
|
void BitcoinGUI::closeEvent(QCloseEvent *event)
|
||||||
{
|
{
|
||||||
#ifndef Q_WS_MAC // Ignored on Mac
|
if(clientModel)
|
||||||
if(!clientModel->getOptionsModel()->getMinimizeToTray() &&
|
|
||||||
!clientModel->getOptionsModel()->getMinimizeOnClose())
|
|
||||||
{
|
{
|
||||||
qApp->quit();
|
#ifndef Q_WS_MAC // Ignored on Mac
|
||||||
}
|
if(!clientModel->getOptionsModel()->getMinimizeToTray() &&
|
||||||
|
!clientModel->getOptionsModel()->getMinimizeOnClose())
|
||||||
|
{
|
||||||
|
qApp->quit();
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
QMainWindow::closeEvent(event);
|
QMainWindow::closeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -517,6 +528,8 @@ void BitcoinGUI::askFee(qint64 nFeeRequired, bool *payFee)
|
||||||
|
|
||||||
void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int end)
|
void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int end)
|
||||||
{
|
{
|
||||||
|
if(!walletModel || !clientModel)
|
||||||
|
return;
|
||||||
TransactionTableModel *ttm = walletModel->getTransactionTableModel();
|
TransactionTableModel *ttm = walletModel->getTransactionTableModel();
|
||||||
qint64 amount = ttm->index(start, TransactionTableModel::Amount, parent)
|
qint64 amount = ttm->index(start, TransactionTableModel::Amount, parent)
|
||||||
.data(Qt::EditRole).toULongLong();
|
.data(Qt::EditRole).toULongLong();
|
||||||
|
@ -654,6 +667,8 @@ void BitcoinGUI::setEncryptionStatus(int status)
|
||||||
|
|
||||||
void BitcoinGUI::encryptWallet(bool status)
|
void BitcoinGUI::encryptWallet(bool status)
|
||||||
{
|
{
|
||||||
|
if(!walletModel)
|
||||||
|
return;
|
||||||
AskPassphraseDialog dlg(status ? AskPassphraseDialog::Encrypt:
|
AskPassphraseDialog dlg(status ? AskPassphraseDialog::Encrypt:
|
||||||
AskPassphraseDialog::Decrypt, this);
|
AskPassphraseDialog::Decrypt, this);
|
||||||
dlg.setModel(walletModel);
|
dlg.setModel(walletModel);
|
||||||
|
@ -671,6 +686,8 @@ void BitcoinGUI::changePassphrase()
|
||||||
|
|
||||||
void BitcoinGUI::unlockWallet()
|
void BitcoinGUI::unlockWallet()
|
||||||
{
|
{
|
||||||
|
if(!walletModel)
|
||||||
|
return;
|
||||||
// Unlock wallet when requested by wallet model
|
// Unlock wallet when requested by wallet model
|
||||||
if(walletModel->getEncryptionStatus() == WalletModel::Locked)
|
if(walletModel->getEncryptionStatus() == WalletModel::Locked)
|
||||||
{
|
{
|
||||||
|
|
|
@ -48,7 +48,11 @@ bool CSVModelWriter::write()
|
||||||
return false;
|
return false;
|
||||||
QTextStream out(&file);
|
QTextStream out(&file);
|
||||||
|
|
||||||
int numRows = model->rowCount();
|
int numRows = 0;
|
||||||
|
if(model)
|
||||||
|
{
|
||||||
|
numRows = model->rowCount();
|
||||||
|
}
|
||||||
|
|
||||||
// Header row
|
// Header row
|
||||||
for(int i=0; i<columns.size(); ++i)
|
for(int i=0; i<columns.size(); ++i)
|
||||||
|
|
|
@ -56,6 +56,8 @@ void EditAddressDialog::loadRow(int row)
|
||||||
|
|
||||||
bool EditAddressDialog::saveCurrentRow()
|
bool EditAddressDialog::saveCurrentRow()
|
||||||
{
|
{
|
||||||
|
if(!model)
|
||||||
|
return false;
|
||||||
switch(mode)
|
switch(mode)
|
||||||
{
|
{
|
||||||
case NewReceivingAddress:
|
case NewReceivingAddress:
|
||||||
|
@ -78,6 +80,8 @@ bool EditAddressDialog::saveCurrentRow()
|
||||||
|
|
||||||
void EditAddressDialog::accept()
|
void EditAddressDialog::accept()
|
||||||
{
|
{
|
||||||
|
if(!model)
|
||||||
|
return;
|
||||||
if(!saveCurrentRow())
|
if(!saveCurrentRow())
|
||||||
{
|
{
|
||||||
switch(model->getEditStatus())
|
switch(model->getEditStatus())
|
||||||
|
|
|
@ -143,30 +143,34 @@ void OverviewPage::setNumTransactions(int count)
|
||||||
void OverviewPage::setModel(WalletModel *model)
|
void OverviewPage::setModel(WalletModel *model)
|
||||||
{
|
{
|
||||||
this->model = model;
|
this->model = model;
|
||||||
|
if(model)
|
||||||
|
{
|
||||||
|
// Set up transaction list
|
||||||
|
TransactionFilterProxy *filter = new TransactionFilterProxy();
|
||||||
|
filter->setSourceModel(model->getTransactionTableModel());
|
||||||
|
filter->setLimit(NUM_ITEMS);
|
||||||
|
filter->setDynamicSortFilter(true);
|
||||||
|
filter->setSortRole(Qt::EditRole);
|
||||||
|
filter->sort(TransactionTableModel::Status, Qt::DescendingOrder);
|
||||||
|
|
||||||
// Set up transaction list
|
ui->listTransactions->setModel(filter);
|
||||||
TransactionFilterProxy *filter = new TransactionFilterProxy();
|
ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress);
|
||||||
filter->setSourceModel(model->getTransactionTableModel());
|
|
||||||
filter->setLimit(NUM_ITEMS);
|
|
||||||
filter->setDynamicSortFilter(true);
|
|
||||||
filter->setSortRole(Qt::EditRole);
|
|
||||||
filter->sort(TransactionTableModel::Status, Qt::DescendingOrder);
|
|
||||||
|
|
||||||
ui->listTransactions->setModel(filter);
|
// Keep up to date with wallet
|
||||||
ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress);
|
setBalance(model->getBalance(), model->getUnconfirmedBalance());
|
||||||
|
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
|
||||||
|
|
||||||
// Keep up to date with wallet
|
setNumTransactions(model->getNumTransactions());
|
||||||
setBalance(model->getBalance(), model->getUnconfirmedBalance());
|
connect(model, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int)));
|
||||||
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
|
|
||||||
|
|
||||||
setNumTransactions(model->getNumTransactions());
|
connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(displayUnitChanged()));
|
||||||
connect(model, SIGNAL(numTransactionsChanged(int)), this, SLOT(setNumTransactions(int)));
|
}
|
||||||
|
|
||||||
connect(model->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(displayUnitChanged()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverviewPage::displayUnitChanged()
|
void OverviewPage::displayUnitChanged()
|
||||||
{
|
{
|
||||||
|
if(!model || !model->getOptionsModel())
|
||||||
|
return;
|
||||||
if(currentBalance != -1)
|
if(currentBalance != -1)
|
||||||
setBalance(currentBalance, currentUnconfirmedBalance);
|
setBalance(currentBalance, currentUnconfirmedBalance);
|
||||||
|
|
||||||
|
|
|
@ -43,9 +43,11 @@ void SendCoinsDialog::setModel(WalletModel *model)
|
||||||
entry->setModel(model);
|
entry->setModel(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(model)
|
||||||
setBalance(model->getBalance(), model->getUnconfirmedBalance());
|
{
|
||||||
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
|
setBalance(model->getBalance(), model->getUnconfirmedBalance());
|
||||||
|
connect(model, SIGNAL(balanceChanged(qint64, qint64)), this, SLOT(setBalance(qint64, qint64)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SendCoinsDialog::~SendCoinsDialog()
|
SendCoinsDialog::~SendCoinsDialog()
|
||||||
|
@ -57,6 +59,10 @@ void SendCoinsDialog::on_sendButton_clicked()
|
||||||
{
|
{
|
||||||
QList<SendCoinsRecipient> recipients;
|
QList<SendCoinsRecipient> recipients;
|
||||||
bool valid = true;
|
bool valid = true;
|
||||||
|
|
||||||
|
if(!model)
|
||||||
|
return;
|
||||||
|
|
||||||
for(int i = 0; i < ui->entries->count(); ++i)
|
for(int i = 0; i < ui->entries->count(); ++i)
|
||||||
{
|
{
|
||||||
SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
|
SendCoinsEntry *entry = qobject_cast<SendCoinsEntry*>(ui->entries->itemAt(i)->widget());
|
||||||
|
@ -255,6 +261,9 @@ void SendCoinsDialog::handleURL(const QUrl *url)
|
||||||
void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance)
|
void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance)
|
||||||
{
|
{
|
||||||
Q_UNUSED(unconfirmedBalance);
|
Q_UNUSED(unconfirmedBalance);
|
||||||
|
if(!model || !model->getOptionsModel())
|
||||||
|
return;
|
||||||
|
|
||||||
int unit = model->getOptionsModel()->getDisplayUnit();
|
int unit = model->getOptionsModel()->getDisplayUnit();
|
||||||
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance));
|
ui->labelBalance->setText(BitcoinUnits::formatWithUnit(unit, balance));
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,8 @@ void SendCoinsEntry::on_pasteButton_clicked()
|
||||||
|
|
||||||
void SendCoinsEntry::on_addressBookButton_clicked()
|
void SendCoinsEntry::on_addressBookButton_clicked()
|
||||||
{
|
{
|
||||||
|
if(!model)
|
||||||
|
return;
|
||||||
AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::SendingTab, this);
|
AddressBookPage dlg(AddressBookPage::ForSending, AddressBookPage::SendingTab, this);
|
||||||
dlg.setModel(model->getAddressTableModel());
|
dlg.setModel(model->getAddressTableModel());
|
||||||
if(dlg.exec())
|
if(dlg.exec())
|
||||||
|
@ -55,6 +57,8 @@ void SendCoinsEntry::on_addressBookButton_clicked()
|
||||||
|
|
||||||
void SendCoinsEntry::on_payTo_textChanged(const QString &address)
|
void SendCoinsEntry::on_payTo_textChanged(const QString &address)
|
||||||
{
|
{
|
||||||
|
if(!model)
|
||||||
|
return;
|
||||||
ui->addAsLabel->setText(model->getAddressTableModel()->labelForAddress(address));
|
ui->addAsLabel->setText(model->getAddressTableModel()->labelForAddress(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +78,7 @@ void SendCoinsEntry::clear()
|
||||||
ui->addAsLabel->clear();
|
ui->addAsLabel->clear();
|
||||||
ui->payAmount->clear();
|
ui->payAmount->clear();
|
||||||
ui->payTo->setFocus();
|
ui->payTo->setFocus();
|
||||||
if(model)
|
if(model && model->getOptionsModel())
|
||||||
{
|
{
|
||||||
ui->payAmount->setDisplayUnit(model->getOptionsModel()->getDisplayUnit());
|
ui->payAmount->setDisplayUnit(model->getOptionsModel()->getDisplayUnit());
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,36 +155,39 @@ TransactionView::TransactionView(QWidget *parent) :
|
||||||
void TransactionView::setModel(WalletModel *model)
|
void TransactionView::setModel(WalletModel *model)
|
||||||
{
|
{
|
||||||
this->model = model;
|
this->model = model;
|
||||||
|
if(model)
|
||||||
|
{
|
||||||
|
transactionProxyModel = new TransactionFilterProxy(this);
|
||||||
|
transactionProxyModel->setSourceModel(model->getTransactionTableModel());
|
||||||
|
transactionProxyModel->setDynamicSortFilter(true);
|
||||||
|
|
||||||
transactionProxyModel = new TransactionFilterProxy(this);
|
transactionProxyModel->setSortRole(Qt::EditRole);
|
||||||
transactionProxyModel->setSourceModel(model->getTransactionTableModel());
|
|
||||||
transactionProxyModel->setDynamicSortFilter(true);
|
|
||||||
|
|
||||||
transactionProxyModel->setSortRole(Qt::EditRole);
|
transactionView->setModel(transactionProxyModel);
|
||||||
|
transactionView->setAlternatingRowColors(true);
|
||||||
transactionView->setModel(transactionProxyModel);
|
transactionView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
transactionView->setAlternatingRowColors(true);
|
transactionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
transactionView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
transactionView->setSortingEnabled(true);
|
||||||
transactionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
transactionView->sortByColumn(TransactionTableModel::Status, Qt::DescendingOrder);
|
||||||
transactionView->setSortingEnabled(true);
|
transactionView->verticalHeader()->hide();
|
||||||
transactionView->sortByColumn(TransactionTableModel::Status, Qt::DescendingOrder);
|
|
||||||
transactionView->verticalHeader()->hide();
|
|
||||||
|
|
||||||
transactionView->horizontalHeader()->resizeSection(
|
|
||||||
TransactionTableModel::Status, 23);
|
|
||||||
transactionView->horizontalHeader()->resizeSection(
|
|
||||||
TransactionTableModel::Date, 120);
|
|
||||||
transactionView->horizontalHeader()->resizeSection(
|
|
||||||
TransactionTableModel::Type, 120);
|
|
||||||
transactionView->horizontalHeader()->setResizeMode(
|
|
||||||
TransactionTableModel::ToAddress, QHeaderView::Stretch);
|
|
||||||
transactionView->horizontalHeader()->resizeSection(
|
|
||||||
TransactionTableModel::Amount, 100);
|
|
||||||
|
|
||||||
|
transactionView->horizontalHeader()->resizeSection(
|
||||||
|
TransactionTableModel::Status, 23);
|
||||||
|
transactionView->horizontalHeader()->resizeSection(
|
||||||
|
TransactionTableModel::Date, 120);
|
||||||
|
transactionView->horizontalHeader()->resizeSection(
|
||||||
|
TransactionTableModel::Type, 120);
|
||||||
|
transactionView->horizontalHeader()->setResizeMode(
|
||||||
|
TransactionTableModel::ToAddress, QHeaderView::Stretch);
|
||||||
|
transactionView->horizontalHeader()->resizeSection(
|
||||||
|
TransactionTableModel::Amount, 100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransactionView::chooseDate(int idx)
|
void TransactionView::chooseDate(int idx)
|
||||||
{
|
{
|
||||||
|
if(!transactionProxyModel)
|
||||||
|
return;
|
||||||
QDate current = QDate::currentDate();
|
QDate current = QDate::currentDate();
|
||||||
dateRangeWidget->setVisible(false);
|
dateRangeWidget->setVisible(false);
|
||||||
switch(dateWidget->itemData(idx).toInt())
|
switch(dateWidget->itemData(idx).toInt())
|
||||||
|
@ -231,17 +234,23 @@ void TransactionView::chooseDate(int idx)
|
||||||
|
|
||||||
void TransactionView::chooseType(int idx)
|
void TransactionView::chooseType(int idx)
|
||||||
{
|
{
|
||||||
|
if(!transactionProxyModel)
|
||||||
|
return;
|
||||||
transactionProxyModel->setTypeFilter(
|
transactionProxyModel->setTypeFilter(
|
||||||
typeWidget->itemData(idx).toInt());
|
typeWidget->itemData(idx).toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransactionView::changedPrefix(const QString &prefix)
|
void TransactionView::changedPrefix(const QString &prefix)
|
||||||
{
|
{
|
||||||
|
if(!transactionProxyModel)
|
||||||
|
return;
|
||||||
transactionProxyModel->setAddressPrefix(prefix);
|
transactionProxyModel->setAddressPrefix(prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransactionView::changedAmount(const QString &amount)
|
void TransactionView::changedAmount(const QString &amount)
|
||||||
{
|
{
|
||||||
|
if(!transactionProxyModel)
|
||||||
|
return;
|
||||||
qint64 amount_parsed = 0;
|
qint64 amount_parsed = 0;
|
||||||
if(BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), amount, &amount_parsed))
|
if(BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), amount, &amount_parsed))
|
||||||
{
|
{
|
||||||
|
@ -294,6 +303,8 @@ void TransactionView::contextualMenu(const QPoint &point)
|
||||||
|
|
||||||
void TransactionView::copyAddress()
|
void TransactionView::copyAddress()
|
||||||
{
|
{
|
||||||
|
if(!transactionView->selectionModel())
|
||||||
|
return;
|
||||||
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
||||||
if(!selection.isEmpty())
|
if(!selection.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -303,6 +314,8 @@ void TransactionView::copyAddress()
|
||||||
|
|
||||||
void TransactionView::copyLabel()
|
void TransactionView::copyLabel()
|
||||||
{
|
{
|
||||||
|
if(!transactionView->selectionModel())
|
||||||
|
return;
|
||||||
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
||||||
if(!selection.isEmpty())
|
if(!selection.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -312,10 +325,14 @@ void TransactionView::copyLabel()
|
||||||
|
|
||||||
void TransactionView::editLabel()
|
void TransactionView::editLabel()
|
||||||
{
|
{
|
||||||
|
if(!transactionView->selectionModel() ||!model)
|
||||||
|
return;
|
||||||
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
||||||
if(!selection.isEmpty())
|
if(!selection.isEmpty())
|
||||||
{
|
{
|
||||||
AddressTableModel *addressBook = model->getAddressTableModel();
|
AddressTableModel *addressBook = model->getAddressTableModel();
|
||||||
|
if(!addressBook)
|
||||||
|
return;
|
||||||
QString address = selection.at(0).data(TransactionTableModel::AddressRole).toString();
|
QString address = selection.at(0).data(TransactionTableModel::AddressRole).toString();
|
||||||
if(address.isEmpty())
|
if(address.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -354,6 +371,8 @@ void TransactionView::editLabel()
|
||||||
|
|
||||||
void TransactionView::showDetails()
|
void TransactionView::showDetails()
|
||||||
{
|
{
|
||||||
|
if(!transactionView->selectionModel())
|
||||||
|
return;
|
||||||
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
QModelIndexList selection = transactionView->selectionModel()->selectedRows();
|
||||||
if(!selection.isEmpty())
|
if(!selection.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -400,6 +419,8 @@ QWidget *TransactionView::createDateRangeWidget()
|
||||||
|
|
||||||
void TransactionView::dateRangeChanged()
|
void TransactionView::dateRangeChanged()
|
||||||
{
|
{
|
||||||
|
if(!transactionProxyModel)
|
||||||
|
return;
|
||||||
transactionProxyModel->setDateRange(
|
transactionProxyModel->setDateRange(
|
||||||
QDateTime(dateFrom->date()),
|
QDateTime(dateFrom->date()),
|
||||||
QDateTime(dateTo->date()).addDays(1));
|
QDateTime(dateTo->date()).addDays(1));
|
||||||
|
|
Loading…
Reference in a new issue