diff --git a/tools/lammps-gui/CMakeLists.txt b/tools/lammps-gui/CMakeLists.txt
index 0b307a43cc..3609cf6297 100644
--- a/tools/lammps-gui/CMakeLists.txt
+++ b/tools/lammps-gui/CMakeLists.txt
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16)
-project(lammps-gui VERSION 1.6.3 LANGUAGES CXX)
+project(lammps-gui VERSION 1.6.4 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
diff --git a/tools/lammps-gui/TODO.md b/tools/lammps-gui/TODO.md
index d0b78b5591..e44d477a3a 100644
--- a/tools/lammps-gui/TODO.md
+++ b/tools/lammps-gui/TODO.md
@@ -2,8 +2,7 @@ LAMMPS-GUI TODO list:
# Short term goals (v1.x)
-- add a "file viewer", also view file option in editor context menu if word under cursor is a file
-- add "export to YAML" to chart viewer.
+- bundle LAMMPS tutorial input files
- implement indenting regions for (nested) loops?
- implement data file manager GUI with the following features:
diff --git a/tools/lammps-gui/chartviewer.cpp b/tools/lammps-gui/chartviewer.cpp
index d176dd98b7..38ea9d1f0d 100644
--- a/tools/lammps-gui/chartviewer.cpp
+++ b/tools/lammps-gui/chartviewer.cpp
@@ -36,7 +36,9 @@
using namespace QtCharts;
ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) :
- QWidget(parent), menu(new QMenuBar), file(new QMenu("&File")), filename(_filename)
+ QWidget(parent), menu(new QMenuBar), file(new QMenu("&File")),
+ saveAsAct(nullptr), exportCsvAct(nullptr), exportDatAct(nullptr), exportYamlAct(nullptr),
+ closeAct(nullptr), stopAct(nullptr), quitAct(nullptr), filename(_filename)
{
auto *top = new QHBoxLayout;
menu->addMenu(file);
@@ -61,6 +63,8 @@ ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) :
exportCsvAct->setIcon(QIcon(":/icons/application-calc.png"));
exportDatAct = file->addAction("Export data to &Gnuplot...", this, &ChartWindow::exportDat);
exportDatAct->setIcon(QIcon(":/icons/application-plot.png"));
+ exportYamlAct = file->addAction("Export data to &YAML...", this, &ChartWindow::exportYaml);
+ exportYamlAct->setIcon(QIcon(":/icons/yaml-file-icon.png"));
file->addSeparator();
stopAct = file->addAction("Stop &Run", this, &ChartWindow::stop_run);
stopAct->setIcon(QIcon(":/icons/process-stop.png"));
@@ -227,6 +231,40 @@ void ChartWindow::exportCsv()
}
}
}
+void ChartWindow::exportYaml()
+{
+ if (charts.empty()) return;
+ QString defaultname = filename + ".yaml";
+ if (filename.isEmpty()) defaultname = "lammpsdata.yaml";
+ QString fileName = QFileDialog::getSaveFileName(this, "Save Chart as YAML data", defaultname,
+ "Image Files (*.yaml, *.yml)");
+ if (!fileName.isEmpty()) {
+ QFile file(fileName);
+ if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ QTextStream out(&file);
+ out.setRealNumberPrecision(8);
+ out << "---\n";
+
+ out << "keywords: ['Step'";
+ for (auto &c : charts)
+ out << ", " << c->get_title();
+ out << "]\n";
+
+ out << "data: \n";
+ int lines = charts[0]->get_count();
+ for (int i = 0; i < lines; ++i) {
+ // timestep
+ out << " - [" << charts[0]->get_step(i);
+ // data
+ for (auto &c : charts)
+ out << ", " << c->get_data(i);
+ out << "]\n";
+ }
+ out << "...\n";
+ file.close();
+ }
+ }
+}
void ChartWindow::change_chart(int)
{
diff --git a/tools/lammps-gui/chartviewer.h b/tools/lammps-gui/chartviewer.h
index da0468eaf8..42afe0a9b8 100644
--- a/tools/lammps-gui/chartviewer.h
+++ b/tools/lammps-gui/chartviewer.h
@@ -50,6 +50,7 @@ private slots:
void saveAs();
void exportDat();
void exportCsv();
+ void exportYaml();
void change_chart(int index);
@@ -61,7 +62,7 @@ private:
QMenuBar *menu;
QMenu *file;
QComboBox *columns;
- QAction *saveAsAct, *exportCsvAct, *exportDatAct;
+ QAction *saveAsAct, *exportCsvAct, *exportDatAct, *exportYamlAct;
QAction *closeAct, *stopAct, *quitAct;
QString filename;
diff --git a/tools/lammps-gui/icons/application-yaml.png b/tools/lammps-gui/icons/application-yaml.png
new file mode 100644
index 0000000000..d1457147d4
Binary files /dev/null and b/tools/lammps-gui/icons/application-yaml.png differ
diff --git a/tools/lammps-gui/lammpsgui.qrc b/tools/lammps-gui/lammpsgui.qrc
index 8cb3f3244e..fa09b6426b 100644
--- a/tools/lammps-gui/lammpsgui.qrc
+++ b/tools/lammps-gui/lammpsgui.qrc
@@ -9,6 +9,7 @@
icons/application-calc.png
icons/application-exit.png
icons/application-plot.png
+ icons/application-yaml.png
icons/axes-img.png
icons/document-new.png
icons/document-open-recent.png