diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -29,10 +29,13 @@ #include #include #include +#include +#include #include #include #include #include +#include #include #include @@ -251,9 +254,11 @@ MainWindow::MainWindow(QWidget *parent) onSourceChanged(dataFormatPanel.activeSource()); // load default settings - QSettings settings("serialplot", "serialplot"); + QSettings settings(PROGRAM_NAME, PROGRAM_NAME); loadAllSettings(&settings); + handleCommandLineOptions(*QApplication::instance()); + // ensure command panel has 1 command if none loaded if (!commandPanel.numOfCommands()) { @@ -300,7 +305,7 @@ void MainWindow::closeEvent(QCloseEvent } // save settings - QSettings settings("serialplot", "serialplot"); + QSettings settings(PROGRAM_NAME, PROGRAM_NAME); saveAllSettings(&settings); settings.sync(); @@ -474,44 +479,16 @@ PlotViewSettings MainWindow::viewSetting } void MainWindow::messageHandler(QtMsgType type, - const QMessageLogContext &context, + const QString &logString, const QString &msg) { - QString logString; - - switch (type) - { -#if (QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)) - case QtInfoMsg: - logString = "[Info] " + msg; - break; -#endif - case QtDebugMsg: - logString = "[Debug] " + msg; - break; - case QtWarningMsg: - logString = "[Warning] " + msg; - break; - case QtCriticalMsg: - logString = "[Error] " + msg; - break; - case QtFatalMsg: - logString = "[Fatal] " + msg; - break; - } - - if (ui != NULL) ui->ptLog->appendPlainText(logString); - std::cerr << logString.toStdString() << std::endl; + if (ui != NULL) + ui->ptLog->appendPlainText(logString); if (type != QtDebugMsg && ui != NULL) { ui->statusBar->showMessage(msg, 5000); } - - if (type == QtFatalMsg) - { - __builtin_trap(); - } } void MainWindow::saveAllSettings(QSettings* settings) @@ -616,3 +593,56 @@ void MainWindow::onLoadSettings() loadAllSettings(&settings); } } + +void MainWindow::handleCommandLineOptions(const QCoreApplication &app) +{ + QCommandLineParser parser; + parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsCompactedShortOptions); + parser.setApplicationDescription("Small and simple software for plotting data from serial port in realtime."); + parser.addHelpOption(); + parser.addVersionOption(); + + QCommandLineOption configOpt({"c", "config"}, "Load configuration from file.", "filename"); + QCommandLineOption portOpt({"p", "port"}, "Set port name.", "port name"); + QCommandLineOption baudrateOpt({"b" ,"baudrate"}, "Set port baud rate.", "baud rate"); + QCommandLineOption openPortOpt({"o", "open"}, "Open serial port."); + + parser.addOption(configOpt); + parser.addOption(portOpt); + parser.addOption(baudrateOpt); + parser.addOption(openPortOpt); + + parser.process(app); + + if (parser.isSet(configOpt)) + { + QString fileName = parser.value(configOpt); + QFileInfo fileInfo(fileName); + + if (fileInfo.exists() && fileInfo.isFile()) + { + QSettings settings(fileName, QSettings::IniFormat); + loadAllSettings(&settings); + } + else + { + qCritical() << "Configuration file not exist. Closing application."; + std::exit(1); + } + } + + if (parser.isSet(portOpt)) + { + portControl.selectPort(parser.value(portOpt)); + } + + if (parser.isSet(baudrateOpt)) + { + portControl.selectBaudrate(parser.value(baudrateOpt)); + } + + if (parser.isSet(openPortOpt)) + { + portControl.openPort(); + } +}