# HG changeset patch # User Mehmet Aslan # Date 2019-03-24 12:44:14 # Node ID b5af7d81e1f059e7cb8a304dc8b91f900cccfe69 # Parent e2263e5085983f050abedcbef0d001d1da7d7dbe basic command line functionalities added. diff --git a/src/main.cpp b/src/main.cpp --- a/src/main.cpp +++ b/src/main.cpp @@ -36,10 +36,13 @@ void messageHandler(QtMsgType type, cons int main(int argc, char *argv[]) { QApplication a(argc, argv); + QApplication::setApplicationName("SerialPlot"); + QApplication::setApplicationVersion(VERSION_STRING); MainWindow w; pMainWindow = &w; qInstallMessageHandler(messageHandler); + w.handleCommandLineOptions(a); ToolTipFilter ttf; a.installEventFilter(&ttf); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include #include #include @@ -616,3 +618,55 @@ 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 loadOpt({"l", "load"}, "Load settings from file.", "filename"); + QCommandLineOption portOpt({"p", "port"}, "Set port name.", "port name"); + QCommandLineOption baudrateOpt({"b" ,"baudrate"}, "Set port baudrate speed.", "baudrate speed"); + QCommandLineOption openPortOpt({"o", "open"}, "Open serial port."); + + parser.addOption(loadOpt); + parser.addOption(portOpt); + parser.addOption(baudrateOpt); + parser.addOption(openPortOpt); + + parser.process(app); + + if (parser.isSet(loadOpt)) + { + QString fileName = parser.value(loadOpt); + QFileInfo fileInfo(fileName); + + if (fileInfo.exists() && fileInfo.isFile()) + { + QSettings settings(fileName, QSettings::IniFormat); + loadAllSettings(&settings); + } + else + { + qWarning() << "Ini file not exist"; + } + } + + if (parser.isSet(portOpt)) + { + portControl.selectPort(parser.value(portOpt)); + } + + if (parser.isSet(baudrateOpt)) + { + portControl.selectBaudrate(parser.value(baudrateOpt)); + } + + if (parser.isSet(openPortOpt)) + { + portControl.openPort(); + } +} diff --git a/src/mainwindow.h b/src/mainwindow.h --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -64,6 +64,7 @@ public: void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg); + void handleCommandLineOptions(const QCoreApplication &app); private: Ui::MainWindow *ui; diff --git a/src/portcontrol.cpp b/src/portcontrol.cpp --- a/src/portcontrol.cpp +++ b/src/portcontrol.cpp @@ -79,10 +79,10 @@ PortControl::PortControl(QSerialPort* po this, &PortControl::onTbPortListActivated); QObject::connect(ui->cbPortList, SELECT::OVERLOAD_OF(&QComboBox::activated), - this, &PortControl::selectPort); + this, &PortControl::_selectPort); QObject::connect(&tbPortList, SELECT::OVERLOAD_OF(&QComboBox::activated), - this, &PortControl::selectPort); + this, &PortControl::_selectPort); // setup buttons ui->pbOpenPort->setDefaultAction(&openAction); @@ -91,7 +91,7 @@ PortControl::PortControl(QSerialPort* po // setup baud rate selection widget QObject::connect(ui->cbBaudRate, SELECT::OVERLOAD_OF(&QComboBox::activated), - this, &PortControl::selectBaudRate); + this, &PortControl::_selectBaudRate); // setup parity selection buttons parityButtons.addButton(ui->rbNoParity, (int) QSerialPort::NoParity); @@ -198,7 +198,7 @@ void PortControl::loadBaudRateList() } } -void PortControl::selectBaudRate(QString baudRate) +void PortControl::_selectBaudRate(QString baudRate) { if (serialPort->isOpen()) { @@ -289,7 +289,7 @@ void PortControl::togglePort() if (serialPort->open(QIODevice::ReadWrite)) { // set port settings - selectBaudRate(ui->cbBaudRate->currentText()); + _selectBaudRate(ui->cbBaudRate->currentText()); selectParity((QSerialPort::Parity) parityButtons.checkedId()); selectDataBits((QSerialPort::DataBits) dataBitsButtons.checkedId()); selectStopBits((QSerialPort::StopBits) stopBitsButtons.checkedId()); @@ -310,7 +310,7 @@ void PortControl::togglePort() openAction.setChecked(serialPort->isOpen()); } -void PortControl::selectPort(QString portName) +void PortControl::_selectPort(QString portName) { // portName may be coming from combobox portName = portName.split(" ")[0]; @@ -470,6 +470,45 @@ QString PortControl::currentFlowControlT } } +void PortControl::selectPort(QString portName) +{ + int portIndex = portList.indexOfName(portName); + if (portIndex < 0) // not in list, add to model and update the selections + { + portList.appendRow(new PortListItem(portName)); + ui->cbPortList->setCurrentIndex(portList.rowCount()-1); + tbPortList.setCurrentIndex(portList.rowCount()-1); + } + else + { + ui->cbPortList->setCurrentIndex(portIndex); + tbPortList.setCurrentIndex(portIndex); + } + _selectPort(portName); +} + +void PortControl::selectBaudrate(QString baudRate) +{ + int baudRateIndex = ui->cbBaudRate->findText(baudRate); + if (baudRateIndex < 0) + { + ui->cbBaudRate->setCurrentText(baudRate); + } + else + { + ui->cbBaudRate->setCurrentIndex(baudRateIndex); + } + _selectBaudRate(baudRate); +} + +void PortControl::openPort() +{ + if (!serialPort->isOpen()) + { + openAction.trigger(); + } +} + void PortControl::saveSettings(QSettings* settings) { settings->beginGroup(SettingGroup_Port); diff --git a/src/portcontrol.h b/src/portcontrol.h --- a/src/portcontrol.h +++ b/src/portcontrol.h @@ -47,6 +47,10 @@ public: QSerialPort* serialPort; QToolBar* toolBar(); + void selectPort(QString portName); + void selectBaudrate(QString baudRate); + void openPort(); + /// Stores port settings into a `QSettings` void saveSettings(QSettings* settings); /// Loads port settings from a `QSettings`. If open serial port is closed. @@ -80,9 +84,9 @@ private slots: void loadPortList(); void loadBaudRateList(); void togglePort(); - void selectPort(QString portName); + void _selectPort(QString portName); - void selectBaudRate(QString baudRate); + void _selectBaudRate(QString baudRate); void selectParity(int parity); // parity must be one of QSerialPort::Parity void selectDataBits(int dataBits); // bits must be one of QSerialPort::DataBits void selectStopBits(int stopBits); // stopBits must be one of QSerialPort::StopBits