diff --git a/tools/lammps-gui/lammpsgui.cpp b/tools/lammps-gui/lammpsgui.cpp
index 6a1fc6c791..91a8fe0053 100644
--- a/tools/lammps-gui/lammpsgui.cpp
+++ b/tools/lammps-gui/lammpsgui.cpp
@@ -211,6 +211,7 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
connect(ui->actionUndo, &QAction::triggered, this, &LammpsGui::undo);
connect(ui->actionRedo, &QAction::triggered, this, &LammpsGui::redo);
connect(ui->actionRun_Buffer, &QAction::triggered, this, &LammpsGui::run_buffer);
+ connect(ui->actionRun_File, &QAction::triggered, this, &LammpsGui::run_file);
connect(ui->actionStop_LAMMPS, &QAction::triggered, this, &LammpsGui::stop_run);
connect(ui->actionSet_Variables, &QAction::triggered, this, &LammpsGui::edit_variables);
connect(ui->actionImage, &QAction::triggered, this, &LammpsGui::render_image);
@@ -810,13 +811,34 @@ void LammpsGui::run_done()
dirstatus->show();
}
-void LammpsGui::run_buffer()
+void LammpsGui::do_run(bool use_buffer)
{
if (lammps.is_running()) {
QMessageBox::warning(this, "LAMMPS GUI Error",
"Must stop current run before starting a new run");
return;
}
+
+ if (!use_buffer && ui->textEdit->document()->isModified()) {
+ QMessageBox msg;
+ msg.setWindowTitle("Unsaved Changes");
+ msg.setWindowIcon(windowIcon());
+ msg.setText(QString("The buffer ") + current_file + " has changes");
+ msg.setInformativeText("Do you want to save the buffer before running LAMMPS?");
+ msg.setIcon(QMessageBox::Question);
+ msg.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
+ int rv = msg.exec();
+ switch (rv) {
+ case QMessageBox::Yes:
+ save();
+ break;
+ case QMessageBox::Cancel: // falthrough
+ default:
+ return;
+ break;
+ }
+ }
+
QSettings settings;
progress->setValue(0);
dirstatus->hide();
@@ -836,12 +858,17 @@ void LammpsGui::run_buffer()
clear();
capturer->BeginCapture();
- // always add final newline since the text edit widget does not
- char *input = mystrdup(ui->textEdit->toPlainText().toStdString() + "\n");
- is_running = true;
+ runner = new LammpsRunner(this);
+ is_running = true;
+ if (use_buffer) {
+ // always add final newline since the text edit widget does not
+ char *input = mystrdup(ui->textEdit->toPlainText().toStdString() + "\n");
+ runner->setup_run(&lammps, input, nullptr);
+ } else {
+ char *fname = mystrdup(current_file.toStdString());
+ runner->setup_run(&lammps, nullptr, fname);
+ }
- runner = new LammpsRunner(this);
- runner->setup_run(&lammps, input);
connect(runner, &LammpsRunner::resultReady, this, &LammpsGui::run_done);
connect(runner, &LammpsRunner::finished, runner, &QObject::deleteLater);
runner->start();
@@ -852,8 +879,12 @@ void LammpsGui::run_buffer()
logwindow->setReadOnly(true);
logwindow->setCenterOnScroll(true);
logwindow->moveCursor(QTextCursor::End);
- logwindow->setWindowTitle("LAMMPS-GUI - Output from running LAMMPS on buffer - " +
- current_file);
+ if (use_buffer)
+ logwindow->setWindowTitle("LAMMPS-GUI - Output from running LAMMPS on buffer - " +
+ current_file);
+ else
+ logwindow->setWindowTitle("LAMMPS-GUI - Output from running LAMMPS on file - " +
+ current_file);
logwindow->setWindowIcon(QIcon(":/lammps-icon-128x128.png"));
QFont text_font;
text_font.fromString(settings.value("textfont", text_font.toString()).toString());
@@ -872,8 +903,12 @@ void LammpsGui::run_buffer()
// if configured, delete old log window before opening new one
if (settings.value("chartreplace", false).toBool()) delete chartwindow;
chartwindow = new ChartWindow(current_file);
- chartwindow->setWindowTitle("LAMMPS-GUI - Thermo charts from running LAMMPS on buffer - " +
- current_file);
+ if (use_buffer)
+ chartwindow->setWindowTitle("LAMMPS-GUI - Thermo charts from running LAMMPS on buffer - " +
+ current_file);
+ else
+ chartwindow->setWindowTitle("LAMMPS-GUI - Thermo charts from running LAMMPS on file - " +
+ current_file);
chartwindow->setWindowIcon(QIcon(":/lammps-icon-128x128.png"));
chartwindow->setMinimumSize(400, 300);
shortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), chartwindow);
@@ -1092,8 +1127,8 @@ void LammpsGui::preferences()
QSettings settings;
int oldthreads = settings.value("nthreads", 1).toInt();
int oldaccel = settings.value("accelerator", AcceleratorTab::None).toInt();
- bool oldecho = settings.value("echo", 0).toBool();
- bool oldcite = settings.value("cite", 0).toBool();
+ bool oldecho = settings.value("echo", 0).toBool();
+ bool oldcite = settings.value("cite", 0).toBool();
Preferences prefs(&lammps);
if (prefs.exec() == QDialog::Accepted) {
diff --git a/tools/lammps-gui/lammpsgui.h b/tools/lammps-gui/lammpsgui.h
index a97a233883..65165c9c38 100644
--- a/tools/lammps-gui/lammpsgui.h
+++ b/tools/lammps-gui/lammpsgui.h
@@ -60,6 +60,7 @@ protected:
void write_file(const QString &filename);
void update_recents(const QString &filename = "");
void update_variables();
+ void do_run(bool use_buffer);
void start_lammps();
void run_done();
@@ -77,7 +78,9 @@ private slots:
void undo();
void redo();
void clear();
- void run_buffer();
+ void run_buffer() { do_run(true); }
+ void run_file() { do_run(false); }
+
void stop_run();
void edit_variables();
void render_image();
diff --git a/tools/lammps-gui/lammpsgui.qrc b/tools/lammps-gui/lammpsgui.qrc
index d6b941b2d0..31f997f05e 100644
--- a/tools/lammps-gui/lammpsgui.qrc
+++ b/tools/lammps-gui/lammpsgui.qrc
@@ -1,48 +1,49 @@
lammps-icon-128x128.png
- help_index.table
- system-help.png
- help-browser.png
- gtk-zoom-in.png
- gtk-zoom-out.png
- gtk-zoom-fit.png
- edit-delete.png
- object-rotate-right.png
- object-rotate-left.png
- gtk-go-up.png
- gtk-go-down.png
- document-save-as.png
+ antialias.png
+ application-calc.png
+ application-exit.png
+ application-plot.png
+ axes-img.png
+ document-new.png
document-open-recent.png
document-open.png
- document-new.png
- edit-undo.png
- edit-redo.png
- edit-paste.png
- edit-cut.png
- edit-copy.png
- application-exit.png
- utilities-terminal.png
- x-office-drawing.png
- document-save.png
document-revert.png
- preferences-desktop.png
- preferences-desktop-personal.png
- preferences-desktop-font.png
- help-faq.png
- help-about.png
+ document-save-as.png
+ document-save.png
+ edit-copy.png
+ edit-cut.png
+ edit-delete.png
+ edit-paste.png
+ edit-redo.png
+ edit-undo.png
emblem-photos.png
- process-stop.png
- system-run.png
- window-close.png
- application-plot.png
- application-calc.png
- system-box.png
- axes-img.png
+ gtk-go-down.png
+ gtk-go-up.png
+ gtk-zoom-fit.png
+ gtk-zoom-in.png
+ gtk-zoom-out.png
hd-img.png
- antialias.png
+ help-about.png
+ help-browser.png
+ help-faq.png
+ help_index.table
+ object-rotate-left.png
+ object-rotate-right.png
ovito.png
- vmd.png
+ preferences-desktop-font.png
+ preferences-desktop-personal.png
+ preferences-desktop.png
+ process-stop.png
+ run-file.png
+ system-box.png
+ system-help.png
+ system-run.png
+ utilities-terminal.png
vdw-style.png
+ vmd.png
+ window-close.png
+ x-office-drawing.png
diff --git a/tools/lammps-gui/lammpsgui.ui b/tools/lammps-gui/lammpsgui.ui
index 635ec25db6..045b541da2 100644
--- a/tools/lammps-gui/lammpsgui.ui
+++ b/tools/lammps-gui/lammpsgui.ui
@@ -68,6 +68,7 @@
&Run
+
@@ -215,12 +216,23 @@
- &Run LAMMPS
+ &Run LAMMPS from Editor Buffer
Ctrl+Return
+
+
+
+
+
+ &Run LAMMPS from File
+
+
+ Ctrl+Shift+Return
+
+
diff --git a/tools/lammps-gui/lammpsrunner.h b/tools/lammps-gui/lammpsrunner.h
index 72ad52986e..a864282924 100644
--- a/tools/lammps-gui/lammpsrunner.h
+++ b/tools/lammps-gui/lammpsrunner.h
@@ -27,16 +27,22 @@ public:
// execute LAMMPS in runner thread
void run() override
{
- lammps->commands_string(input);
- delete[] input;
+ if (input) {
+ lammps->commands_string(input);
+ delete[] input;
+ } else if (file) {
+ lammps->file(file);
+ delete[] file;
+ }
emit resultReady();
}
// transfer info to worker thread and reset LAMMPS instance
- void setup_run(LammpsWrapper *_lammps, const char *_input)
+ void setup_run(LammpsWrapper *_lammps, const char *_input, const char *_file = nullptr)
{
lammps = _lammps;
input = _input;
+ file = _file;
lammps->command("clear");
}
@@ -46,6 +52,7 @@ signals:
private:
LammpsWrapper *lammps;
const char *input;
+ const char *file;
};
#endif
diff --git a/tools/lammps-gui/lammpswrapper.cpp b/tools/lammps-gui/lammpswrapper.cpp
index bb46d7c425..52ea177596 100644
--- a/tools/lammps-gui/lammpswrapper.cpp
+++ b/tools/lammps-gui/lammpswrapper.cpp
@@ -147,6 +147,17 @@ void LammpsWrapper::command(const char *input)
}
}
+void LammpsWrapper::file(const char *filename)
+{
+ if (lammps_handle) {
+#if defined(LAMMPS_GUI_USE_PLUGIN)
+ ((liblammpsplugin_t *)plugin_handle)->file(lammps_handle, filename);
+#else
+ lammps_file(lammps_handle, filename);
+#endif
+ }
+}
+
void LammpsWrapper::commands_string(const char *input)
{
if (lammps_handle) {
diff --git a/tools/lammps-gui/lammpswrapper.h b/tools/lammps-gui/lammpswrapper.h
index 555307960c..3a18b61802 100644
--- a/tools/lammps-gui/lammpswrapper.h
+++ b/tools/lammps-gui/lammpswrapper.h
@@ -23,6 +23,7 @@ public:
void close();
void finalize();
+ void file(const char *);
void command(const char *);
void commands_string(const char *);