From 1ea223239cc12801c257e3a434c1033687a55f54 Mon Sep 17 00:00:00 2001
From: ucart <ucart_groundstation@iastate.edu>
Date: Wed, 26 Apr 2017 00:14:51 -0500
Subject: [PATCH] Added scripts menu

---
 groundStation/gui/MicroCART/MicroCART.pro   |  6 +++--
 groundStation/gui/MicroCART/mainwindow.cpp  | 11 ++++++++
 groundStation/gui/MicroCART/mainwindow.ui   |  6 +++++
 groundStation/gui/MicroCART/slotprocess.cpp | 30 +++++++++++++++++++++
 groundStation/gui/MicroCART/slotprocess.h   | 19 +++++++++++++
 5 files changed, 70 insertions(+), 2 deletions(-)
 create mode 100644 groundStation/gui/MicroCART/slotprocess.cpp
 create mode 100644 groundStation/gui/MicroCART/slotprocess.h

diff --git a/groundStation/gui/MicroCART/MicroCART.pro b/groundStation/gui/MicroCART/MicroCART.pro
index 094787c0f..d2c2206c6 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 04c334746..0c0b3ffdc 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 4412aa3c3..da97a7a4b 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 000000000..f12cb0fe5
--- /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 000000000..ce86da25f
--- /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
-- 
GitLab