Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
csvmodelwriter.cpp
Go to the documentation of this file.
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  QString escaped = value;
31  escaped.replace('"', "\"\"");
32  f << "\"" << escaped << "\"";
33 }
34 
35 static void writeSep(QTextStream &f)
36 {
37  f << ",";
38 }
39 
40 static void writeNewline(QTextStream &f)
41 {
42  f << "\n";
43 }
44 
46 {
47  QFile file(filename);
48  if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
49  return false;
50  QTextStream out(&file);
51 
52  int numRows = 0;
53  if(model)
54  {
55  numRows = model->rowCount();
56  }
57 
58  // Header row
59  for(int i=0; i<columns.size(); ++i)
60  {
61  if(i!=0)
62  {
63  writeSep(out);
64  }
65  writeValue(out, columns[i].title);
66  }
67  writeNewline(out);
68 
69  // Data rows
70  for(int j=0; j<numRows; ++j)
71  {
72  for(int i=0; i<columns.size(); ++i)
73  {
74  if(i!=0)
75  {
76  writeSep(out);
77  }
78  QVariant data = model->index(j, columns[i].column).data(columns[i].role);
79  writeValue(out, data.toString());
80  }
81  writeNewline(out);
82  }
83 
84  file.close();
85 
86  return file.error() == QFile::NoError;
87 }
88 
void addColumn(const QString &title, int column, int role=Qt::EditRole)
std::string * value
Definition: version_set.cc:270
QList< Column > columns
const QAbstractItemModel * model
CSVModelWriter(const QString &filename, QObject *parent=0)
void setModel(const QAbstractItemModel *model)
bool write()
Perform export of the model to CSV.