diff --git a/groundStation/gui/MicroCART/MicroCART.pro b/groundStation/gui/MicroCART/MicroCART.pro index 094787c0fc0a27ed7504a4aaeed3448e5a849aaf..d2c2206c6e0deed66c3ef56870ae1faa244c5be3 100644 --- a/groundStation/gui/MicroCART/MicroCART.pro +++ b/groundStation/gui/MicroCART/MicroCART.pro @@ -18,12 +18,14 @@ SOURCES += main.cpp\ mainwindow.cpp \ trackerworker.cpp \ controlworker.cpp \ - quaditem.cpp + quaditem.cpp \ + slotprocess.cpp HEADERS += mainwindow.h \ trackerworker.h \ controlworker.h \ - quaditem.h + quaditem.h \ + slotprocess.h FORMS += mainwindow.ui diff --git a/groundStation/gui/MicroCART/mainwindow.cpp b/groundStation/gui/MicroCART/mainwindow.cpp index 04c33474622e797371beb24a337367f32c3f0a27..0c0b3ffdcc7d4e2cc0f8d748585cc0e5656ae517 100644 --- a/groundStation/gui/MicroCART/mainwindow.cpp +++ b/groundStation/gui/MicroCART/mainwindow.cpp @@ -12,6 +12,7 @@ #include "controlworker.h" #include "graph_blocks.h" #include "quaditem.h" +#include "slotprocess.h" #include <iostream> MainWindow::MainWindow(QWidget *parent) : @@ -100,6 +101,16 @@ MainWindow::MainWindow(QWidget *parent) : /* Connect various things that can result in sending setpoints */ connect(ui->pbSendSetpoint, SIGNAL (clicked()), this, SLOT (sendSetpoints())); connect(ui->setpointList, SIGNAL (doubleClicked(QModelIndex)), this, SLOT (sendSelectedSetpoint())); + + /* Populate scripts list */ + QDir scriptsDir("scripts/"); + QStringList scripts = scriptsDir.entryList(); + for (int i = 0; i < scripts.size(); i++) { + QAction * action = ui->menuScripts->addAction(scripts[i]); + SlotProcess * scriptProcess = new SlotProcess(action); + scriptProcess->setProgram(scriptsDir.filePath(scripts[i])); + connect(action, SIGNAL (triggered()), scriptProcess, SLOT (startProcess())); + } } MainWindow::~MainWindow() diff --git a/groundStation/gui/MicroCART/mainwindow.ui b/groundStation/gui/MicroCART/mainwindow.ui index 4412aa3c3db2598c6b13dfe3aa8c319145a12aee..da97a7a4baf0599c025dbd6d81e62e06b90abefb 100644 --- a/groundStation/gui/MicroCART/mainwindow.ui +++ b/groundStation/gui/MicroCART/mainwindow.ui @@ -1131,6 +1131,12 @@ <height>27</height> </rect> </property> + <widget class="QMenu" name="menuScripts"> + <property name="title"> + <string>Scripts</string> + </property> + </widget> + <addaction name="menuScripts"/> </widget> <widget class="QToolBar" name="mainToolBar"> <attribute name="toolBarArea"> diff --git a/groundStation/gui/MicroCART/slotprocess.cpp b/groundStation/gui/MicroCART/slotprocess.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f12cb0fe50dd76f7d7a1df8c616039e1c17d3e69 --- /dev/null +++ b/groundStation/gui/MicroCART/slotprocess.cpp @@ -0,0 +1,30 @@ +#include "slotprocess.h" +#include <QDebug> + +void SlotProcess::startProcess() +{ + qInfo() << "Started process " + program(); + setProcessChannelMode(QProcess::ForwardedChannels); + connect(this, SIGNAL (finished(int, QProcess::ExitStatus)), this, SLOT (notifyFinished(int, QProcess::ExitStatus))); + connect(this, SIGNAL (errorOccurred(QProcess::ProcessError)), this, SLOT (notifyError(QProcess::ProcessError))); + start(); +} + +void SlotProcess::notifyFinished(int status, QProcess::ExitStatus exitStatus) +{ + qInfo() << "Finished process " + program(); + if (exitStatus != QProcess::NormalExit) { + qInfo() << "Did not exit normally!" + QString::number(status); + } +} + +void SlotProcess::notifyError(QProcess::ProcessError error) +{ + qInfo() << "Error with process " + program() + " " + errorString(); +} + +SlotProcess::SlotProcess(QObject * parent) : + QProcess(parent) +{ + +} diff --git a/groundStation/gui/MicroCART/slotprocess.h b/groundStation/gui/MicroCART/slotprocess.h new file mode 100644 index 0000000000000000000000000000000000000000..ce86da25fc7282460b6c6257581dc37c594c7262 --- /dev/null +++ b/groundStation/gui/MicroCART/slotprocess.h @@ -0,0 +1,19 @@ +#ifndef SLOTPROCESS_H +#define SLOTPROCESS_H + +#include <QObject> +#include <QProcess> + +class SlotProcess : public QProcess +{ + Q_OBJECT +public: + SlotProcess(QObject *); + +public slots: + void startProcess(); + void notifyFinished(int status, QProcess::ExitStatus); + void notifyError(QProcess::ProcessError error); +}; + +#endif // SLOTPROCESS_H