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 "CmdMediator.h"
8 #include "DocumentModelExportFormat.h"
9 #include "DocumentSerialize.h"
10 #include "Logger.h"
11 #include  <QObject>
12 #include <QSettings>
13 #include <QTextStream>
14 #include <QXmlStreamWriter>
15 #include "Settings.h"
16 #include "Xml.h"
17 
18 const QStringList DEFAULT_CURVE_NAMES_NOT_EXPORTED;
19 const double DEFAULT_POINTS_INTERVAL_FUNCTIONS = 10; // Consistent with DEFAULT_POINTS_INTERVAL_UNITS_FUNCTIONS
20 const double DEFAULT_POINTS_INTERVAL_RELATIONS = 10; // Consistent with DEFAULT_POINTS_INTERVAL_UNITS_RELATIONS
21 const QString DEFAULT_X_LABEL ("x");
22 const ExportPointsIntervalUnits DEFAULT_POINTS_INTERVAL_UNITS_FUNCTIONS = EXPORT_POINTS_INTERVAL_UNITS_SCREEN; // Consistent with DEFAULT_POINTS_INTERVAL_FUNCTIONS
23 const ExportPointsIntervalUnits DEFAULT_POINTS_INTERVAL_UNITS_RELATIONS = EXPORT_POINTS_INTERVAL_UNITS_SCREEN; // Consistent with DEFAULT_POINTS_INTERVAL_RELATIONS
24 const bool DEFAULT_EXPORT_DELIMITER_OVERRIDE = false; // Target beginner users who expect simplest behavior. Issue #169
25 const bool DEFAULT_EXTRAPOLATE = true; // Traditional behavior before version 11
26 
DocumentModelExportFormat()27 DocumentModelExportFormat::DocumentModelExportFormat()
28 {
29   QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
30   settings.beginGroup (SETTINGS_GROUP_EXPORT);
31 
32   // Sync these settings with DlgSettingsExportFormat::slotLoadDefault()
33   // and DlgSettingsExportFormat::slotSaveDefault()
34   m_curveNamesNotExported = settings.value (SETTINGS_EXPORT_CURVE_NAMES_NOT_EXPORTED,
35                                             QVariant (DEFAULT_CURVE_NAMES_NOT_EXPORTED)).toStringList();
36   m_delimiter = static_cast<ExportDelimiter> (settings.value (SETTINGS_EXPORT_DELIMITER,
37                                                               QVariant (EXPORT_DELIMITER_COMMA)).toInt());
38   m_extrapolateOutsideEndpoints = settings.value (SETTINGS_EXPORT_EXTRAPOLATE_OUTSIDE_ENDPOINTS,
39                                                   QVariant (DEFAULT_EXTRAPOLATE)).toBool();
40   m_overrideCsvTsv = settings.value (SETTINGS_EXPORT_DELIMITER_OVERRIDE_CSV_TSV,
41                                      QVariant (DEFAULT_EXPORT_DELIMITER_OVERRIDE)).toBool();
42   m_header = static_cast<ExportHeader> (settings.value (SETTINGS_EXPORT_HEADER,
43                                                         QVariant (EXPORT_HEADER_SIMPLE)).toInt());
44   m_layoutFunctions = static_cast<ExportLayoutFunctions> (settings.value (SETTINGS_EXPORT_LAYOUT_FUNCTIONS,
45                                                                           QVariant (EXPORT_LAYOUT_ALL_PER_LINE)).toInt());
46   m_pointsIntervalFunctions = settings.value (SETTINGS_EXPORT_POINTS_INTERVAL_FUNCTIONS,
47                                               QVariant (DEFAULT_POINTS_INTERVAL_FUNCTIONS)).toDouble();
48   m_pointsIntervalRelations = settings.value (SETTINGS_EXPORT_POINTS_INTERVAL_RELATIONS,
49                                               QVariant (DEFAULT_POINTS_INTERVAL_RELATIONS)).toDouble();
50   m_pointsIntervalUnitsFunctions = static_cast<ExportPointsIntervalUnits> (settings.value (SETTINGS_EXPORT_POINTS_INTERVAL_UNITS_FUNCTIONS,
51                                                                                            QVariant (DEFAULT_POINTS_INTERVAL_UNITS_FUNCTIONS)).toInt());
52   m_pointsIntervalUnitsRelations = static_cast<ExportPointsIntervalUnits> (settings.value (SETTINGS_EXPORT_POINTS_INTERVAL_UNITS_RELATIONS,
53                                                                                            QVariant (DEFAULT_POINTS_INTERVAL_UNITS_RELATIONS)).toInt());
54   m_pointsSelectionFunctions = static_cast<ExportPointsSelectionFunctions> (settings.value (SETTINGS_EXPORT_POINTS_SELECTION_FUNCTIONS,
55                                                                                             QVariant (EXPORT_POINTS_SELECTION_FUNCTIONS_INTERPOLATE_ALL_CURVES)).toInt());
56   m_pointsSelectionRelations = static_cast<ExportPointsSelectionRelations> (settings.value (SETTINGS_EXPORT_POINTS_SELECTION_RELATIONS,
57                                                                                             QVariant (EXPORT_POINTS_SELECTION_RELATIONS_INTERPOLATE)).toInt());
58   m_xLabel = settings.value (SETTINGS_EXPORT_X_LABEL,
59                              QVariant (DEFAULT_X_LABEL)).toString();
60 }
61 
DocumentModelExportFormat(const Document & document)62 DocumentModelExportFormat::DocumentModelExportFormat (const Document &document) :
63   m_curveNamesNotExported (document.modelExport().curveNamesNotExported()),
64   m_pointsSelectionFunctions (document.modelExport().pointsSelectionFunctions()),
65   m_pointsIntervalFunctions (document.modelExport().pointsIntervalFunctions()),
66   m_pointsIntervalUnitsFunctions (document.modelExport().pointsIntervalUnitsFunctions()),
67   m_pointsSelectionRelations (document.modelExport().pointsSelectionRelations()),
68   m_pointsIntervalRelations (document.modelExport().pointsIntervalRelations()),
69   m_pointsIntervalUnitsRelations (document.modelExport().pointsIntervalUnitsRelations()),
70   m_layoutFunctions (document.modelExport().layoutFunctions()),
71   m_delimiter (document.modelExport().delimiter()),
72   m_extrapolateOutsideEndpoints (document.modelExport().extrapolateOutsideEndpoints()),
73   m_overrideCsvTsv (document.modelExport().overrideCsvTsv()),
74   m_header (document.modelExport().header()),
75   m_xLabel (document.modelExport().xLabel())
76 {
77 }
78 
DocumentModelExportFormat(const DocumentModelExportFormat & other)79 DocumentModelExportFormat::DocumentModelExportFormat(const DocumentModelExportFormat &other) :
80   m_curveNamesNotExported (other.curveNamesNotExported()),
81   m_pointsSelectionFunctions (other.pointsSelectionFunctions()),
82   m_pointsIntervalFunctions (other.pointsIntervalFunctions()),
83   m_pointsIntervalUnitsFunctions (other.pointsIntervalUnitsFunctions()),
84   m_pointsSelectionRelations (other.pointsSelectionRelations()),
85   m_pointsIntervalRelations (other.pointsIntervalRelations()),
86   m_pointsIntervalUnitsRelations (other.pointsIntervalUnitsRelations()),
87   m_layoutFunctions (other.layoutFunctions()),
88   m_delimiter (other.delimiter()),
89   m_extrapolateOutsideEndpoints (other.extrapolateOutsideEndpoints()),
90   m_overrideCsvTsv (other.overrideCsvTsv()),
91   m_header (other.header()),
92   m_xLabel (other.xLabel ())
93 {
94 }
95 
operator =(const DocumentModelExportFormat & other)96 DocumentModelExportFormat &DocumentModelExportFormat::operator=(const DocumentModelExportFormat &other)
97 {
98   m_curveNamesNotExported = other.curveNamesNotExported();
99   m_pointsSelectionFunctions = other.pointsSelectionFunctions();
100   m_pointsIntervalFunctions = other.pointsIntervalFunctions();
101   m_pointsIntervalUnitsFunctions = other.pointsIntervalUnitsFunctions();
102   m_pointsSelectionRelations = other.pointsSelectionRelations();
103   m_pointsIntervalRelations = other.pointsIntervalRelations();
104   m_pointsIntervalUnitsRelations = other.pointsIntervalUnitsRelations();
105   m_layoutFunctions = other.layoutFunctions();
106   m_delimiter = other.delimiter();
107   m_extrapolateOutsideEndpoints = other.extrapolateOutsideEndpoints();
108   m_overrideCsvTsv = other.overrideCsvTsv();
109   m_header = other.header();
110   m_xLabel = other.xLabel();
111 
112   return *this;
113 }
114 
curveNamesNotExported() const115 QStringList DocumentModelExportFormat::curveNamesNotExported() const
116 {
117   return m_curveNamesNotExported;
118 }
119 
delimiter() const120 ExportDelimiter DocumentModelExportFormat::delimiter() const
121 {
122   return m_delimiter;
123 }
124 
extrapolateOutsideEndpoints() const125 bool DocumentModelExportFormat::extrapolateOutsideEndpoints() const
126 {
127   return m_extrapolateOutsideEndpoints;
128 }
129 
header() const130 ExportHeader DocumentModelExportFormat::header() const
131 {
132   return m_header;
133 }
134 
layoutFunctions() const135 ExportLayoutFunctions DocumentModelExportFormat::layoutFunctions() const
136 {
137   return m_layoutFunctions;
138 }
139 
loadXml(QXmlStreamReader & reader)140 void DocumentModelExportFormat::loadXml(QXmlStreamReader &reader)
141 {
142   LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelExportFormat::loadXml";
143 
144   bool success = true;
145 
146   QXmlStreamAttributes attributes = reader.attributes();
147 
148   // DOCUMENT_SERIALIZE_EXPORT_EXTRAPOLATE_OUTSIDE_ENDPOINTS is specific to versions 11 and newer
149   if (attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_FUNCTIONS) &&
150       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_FUNCTIONS) &&
151       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_FUNCTIONS) &&
152       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_RELATIONS) &&
153       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_RELATIONS) &&
154       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_RELATIONS) &&
155       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_LAYOUT_FUNCTIONS) &&
156       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_DELIMITER) &&
157       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_HEADER) &&
158       attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_X_LABEL)) {
159 
160     setPointsSelectionFunctions (static_cast<ExportPointsSelectionFunctions> (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_FUNCTIONS).toInt()));
161     setPointsIntervalFunctions (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_FUNCTIONS).toDouble());
162     setPointsIntervalUnitsFunctions (static_cast<ExportPointsIntervalUnits> (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_FUNCTIONS).toInt()));
163     setPointsSelectionRelations (static_cast<ExportPointsSelectionRelations> (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_RELATIONS).toInt()));
164     setPointsIntervalRelations (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_RELATIONS).toDouble());
165     setPointsIntervalUnitsRelations (static_cast<ExportPointsIntervalUnits> (attributes.value(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_RELATIONS).toInt()));
166     setLayoutFunctions (static_cast<ExportLayoutFunctions> (attributes.value(DOCUMENT_SERIALIZE_EXPORT_LAYOUT_FUNCTIONS).toInt()));
167     setDelimiter (static_cast<ExportDelimiter> (attributes.value (DOCUMENT_SERIALIZE_EXPORT_DELIMITER).toInt()));
168     if (attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_DELIMITER_OVERRIDE_CSV_TSV)) {
169 
170       // Boolean value
171       QString stringOverrideCsvTsv = attributes.value (DOCUMENT_SERIALIZE_EXPORT_DELIMITER_OVERRIDE_CSV_TSV).toString();
172 
173       setOverrideCsvTsv(stringOverrideCsvTsv == DOCUMENT_SERIALIZE_BOOL_TRUE);
174     }
175     if (attributes.hasAttribute(DOCUMENT_SERIALIZE_EXPORT_EXTRAPOLATE_OUTSIDE_ENDPOINTS)) {
176 
177       // Boolean value
178       QString stringExtrapolate = attributes.value (DOCUMENT_SERIALIZE_EXPORT_EXTRAPOLATE_OUTSIDE_ENDPOINTS).toString();
179 
180       setExtrapolateOutsideEndpoints (stringExtrapolate == DOCUMENT_SERIALIZE_BOOL_TRUE);
181     }
182 
183     setHeader (static_cast<ExportHeader> (attributes.value(DOCUMENT_SERIALIZE_EXPORT_HEADER).toInt()));
184     setXLabel (attributes.value(DOCUMENT_SERIALIZE_EXPORT_X_LABEL).toString());
185 
186     // Read element containing excluded curve names
187     while ((loadNextFromReader (reader) != QXmlStreamReader::StartElement) ||
188            (reader.name() != DOCUMENT_SERIALIZE_EXPORT_CURVE_NAMES_NOT_EXPORTED)) {
189 
190       if (reader.atEnd()) {
191         success = false;
192         break;
193       }
194     }
195 
196     if (success) {
197 
198       QStringList curveNamesNotExported;
199 
200       QXmlStreamReader::TokenType tokenType = loadNextFromReader(reader);
201       while (tokenType == QXmlStreamReader::StartElement) {
202 
203         if (reader.name() == DOCUMENT_SERIALIZE_EXPORT_CURVE_NAME_NOT_EXPORTED) {
204           curveNamesNotExported << reader.text().toString();
205         }
206         tokenType = loadNextFromReader(reader);
207       }
208 
209       // Save curve names
210       setCurveNamesNotExported(curveNamesNotExported);
211 
212       // Read until end of this subtree
213       while ((reader.tokenType() != QXmlStreamReader::EndElement) ||
214       (reader.name() != DOCUMENT_SERIALIZE_EXPORT)){
215         loadNextFromReader(reader);
216         if (reader.atEnd()) {
217           success = false;
218           break;
219         }
220       }
221     }
222   }
223 
224   if (!success) {
225     reader.raiseError (QObject::tr ("Cannot read export data"));
226   }
227 }
228 
overrideCsvTsv() const229 bool DocumentModelExportFormat::overrideCsvTsv() const
230 {
231   return m_overrideCsvTsv;
232 }
233 
pointsIntervalFunctions() const234 double DocumentModelExportFormat::pointsIntervalFunctions() const
235 {
236   return m_pointsIntervalFunctions;
237 }
238 
pointsIntervalRelations() const239 double DocumentModelExportFormat::pointsIntervalRelations() const
240 {
241   return m_pointsIntervalRelations;
242 }
243 
pointsIntervalUnitsFunctions() const244 ExportPointsIntervalUnits DocumentModelExportFormat::pointsIntervalUnitsFunctions() const
245 {
246   return m_pointsIntervalUnitsFunctions;
247 }
248 
pointsIntervalUnitsRelations() const249 ExportPointsIntervalUnits DocumentModelExportFormat::pointsIntervalUnitsRelations() const
250 {
251   return m_pointsIntervalUnitsRelations;
252 }
253 
pointsSelectionFunctions() const254 ExportPointsSelectionFunctions DocumentModelExportFormat::pointsSelectionFunctions() const
255 {
256   return m_pointsSelectionFunctions;
257 }
258 
pointsSelectionRelations() const259 ExportPointsSelectionRelations DocumentModelExportFormat::pointsSelectionRelations() const
260 {
261   return m_pointsSelectionRelations;
262 }
263 
printStream(QString indentation,QTextStream & str) const264 void DocumentModelExportFormat::printStream(QString indentation,
265                                             QTextStream &str) const
266 {
267   str << indentation << "DocumentModelExportFormat\n";
268 
269   indentation += INDENTATION_DELTA;
270 
271   str << indentation << "curveNamesNotExported=";
272   QStringList::const_iterator itr;
273   for (itr = m_curveNamesNotExported.begin (); itr != m_curveNamesNotExported.end(); itr++) {
274     QString curveName = *itr;
275     str << indentation << curveName << " ";
276   }
277   str << "\n";
278 
279   str << indentation << "exportPointsSelectionFunctions="
280       << exportPointsSelectionFunctionsToString (m_pointsSelectionFunctions) << "\n";
281   str << indentation << "pointsIntervalFunctions=" << m_pointsIntervalFunctions << "\n";
282   str << indentation << "pointsIntervalUnitsFunctions="
283       << exportPointsIntervalUnitsToString (m_pointsIntervalUnitsFunctions) << "\n";
284   str << indentation << "exportPointsSelectionRelations="
285       << exportPointsSelectionRelationsToString (m_pointsSelectionRelations) << "\n";
286   str << indentation << "pointsIntervalRelations=" << m_pointsIntervalRelations << "\n";
287   str << indentation << "pointsIntervalUnitsRelations="
288       << exportPointsIntervalUnitsToString (m_pointsIntervalUnitsRelations) << "\n";
289   str << indentation << "exportLayoutFunctions=" << exportLayoutFunctionsToString (m_layoutFunctions) << "\n";
290   str << indentation << "exportDelimiter=" << exportDelimiterToString (m_delimiter) << "\n";
291   str << indentation << "exportExtrapolateOutsideEndpoints=" << (m_extrapolateOutsideEndpoints ? "yes" : "no") << "\n";
292   str << indentation << "overrideCsvTsv=" << (m_overrideCsvTsv ? "true" : "false") << "\n";
293   str << indentation << "exportHeader=" << exportHeaderToString (m_header) << "\n";
294   str << indentation << "xLabel=" << m_xLabel << "\n";
295 }
296 
saveXml(QXmlStreamWriter & writer) const297 void DocumentModelExportFormat::saveXml(QXmlStreamWriter &writer) const
298 {
299   LOG4CPP_INFO_S ((*mainCat)) << "DocumentModelExportFormat::saveXml";
300 
301   writer.writeStartElement(DOCUMENT_SERIALIZE_EXPORT);
302   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_FUNCTIONS, QString::number (m_pointsSelectionFunctions));
303   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_FUNCTIONS_STRING, exportPointsSelectionFunctionsToString (m_pointsSelectionFunctions));
304   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_FUNCTIONS, QString::number (m_pointsIntervalFunctions));
305   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_FUNCTIONS, QString::number (m_pointsIntervalUnitsFunctions));
306   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_RELATIONS, QString::number (m_pointsSelectionRelations));
307   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_SELECTION_RELATIONS_STRING, exportPointsSelectionRelationsToString (m_pointsSelectionRelations));
308   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_UNITS_RELATIONS, QString::number (m_pointsIntervalUnitsRelations));
309   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_POINTS_INTERVAL_RELATIONS, QString::number (m_pointsIntervalRelations));
310   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_LAYOUT_FUNCTIONS, QString::number (m_layoutFunctions));
311   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_LAYOUT_FUNCTIONS_STRING, exportLayoutFunctionsToString (m_layoutFunctions));
312   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_DELIMITER, QString::number (m_delimiter));
313   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_DELIMITER_OVERRIDE_CSV_TSV, m_overrideCsvTsv ?
314                         DOCUMENT_SERIALIZE_BOOL_TRUE :
315                         DOCUMENT_SERIALIZE_BOOL_FALSE);
316   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_DELIMITER_STRING, exportDelimiterToString (m_delimiter));
317   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_EXTRAPOLATE_OUTSIDE_ENDPOINTS, m_extrapolateOutsideEndpoints ?
318                         DOCUMENT_SERIALIZE_BOOL_TRUE :
319                         DOCUMENT_SERIALIZE_BOOL_FALSE);
320   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_HEADER, QString::number (m_header));
321   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_HEADER_STRING, exportHeaderToString (m_header));
322   writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_X_LABEL, m_xLabel);
323 
324   // Loop through curve names that are not to be exported
325   writer.writeStartElement(DOCUMENT_SERIALIZE_EXPORT_CURVE_NAMES_NOT_EXPORTED);
326   QStringList::const_iterator itr;
327   for (itr = m_curveNamesNotExported.begin (); itr != m_curveNamesNotExported.end (); itr++) {
328     QString curveNameNotExported = *itr;
329     writer.writeStartElement(DOCUMENT_SERIALIZE_EXPORT_CURVE_NAME_NOT_EXPORTED);
330     writer.writeAttribute(DOCUMENT_SERIALIZE_EXPORT_CURVE_NAME_NOT_EXPORTED_NAME, curveNameNotExported);
331     writer.writeEndElement();
332   }
333   writer.writeEndElement();
334 
335   writer.writeEndElement();
336 }
337 
setCurveNamesNotExported(const QStringList & curveNamesNotExported)338 void DocumentModelExportFormat::setCurveNamesNotExported(const QStringList &curveNamesNotExported)
339 {
340   m_curveNamesNotExported = curveNamesNotExported;
341 }
342 
setDelimiter(ExportDelimiter delimiter)343 void DocumentModelExportFormat::setDelimiter(ExportDelimiter delimiter)
344 {
345   m_delimiter = delimiter;
346 }
347 
setExtrapolateOutsideEndpoints(bool extrapolateOutsideEndpoints)348 void DocumentModelExportFormat::setExtrapolateOutsideEndpoints(bool extrapolateOutsideEndpoints)
349 {
350   m_extrapolateOutsideEndpoints = extrapolateOutsideEndpoints;
351 }
352 
setHeader(ExportHeader header)353 void DocumentModelExportFormat::setHeader(ExportHeader header)
354 {
355   m_header = header;
356 }
357 
setLayoutFunctions(ExportLayoutFunctions layoutFunctions)358 void DocumentModelExportFormat::setLayoutFunctions(ExportLayoutFunctions layoutFunctions)
359 {
360   m_layoutFunctions = layoutFunctions;
361 }
362 
setOverrideCsvTsv(bool overrideCsvTsv)363 void DocumentModelExportFormat::setOverrideCsvTsv(bool overrideCsvTsv)
364 {
365   m_overrideCsvTsv = overrideCsvTsv;
366 }
367 
setPointsIntervalFunctions(double pointsIntervalFunctions)368 void DocumentModelExportFormat::setPointsIntervalFunctions(double pointsIntervalFunctions)
369 {
370   m_pointsIntervalFunctions = pointsIntervalFunctions;
371 }
372 
setPointsIntervalRelations(double pointsIntervalRelations)373 void DocumentModelExportFormat::setPointsIntervalRelations(double pointsIntervalRelations)
374 {
375   m_pointsIntervalRelations = pointsIntervalRelations;
376 }
377 
setPointsIntervalUnitsFunctions(ExportPointsIntervalUnits pointsIntervalUnitsFunctions)378 void DocumentModelExportFormat::setPointsIntervalUnitsFunctions(ExportPointsIntervalUnits pointsIntervalUnitsFunctions)
379 {
380   m_pointsIntervalUnitsFunctions = pointsIntervalUnitsFunctions;
381 }
382 
setPointsIntervalUnitsRelations(ExportPointsIntervalUnits pointsIntervalUnitsRelations)383 void DocumentModelExportFormat::setPointsIntervalUnitsRelations(ExportPointsIntervalUnits pointsIntervalUnitsRelations)
384 {
385   m_pointsIntervalUnitsRelations = pointsIntervalUnitsRelations;
386 }
387 
setPointsSelectionFunctions(ExportPointsSelectionFunctions pointsSelectionFunctions)388 void DocumentModelExportFormat::setPointsSelectionFunctions(ExportPointsSelectionFunctions pointsSelectionFunctions)
389 {
390   m_pointsSelectionFunctions = pointsSelectionFunctions;
391 }
392 
setPointsSelectionRelations(ExportPointsSelectionRelations pointsSelectionRelations)393 void DocumentModelExportFormat::setPointsSelectionRelations(ExportPointsSelectionRelations pointsSelectionRelations)
394 {
395   m_pointsSelectionRelations = pointsSelectionRelations;
396 }
397 
setXLabel(const QString & xLabel)398 void DocumentModelExportFormat::setXLabel (const QString &xLabel)
399 {
400   m_xLabel = xLabel;
401 }
402 
xLabel() const403 QString DocumentModelExportFormat::xLabel () const
404 {
405   return m_xLabel;
406 }
407