summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Helfrich <helfrich9000@gmail.com>2008-03-06 04:40:45 +0000
committerBrian Helfrich <helfrich9000@gmail.com>2008-03-06 04:40:45 +0000
commit23b812bd8f191442fd557172999d108a42f1f2b3 (patch)
treea210d43a99478e308e17722045d2f9372c1b6519
parentc0963f9367d215f43e4faf67b57ea2e72e8e4e1d (diff)
downloadnanoengineer-23b812bd8f191442fd557172999d108a42f1f2b3.tar.gz
nanoengineer-23b812bd8f191442fd557172999d108a42f1f2b3.zip
More job management functionality.
-rw-r--r--cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.cpp6
-rw-r--r--cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.h1
-rw-r--r--cad/plugins/NanoVision-1/src/JobSelectorDialog.cpp38
-rw-r--r--cad/plugins/NanoVision-1/src/JobSelectorDialog.h27
-rw-r--r--cad/plugins/NanoVision-1/src/JobSelectorDialog.ui79
-rw-r--r--cad/plugins/NanoVision-1/src/KDevelop/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine/NXOpenGLRenderingEngine.pro1
-rw-r--r--cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro9
-rw-r--r--cad/plugins/NanoVision-1/src/nv1.cpp155
-rw-r--r--cad/plugins/NanoVision-1/src/nv1.h5
9 files changed, 277 insertions, 44 deletions
diff --git a/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.cpp b/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.cpp
index 535c544d1..dc79208ee 100644
--- a/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.cpp
+++ b/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.cpp
@@ -81,6 +81,12 @@ void GROMACS_JobMonitor::run() {
}
+/* FUNCTION: CheckJobActive */
+bool GROMACS_JobMonitor::CheckJobActive(const QString& pid) {
+ return true;
+}
+
+
/* FUNCTION: abortJob */
void GROMACS_JobMonitor::abortJob() {
QMutexLocker locker(&jobControlMutex);
diff --git a/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.h b/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.h
index 77f870a05..9fd5b53a8 100644
--- a/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.h
+++ b/cad/plugins/NanoVision-1/src/JobManagement/GROMACS_JobMonitor.h
@@ -25,6 +25,7 @@ class GROMACS_JobMonitor : public JobMonitor {
~GROMACS_JobMonitor();
void run();
+ static bool CheckJobActive(const QString& pid);
signals:
void startedMonitoring(const QString& processType, const QString id,
diff --git a/cad/plugins/NanoVision-1/src/JobSelectorDialog.cpp b/cad/plugins/NanoVision-1/src/JobSelectorDialog.cpp
new file mode 100644
index 000000000..cdec4c9f0
--- /dev/null
+++ b/cad/plugins/NanoVision-1/src/JobSelectorDialog.cpp
@@ -0,0 +1,38 @@
+// Copyright 2008 Nanorex, Inc. See LICENSE file for details.
+
+#include "JobSelectorDialog.h"
+
+
+/* CONSTRUCTORS */
+JobSelectorDialog::JobSelectorDialog(QWidget *parent)
+ : QDialog(parent), Ui_JobSelectorDialog() {
+
+ setupUi(this);
+ buttonBox->button(QDialogButtonBox::Ok)->setDisabled(true);
+ connect(listWidget, SIGNAL(itemClicked(QListWidgetItem*)),
+ this, SLOT(itemSelected(QListWidgetItem*)));
+}
+
+
+/* DESTRUCTOR */
+JobSelectorDialog::~JobSelectorDialog() {
+}
+
+
+/* FUNCTION: addActiveJobs */
+void JobSelectorDialog::addActiveJobs(const QStringList& activeJobs) {
+ listWidget->addItems(activeJobs);
+}
+
+
+/* FUNCTION: getSelection */
+QString JobSelectorDialog::getSelection() {
+ return listWidget->selectedItems().first()->text();
+}
+
+
+/* FUNCTION: itemSelected */
+void JobSelectorDialog::itemSelected(QListWidgetItem* item) {
+ buttonBox->button(QDialogButtonBox::Ok)->setDisabled(false);
+}
+
diff --git a/cad/plugins/NanoVision-1/src/JobSelectorDialog.h b/cad/plugins/NanoVision-1/src/JobSelectorDialog.h
new file mode 100644
index 000000000..5a4874f97
--- /dev/null
+++ b/cad/plugins/NanoVision-1/src/JobSelectorDialog.h
@@ -0,0 +1,27 @@
+// Copyright 2008 Nanorex, Inc. See LICENSE file for details.
+
+#ifndef JOBSELECTORDIALOG_H
+#define JOBSELECTORDIALOG_H
+
+#include <QObject>
+#include <QPushButton>
+
+#include "ui_JobSelectorDialog.h"
+
+class JobSelectorDialog : public QDialog, private Ui_JobSelectorDialog {
+
+ Q_OBJECT
+
+ public:
+ JobSelectorDialog(QWidget *parent = 0);
+ ~JobSelectorDialog();
+
+ void addActiveJobs(const QStringList& activeJobs);
+ QString getSelection();
+
+ public slots:
+ void itemSelected(QListWidgetItem* item);
+};
+
+#endif
+
diff --git a/cad/plugins/NanoVision-1/src/JobSelectorDialog.ui b/cad/plugins/NanoVision-1/src/JobSelectorDialog.ui
new file mode 100644
index 000000000..2c4d6c573
--- /dev/null
+++ b/cad/plugins/NanoVision-1/src/JobSelectorDialog.ui
@@ -0,0 +1,79 @@
+<ui version="4.0" >
+ <class>JobSelectorDialog</class>
+ <widget class="QDialog" name="JobSelectorDialog" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Dialog</string>
+ </property>
+ <layout class="QVBoxLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+ <string>Choose an existing job to open, or click Cancel.</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QListWidget" name="listWidget" />
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons" >
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>JobSelectorDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>JobSelectorDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/cad/plugins/NanoVision-1/src/KDevelop/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine/NXOpenGLRenderingEngine.pro b/cad/plugins/NanoVision-1/src/KDevelop/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine/NXOpenGLRenderingEngine.pro
index 485815c82..522eb020d 100644
--- a/cad/plugins/NanoVision-1/src/KDevelop/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine/NXOpenGLRenderingEngine.pro
+++ b/cad/plugins/NanoVision-1/src/KDevelop/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine/NXOpenGLRenderingEngine.pro
@@ -13,7 +13,6 @@ HEADERS += ../../../../../../include/Nanorex/Interface/NXAtomRenderData.h \
../../../../../Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine.h \
../../../../../../include/Nanorex/Interface/NXRendererPlugin.h \
../../../../../../include/Nanorex/Interface/NXRenderingEngine.h \
- ../../../../../../include/Nanorex/Interface/NXRGBColor.h \
../../../../../../include/Nanorex/Interface/NXSceneGraph.h \
../../../../../Plugins/RenderingEngines/OpenGL/NXOpenGLSceneGraph.h \
../../../../../Plugins/RenderingEngines/OpenGL/NXOpenGLMaterial.h \
diff --git a/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro b/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro
index 13c727fa9..4a8d8d64a 100644
--- a/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro
+++ b/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro
@@ -32,7 +32,8 @@ SOURCES += ../../DataWindow.cpp \
../../TrajectoryGraphicsWindow.cpp \
../../StructureGraphicsWindow.cpp \
../../InputParametersWindow.cpp \
- ../../ResultsSummaryWindow.cpp
+ ../../ResultsSummaryWindow.cpp \
+ ../../JobSelectorDialog.cpp
HEADERS += ../../DataWindow.h \
../../LogHandlerWidget.h \
@@ -46,7 +47,8 @@ HEADERS += ../../DataWindow.h \
../../TrajectoryGraphicsWindow.h \
../../StructureGraphicsWindow.h \
../../InputParametersWindow.h \
- ../../ResultsSummaryWindow.h
+ ../../ResultsSummaryWindow.h \
+ ../../JobSelectorDialog.h
FORMS += ../../LogHandlerWidget.ui \
../../MainWindowTabWidget.ui \
@@ -54,7 +56,8 @@ FORMS += ../../LogHandlerWidget.ui \
../../ErrorDialog.ui \
../../TrajectoryGraphicsWindow.ui \
../../InputParametersWindow.ui \
- ../../ResultsSummaryWindow.ui
+ ../../ResultsSummaryWindow.ui \
+ ../../JobSelectorDialog.ui
RESOURCES += ../../application.qrc
diff --git a/cad/plugins/NanoVision-1/src/nv1.cpp b/cad/plugins/NanoVision-1/src/nv1.cpp
index 75fd1e528..10ca4e994 100644
--- a/cad/plugins/NanoVision-1/src/nv1.cpp
+++ b/cad/plugins/NanoVision-1/src/nv1.cpp
@@ -46,51 +46,61 @@ nv1::~nv1() {
/* FUNCTION: processCommandLine */
void nv1::processCommandLine(int argc, char *argv[]) {
+ string filename, processType, processInit;
NXCommandLine commandLine;
if ((commandLine.SplitLine(argc, argv) > 0) &&
(commandLine.HasSwitch("-f"))) {
- string filename = commandLine.GetArgument("-f", 0);
-
- QString message = tr("Opening file: %1").arg(filename.c_str());
- NXLOG_INFO("nv1", qPrintable(message));
-
- if (resultsWindow->loadFile(filename.c_str())) {
- statusBar()->showMessage(tr("File loaded"), 2000);
- resultsWindow->show();
+ filename = commandLine.GetArgument("-f", 0);
+ if (commandLine.GetArgumentCount("-p") == 2) {
+ processType = commandLine.GetArgument("-p", 0);
+ processInit = commandLine.GetArgument("-p", 1);
+ }
- // Start job monitor
- string processType, processInit;
- JobMonitor* jobMonitor = 0;
- if (commandLine.GetArgumentCount("-p") == 2) {
- processType = commandLine.GetArgument("-p", 0);
- processInit = commandLine.GetArgument("-p", 1);
- message =
- tr("Setting up job management with job handle info: %1 %2")
- .arg(processType.c_str()).arg(processInit.c_str());
- NXLOG_INFO("nv1", qPrintable(message));
- if (processType == "GMX") {
- jobMonitor = new GROMACS_JobMonitor(processInit.c_str());
- }
- if (jobMonitor != 0) {
- connect(jobMonitor,
- SIGNAL(startedMonitoring(const QString&,
- const QString&,
- const QString&)),
- this,
- SLOT(addMonitoredJob(const QString&,
- const QString&,
- const QString&)));
- connect(jobMonitor, SIGNAL(jobFinished(const QString&)),
- this, SLOT(removeMonitoredJob(const QString&)));
- connect(jobMonitor, SIGNAL(jobAborted(const QString&)),
- this, SLOT(removeMonitoredJob(const QString&)));
- jobMonitors[processInit.c_str()] = jobMonitor;
- jobMonitor->start();
- }
+ } else {
+ checkForActiveJobs(filename, processType, processInit);
+ }
+
+ if (filename != "")
+ loadFile(filename, processType, processInit);
+}
+
+
+/* FUNCTION: loadFile */
+void nv1::loadFile(const string& filename, const string& processType,
+ const string& processInit) {
- } else {
- // Check if there are any active jobs and ask user which, if any
- // to connect to.
+ QString message = tr("Opening file: %1").arg(filename.c_str());
+ NXLOG_INFO("nv1", qPrintable(message));
+
+ if (resultsWindow->loadFile(filename.c_str())) {
+ statusBar()->showMessage(tr("File loaded"), 2000);
+ resultsWindow->show();
+
+ // Start job monitor
+ JobMonitor* jobMonitor = 0;
+ if ((processType != "") && (processInit != "")) {
+ message =
+ tr("Setting up job management with job handle info: %1 %2")
+ .arg(processType.c_str()).arg(processInit.c_str());
+ NXLOG_INFO("nv1", qPrintable(message));
+ if (processType == "GMX") {
+ jobMonitor = new GROMACS_JobMonitor(processInit.c_str());
+ }
+ if (jobMonitor != 0) {
+ connect(jobMonitor,
+ SIGNAL(startedMonitoring(const QString&,
+ const QString&,
+ const QString&)),
+ this,
+ SLOT(addMonitoredJob(const QString&,
+ const QString&,
+ const QString&)));
+ connect(jobMonitor, SIGNAL(jobFinished(const QString&)),
+ this, SLOT(removeMonitoredJob(const QString&)));
+ connect(jobMonitor, SIGNAL(jobAborted(const QString&)),
+ this, SLOT(removeMonitoredJob(const QString&)));
+ jobMonitors[processInit.c_str()] = jobMonitor;
+ jobMonitor->start();
}
}
}
@@ -385,3 +395,68 @@ void nv1::abortJob(const QString& id) {
jobMonitors[id]->abortJob();
}
+
+/* FUNCTION: checkForActiveJobs
+ *
+ * Check if there are any active jobs and ask the user which, if any to
+ * connect to. Populate the given variables.
+ */
+void nv1::checkForActiveJobs(string& filename, string& processType,
+ string& processInit) {
+
+ // Get a list of active jobs
+ QSettings settings(QSettings::IniFormat, QSettings::UserScope,
+ "Nanorex", "NanoVision-1");
+ QFileInfo fileInfo(settings.fileName());
+ QDir dir(fileInfo.absolutePath().append("/Jobs"));
+ if (!dir.exists()) {
+ dir.cdUp();
+ dir.mkdir("Jobs");
+ }
+ bool jobActive;
+ QStringList activeJobs;
+ QStringList fileList = dir.entryList(QDir::Files);
+ QStringList::const_iterator constIterator;
+ for (constIterator = fileList.constBegin();
+ constIterator != fileList.constEnd(); ++constIterator) {
+ jobActive = false;
+ if ((*constIterator).startsWith("GMX")) {
+ QString pid = (*constIterator).mid(4);
+ jobActive = GROMACS_JobMonitor::CheckJobActive(pid);
+ }
+ if (jobActive)
+ activeJobs.append(*constIterator);
+ else
+ ; // Delete job file
+ }
+
+ // Show a selector dialog
+ int jobSelectionResult = QDialog::Rejected;
+ QString selectedJob;
+ if (!activeJobs.empty()) {
+ JobSelectorDialog jobSelectorDialog;
+ jobSelectorDialog.addActiveJobs(activeJobs);
+ jobSelectorDialog.exec();
+ jobSelectionResult = jobSelectorDialog.result();
+ if (jobSelectionResult == QDialog::Accepted)
+ selectedJob = jobSelectorDialog.getSelection();
+ }
+
+ if (jobSelectionResult == QDialog::Accepted) {
+
+ // TODO: make this handle more than just "GMX_<pid>"
+ processType = "GMX";
+ processInit = qPrintable(selectedJob.mid(4));
+
+ QString jobFilename = dir.absolutePath().append("/").append(selectedJob);
+ QFile jobFile(jobFilename);
+ if (jobFile.open(QIODevice::ReadOnly)) {
+ char buffer[512];
+ if (jobFile.readLine(buffer, sizeof(buffer)) != -1) {
+ filename = buffer;
+ }
+ jobFile.close();
+ }
+ }
+}
+
diff --git a/cad/plugins/NanoVision-1/src/nv1.h b/cad/plugins/NanoVision-1/src/nv1.h
index 974bc5b91..7df347ab6 100644
--- a/cad/plugins/NanoVision-1/src/nv1.h
+++ b/cad/plugins/NanoVision-1/src/nv1.h
@@ -18,6 +18,7 @@ using namespace Nanorex;
#include "ResultsWindow.h"
#include "LogHandlerWidget.h"
+#include "JobSelectorDialog.h"
#include "MainWindowTabWidget.h"
#include "JobManagement/JobMonitor.h"
#include "JobManagement/GROMACS_JobMonitor.h"
@@ -32,6 +33,8 @@ public:
~nv1();
void processCommandLine(int argc, char *argv[]);
+ void loadFile(const string& filename, const string& processType,
+ const string& processInit);
protected:
void closeEvent (QCloseEvent *event);
@@ -48,6 +51,8 @@ private slots:
void about();
void updateWindowMenu();
void abortJob(const QString& id);
+ void checkForActiveJobs(string& filename, string& processType,
+ string& processInit);
private:
NXEntityManager* entityManager;