PIVX Core  5.6.99
P2P Digital Currency
csvmodelwriter.cpp
Go to the documentation of this file.
1 // Copyright (c) 2011-2013 The Bitcoin developers
2 // Copyright (c) 2017-2019 The PIVX Core developers
3 // Distributed under the MIT/X11 software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #include "csvmodelwriter.h"
7 
8 #include <QAbstractItemModel>
9 #include <QFile>
10 #include <QTextStream>
11 
12 CSVModelWriter::CSVModelWriter(const QString& filename, QObject* parent) : QObject(parent),
13  filename(filename), model(0)
14 {
15 }
16 
17 void CSVModelWriter::setModel(const QAbstractItemModel* model)
18 {
19  this->model = model;
20 }
21 
22 void CSVModelWriter::addColumn(const QString& title, int column, int role)
23 {
24  Column col;
25  col.title = title;
26  col.column = column;
27  col.role = role;
28 
29  columns.append(col);
30 }
31 
32 static void writeValue(QTextStream& f, const QString& value)
33 {
34  QString escaped = value;
35  escaped.replace('"', "\"\"");
36  f << "\"" << escaped << "\"";
37 }
38 
39 static void writeSep(QTextStream& f)
40 {
41  f << ",";
42 }
43 
44 static void writeNewline(QTextStream& f)
45 {
46  f << "\n";
47 }
48 
50 {
51  QFile file(filename);
52  if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
53  return false;
54  QTextStream out(&file);
55 
56  int numRows = 0;
57  if (model) {
58  numRows = model->rowCount();
59  }
60 
61  // Header row
62  for (int i = 0; i < columns.size(); ++i) {
63  if (i != 0) {
64  writeSep(out);
65  }
66  writeValue(out, columns[i].title);
67  }
68  writeNewline(out);
69 
70  // Data rows
71  for (int j = 0; j < numRows; ++j) {
72  for (int i = 0; i < columns.size(); ++i) {
73  if (i != 0) {
74  writeSep(out);
75  }
76  QVariant data = model->index(j, columns[i].column).data(columns[i].role);
77  writeValue(out, data.toString());
78  }
79  writeNewline(out);
80  }
81 
82  file.close();
83 
84  return file.error() == QFile::NoError;
85 }
QList< Column > columns
CSVModelWriter(const QString &filename, QObject *parent=0)
bool write()
Perform export of the model to CSV.
void setModel(const QAbstractItemModel *model)
void addColumn(const QString &title, int column, int role=Qt::EditRole)
const QAbstractItemModel * model