PRCYCoin  2.0.0.7rc1
P2P Digital Currency
csvmodelwriter.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 "csvmodelwriter.h"
6 
7 #include <QAbstractItemModel>
8 #include <QFile>
9 #include <QTextStream>
10 
11 CSVModelWriter::CSVModelWriter(const QString& filename, QObject* parent) : QObject(parent),
12  filename(filename), model(0)
13 {
14 }
15 
16 void CSVModelWriter::setModel(const QAbstractItemModel* model)
17 {
18  this->model = model;
19 }
20 
21 void CSVModelWriter::addColumn(const QString& title, int column, int role)
22 {
23  Column col;
24  col.title = title;
25  col.column = column;
26  col.role = role;
27 
28  columns.append(col);
29 }
30 
31 static void writeValue(QTextStream& f, const QString& value)
32 {
33  QString escaped = value;
34  escaped.replace('"', "\"\"");
35  f << "\"" << escaped << "\"";
36 }
37 
38 static void writeSep(QTextStream& f)
39 {
40  f << ",";
41 }
42 
43 static void writeNewline(QTextStream& f)
44 {
45  f << "\n";
46 }
47 
49 {
50  QFile file(filename);
51  if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
52  return false;
53  QTextStream out(&file);
54 
55  int numRows = 0;
56  if (model) {
57  numRows = model->rowCount();
58  }
59 
60  // Header row
61  for (int i = 0; i < columns.size(); ++i) {
62  if (i != 0) {
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  for (int i = 0; i < columns.size(); ++i) {
72  if (i != 0) {
73  writeSep(out);
74  }
75  QVariant data = model->index(j, columns[i].column).data(columns[i].role);
76  writeValue(out, data.toString());
77  }
78  writeNewline(out);
79  }
80 
81  file.close();
82 
83  return file.error() == QFile::NoError;
84 }
csvmodelwriter.h
CSVModelWriter::write
bool write()
Perform export of the model to CSV.
Definition: csvmodelwriter.cpp:48
CSVModelWriter::addColumn
void addColumn(const QString &title, int column, int role=Qt::EditRole)
Definition: csvmodelwriter.cpp:21
CSVModelWriter::CSVModelWriter
CSVModelWriter(const QString &filename, QObject *parent=0)
Definition: csvmodelwriter.cpp:11
CSVModelWriter::model
const QAbstractItemModel * model
Definition: csvmodelwriter.h:35
CSVModelWriter::setModel
void setModel(const QAbstractItemModel *model)
Definition: csvmodelwriter.cpp:16
CSVModelWriter::Column::title
QString title
Definition: csvmodelwriter.h:38
CSVModelWriter::Column
Definition: csvmodelwriter.h:37
CSVModelWriter::Column::role
int role
Definition: csvmodelwriter.h:40
CSVModelWriter::columns
QList< Column > columns
Definition: csvmodelwriter.h:42
CSVModelWriter::filename
QString filename
Definition: csvmodelwriter.h:34
CSVModelWriter::Column::column
int column
Definition: csvmodelwriter.h:39