Add forgotten initializer
[novacoin.git] / src / qt / csvmodelwriter.cpp
1 #include "csvmodelwriter.h"
2
3 #include <QAbstractItemModel>
4 #include <QFile>
5 #include <QTextStream>
6
7 CSVModelWriter::CSVModelWriter(const QString &filename, QObject *parent) :
8     QObject(parent),
9     filename(filename), model(0)
10 {
11 }
12
13 void CSVModelWriter::setModel(const QAbstractItemModel *model)
14 {
15     this->model = model;
16 }
17
18 void CSVModelWriter::addColumn(const QString &title, int column, int role)
19 {
20     Column col;
21     col.title = title;
22     col.column = column;
23     col.role = role;
24
25     columns.append(col);
26 }
27
28 static void writeValue(QTextStream &f, const QString &value)
29 {
30     // TODO: quoting if " or \n in string
31     f << "\"" << value << "\"";
32 }
33
34 static void writeSep(QTextStream &f)
35 {
36     f << ",";
37 }
38
39 static void writeNewline(QTextStream &f)
40 {
41     f << "\n";
42 }
43
44 bool CSVModelWriter::write()
45 {
46     QFile file(filename);
47     if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
48         return false;
49     QTextStream out(&file);
50
51     int numRows = 0;
52     if(model)
53     {
54         numRows = model->rowCount();
55     }
56
57     // Header row
58     for(int i=0; i<columns.size(); ++i)
59     {
60         if(i!=0)
61         {
62             writeSep(out);
63         }
64         writeValue(out, columns[i].title);
65     }
66     writeNewline(out);
67
68     // Data rows
69     for(int j=0; j<numRows; ++j)
70     {
71         for(int i=0; i<columns.size(); ++i)
72         {
73             if(i!=0)
74             {
75                 writeSep(out);
76             }
77             QVariant data = model->index(j, columns[i].column).data(columns[i].role);
78             writeValue(out, data.toString());
79         }
80         writeNewline(out);
81     }
82
83     file.close();
84
85     return file.error() == QFile::NoError;
86 }
87