Engauge Digitizer 2
Loading...
Searching...
No Matches
TestExport.cpp
Go to the documentation of this file.
1#include "CurveConnectAs.h"
2#include "Document.h"
6#include "ExportValuesXOrY.h"
7#include "LineStyle.h"
8#include "Logger.h"
9#include "MainWindow.h"
10#include "MainWindowModel.h"
11#include "PointStyle.h"
12#include <QImage>
13#include <qmath.h>
14#include <QtTest/QtTest>
15#include "Spline.h"
16#include "SplinePair.h"
17#include "Test/TestExport.h"
18#include "Transformation.h"
19
21
22using namespace std;
23
24const bool NO_DROP_REGRESSION = false;
25const bool NOT_USING_GNUPLOT = false;
26const bool EXPORT_ONLY= true;
29const bool NO_GNUPLOT_LOG_FILES = false;
30const bool NO_REGRESSION_IMPORT = false;
31const bool IS_RESET = true; // Eliminate issues due to unexpected config file settings
32const bool NO_EXPORT_ONLY = false;
33const bool NO_EXTRACT_IMAGE_ONLY = false;
35const bool DEBUG_FLAG = false;
38const QString STARTUP_DIG_LOWER_CASE ("/tmp/export_only.dig");
39const QString STARTUP_DIG_UPPER_CASE ("/tmp/export_only.DIG");
42const bool REGRESSION_IMPORT = true;
43
45 QObject(parent),
46 m_mainWindow (0),
47 m_document (0)
48{
49}
50
51bool TestExport::checkCommasInFunctionsForDelimiter (ExportDelimiter delimiter,
52 QLocale::Country country,
54{
55 initData (false,
56 delimiter,
57 country);
58
60 bool success = true;
62
63 try {
64 bool isLogXTheta = (m_modelCoords.coordScaleXTheta() == COORD_SCALE_LOG);
65 bool isLogYRadius = (m_modelCoords.coordScaleYRadius() == COORD_SCALE_LOG);
66 unsigned int numWritesSoFar = 0;
67
69 CurveLimits curveLimitsMin, curveLimitsMax; // Empty containers mean no limits are in effect
70 exportFile.exportAllPerLineXThetaValuesMerged (m_modelExportOverride,
71 *m_document,
72 m_modelMainWindow,
73 m_curvesIncluded,
74 m_xThetaValues,
76 m_transformation,
79 curveLimitsMin,
80 curveLimitsMax,
81 str,
83 }
84 catch (...)
85 {
86 success = false;
87 }
88
89 return (success);
90}
91
92bool TestExport::checkCommasInRelationsForDelimiter (ExportDelimiter delimiter,
93 QLocale::Country country,
95{
96 initData (false,
97 delimiter,
98 country);
99
101 bool success = true;
103
104 try {
105 bool isLogXTheta = (m_modelCoords.coordScaleXTheta() == COORD_SCALE_LOG);
106 bool isLogYRadius = (m_modelCoords.coordScaleYRadius() == COORD_SCALE_LOG);
107 unsigned int numWritesSoFar = 0;
108
110 exportFile.exportAllPerLineXThetaValuesMerged (m_modelExportOverride,
111 *m_document,
112 m_modelMainWindow,
113 m_curvesIncluded,
115 m_transformation,
118 str,
120 }
121 catch (...)
122 {
123 success = false;
124 }
125
126 return (success);
127}
128
129void TestExport::cleanupTestCase ()
130{
131}
132
133void TestExport::initData (bool isLog,
134 ExportDelimiter delimiter,
135 QLocale::Country country)
136{
137 const QString CURVE_NAME ("Curve1");
138 const int LINE_WIDTH = 2, POINT_LINE_WIDTH = 1;
140 const int RADIUS = 5;
141
143 m_document = new Document (nullImage);
144
145 m_curvesIncluded.clear ();
146 m_curvesIncluded << CURVE_NAME;
147
148 CurveStyles curveStyles (m_document->coordSystem ());
149 CurveStyle curveStyle (LineStyle (LINE_WIDTH,
153 RADIUS,
155 POINT_COLOR));
156 curveStyles.setCurveStyle (CURVE_NAME, curveStyle);
157 if (isLog) {
158 m_modelCoords.setCoordScaleXTheta (COORD_SCALE_LOG);
160 } else {
163 }
164 m_modelCoords.setCoordsType (COORDS_TYPE_CARTESIAN);
165 m_modelGeneral.setCursorSize (3);
166 m_modelGeneral.setExtraPrecision (1);
167
169 m_modelExportOverride.setDelimiter (delimiter);
170
171 m_document->setModelExport (m_modelExportOverride);
172 m_document->setModelCurveStyles (curveStyles);
173 m_document->setModelCoords (m_modelCoords);
174 m_document->setModelGeneral (m_modelGeneral);
175
176 m_modelMainWindow.setLocale (QLocale::English,
177 country);
178
179 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (845, 305), "Curve1\t0", 0);
180 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (850, 294), "Curve1\t1", 1);
181 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (862, 272), "Curve1\t2", 2);
182 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (876, 244), "Curve1\t3", 3);
183 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (887, 222), "Curve1\t4", 4);
184 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (899, 200), "Curve1\t5", 5);
185 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (910, 177), "Curve1\t6", 6);
186 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (922, 155), "Curve1\t7", 7);
187 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (933, 133), "Curve1\t8", 8);
188 m_document->addPointGraphWithSpecifiedIdentifier (CURVE_NAME, QPointF (945, 110), "Curve1\t9", 9);
189
190 m_xThetaValues.clear ();
191 m_xThetaValues << 0.0009999; // Just outside of the coordinates added to the document
192 m_xThetaValues << 0.001;
193 m_xThetaValues << 0.01;
194 m_xThetaValues << 0.1;
195 m_xThetaValues << 1;
196 m_xThetaValues << 10;
197 m_xThetaValues << 100;
198 m_xThetaValues << 1000;
199 QTransform matrixScreen ( 51, 52, 1123,
200 548, 10, 548,
201 1, 1, 1);
202 QTransform matrixGraph (qLn (0.001), qLn (0.001), qLn (1000),
203 qLn ( 1), qLn ( 100), qLn ( 1),
204 1, 1, 1);
205 m_transformation.updateTransformFromMatrices (matrixScreen,
206 matrixGraph);
207 m_transformation.setModelCoords (m_modelCoords,
208 m_modelGeneral,
209 m_modelMainWindow);
210}
211
212void TestExport::initTestCase ()
213{
214 initializeLogging ("engauge_test",
215 "engauge_test.log",
216 DEBUG_FLAG);
217
218 m_mainWindow = new MainWindow (NO_ERROR_REPORT_LOG_FILE,
223 IS_RESET,
229
230 // Values loaded in the constructor of this class are overwritten so the settings reset just
231 // performed by MainWindow will give us predictable settings (which ultimately affect the test results)
233 m_modelExportOverride = exportDefault;
234
235 m_mainWindow->show ();
236}
237
238void TestExport::testCommasInFunctionsForCommasSwitzerland ()
239{
241 "x,Curve1\n"
242 "\"0,001\",\"-1,27563\"\n"
243 "\"0,001\",\"-1,27563\"\n"
244 "\"0,01\",\"-1,26683\"\n"
245 "\"0,1\",\"-1,17881\"\n"
246 "1,\"-0,29658\"\n"
247 "10,\"-706,15184\"\n"
248 "100,\"-3997814,14355\"\n"
249 "1000,\"-4541901224,06376\"\n";
251 "x,Curve1\n"
252 "0.001,-1.27563\n"
253 "0.001,-1.27563\n"
254 "0.01,-1.26683\n"
255 "0.1,-1.17881\n"
256 "1,-0.29658\n"
257 "10,-706.15184\n"
258 "100,-3997814.14355\n"
259 "1000,-4541901224.06376\n";
260
262 bool success = checkCommasInFunctionsForDelimiter (EXPORT_DELIMITER_COMMA,
263 QLocale::Switzerland,
264 outputGot);
265 if (!success) {
266 outputGot = "";
267 }
268
271}
272
273void TestExport::testCommasInFunctionsForCommasUnitedStates ()
274{
276 "x,Curve1\n"
277 "0.001,-1.27563\n"
278 "0.001,-1.27563\n"
279 "0.01,-1.26683\n"
280 "0.1,-1.17881\n"
281 "1,-0.29658\n"
282 "10,-706.15184\n"
283 "100,-3997814.14355\n"
284 "1000,-4541901224.06376\n";
285
287 bool success = checkCommasInFunctionsForDelimiter (EXPORT_DELIMITER_COMMA,
288 QLocale::UnitedStates,
289 outputGot);
290 if (!success) {
291 outputGot = "";
292 }
293
295}
296
297void TestExport::testCommasInFunctionsForTabsSwitzerland ()
298{
300 "x\tCurve1\n"
301 "0,001\t-1,27563\n"
302 "0,001\t-1,27563\n"
303 "0,01\t-1,26683\n"
304 "0,1\t-1,17881\n"
305 "1\t-0,29658\n"
306 "10\t-706,15184\n"
307 "100\t-3997814,14355\n"
308 "1000\t-4541901224,06376\n";
310 "x\tCurve1\n"
311 "0.001\t-1.27563\n"
312 "0.001\t-1.27563\n"
313 "0.01\t-1.26683\n"
314 "0.1\t-1.17881\n"
315 "1\t-0.29658\n"
316 "10\t-706.15184\n"
317 "100\t-3997814.14355\n"
318 "1000\t-4541901224.06376\n";
319
321 bool success = checkCommasInFunctionsForDelimiter (EXPORT_DELIMITER_TAB,
322 QLocale::Switzerland,
323 outputGot);
324 if (!success) {
325 outputGot = "";
326 }
327
330}
331
332void TestExport::testCommasInFunctionsForTabsUnitedStates ()
333{
335 "x\tCurve1\n"
336 "0.001\t-1.27563\n"
337 "0.001\t-1.27563\n"
338 "0.01\t-1.26683\n"
339 "0.1\t-1.17881\n"
340 "1\t-0.29658\n"
341 "10\t-706.15184\n"
342 "100\t-3997814.14355\n"
343 "1000\t-4541901224.06376\n";
344
346 bool success = checkCommasInFunctionsForDelimiter (EXPORT_DELIMITER_TAB,
347 QLocale::UnitedStates,
348 outputGot);
349 if (!success) {
350 outputGot = "";
351 }
352
354}
355
356void TestExport::testCommasInRelationsForCommasSwitzerland ()
357{
359 "x,Curve1\n"
360 "\"3,3192\",\"2,08003\"\n"
361 "\"3,3723\",\"2,15796\"\n"
362 "\"3,432\",\"2,23368\"\n"
363 "\"3,4935\",\"2,30883\"\n"
364 "\"3,5539\",\"2,38438\"\n"
365 "\"3,6113\",\"2,46094\"\n"
366 "\"3,6687\",\"2,5375\"\n"
367 "\"3,7261\",\"2,61406\"\n"
368 "\"3,7836\",\"2,69062\"\n"
369 "\"3,841\",\"2,76718\"\n"
370 "\"3,9012\",\"2,84276\"\n"
371 "\"3,9628\",\"2,91791\"\n"
372 "\"4,0231\",\"2,99345\"\n"
373 "\"4,0785\",\"3,07067\"\n"
374 "\"4,1339\",\"3,14789\"\n"
375 "\"4,1932\",\"3,22378\"\n"
376 "\"4,2547\",\"3,29893\"\n"
377 "\"4,3156\",\"3,37426\"\n"
378 "\"4,3731\",\"3,45082\"\n"
379 "\"4,4305\",\"3,52738\"\n"
380 "\"4,4892\",\"3,60349\"\n"
381 "\"4,5486\",\"3,67938\"\n";
383 "x,Curve1\n"
384 "3.3192,2.08003\n"
385 "3.3723,2.15796\n"
386 "3.432,2.23368\n"
387 "3.4935,2.30883\n"
388 "3.5539,2.38438\n"
389 "3.6113,2.46094\n"
390 "3.6687,2.5375\n"
391 "3.7261,2.61406\n"
392 "3.7836,2.69062\n"
393 "3.841,2.76718\n"
394 "3.9012,2.84276\n"
395 "3.9628,2.91791\n"
396 "4.0231,2.99345\n"
397 "4.0785,3.07067\n"
398 "4.1339,3.14789\n"
399 "4.1932,3.22378\n"
400 "4.2547,3.29893\n"
401 "4.3156,3.37426\n"
402 "4.3731,3.45082\n"
403 "4.4305,3.52738\n"
404 "4.4892,3.60349\n"
405 "4.5486,3.67938\n";
406
408 bool success = checkCommasInRelationsForDelimiter (EXPORT_DELIMITER_COMMA,
409 QLocale::Switzerland,
410 outputGot);
411 if (!success) {
412 outputGot = "";
413 }
414
417}
418
419void TestExport::testCommasInRelationsForCommasUnitedStates ()
420{
422 "x,Curve1\n"
423 "3.3192,2.08003\n"
424 "3.3723,2.15796\n"
425 "3.432,2.23368\n"
426 "3.4935,2.30883\n"
427 "3.5539,2.38438\n"
428 "3.6113,2.46094\n"
429 "3.6687,2.5375\n"
430 "3.7261,2.61406\n"
431 "3.7836,2.69062\n"
432 "3.841,2.76718\n"
433 "3.9012,2.84276\n"
434 "3.9628,2.91791\n"
435 "4.0231,2.99345\n"
436 "4.0785,3.07067\n"
437 "4.1339,3.14789\n"
438 "4.1932,3.22378\n"
439 "4.2547,3.29893\n"
440 "4.3156,3.37426\n"
441 "4.3731,3.45082\n"
442 "4.4305,3.52738\n"
443 "4.4892,3.60349\n"
444 "4.5486,3.67938\n";
445
447 bool success = checkCommasInRelationsForDelimiter (EXPORT_DELIMITER_COMMA,
448 QLocale::UnitedStates,
449 outputGot);
450 if (!success) {
451 outputGot = "";
452 }
453
455}
456
457void TestExport::testCommasInRelationsForTabsSwitzerland ()
458{
460 "x\tCurve1\n"
461 "3,3192\t2,08003\n"
462 "3,3723\t2,15796\n"
463 "3,432\t2,23368\n"
464 "3,4935\t2,30883\n"
465 "3,5539\t2,38438\n"
466 "3,6113\t2,46094\n"
467 "3,6687\t2,5375\n"
468 "3,7261\t2,61406\n"
469 "3,7836\t2,69062\n"
470 "3,841\t2,76718\n"
471 "3,9012\t2,84276\n"
472 "3,9628\t2,91791\n"
473 "4,0231\t2,99345\n"
474 "4,0785\t3,07067\n"
475 "4,1339\t3,14789\n"
476 "4,1932\t3,22378\n"
477 "4,2547\t3,29893\n"
478 "4,3156\t3,37426\n"
479 "4,3731\t3,45082\n"
480 "4,4305\t3,52738\n"
481 "4,4892\t3,60349\n"
482 "4,5486\t3,67938\n";
484 "x\tCurve1\n"
485 "3.3192\t2.08003\n"
486 "3.3723\t2.15796\n"
487 "3.432\t2.23368\n"
488 "3.4935\t2.30883\n"
489 "3.5539\t2.38438\n"
490 "3.6113\t2.46094\n"
491 "3.6687\t2.5375\n"
492 "3.7261\t2.61406\n"
493 "3.7836\t2.69062\n"
494 "3.841\t2.76718\n"
495 "3.9012\t2.84276\n"
496 "3.9628\t2.91791\n"
497 "4.0231\t2.99345\n"
498 "4.0785\t3.07067\n"
499 "4.1339\t3.14789\n"
500 "4.1932\t3.22378\n"
501 "4.2547\t3.29893\n"
502 "4.3156\t3.37426\n"
503 "4.3731\t3.45082\n"
504 "4.4305\t3.52738\n"
505 "4.4892\t3.60349\n"
506 "4.5486\t3.67938\n";
507
509 bool success = checkCommasInRelationsForDelimiter (EXPORT_DELIMITER_TAB,
510 QLocale::Switzerland,
511 outputGot);
512 if (!success) {
513 outputGot = "";
514 }
515
518}
519
520void TestExport::testCommasInRelationsForTabsUnitedStates ()
521{
523 "x\tCurve1\n"
524 "3.3192\t2.08003\n"
525 "3.3723\t2.15796\n"
526 "3.432\t2.23368\n"
527 "3.4935\t2.30883\n"
528 "3.5539\t2.38438\n"
529 "3.6113\t2.46094\n"
530 "3.6687\t2.5375\n"
531 "3.7261\t2.61406\n"
532 "3.7836\t2.69062\n"
533 "3.841\t2.76718\n"
534 "3.9012\t2.84276\n"
535 "3.9628\t2.91791\n"
536 "4.0231\t2.99345\n"
537 "4.0785\t3.07067\n"
538 "4.1339\t3.14789\n"
539 "4.1932\t3.22378\n"
540 "4.2547\t3.29893\n"
541 "4.3156\t3.37426\n"
542 "4.3731\t3.45082\n"
543 "4.4305\t3.52738\n"
544 "4.4892\t3.60349\n"
545 "4.5486\t3.67938\n";
546
548 bool success = checkCommasInRelationsForDelimiter (EXPORT_DELIMITER_TAB,
549 QLocale::UnitedStates,
550 outputGot);
551 if (!success) {
552 outputGot = "";
553 }
554
556}
557
558void TestExport::testExportOnlyNonRegressionLowerCase ()
559{
560 m_mainWindow->m_isErrorReportRegressionTest = NO_REGRESSION_IMPORT;
561 m_mainWindow->setCurrentFile (STARTUP_DIG_LOWER_CASE);
562
563 QString outputGot = m_mainWindow->fileNameForExportOnly ();
565 outputWanted = outputWanted.replace (".dig", ".csv");
566
568}
569
570void TestExport::testExportOnlyNonRegressionUpperCase ()
571{
572 m_mainWindow->m_isErrorReportRegressionTest = NO_REGRESSION_IMPORT;
573 m_mainWindow->setCurrentFile (STARTUP_DIG_UPPER_CASE);
574
575 QString outputGot = m_mainWindow->fileNameForExportOnly ();
577 outputWanted = outputWanted.replace (".DIG", ".csv");
578
580}
581
582void TestExport::testExportOnlyRegressionLowerCase ()
583{
584 m_mainWindow->m_isErrorReportRegressionTest = REGRESSION_IMPORT;
585 m_mainWindow->m_regressionFile = STARTUP_DIG_LOWER_CASE;
586
587 QString outputGot = m_mainWindow->fileNameForExportOnly ();
589 outputWanted = outputWanted.replace (".dig", ".csv_actual_1");
590
592}
593
594void TestExport::testExportOnlyRegressionUpperCase ()
595{
596 m_mainWindow->m_isErrorReportRegressionTest = REGRESSION_IMPORT;
597 m_mainWindow->m_regressionFile = STARTUP_DIG_UPPER_CASE;
598
599 QString outputGot = m_mainWindow->fileNameForExportOnly ();
601 outputWanted = outputWanted.replace (".DIG", ".csv_actual_1");
602
604}
605
606void TestExport::testLogExtrapolationFunctionsAll ()
607{
608 initData (true,
610 QLocale::UnitedStates);
611
612 bool success = true;
615
616 try {
617 bool isLogXTheta = (m_modelCoords.coordScaleXTheta() == COORD_SCALE_LOG);
618 bool isLogYRadius = (m_modelCoords.coordScaleYRadius() == COORD_SCALE_LOG);
619 unsigned int numWritesSoFar = 0;
620
622 CurveLimits curveLimitsMin, curveLimitsMax; // Empty containers mean no limits are in effect
623 exportFile.exportAllPerLineXThetaValuesMerged (m_modelExportOverride,
624 *m_document,
625 m_modelMainWindow,
626 m_curvesIncluded,
627 m_xThetaValues,
628 " ",
629 m_transformation,
632 curveLimitsMin,
633 curveLimitsMax,
634 str,
636 }
637 catch (...)
638 {
639 success = false;
640 }
641
642 QVERIFY (success);
643}
ColorPalette
@ COLOR_PALETTE_BLACK
@ COORD_SCALE_LINEAR
Definition CoordScale.h:13
@ COORD_SCALE_LOG
Definition CoordScale.h:14
@ COORDS_TYPE_CARTESIAN
Definition CoordsType.h:13
@ CONNECT_AS_FUNCTION_SMOOTH
QHash< QString, double > CurveLimits
Definition CurveLimits.h:14
const int INNER_RADIUS_MIN
QString exportDelimiterToText(ExportDelimiter exportDelimiter, bool isGnuplotDelimiter)
ExportDelimiter
Delimiter values that may or may not be overridden by DOCUMENT_SERIALIZE_EXPORT_DELIMITER_OVERRIDE_CS...
@ EXPORT_DELIMITER_COMMA
@ EXPORT_DELIMITER_TAB
@ EXPORT_POINTS_SELECTION_FUNCTIONS_INTERPOLATE_FIRST_CURVE
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
Definition Logger.cpp:21
@ POINT_SHAPE_CIRCLE
Definition PointShape.h:13
const bool NO_EXPORT_ONLY
const QStringList NO_COMMAND_LINE
const QString NO_EXTRACT_IMAGE_EXTENSION
const QString STARTUP_DIG_LOWER_CASE("/tmp/export_only.dig")
const bool REGRESSION_IMPORT
const QString STARTUP_DIG_UPPER_CASE("/tmp/export_only.DIG")
const bool IS_RESET
const QString NO_ERROR_REPORT_LOG_FILE
const bool NO_GNUPLOT_LOG_FILES
const QString NO_REGRESSION_OPEN_FILE
const QStringList NO_LOAD_STARTUP_FILES
const bool NO_REGRESSION_IMPORT
const QStringList ONE_LOAD_STARTUP_FILE_LOWER_CASE(STARTUP_DIG_LOWER_CASE)
const QStringList ONE_LOAD_STARTUP_FILE_UPPER_CASE(STARTUP_DIG_UPPER_CASE)
const bool NOT_USING_GNUPLOT
const bool EXPORT_ONLY
const bool NO_EXTRACT_IMAGE_ONLY
const bool NO_DROP_REGRESSION
const bool DEBUG_FLAG
Container for LineStyle and PointStyle for one Curve.
Definition CurveStyle.h:19
Model for DlgSettingsCurveProperties and CmdSettingsCurveProperties.
Definition CurveStyles.h:23
CoordScale coordScaleYRadius() const
Get method for linear/log scale on y/radius.
CoordScale coordScaleXTheta() const
Get method for linear/log scale on x/theta.
void setCoordsType(CoordsType coordsType)
Set method for coordinates type.
void setCoordScaleXTheta(CoordScale coordScale)
Set method for linear/log scale on x/theta.
void setCoordScaleYRadius(CoordScale coordScale)
Set method for linear/log scale on y/radius.
Model for DlgSettingsExportFormat and CmdSettingsExportFormat.
void setDelimiter(ExportDelimiter exportDelimiter)
Set method for delimiter.
void setPointsSelectionFunctions(ExportPointsSelectionFunctions exportPointsSelectionFunctions)
Set method for point selection for functions.
void setCursorSize(int cursorSize)
Set method for effective cursor size.
void setExtraPrecision(int extraPrecision)
Set method for extra digits of precision.
Storage of one imported image and the data attached to that image.
Definition Document.h:42
void addPointGraphWithSpecifiedIdentifier(const QString &curveName, const QPointF &posScreen, const QString &identifier, double ordinal)
Add a single graph point with the specified point identifer. Note that PointStyle is not applied to t...
Definition Document.cpp:208
void setModelCurveStyles(const CurveStyles &modelCurveStyles)
Set method for CurveStyles.
Definition Document.cpp:983
const CoordSystem & coordSystem() const
Currently active CoordSystem.
Definition Document.cpp:300
void setModelCoords(const DocumentModelCoords &modelCoords)
Set method for DocumentModelCoords.
Definition Document.cpp:976
void setModelGeneral(const DocumentModelGeneral &modelGeneral)
Set method for DocumentModelGeneral.
void setModelExport(const DocumentModelExportFormat &modelExport)
Set method for DocumentModelExportFormat.
Strategy class for exporting to a file. This strategy is external to the Document class so that class...
Strategy class for exporting to a file. This strategy is external to the Document class so that class...
Details for a specific Line.
Definition LineStyle.h:20
void setLocale(QLocale::Language language, QLocale::Country country)
Set method for locale given attributes.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:92
Details for a specific Point.
Definition PointStyle.h:21
Unit test of Export classes.
Definition TestExport.h:17
TestExport(QObject *parent=0)
Single constructor.