Engauge Digitizer  2
ExportFileAbstractBase.cpp
1 /******************************************************************************************************
2  * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3  * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4  * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5  ******************************************************************************************************/
6 
7 #include "CurveConnectAs.h"
8 #include "Document.h"
9 #include "EngaugeAssert.h"
10 #include "ExportFileAbstractBase.h"
11 #include "Logger.h"
12 #include <qdebug.h>
13 #include <qmath.h>
14 #include <QTextStream>
15 #include "Transformation.h"
16 
17 using namespace std;
18 
20 {
21 }
22 
24  const Document &document,
25  const QStringList &curvesGraphsNames,
26  CurveConnectAs curveConnectAs1,
27  CurveConnectAs curveConnectAs2) const
28 {
29  LOG4CPP_INFO_S ((*mainCat)) << "ExportFileAbstractBase::curvesToInclude";
30 
31  QStringList curvesToInclude;
32 
33  // Build a list of curves to include by subtracting the excluded curves from the the complete list.
34  // Special case is to use only first included curve if appropriate flag is set
35  QStringList::const_iterator itr;
36  for (itr = curvesGraphsNames.begin(); itr != curvesGraphsNames.end(); itr++) {
37 
38  QString curvesGraphName = *itr;
39 
40  if (!modelExportOverride.curveNamesNotExported().contains (curvesGraphName)) {
41 
42  const Curve *curve = document.curveForCurveName(curvesGraphName);
43  ENGAUGE_CHECK_PTR (curve);
44 
45  // Not excluded which means it gets included, but only if it is a function
46  if (curve->curveStyle().lineStyle().curveConnectAs() == curveConnectAs1 ||
47  curve->curveStyle().lineStyle().curveConnectAs() == curveConnectAs2) {
48 
49  curvesToInclude.push_back (curvesGraphName);
50  }
51  }
52  }
53 
54  return curvesToInclude;
55 }
56 
57 void ExportFileAbstractBase::destroy2DArray (QVector<QVector<QString*> > &array) const
58 {
59  LOG4CPP_INFO_S ((*mainCat)) << "ExportFileAbstractBase::destroy2DArray";
60 
61  int colCount = array.count();
62  int rowCount = array [0].count();
63  for (int row = 0; row < rowCount; row++) {
64  for (int col = 0; col < colCount; col++) {
65  delete array [col] [row];
66  }
67  }
68 }
69 
71 {
72  return QString ("# ");
73 }
74 
76  ExportHeader exportHeader,
77  QTextStream &str) const
78 {
79  // Insert line(s) between previous curve and this curve
80  if (!isFirst) {
81  if (exportHeader == EXPORT_HEADER_GNUPLOT) {
82  str << "\n\n"; // Gnuplot requires two blank lines between curves
83  } else {
84  str << "\n"; // Single blank line
85  }
86  }
87 }
88 
90  const QString &valueString) const
91 {
92  QString newValueString = valueString;
93 
94  if ((modelExportOverride.delimiter () == EXPORT_DELIMITER_COMMA) &&
95  (valueString.indexOf (",") >= 0)) {
96 
97  // Eliminate ambiguities according to RFC 4180
98  newValueString = QString ("\"%1\"").arg (valueString);
99  }
100 
101  return newValueString;
102 }
QStringList curveNamesNotExported() const
Get method for curve names not exported.
CurveConnectAs curveConnectAs() const
Get method for connect type.
Definition: LineStyle.cpp:63
void destroy2DArray(QVector< QVector< QString *> > &array) const
Deallocate memory for array.
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
const Curve * curveForCurveName(const QString &curveName) const
See CurvesGraphs::curveForCurveNames, although this also works for AXIS_CURVE_NAME.
Definition: Document.cpp:332
QString wrapInDoubleQuotesIfNeeded(const DocumentModelExportFormat &modelExportOverride, const QString &valueString) const
RFC 4180 says if values are delimited by a comma AND a value has commas in it (for locale like Englis...
QStringList curvesToInclude(const DocumentModelExportFormat &modelExportOverride, const Document &document, const QStringList &curvesGraphsNames, CurveConnectAs curveConnectAs1, CurveConnectAs curveConnectAs2) const
Identify curves to include in export. The specified DocumentModelExportFormat overrides same data in ...
LineStyle lineStyle() const
Get method for LineStyle.
Definition: CurveStyle.cpp:26
QString gnuplotComment() const
Gnuplot comment delimiter.
ExportDelimiter delimiter() const
Get method for delimiter.
Storage of one imported image and the data attached to that image.
Definition: Document.h:41
Container for one set of digitized Points.
Definition: Curve.h:33
void insertLineSeparator(bool isFirst, ExportHeader exportHeader, QTextStream &str) const
Insert line(s) between successive sets of curves.
CurveStyle curveStyle() const
Return the curve style.
Definition: Curve.cpp:148
ExportFileAbstractBase()
Single constructor.