git / moonbite-core / src/qt/csvmodelwriter.cpp · raw
// Copyright (c) 2011-2018 The Bitcoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#include <qt/csvmodelwriter.h>#include <QAbstractItemModel>#include <QFile>#include <QTextStream>CSVModelWriter::CSVModelWriter(const QString &_filename, QObject *parent) : QObject(parent), filename(_filename), model(nullptr){}void CSVModelWriter::setModel(const QAbstractItemModel *_model){ this->model = _model;}void CSVModelWriter::addColumn(const QString &title, int column, int role){ Column col; col.title = title; col.column = column; col.role = role; columns.append(col);}static void writeValue(QTextStream &f, const QString &value){ QString escaped = value; escaped.replace('"', "\"\""); f << "\"" << escaped << "\"";}static void writeSep(QTextStream &f){ f << ",";}static void writeNewline(QTextStream &f){ f << "\n";}bool CSVModelWriter::write(){ QFile file(filename); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) return false; QTextStream out(&file); int numRows = 0; if(model) { numRows = model->rowCount(); } // Header row for(int i=0; i<columns.size(); ++i) { if(i!=0) { writeSep(out); } writeValue(out, columns[i].title); } writeNewline(out); // Data rows for(int j=0; j<numRows; ++j) { for(int i=0; i<columns.size(); ++i) { if(i!=0) { writeSep(out); } QVariant data = model->index(j, columns[i].column).data(columns[i].role); writeValue(out, data.toString()); } writeNewline(out); } file.close(); return file.error() == QFile::NoError;}