PRCYCoin  2.0.0.7rc1
P2P Digital Currency
transactionview.cpp
Go to the documentation of this file.
1 // Copyright (c) 2011-2013 The Bitcoin developers
2 // Distributed under the MIT/X11 software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #include "transactionview.h"
6 
7 #include "addresstablemodel.h"
8 #include "bitcoinunits.h"
9 #include "csvmodelwriter.h"
10 #include "editaddressdialog.h"
11 #include "guiutil.h"
12 #include "optionsmodel.h"
13 #include "transactiondescdialog.h"
14 #include "transactionfilterproxy.h"
15 #include "transactionrecord.h"
16 #include "transactiontablemodel.h"
17 #include "walletmodel.h"
18 
19 #include "guiinterface.h"
20 
21 #include <QComboBox>
22 #include <QDateTimeEdit>
23 #include <QDesktopServices>
24 #include <QDoubleValidator>
25 #include <QHBoxLayout>
26 #include <QHeaderView>
27 #include <QLabel>
28 #include <QLineEdit>
29 #include <QMenu>
30 #include <QPoint>
31 #include <QScrollBar>
32 #include <QSettings>
33 #include <QSignalMapper>
34 #include <QTableView>
35 #include <QUrl>
36 #include <QVBoxLayout>
37 
38 TransactionView::TransactionView(QWidget* parent) : QWidget(parent), model(0), transactionProxyModel(0),
39  transactionView(0)
40 {
41  QSettings settings;
42  // Build filter row
43  setContentsMargins(0, 0, 0, 0);
44 
45  QHBoxLayout* hlayout = new QHBoxLayout();
46  hlayout->setContentsMargins(0, 0, 0, 0);
47 #ifdef Q_OS_MAC
48  hlayout->setSpacing(5);
49  hlayout->addSpacing(26);
50 #else
51  hlayout->setSpacing(0);
52  hlayout->addSpacing(23);
53 #endif
54 
55  watchOnlyWidget = new QComboBox(this);
56  watchOnlyWidget->setFixedWidth(24);
58  watchOnlyWidget->addItem(QIcon(":/icons/eye_plus"), "", TransactionFilterProxy::WatchOnlyFilter_Yes);
59  watchOnlyWidget->addItem(QIcon(":/icons/eye_minus"), "", TransactionFilterProxy::WatchOnlyFilter_No);
60  hlayout->addWidget(watchOnlyWidget);
61 
62  dateWidget = new QComboBox(this);
63 #ifdef Q_OS_MAC
64  dateWidget->setFixedWidth(121);
65 #else
66  dateWidget->setFixedWidth(120);
67 #endif
68  dateWidget->addItem(tr("All"), All);
69  dateWidget->addItem(tr("Today"), Today);
70  dateWidget->addItem(tr("This week"), ThisWeek);
71  dateWidget->addItem(tr("This month"), ThisMonth);
72  dateWidget->addItem(tr("Last month"), LastMonth);
73  dateWidget->addItem(tr("This year"), ThisYear);
74  dateWidget->addItem(tr("Range..."), Range);
75  dateWidget->setCurrentIndex(settings.value("transactionDate").toInt());
76  hlayout->addWidget(dateWidget);
77 
78  typeWidget = new QComboBox(this);
79 #ifdef Q_OS_MAC
80  typeWidget->setFixedWidth(TYPE_COLUMN_WIDTH + 1);
81 #else
82  typeWidget->setFixedWidth(TYPE_COLUMN_WIDTH);
83 #endif
84 
85  typeWidget->addItem(tr("All"), TransactionFilterProxy::ALL_TYPES);
86  typeWidget->addItem(tr("Most Common"), TransactionFilterProxy::COMMON_TYPES);
92  typeWidget->addItem(tr("Masternode Reward"), TransactionFilterProxy::TYPE(TransactionRecord::MNReward));
94  typeWidget->setCurrentIndex(settings.value("transactionType").toInt());
95 
96  hlayout->addWidget(typeWidget);
97 
98  addressWidget = new QLineEdit(this);
99  addressWidget->setPlaceholderText(tr("Enter address or label to search"));
100  hlayout->addWidget(addressWidget);
101 
102  amountWidget = new QLineEdit(this);
103  amountWidget->setPlaceholderText(tr("Min amount"));
104 #ifdef Q_OS_MAC
105  amountWidget->setFixedWidth(97);
106 #else
107  amountWidget->setFixedWidth(100);
108 #endif
109  amountWidget->setValidator(new QDoubleValidator(0, 1e20, 8, this));
110  hlayout->addWidget(amountWidget);
111 
112  QVBoxLayout* vlayout = new QVBoxLayout(this);
113  vlayout->setContentsMargins(0, 0, 0, 0);
114  vlayout->setSpacing(0);
115 
116  QTableView* view = new QTableView(this);
117  vlayout->addLayout(hlayout);
118  vlayout->addWidget(createDateRangeWidget());
119  vlayout->addWidget(view);
120  vlayout->setSpacing(0);
121  int width = view->verticalScrollBar()->sizeHint().width();
122 // Cover scroll bar width with spacing
123 #ifdef Q_OS_MAC
124  hlayout->addSpacing(width + 2);
125 #else
126  hlayout->addSpacing(width);
127 #endif
128  // Always show scroll bar
129  view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
130  view->setTabKeyNavigation(false);
131  view->setContextMenuPolicy(Qt::CustomContextMenu);
132 
133  view->installEventFilter(this);
134 
135  transactionView = view;
136 
137  // Actions
138  QAction* copyAddressAction = new QAction(tr("Copy address"), this);
139  QAction* copyLabelAction = new QAction(tr("Copy label"), this);
140  QAction* copyAmountAction = new QAction(tr("Copy amount"), this);
141  QAction* copyTxIDAction = new QAction(tr("Copy transaction ID"), this);
142  QAction* editLabelAction = new QAction(tr("Edit label"), this);
143  QAction* showDetailsAction = new QAction(tr("Show transaction details"), this);
144  hideOrphansAction = new QAction(tr("Hide orphan stakes"), this);
145 
146  hideOrphansAction->setCheckable(true);
147  hideOrphansAction->setChecked(settings.value("fHideOrphans", false).toBool());
148 
149  contextMenu = new QMenu();
150  contextMenu->addAction(copyAddressAction);
151  contextMenu->addAction(copyLabelAction);
152  contextMenu->addAction(copyAmountAction);
153  contextMenu->addAction(copyTxIDAction);
154  contextMenu->addAction(editLabelAction);
155  contextMenu->addAction(showDetailsAction);
156  contextMenu->addAction(hideOrphansAction);
157 
158  mapperThirdPartyTxUrls = new QSignalMapper(this);
159 
160  // Connect actions
161  connect(mapperThirdPartyTxUrls, SIGNAL(mapped(QString)), this, SLOT(openThirdPartyTxUrl(QString)));
162 
163  connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int)));
164  connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int)));
165  connect(watchOnlyWidget, SIGNAL(activated(int)), this, SLOT(chooseWatchonly(int)));
166  connect(addressWidget, SIGNAL(textChanged(QString)), this, SLOT(changedPrefix(QString)));
167  connect(amountWidget, SIGNAL(textChanged(QString)), this, SLOT(changedAmount(QString)));
168 
169  connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex)));
170  connect(view, SIGNAL(clicked(QModelIndex)), this, SLOT(computeSum()));
171  connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint)));
172 
173  connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress()));
174  connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel()));
175  connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount()));
176  connect(copyTxIDAction, SIGNAL(triggered()), this, SLOT(copyTxID()));
177  connect(editLabelAction, SIGNAL(triggered()), this, SLOT(editLabel()));
178  connect(showDetailsAction, SIGNAL(triggered()), this, SLOT(showDetails()));
179  connect(hideOrphansAction, SIGNAL(toggled(bool)), this, SLOT(updateHideOrphans(bool)));
180 }
181 
183  delete contextMenu;
184 }
185 
187 {
188  QSettings settings;
189  this->model = model;
190  if (model) {
193  transactionProxyModel->setSortRole(Qt::EditRole);
194  transactionProxyModel->setDynamicSortFilter(true);
195  transactionProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
196  transactionProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
197 
198  transactionProxyModel->setSortRole(Qt::EditRole);
199 
200  transactionView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
202  transactionView->setAlternatingRowColors(true);
203  transactionView->setSelectionBehavior(QAbstractItemView::SelectRows);
204  transactionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
205  transactionView->horizontalHeader()->setSortIndicator(TransactionTableModel::Date, Qt::DescendingOrder);
206  transactionView->setSortingEnabled(true);
207  transactionView->verticalHeader()->hide();
208 
214 
215  // Note: it's a good idea to connect this signal AFTER the model is set
216  connect(transactionView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), this, SLOT(computeSum()));
217 
219 
220  if (model->getOptionsModel()) {
221  // Add third party transaction URLs to context menu
222  QStringList listUrls = model->getOptionsModel()->getThirdPartyTxUrls().split("|", QString::SkipEmptyParts);
223  for (int i = 0; i < listUrls.size(); ++i) {
224  QString host = QUrl(listUrls[i].trimmed(), QUrl::StrictMode).host();
225  if (!host.isEmpty()) {
226  QAction* thirdPartyTxUrlAction = new QAction(host, this); // use host as menu item label
227  if (i == 0)
228  contextMenu->addSeparator();
229  contextMenu->addAction(thirdPartyTxUrlAction);
230  connect(thirdPartyTxUrlAction, SIGNAL(triggered()), mapperThirdPartyTxUrls, SLOT(map()));
231  mapperThirdPartyTxUrls->setMapping(thirdPartyTxUrlAction, listUrls[i].trimmed());
232  }
233  }
234 
235  connect(model->getOptionsModel(), SIGNAL(hideOrphansChanged(bool)), this, SLOT(updateHideOrphans(bool)));
236  }
237 
238  // show/hide column Watch-only
240 
241  // Watch-only signal
242  connect(model, SIGNAL(notifyWatchonlyChanged(bool)), this, SLOT(updateWatchOnlyColumn(bool)));
243 
244  // Update transaction list with persisted settings
245  chooseType(settings.value("transactionType").toInt());
246  chooseDate(settings.value("transactionDate").toInt());
247 
248  // Hide orphans
249  hideOrphans(settings.value("fHideOrphans", false).toBool());
250  }
251 }
252 
254 {
256  return;
257  QDate current = QDate::currentDate();
258  dateRangeWidget->setVisible(false);
259  switch (dateWidget->itemData(idx).toInt()) {
260  case All:
264  break;
265  case Today:
267  QDateTime(current),
269  break;
270  case ThisWeek: {
271  // Find last Monday
272  QDate startOfWeek = current.addDays(-(current.dayOfWeek() - 1));
274  QDateTime(startOfWeek),
276 
277  } break;
278  case ThisMonth:
280  QDateTime(QDate(current.year(), current.month(), 1)),
282  break;
283  case LastMonth:
285  QDateTime(QDate(current.year(), current.month() - 1, 1)),
286  QDateTime(QDate(current.year(), current.month(), 1)));
287  break;
288  case ThisYear:
290  QDateTime(QDate(current.year(), 1, 1)),
292  break;
293  case Range:
294  dateRangeWidget->setVisible(true);
296  break;
297  }
298  // Persist settings
299  if (dateWidget->itemData(idx).toInt() != Range) {
300  QSettings settings;
301  settings.setValue("transactionDate", idx);
302  }
303 }
304 
306 {
308  return;
310  typeWidget->itemData(idx).toInt());
311  // Persist settings
312  QSettings settings;
313  settings.setValue("transactionType", idx);
314 }
315 
317 {
319  return;
321 }
322 
324 {
325  QSettings settings;
326  if (settings.value("fHideOrphans", false).toBool() != fHide) {
327  settings.setValue("fHideOrphans", fHide);
328  if (model && model->getOptionsModel())
329  Q_EMIT model->getOptionsModel()->hideOrphansChanged(fHide);
330  }
331  hideOrphans(fHide);
332  // retain consistency with other checkboxes
333  if (hideOrphansAction->isChecked() != fHide)
334  hideOrphansAction->setChecked(fHide);
335 
336 }
337 
339 {
341  return;
344 }
345 
347 {
349  return;
351 }
352 
353 void TransactionView::changedAmount(const QString& amount)
354 {
356  return;
357  CAmount amount_parsed = 0;
358 
359  if (model) {
360  // Replace "," by "." so BitcoinUnits::parse will not fail for users entering "," as decimal separator
361  QString newAmount = amount;
362  newAmount.replace(QString(","), QString("."));
363 
364  if (BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), newAmount, &amount_parsed)) {
365  transactionProxyModel->setMinAmount(amount_parsed);
366  } else {
368  }
369  }
370 }
371 
373 {
374  // CSV is currently the only supported format
375  QString filename = GUIUtil::getSaveFileName(this,
376  tr("Export Transaction History"), QString(),
377  tr("Comma separated file (*.csv)"), NULL);
378 
379  if (filename.isNull())
380  return;
381 
382  CSVModelWriter writer(filename);
383  bool fExport = false;
384 
385  if (model) {
386  // name, column, role
388  writer.addColumn(tr("Confirmed"), 0, TransactionTableModel::ConfirmedRole);
389  if (model->haveWatchOnly())
390  writer.addColumn(tr("Watch-only"), TransactionTableModel::Watchonly);
391  writer.addColumn(tr("Date"), 0, TransactionTableModel::DateRole);
392  writer.addColumn(tr("Type"), TransactionTableModel::Type, Qt::EditRole);
393  writer.addColumn(tr("Label"), 0, TransactionTableModel::LabelRole);
394  writer.addColumn(tr("Address"), 0, TransactionTableModel::AddressRole);
396  writer.addColumn(tr("ID"), 0, TransactionTableModel::TxIDRole);
397 
398  fExport = writer.write();
399  }
400 
401  if (fExport) {
402  Q_EMIT message(tr("Exporting Successful"), tr("The transaction history was successfully saved to %1.").arg(filename),
404  }
405  else {
406  Q_EMIT message(tr("Exporting Failed"), tr("There was an error trying to save the transaction history to %1.").arg(filename),
408  }
409 }
410 
411 void TransactionView::contextualMenu(const QPoint& point)
412 {
413  QModelIndex index = transactionView->indexAt(point);
414  if (index.isValid()) {
415  contextMenu->exec(QCursor::pos());
416  }
417 }
418 
420 {
422 }
423 
425 {
427 }
428 
430 {
432 }
433 
435 {
437 }
438 
440 {
441  if (!transactionView->selectionModel() || !model)
442  return;
443  QModelIndexList selection = transactionView->selectionModel()->selectedRows();
444  if (!selection.isEmpty()) {
445  AddressTableModel* addressBook = model->getAddressTableModel();
446  if (!addressBook)
447  return;
448  QString address = selection.at(0).data(TransactionTableModel::AddressRole).toString();
449  if (address.isEmpty()) {
450  // If this transaction has no associated address, exit
451  return;
452  }
453  // Is address in address book? Address book can miss address when a transaction is
454  // sent from outside the UI.
455  int idx = addressBook->lookupAddress(address);
456  if (idx != -1) {
457  // Edit sending / receiving address
458  QModelIndex modelIdx = addressBook->index(idx, 0, QModelIndex());
459  // Determine type of address, launch appropriate editor dialog type
460  QString type = modelIdx.data(AddressTableModel::TypeRole).toString();
461 
462  EditAddressDialog dlg(
464  dlg.setModel(addressBook);
465  dlg.loadRow(idx);
466  dlg.exec();
467  } else {
468  // Add sending address
470  this);
471  dlg.setModel(addressBook);
472  dlg.setAddress(address);
473  dlg.exec();
474  }
475  }
476 }
477 
479 {
480  if (!transactionView->selectionModel())
481  return;
482  QModelIndexList selection = transactionView->selectionModel()->selectedRows();
483  if (!selection.isEmpty()) {
484  TransactionDescDialog dlg(selection.at(0));
485  dlg.exec();
486  }
487 }
488 
491 {
492  qint64 amount = 0;
493  int nDisplayUnit = model->getOptionsModel()->getDisplayUnit();
494  if (!transactionView->selectionModel())
495  return;
496  QModelIndexList selection = transactionView->selectionModel()->selectedRows();
497 
498  Q_FOREACH (QModelIndex index, selection) {
499  amount += index.data(TransactionTableModel::AmountRole).toLongLong();
500  }
501  QString strAmount(BitcoinUnits::formatWithUnit(nDisplayUnit, amount, true, BitcoinUnits::separatorAlways));
502  if (amount < 0) strAmount = "<span style='color:red;'>" + strAmount + "</span>";
503  Q_EMIT trxAmount(strAmount);
504 }
505 
507 {
508  if (!transactionView || !transactionView->selectionModel())
509  return;
510  QModelIndexList selection = transactionView->selectionModel()->selectedRows(0);
511  if (!selection.isEmpty())
512  QDesktopServices::openUrl(QUrl::fromUserInput(url.replace("%s", selection.at(0).data(TransactionTableModel::TxHashRole).toString())));
513 }
514 
516 {
517  dateRangeWidget = new QFrame();
518  dateRangeWidget->setFrameStyle(QFrame::Panel | QFrame::Raised);
519  dateRangeWidget->setContentsMargins(1, 1, 1, 1);
520  QHBoxLayout* layout = new QHBoxLayout(dateRangeWidget);
521  layout->setContentsMargins(0, 0, 0, 0);
522  layout->addSpacing(23);
523  layout->addWidget(new QLabel(tr("Range:")));
524 
525  dateFrom = new QDateTimeEdit(this);
526  dateFrom->setDisplayFormat("dd/MM/yy");
527  dateFrom->setCalendarPopup(true);
528  dateFrom->setMinimumWidth(100);
529  dateFrom->setDate(QDate::currentDate().addDays(-7));
530  layout->addWidget(dateFrom);
531  layout->addWidget(new QLabel(tr("to")));
532 
533  dateTo = new QDateTimeEdit(this);
534  dateTo->setDisplayFormat("dd/MM/yy");
535  dateTo->setCalendarPopup(true);
536  dateTo->setMinimumWidth(100);
537  dateTo->setDate(QDate::currentDate());
538  layout->addWidget(dateTo);
539  layout->addStretch();
540 
541  // Hide by default
542  dateRangeWidget->setVisible(false);
543 
544  // Notify on change
545  connect(dateFrom, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged()));
546  connect(dateTo, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged()));
547 
548  return dateRangeWidget;
549 }
550 
552 {
554  return;
556  QDateTime(dateFrom->date()),
557  QDateTime(dateTo->date()).addDays(1));
558 }
559 
560 void TransactionView::focusTransaction(const QModelIndex& idx)
561 {
563  return;
564  QModelIndex targetIdx = transactionProxyModel->mapFromSource(idx);
565  transactionView->selectRow(targetIdx.row());
566  computeSum();
567  transactionView->scrollTo(targetIdx);
568  transactionView->setCurrentIndex(targetIdx);
569  transactionView->setFocus();
570 }
571 
572 // We override the virtual resizeEvent of the QWidget to adjust tables column
573 // sizes as the tables width is proportional to the dialogs width.
574 void TransactionView::resizeEvent(QResizeEvent* event)
575 {
576  QWidget::resizeEvent(event);
578 }
579 
580 // Need to override default Ctrl+C action for amount as default behaviour is just to copy DisplayRole text
581 bool TransactionView::eventFilter(QObject* obj, QEvent* event)
582 {
583  if (event->type() == QEvent::KeyPress) {
584  QKeyEvent* ke = static_cast<QKeyEvent*>(event);
585  if (ke->key() == Qt::Key_C && ke->modifiers().testFlag(Qt::ControlModifier)) {
586  QModelIndex i = this->transactionView->currentIndex();
587  if (i.isValid() && i.column() == TransactionTableModel::Amount) {
589  return true;
590  }
591  }
592  }
593  return QWidget::eventFilter(obj, event);
594 }
595 
596 // show/hide column Watch-only
597 void TransactionView::updateWatchOnlyColumn(bool fHaveWatchOnly)
598 {
599  watchOnlyWidget->setVisible(fHaveWatchOnly);
600  transactionView->setColumnHidden(TransactionTableModel::Watchonly, !fHaveWatchOnly);
601 }
CClientUIInterface::MSG_INFORMATION
@ MSG_INFORMATION
Predefined combinations for certain default usage cases.
Definition: guiinterface.h:74
TransactionView::TYPE_COLUMN_WIDTH
@ TYPE_COLUMN_WIDTH
Definition: transactionview.h:57
WalletModel::getOptionsModel
OptionsModel * getOptionsModel()
Definition: walletmodel.cpp:358
TransactionRecord::StakeMint
@ StakeMint
Definition: transactionrecord.h:78
TransactionView::createDateRangeWidget
QWidget * createDateRangeWidget()
Definition: transactionview.cpp:515
transactiontablemodel.h
OptionsModel::hideOrphansChanged
void hideOrphansChanged(bool)
TransactionFilterProxy::setAddressPrefix
void setAddressPrefix(const QString &addrPrefix)
Definition: transactionfilterproxy.cpp:77
TransactionView::editLabel
void editLabel()
Definition: transactionview.cpp:439
TransactionView::TransactionView
TransactionView(QWidget *parent=0)
Definition: transactionview.cpp:38
EditAddressDialog::loadRow
void loadRow(int row)
Definition: editaddressdialog.cpp:64
csvmodelwriter.h
TransactionTableModel::Date
@ Date
Definition: transactiontablemodel.h:32
WalletModel
Interface to Bitcoin wallet from Qt view code.
Definition: walletmodel.h:102
TransactionTableModel::AddressRole
@ AddressRole
Address of transaction.
Definition: transactiontablemodel.h:54
TransactionView::openThirdPartyTxUrl
void openThirdPartyTxUrl(QString url)
Definition: transactionview.cpp:506
TransactionView::~TransactionView
~TransactionView()
Definition: transactionview.cpp:182
BitcoinUnits::formatWithUnit
static QString formatWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=separatorStandard)
Format as string (with unit)
Definition: bitcoinunits.cpp:190
CSVModelWriter::write
bool write()
Perform export of the model to CSV.
Definition: csvmodelwriter.cpp:48
TransactionDescDialog
Dialog showing transaction details.
Definition: transactiondescdialog.h:20
TransactionView::ThisYear
@ ThisYear
Definition: transactionview.h:49
TransactionRecord::RecvWithAddress
@ RecvWithAddress
Definition: transactionrecord.h:81
EditAddressDialog::EditReceivingAddress
@ EditReceivingAddress
Definition: editaddressdialog.h:31
TransactionView::focusTransaction
void focusTransaction(const QModelIndex &)
Definition: transactionview.cpp:560
walletmodel.h
CSVModelWriter::addColumn
void addColumn(const QString &title, int column, int role=Qt::EditRole)
Definition: csvmodelwriter.cpp:21
AddressTableModel
Qt model of the address book in the core.
Definition: addresstablemodel.h:19
WalletModel::getAddressTableModel
AddressTableModel * getAddressTableModel()
Definition: walletmodel.cpp:363
GUIUtil::TableViewLastColumnResizingFixer
Makes a QTableView last column feel as if it was being resized from its left border.
Definition: guiutil.h:179
TransactionFilterProxy::WatchOnlyFilter_All
@ WatchOnlyFilter_All
Definition: transactionfilterproxy.h:33
AddressTableModel::Receive
static const QString Receive
Specifies receive address.
Definition: addresstablemodel.h:47
TransactionView::ThisMonth
@ ThisMonth
Definition: transactionview.h:47
TransactionView::LastMonth
@ LastMonth
Definition: transactionview.h:48
WalletModel::getTransactionTableModel
TransactionTableModel * getTransactionTableModel()
Definition: walletmodel.cpp:368
GUIUtil::TableViewLastColumnResizingFixer::stretchColumnWidth
void stretchColumnWidth(int column)
Definition: guiutil.cpp:482
TransactionFilterProxy::WatchOnlyFilter_No
@ WatchOnlyFilter_No
Definition: transactionfilterproxy.h:35
TransactionFilterProxy::setHideOrphans
void setHideOrphans(bool fHide)
Set whether to hide orphan stakes.
Definition: transactionfilterproxy.cpp:71
TransactionView::updateHideOrphans
void updateHideOrphans(bool fHide)
Definition: transactionview.cpp:323
EditAddressDialog::setModel
void setModel(AddressTableModel *model)
Definition: editaddressdialog.cpp:53
TransactionRecord::MNReward
@ MNReward
Definition: transactionrecord.h:82
TransactionView::hideOrphansAction
QAction * hideOrphansAction
Definition: transactionview.h:71
guiinterface.h
TransactionView::STATUS_COLUMN_WIDTH
@ STATUS_COLUMN_WIDTH
Definition: transactionview.h:54
TransactionFilterProxy::MIN_DATE
static const QDateTime MIN_DATE
Earliest date that can be represented (far in the past)
Definition: transactionfilterproxy.h:22
EditAddressDialog::EditSendingAddress
@ EditSendingAddress
Definition: editaddressdialog.h:32
TransactionView::chooseWatchonly
void chooseWatchonly(int idx)
Definition: transactionview.cpp:338
TransactionRecord::RecvFromOther
@ RecvFromOther
Definition: transactionrecord.h:83
TransactionView::transactionView
QTableView * transactionView
Definition: transactionview.h:65
TransactionView::copyTxID
void copyTxID()
Definition: transactionview.cpp:434
GUIUtil::setClipboard
void setClipboard(const QString &str)
Definition: guiutil.cpp:785
BitcoinUnits::parse
static bool parse(int unit, const QString &value, CAmount *val_out)
Parse string to coin amount.
Definition: bitcoinunits.cpp:220
TransactionTableModel::TxIDRole
@ TxIDRole
Unique identifier.
Definition: transactiontablemodel.h:60
OptionsModel::getDisplayUnit
int getDisplayUnit()
Definition: optionsmodel.h:60
TransactionView::dateTo
QDateTimeEdit * dateTo
Definition: transactionview.h:78
prefix
const char * prefix
Definition: rest.cpp:588
AddressTableModel::data
QVariant data(const QModelIndex &index, int role) const
Definition: addresstablemodel.cpp:191
url
const char * url
Definition: rpcconsole.cpp:61
CSVModelWriter
Export a Qt table model to a CSV file.
Definition: csvmodelwriter.h:18
TransactionTableModel::AmountRole
@ AmountRole
Net amount of transaction.
Definition: transactiontablemodel.h:58
TransactionView::resizeEvent
virtual void resizeEvent(QResizeEvent *event)
Definition: transactionview.cpp:574
EditAddressDialog
Dialog for editing an address and associated information.
Definition: editaddressdialog.h:23
TransactionView::computeSum
void computeSum()
Compute sum of all selected transactions.
Definition: transactionview.cpp:490
TransactionRecord::SendToOther
@ SendToOther
Definition: transactionrecord.h:80
TransactionView::trxAmount
void trxAmount(QString amount)
Send computed sum back to wallet-view.
TransactionTableModel::ToAddress
@ ToAddress
Definition: transactiontablemodel.h:34
TransactionView::hideOrphans
void hideOrphans(bool fHide)
Definition: transactionview.cpp:316
AddressTableModel::index
QModelIndex index(int row, int column, const QModelIndex &parent) const
Definition: addresstablemodel.cpp:303
TransactionView::showDetails
void showDetails()
Definition: transactionview.cpp:478
CSVModelWriter::setModel
void setModel(const QAbstractItemModel *model)
Definition: csvmodelwriter.cpp:16
TransactionFilterProxy::setMinAmount
void setMinAmount(const CAmount &minimum)
Definition: transactionfilterproxy.cpp:89
transactionfilterproxy.h
CAmount
int64_t CAmount
Amount in PRCY (Can be negative)
Definition: amount.h:17
TransactionFilterProxy::TYPE
static quint32 TYPE(int type)
Definition: transactionfilterproxy.h:30
TransactionView::mapperThirdPartyTxUrls
QSignalMapper * mapperThirdPartyTxUrls
Definition: transactionview.h:74
GUIUtil::copyEntryData
void copyEntryData(QAbstractItemView *view, int column, int role)
Copy a field of the currently selected entry of a view to the clipboard.
Definition: guiutil.cpp:215
guiutil.h
TransactionView::DATE_COLUMN_WIDTH
@ DATE_COLUMN_WIDTH
Definition: transactionview.h:56
TransactionView::copyAmount
void copyAmount()
Definition: transactionview.cpp:429
TransactionView::message
void message(const QString &title, const QString &message, unsigned int style)
Fired when a message should be reported to the user.
TransactionRecord::Generated
@ Generated
Definition: transactionrecord.h:77
TransactionFilterProxy::setTypeFilter
void setTypeFilter(quint32 modes)
Definition: transactionfilterproxy.cpp:83
TransactionTableModel::Amount
@ Amount
Definition: transactiontablemodel.h:35
TransactionFilterProxy::setWatchOnlyFilter
void setWatchOnlyFilter(WatchOnlyFilter filter)
Definition: transactionfilterproxy.cpp:95
TransactionView::All
@ All
Definition: transactionview.h:44
TransactionFilterProxy::MAX_DATE
static const QDateTime MAX_DATE
Last date that can be represented (far in the future)
Definition: transactionfilterproxy.h:24
TransactionView::transactionProxyModel
TransactionFilterProxy * transactionProxyModel
Definition: transactionview.h:64
TransactionRecord::SendToSelf
@ SendToSelf
Definition: transactionrecord.h:84
EditAddressDialog::setAddress
void setAddress(const QString &address)
Definition: editaddressdialog.cpp:136
EditAddressDialog::NewSendingAddress
@ NewSendingAddress
Definition: editaddressdialog.h:30
AddressTableModel::lookupAddress
int lookupAddress(const QString &address) const
Definition: addresstablemodel.cpp:413
TransactionView::dateRangeChanged
void dateRangeChanged()
Definition: transactionview.cpp:551
TransactionView::copyLabel
void copyLabel()
Definition: transactionview.cpp:424
editaddressdialog.h
TransactionView::watchOnlyWidget
QComboBox * watchOnlyWidget
Definition: transactionview.h:68
TransactionView::changedAmount
void changedAmount(const QString &amount)
Definition: transactionview.cpp:353
TransactionFilterProxy::setDateRange
void setDateRange(const QDateTime &from, const QDateTime &to)
Definition: transactionfilterproxy.cpp:64
transactiondescdialog.h
OptionsModel::getThirdPartyTxUrls
QString getThirdPartyTxUrls()
Definition: optionsmodel.h:61
TransactionView::WATCHONLY_COLUMN_WIDTH
@ WATCHONLY_COLUMN_WIDTH
Definition: transactionview.h:55
TransactionTableModel::FormattedAmountRole
@ FormattedAmountRole
Formatted amount, without brackets when unconfirmed.
Definition: transactiontablemodel.h:66
TransactionView::updateWatchOnlyColumn
void updateWatchOnlyColumn(bool fHaveWatchOnly)
Definition: transactionview.cpp:597
GUIUtil::getSaveFileName
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedSuffixOut)
Get save filename, mimics QFileDialog::getSaveFileName, except that it appends a default suffix when ...
Definition: guiutil.cpp:239
transactionrecord.h
TransactionFilterProxy::WatchOnlyFilter_Yes
@ WatchOnlyFilter_Yes
Definition: transactionfilterproxy.h:34
CClientUIInterface::MSG_ERROR
@ MSG_ERROR
Definition: guiinterface.h:76
TransactionView::MINIMUM_COLUMN_WIDTH
@ MINIMUM_COLUMN_WIDTH
Definition: transactionview.h:59
TransactionView::ThisWeek
@ ThisWeek
Definition: transactionview.h:46
AddressTableModel::TypeRole
@ TypeRole
Type of address (Send or Receive)
Definition: addresstablemodel.h:33
TransactionView::contextMenu
QMenu * contextMenu
Definition: transactionview.h:73
BitcoinUnits::separatorAlways
@ separatorAlways
Definition: bitcoinunits.h:69
TransactionView::chooseDate
void chooseDate(int idx)
Definition: transactionview.cpp:253
TransactionFilterProxy::WatchOnlyFilter
WatchOnlyFilter
Definition: transactionfilterproxy.h:32
BitcoinUnits::getAmountColumnTitle
static QString getAmountColumnTitle(int unit)
Gets title for amount column including current display unit if optionsModel reference available *‍/.
Definition: bitcoinunits.cpp:254
TransactionTableModel::Type
@ Type
Definition: transactiontablemodel.h:33
TransactionView::setModel
void setModel(WalletModel *model)
Definition: transactionview.cpp:186
TransactionView::copyAddress
void copyAddress()
Definition: transactionview.cpp:419
TransactionView::amountWidget
QLineEdit * amountWidget
Definition: transactionview.h:70
TransactionFilterProxy::COMMON_TYPES
static const quint32 COMMON_TYPES
Type filter bit field (all types but Obfuscation-SPAM ...
Definition: transactionfilterproxy.h:28
TransactionView::typeWidget
QComboBox * typeWidget
Definition: transactionview.h:67
TransactionRecord::SendToAddress
@ SendToAddress
Definition: transactionrecord.h:79
TransactionTableModel::TxHashRole
@ TxHashRole
Transaction hash.
Definition: transactiontablemodel.h:62
bitcoinunits.h
TransactionView::contextualMenu
void contextualMenu(const QPoint &)
Definition: transactionview.cpp:411
TransactionTableModel::Status
@ Status
Definition: transactiontablemodel.h:30
transactionview.h
TransactionView::dateRangeWidget
QFrame * dateRangeWidget
Definition: transactionview.h:76
TransactionTableModel::DateRole
@ DateRole
Date and time this transaction was created.
Definition: transactiontablemodel.h:46
TransactionView::AMOUNT_MINIMUM_COLUMN_WIDTH
@ AMOUNT_MINIMUM_COLUMN_WIDTH
Definition: transactionview.h:58
TransactionView::chooseType
void chooseType(int idx)
Definition: transactionview.cpp:305
WalletModel::haveWatchOnly
bool haveWatchOnly() const
Definition: walletmodel.cpp:109
TransactionView::columnResizingFixer
GUIUtil::TableViewLastColumnResizingFixer * columnResizingFixer
Definition: transactionview.h:82
optionsmodel.h
TransactionView::doubleClicked
void doubleClicked(const QModelIndex &)
TransactionView::addressWidget
QLineEdit * addressWidget
Definition: transactionview.h:69
TransactionView::model
WalletModel * model
Definition: transactionview.h:63
TransactionView::exportClicked
void exportClicked()
Definition: transactionview.cpp:372
TransactionTableModel::LabelRole
@ LabelRole
Label of address related to transaction.
Definition: transactiontablemodel.h:56
addresstablemodel.h
TransactionTableModel::Watchonly
@ Watchonly
Definition: transactiontablemodel.h:31
TransactionView::dateWidget
QComboBox * dateWidget
Definition: transactionview.h:66
TransactionFilterProxy::ALL_TYPES
static const quint32 ALL_TYPES
Type filter bit field (all types)
Definition: transactionfilterproxy.h:26
TransactionView::changedPrefix
void changedPrefix(const QString &prefix)
Definition: transactionview.cpp:346
TransactionView::dateFrom
QDateTimeEdit * dateFrom
Definition: transactionview.h:77
TransactionView::Today
@ Today
Definition: transactionview.h:45
TransactionView::eventFilter
bool eventFilter(QObject *obj, QEvent *event)
Definition: transactionview.cpp:581
TransactionView::Range
@ Range
Definition: transactionview.h:50
TransactionTableModel::ConfirmedRole
@ ConfirmedRole
Is transaction confirmed?
Definition: transactiontablemodel.h:64
TransactionRecord::Other
@ Other
Definition: transactionrecord.h:76
TransactionFilterProxy
Filter the transaction list according to pre-specified rules.
Definition: transactionfilterproxy.h:14