From 7c804f784342de2a6bb82e8fde502fbdbb443a9e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 17 Jul 2024 23:02:04 -0400 Subject: [PATCH] add feature to image viewer that copies the dump image command line to the clipboard --- tools/lammps-gui/icons/file-clipboard.png | Bin 0 -> 2618 bytes tools/lammps-gui/imageviewer.cpp | 40 +++++++++++++++++++--- tools/lammps-gui/imageviewer.h | 4 ++- tools/lammps-gui/lammpsgui.qrc | 1 + 4 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 tools/lammps-gui/icons/file-clipboard.png diff --git a/tools/lammps-gui/icons/file-clipboard.png b/tools/lammps-gui/icons/file-clipboard.png new file mode 100644 index 0000000000000000000000000000000000000000..57bffcf488e32a82a8497e51d5873c4e659cbb60 GIT binary patch literal 2618 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 literal 0 HcmV?d00001 diff --git a/tools/lammps-gui/imageviewer.cpp b/tools/lammps-gui/imageviewer.cpp index 915184de17..b3ebb66b3b 100644 --- a/tools/lammps-gui/imageviewer.cpp +++ b/tools/lammps-gui/imageviewer.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -132,8 +133,9 @@ static const QString blank(" "); ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidget *parent) : QDialog(parent), menuBar(new QMenuBar), imageLabel(new QLabel), scrollArea(new QScrollArea), - lammps(_lammps), group("all"), filename(fileName), useelements(false), usediameter(false), - usesigma(false) + saveAsAct(nullptr), copyAct(nullptr), cmdAct(nullptr), zoomInAct(nullptr), zoomOutAct(nullptr), + normalSizeAct(nullptr), lammps(_lammps), group("all"), filename(fileName), useelements(false), + usediameter(false), usesigma(false) { imageLabel->setBackgroundRole(QPalette::Base); imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); @@ -211,6 +213,8 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge rotdown->setToolTip("Rotate down by 15 degrees"); auto *reset = new QPushButton(QIcon(":/icons/gtk-zoom-fit.png"), ""); reset->setToolTip("Reset view to defaults"); + auto *copycmd = new QPushButton(QIcon(":/icons/file-clipboard.png"), ""); + copycmd->setToolTip("Copy current dump image command line to clipboard"); auto *combo = new QComboBox; combo->setObjectName("group"); combo->setToolTip("Select group to display"); @@ -244,6 +248,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge menuLayout->addWidget(rotup); menuLayout->addWidget(rotdown); menuLayout->addWidget(reset); + menuLayout->addWidget(copycmd); menuLayout->addWidget(new QLabel(" Group: ")); menuLayout->addWidget(combo); @@ -259,6 +264,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge connect(rotup, &QPushButton::released, this, &ImageViewer::do_rot_up); connect(rotdown, &QPushButton::released, this, &ImageViewer::do_rot_down); connect(reset, &QPushButton::released, this, &ImageViewer::reset_view); + connect(copycmd, &QPushButton::released, this, &ImageViewer::cmd_to_clipboard); connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(change_group(int))); mainLayout->addLayout(menuLayout); @@ -419,6 +425,26 @@ void ImageViewer::do_rot_up() createImage(); } +void ImageViewer::cmd_to_clipboard() +{ + auto words = last_dump_cmd.split(" ", Qt::SkipEmptyParts); + QString blank = QStringLiteral(" "); + int modidx = words.indexOf("modify"); + int maxidx = words.size(); + + QString dumpcmd = "dump viz "; + dumpcmd += words[1] + " image 100 myimage-*.ppm"; + for (int i = 4; i < modidx; ++i) + dumpcmd += blank + words[i]; + dumpcmd += '\n'; + + dumpcmd += "dump_modify viz pad 9"; + for (int i = modidx + 1; i < maxidx; ++i) + dumpcmd += blank + words[i]; + dumpcmd += '\n'; + QGuiApplication::clipboard()->setText(dumpcmd); +} + void ImageViewer::change_group(int) { auto *box = findChild("group"); @@ -460,10 +486,10 @@ void ImageViewer::createImage() } usediameter = lammps->extract_setting("radius_flag") != 0; // use Lennard-Jones sigma for radius, if available - usesigma = false; + usesigma = false; const char *pair_style = (const char *)lammps->extract_global("pair_style"); if (!useelements && pair_style && (strncmp(pair_style, "lj/", 3) == 0)) { - double **sigma = (double **) lammps->extract_pair("sigma"); + double **sigma = (double **)lammps->extract_pair("sigma"); if (sigma) { usesigma = true; for (int i = 1; i <= ntypes; ++i) @@ -518,6 +544,7 @@ void ImageViewer::createImage() if (usesigma) dumpcmd += blank + adiams + blank; settings.endGroup(); + last_dump_cmd = dumpcmd; lammps->command(dumpcmd.toLocal8Bit()); QImageReader reader(dumpfile.fileName()); @@ -566,10 +593,13 @@ void ImageViewer::createActions() saveAsAct->setIcon(QIcon(":/icons/document-save-as.png")); saveAsAct->setEnabled(false); fileMenu->addSeparator(); - copyAct = fileMenu->addAction("&Copy", this, &ImageViewer::copy); + copyAct = fileMenu->addAction("&Copy Image", this, &ImageViewer::copy); copyAct->setIcon(QIcon(":/icons/edit-copy.png")); copyAct->setShortcut(QKeySequence::Copy); copyAct->setEnabled(false); + cmdAct = fileMenu->addAction("Copy &dump image command", this, &ImageViewer::cmd_to_clipboard); + cmdAct->setIcon(QIcon(":/icons/file-clipboard.png")); + cmdAct->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_D)); fileMenu->addSeparator(); QAction *exitAct = fileMenu->addAction("&Close", this, &QWidget::close); exitAct->setIcon(QIcon(":/icons/window-close.png")); diff --git a/tools/lammps-gui/imageviewer.h b/tools/lammps-gui/imageviewer.h index 72f4c3a1e2..9612a0e5d9 100644 --- a/tools/lammps-gui/imageviewer.h +++ b/tools/lammps-gui/imageviewer.h @@ -55,6 +55,7 @@ private slots: void do_rot_right(); void do_rot_up(); void do_rot_down(); + void cmd_to_clipboard(); void change_group(int); public: @@ -77,14 +78,15 @@ private: QAction *saveAsAct; QAction *copyAct; + QAction *cmdAct; QAction *zoomInAct; QAction *zoomOutAct; QAction *normalSizeAct; - QAction *fitToWindowAct; LammpsWrapper *lammps; QString group; QString filename; + QString last_dump_cmd; int xsize, ysize; int hrot, vrot; double zoom, vdwfactor; diff --git a/tools/lammps-gui/lammpsgui.qrc b/tools/lammps-gui/lammpsgui.qrc index fe1129a4a3..b4bf6b578d 100644 --- a/tools/lammps-gui/lammpsgui.qrc +++ b/tools/lammps-gui/lammpsgui.qrc @@ -25,6 +25,7 @@ icons/emblem-photos.png icons/expand-text.png icons/export-movie.png + icons/file-clipboard.png icons/format-indent-less-3.png icons/go-first.png icons/go-last.png