12 #include <QApplication>
13 #include <QCoreApplication>
17 #include <QMessageBox>
19 #include <QProcessEnvironment>
20 #include <QStyleFactory>
39 const QString
DASH (
"-");
59 QString &pathAndFile);
63 bool &isDropRegression,
65 QString &errorReportFile,
66 QString &fileCmdScriptFile,
67 bool &isErrorReportRegressionTest,
70 bool &isExtractImageOnly,
71 QString &extractImageOnlyExtension,
73 QStringList &loadStartupFiles,
74 QStringList &commandLineWithoutLoadStartupFiles);
76 const QString &dashForRepeatingFlag,
77 const QString &errorReportFile,
78 const QString &fileCmdScriptFile,
79 const QStringList &loadStartupFiles);
82 const QString &msgUnadorned);
91 QFileInfo check (file);
92 return check.exists() && check.isFile();
99 #if !defined(OSX_RELEASE) && !defined(WIN_RELEASE) && !defined(APPIMAGE_RELEASE)
100 QProcessEnvironment env;
116 QString &pathAndFile)
118 bool success =
false;
121 pathAndFile = QString (
"%1%2%3")
123 .arg (QDir::separator())
125 QFile file (pathAndFile);
126 if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
136 int main(
int argc,
char *argv[])
138 qRegisterMetaType<ColorFilterMode> (
"ColorFilterMode");
139 qRegisterMetaType<FittingCurveCoefficients> (
"FilterCurveCoefficients");
140 qRegisterMetaType<ZoomFactor> (
"ZoomFactor");
142 QApplication app(argc, argv);
148 bool isDebug, isDropRegression, isReset, isGnuplot, isErrorReportRegressionTest, isExportOnly, isExtractImageOnly, isUpgrade;
149 QString errorReportFile, extractImageOnlyExtension, fileCmdScriptFile;
150 QStringList loadStartupFiles, commandLineWithoutLoadStartupFiles;
158 isErrorReportRegressionTest,
162 extractImageOnlyExtension,
165 commandLineWithoutLoadStartupFiles);
171 LOG4CPP_INFO_S ((*
mainCat)) <<
"main args=" << QApplication::arguments().join (
" ").toLatin1().data();
182 isErrorReportRegressionTest,
187 extractImageOnlyExtension,
189 commandLineWithoutLoadStartupFiles);
202 bool &isDropRegression,
204 QString &errorReportFile,
205 QString &fileCmdScriptFile,
206 bool &isErrorReportRegressionTest,
209 bool &isExtractImageOnly,
210 QString &extractImageOnlyExtension,
212 QStringList &loadStartupFiles,
213 QStringList &commandLineWithoutLoadStartupFiles)
215 bool showUsage =
false;
220 bool nextIsErrorReportFile =
false;
221 bool nextIsExtractImageOnly =
false;
222 bool nextIsFileCmdScript =
false;
226 isDropRegression =
false;
228 errorReportFile =
"";
229 fileCmdScriptFile =
"";
230 isErrorReportRegressionTest =
false;
232 isExportOnly =
false;
233 isExtractImageOnly =
false;
234 extractImageOnlyExtension =
"";
237 for (
int i = 1; i < argc; i++) {
239 bool isLoadStartupFile =
false;
241 if (nextIsErrorReportFile) {
244 QObject::tr (
"is not a valid file name"));
245 errorReportFile = argv [i];
246 nextIsErrorReportFile =
false;
247 }
else if (nextIsExtractImageOnly) {
250 QObject::tr (
"is not a valid image file extension"));
251 extractImageOnlyExtension = argv [i];
252 nextIsExtractImageOnly =
false;
253 }
else if (nextIsFileCmdScript) {
256 QObject::tr (
"is not a valid file name"));
257 fileCmdScriptFile = argv [i];
258 nextIsFileCmdScript =
false;
259 }
else if (strcmp (argv [i],
DASH_DEBUG.toLatin1().data()) == 0) {
262 isDropRegression =
true;
264 nextIsErrorReportFile =
true;
268 isExtractImageOnly =
true;
269 nextIsExtractImageOnly =
true;
271 nextIsFileCmdScript =
true;
272 }
else if (strcmp (argv [i],
DASH_GNUPLOT.toLatin1().data()) == 0) {
274 }
else if (strcmp (argv [i],
DASH_HELP.toLatin1().data()) == 0) {
276 }
else if (strcmp (argv [i],
DASH_REGRESSION.toLatin1().data()) == 0) {
277 isErrorReportRegressionTest =
true;
278 }
else if (strcmp (argv [i],
DASH_RESET.toLatin1().data()) == 0) {
280 }
else if (strcmp (argv [i],
DASH_STYLE.toLatin1().data()) == 0) {
283 }
else if (strcmp (argv [i],
DASH_STYLES.toLatin1().data()) == 0) {
285 }
else if (strcmp (argv [i],
DASH_UPGRADE.toLatin1().data()) == 0) {
287 }
else if (strncmp (argv [i],
DASH.toLatin1().data(), 1) == 0) {
292 QString fileName = argv [i];
293 QFileInfo fInfo (fileName);
294 if (fInfo.isRelative() && !fileName.startsWith (
"http")) {
295 fileName = fInfo.absoluteFilePath();
298 isLoadStartupFile =
true;
299 loadStartupFiles << fileName;
303 if (!isLoadStartupFile) {
304 commandLineWithoutLoadStartupFiles << argv [i];
321 if (showUsage || nextIsErrorReportFile || nextIsExtractImageOnly || nextIsFileCmdScript) {
329 const QString &dashForRepeatingFlag,
330 const QString &errorReportFile,
331 const QString &fileCmdScriptFile,
332 const QStringList &loadStartupFiles)
334 if (isRepeatingFlag && (!errorReportFile.isEmpty() ||
335 !fileCmdScriptFile.isEmpty() ||
336 loadStartupFiles.size() == 0)) {
341 QTextStream str (&msg);
342 str << dashForRepeatingFlag.toLatin1().data() <<
" " << QObject::tr (
"is used only with one or more load files");
349 const QString &msgUnadorned)
351 if (!requiredCondition) {
354 QString msg = QString (
"%1 %2")
364 QMessageBox::critical (
nullptr,
365 QObject::tr (
"Engauge Digitizer"),
373 QTextStream str (&msg);
374 str << QObject::tr (
"Available styles") <<
": " << QStyleFactory::keys ().join (
", ");
381 QTextStream str (&msg);
382 str <<
"<html>Usage: engauge "
383 <<
"[" <<
DASH_DEBUG.toLatin1().data() <<
"] "
390 <<
"[" <<
DASH_HELP.toLatin1().data() <<
"] "
392 <<
"[" <<
DASH_RESET.toLatin1().data () <<
"] "
393 <<
"[" <<
DASH_STYLE.toLatin1().data () <<
" <style>] "
395 <<
"[<load_file1>] [<load_file2>] ..." << endl
398 <<
"<td>" <<
DASH_DEBUG.toLatin1().data() <<
"</td>"
400 << QObject::tr (
"Enables extra debug information. Used for debugging").toLatin1().data()
406 << QObject::tr (
"Indicates files opened at startup are for testing drag and drop. Used for regression testing").toLatin1().data()
412 << QObject::tr (
"Specifies an error report file as input. Used for debugging and regression testing").toLatin1().data()
418 << QObject::tr (
"Export each loaded startup file, which must have all axis points defined, then stop").toLatin1().data()
424 << QObject::tr (
"Extract image in each loaded startup file to a file with the specified extension, then stop").toLatin1().data()
430 << QObject::tr (
"Specifies a file command script file as input. Used for debugging and testing").toLatin1().data()
436 << QObject::tr (
"Output diagnostic gnuplot input files. Used for debugging").toLatin1().data()
440 <<
"<td>" <<
DASH_HELP.toLatin1().data() <<
"</td>"
442 << QObject::tr (
"Show this help information").toLatin1().data()
448 << QObject::tr (
"Executes the error report file or file command script. Used for regression testing").toLatin1().data()
452 <<
"<td>" <<
DASH_RESET.toLatin1().data() <<
"</td>"
454 << QObject::tr (
"Removes all stored settings, including window positions. Used when windows start up offscreen").toLatin1().data()
458 <<
"<td>" <<
DASH_STYLE.toLatin1().data() <<
"</td>"
461 .arg (QObject::tr (
"Set the window style to one of the styles listed by the command line option"))
466 <<
"<td>" <<
DASH_STYLES.toLatin1().data() <<
"</td>"
469 .arg (QObject::tr (
"Show a list of available styles that can be used with the command line option"))
476 << QObject::tr (
"Upgrade files opened at startup to the most recent version").toLatin1().data()
480 <<
"<td>" << QString (
"<load file> ").toLatin1().data() <<
"</td>"
482 << QObject::tr (
"File(s) to be imported or opened at startup").toLatin1().data()
485 <<
"</table></html>";
492 QString FILE_SUFFIX (
".dig");
493 QString UPGRADE_TOKEN (
"_upgrade");
497 QStringList::const_iterator itr;
498 for (itr = loadStartupFiles.begin(); itr != loadStartupFiles.end(); itr++) {
500 QString filenameOld = *itr;
504 if (filenameOld.endsWith (FILE_SUFFIX,
505 Qt::CaseInsensitive)) {
506 QString withoutSuffix = filenameOld.left (filenameOld.size () - FILE_SUFFIX.size ());
507 filenameNew = QString (
"%1%2%3")
514 filenameNew = QString (
"%1%2")
516 .arg (UPGRADE_TOKEN);
523 QFile file (filenameNew);
524 if (!file.open (QFile::WriteOnly)) {
526 msg += QString (
"%1 %2")
527 .arg (QObject::tr (
"Could not write to"))
532 QXmlStreamWriter writer (&file);
533 writer.setAutoFormatting (
true);
534 writer.writeStartDocument();
535 writer.writeDTD (
"<!DOCTYPE engauge>");
537 writer.writeEndDocument ();
539 msg += QString (
"%1 %2 %3 %4")
540 .arg (QObject::tr (
"Upgraded"))
542 .arg (QObject::tr (
"to"))
const QString CMD_FILE_CMD_SCRIPT("filecmdscript")
const QString CMD_ERROR_REPORT("errorreport")
const QString CMD_GNUPLOT("gnuplot")
const QString DASH_DROP_REGRESSION("-"+CMD_DROP_REGRESSION)
bool engaugeLogFilenameAttempt(const QString &path, QString &pathAndFile)
const QString DASH_DEBUG("-"+CMD_DEBUG)
const QString DASH_STYLES("-"+CMD_STYLES)
const QString DASH_UPGRADE("-"+CMD_UPGRADE)
Provides list of file extensions for import.
void showMessageAndQuit(const QString &msg)
#define LOG4CPP_INFO_S(logger)
const QString DASH_FILE_CMD_SCRIPT("-"+CMD_FILE_CMD_SCRIPT)
void sanityCheckValue(bool requiredCondition, const QString &arg, const QString &msgUnadorned)
const QString CMD_UPGRADE("upgrade")
const QString DASH_RESET("-"+CMD_RESET)
const QString DASH_ERROR_REPORT("-"+CMD_ERROR_REPORT)
void upgradeFiles(const QStringList &loadStartupFiles)
const QString CMD_REGRESSION("regression")
const QString DASH_GNUPLOT("-"+CMD_GNUPLOT)
void initializeLogging(const QString &name, const QString &filename, bool isDebug)
const QString DASH_EXPORT_ONLY("-"+CMD_EXPORT_ONLY)
const QString DASH_EXTRACT_IMAGE_ONLY("-"+CMD_EXTRACT_IMAGE_ONLY)
const QString CMD_RESET("reset")
const QString CMD_STYLE("style")
bool offers(const QString &fileExtension) const
Return true if specified file extension is supported.
Storage of one imported image and the data attached to that image.
log4cpp::Category * mainCat
void sanityCheckLoadStartupFiles(bool isRepeatingFlag, const QString &dashForRepeatingFlag, const QString &errorReportFile, const QString &fileCmdScriptFile, const QStringList &loadStartupFiles)
const QString DASH_REGRESSION("-"+CMD_REGRESSION)
const QString CMD_STYLES("styles")
const QString CMD_DEBUG("debug")
QString engaugeLogFilename()
Class that stores QTranslator objects for the duration of application execution.
const QString DASH_HELP("-"+CMD_HELP)
const QString CMD_EXTRACT_IMAGE_ONLY("extractimageonly")
void parseCmdLine(int argc, char **argv, bool &isDebug, bool &isDropRegression, bool &isReset, QString &errorReportFile, QString &fileCmdScriptFile, bool &isErrorReportRegressionTest, bool &isGnuplot, bool &isExportOnly, bool &isExtractImageOnly, QString &extractImageOnlyExtension, bool &isUpgrade, QStringList &loadStartupFiles, QStringList &commandLineWithoutLoadStartupFiles)
void saveXml(QXmlStreamWriter &writer) const
Save document to xml.
int main(int argc, char *argv[])
bool checkFileExists(const QString &file)
const QString ENGAUGE_LOG_FILE(".engauge.log")
const QString CMD_EXPORT_ONLY("exportonly")
const QString CMD_HELP("help")
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
const QString CMD_DROP_REGRESSION("dropregression")
const QString DASH_STYLE("-"+CMD_STYLE)