LCOV - code coverage report
Current view: top level - src/qt - csvmodelwriter.cpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 0 50 0.0 %
Date: 2020-09-26 01:30:44 Functions: 0 8 0.0 %

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

Generated by: LCOV version 1.15