Export functionality for transaction list
[novacoin.git] / src / qt / transactionview.cpp
index 8763e10..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);
@@ -51,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");
+#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);
@@ -188,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);
+    }
+}
+