Export functionality for transaction list
[novacoin.git] / src / qt / transactionview.cpp
index 6b314f4..037dfbb 100644 (file)
@@ -1,11 +1,10 @@
 #include "transactionview.h"
 
-// Temp includes for filtering prototype
-// Move to TransactionFilterRow class
 #include "transactionfilterproxy.h"
 #include "transactionrecord.h"
 #include "transactiontablemodel.h"
 #include "guiutil.h"
+#include "csvmodelwriter.h"
 
 #include <QScrollBar>
 #include <QComboBox>
@@ -15,6 +14,9 @@
 #include <QLineEdit>
 #include <QTableView>
 #include <QHeaderView>
+#include <QPushButton>
+#include <QFileDialog>
+#include <QMessageBox>
 
 #include <QDebug>
 
@@ -23,8 +25,10 @@ TransactionView::TransactionView(QWidget *parent) :
     transactionView(0)
 {
     // Build filter row
+    setContentsMargins(0,0,0,0);
+
     QHBoxLayout *hlayout = new QHBoxLayout();
-    hlayout->setContentsMargins(QMargins(0,0,0,0));
+    hlayout->setContentsMargins(0,0,0,0);
     hlayout->setSpacing(0);
 
     hlayout->addSpacing(23);
@@ -36,6 +40,7 @@ TransactionView::TransactionView(QWidget *parent) :
     dateWidget->addItem(tr("Today"), Today);
     dateWidget->addItem(tr("This week"), ThisWeek);
     dateWidget->addItem(tr("This month"), ThisMonth);
+    dateWidget->addItem(tr("Last month"), LastMonth);
     dateWidget->addItem(tr("This year"), ThisYear);
     dateWidget->addItem(tr("Range..."), Range);
     hlayout->addWidget(dateWidget);
@@ -50,23 +55,30 @@ TransactionView::TransactionView(QWidget *parent) :
     typeWidget->addItem(tr("Sent to"), TransactionFilterProxy::TYPE(TransactionRecord::SendToAddress) |
                                   TransactionFilterProxy::TYPE(TransactionRecord::SendToIP));
     typeWidget->addItem(tr("To yourself"), TransactionFilterProxy::TYPE(TransactionRecord::SendToSelf));
-    typeWidget->addItem(tr("Generated"), TransactionFilterProxy::TYPE(TransactionRecord::Generated));
+    typeWidget->addItem(tr("Mined"), TransactionFilterProxy::TYPE(TransactionRecord::Generated));
     typeWidget->addItem(tr("Other"), TransactionFilterProxy::TYPE(TransactionRecord::Other));
 
     hlayout->addWidget(typeWidget);
 
     addressWidget = new QLineEdit(this);
+#if QT_VERSION >= 0x040700
     addressWidget->setPlaceholderText("Enter address or label to search");
+#endif
     hlayout->addWidget(addressWidget);
 
     amountWidget = new QLineEdit(this);
+#if QT_VERSION >= 0x040700
     amountWidget->setPlaceholderText("Min amount");
-    amountWidget->setMaximumWidth(79);
-    amountWidget->setMinimumWidth(79);
+#endif
+    amountWidget->setMaximumWidth(100);
+    amountWidget->setMinimumWidth(100);
     amountWidget->setValidator(new QDoubleValidator(0, 1e20, 8, this));
     hlayout->addWidget(amountWidget);
 
     QVBoxLayout *vlayout = new QVBoxLayout(this);
+    vlayout->setContentsMargins(0,0,0,0);
+    vlayout->setSpacing(0);
+    //vlayout->addLayout(hlayout2);
 
     QTableView *view = new QTableView(this);
     vlayout->addLayout(hlayout);
@@ -115,7 +127,7 @@ void TransactionView::setModel(TransactionTableModel *model)
     transactionView->horizontalHeader()->setResizeMode(
             TransactionTableModel::ToAddress, QHeaderView::Stretch);
     transactionView->horizontalHeader()->resizeSection(
-            TransactionTableModel::Amount, 79);
+            TransactionTableModel::Amount, 100);
 
 }
 
@@ -147,6 +159,11 @@ void TransactionView::chooseDate(int idx)
                 QDateTime(QDate(current.year(), current.month(), 1)),
                 TransactionFilterProxy::MAX_DATE);
         break;
+    case LastMonth:
+        transactionProxyModel->setDateRange(
+                QDateTime(QDate(current.year(), current.month()-1, 1)),
+                QDateTime(QDate(current.year(), current.month(), 1)));
+        break;
     case ThisYear:
         transactionProxyModel->setDateRange(
                 QDateTime(QDate(current.year(), 1, 1)),
@@ -172,7 +189,7 @@ void TransactionView::changedPrefix(const QString &prefix)
 
 void TransactionView::changedAmount(const QString &amount)
 {
-    qint64 amount_parsed;
+    qint64 amount_parsed = 0;
     if(GUIUtil::parseMoney(amount, &amount_parsed))
     {
         transactionProxyModel->setMinAmount(amount_parsed);
@@ -182,3 +199,36 @@ void TransactionView::changedAmount(const QString &amount)
         transactionProxyModel->setMinAmount(0);
     }
 }
+
+void TransactionView::exportClicked()
+{
+    // CSV is currently the only supported format
+    QString filename = QFileDialog::getSaveFileName(
+            this,
+            tr("Export Transaction Data"),
+            QDir::currentPath(),
+            tr("Comma separated file (*.csv)"));
+    if(!filename.endsWith(".csv"))
+    {
+        filename += ".csv";
+    }
+
+    CSVModelWriter writer(filename);
+
+    // name, column, role
+    writer.setModel(transactionProxyModel);
+    writer.addColumn("Confirmed", 0, TransactionTableModel::ConfirmedRole);
+    writer.addColumn("Date", 0, TransactionTableModel::DateRole);
+    writer.addColumn("Type", TransactionTableModel::Type, Qt::EditRole);
+    writer.addColumn("Label", 0, TransactionTableModel::LabelRole);
+    writer.addColumn("Address", 0, TransactionTableModel::AddressRole);
+    writer.addColumn("Amount", 0, TransactionTableModel::FormattedAmountRole);
+    writer.addColumn("ID", 0, TransactionTableModel::TxIDRole);
+
+    if(!writer.write())
+    {
+        QMessageBox::critical(this, tr("Error exporting"), tr("Could not write to file %1.").arg(filename),
+                              QMessageBox::Abort, QMessageBox::Abort);
+    }
+}
+