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