add non-functional slide show window to GUI

# Conflicts:
#	tools/lammps-gui/CMakeLists.txt
#	tools/lammps-gui/lammpsgui.cpp
#	tools/lammps-gui/lammpsgui.qrc
#	tools/lammps-gui/lammpsgui.ui
This commit is contained in:
Axel Kohlmeyer
2023-08-29 18:45:04 -04:00
parent e83e9ab78b
commit 514fec1b11
8 changed files with 308 additions and 8 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(lammps-gui VERSION 1.3.1 LANGUAGES CXX) project(lammps-gui VERSION 1.4.0 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
@ -72,17 +72,17 @@ find_package(Qt5 5.12 REQUIRED COMPONENTS Widgets Charts)
set(PROJECT_SOURCES set(PROJECT_SOURCES
main.cpp main.cpp
lammpsgui.cpp
lammpsgui.h
lammpsgui.ui
chartviewer.cpp
chartviewer.h
codeeditor.cpp codeeditor.cpp
codeeditor.h codeeditor.h
highlighter.cpp highlighter.cpp
highlighter.h highlighter.h
imageviewer.cpp imageviewer.cpp
imageviewer.h imageviewer.h
chartviewer.cpp
chartviewer.h
lammpsgui.cpp
lammpsgui.h
lammpsgui.ui
lammpsrunner.h lammpsrunner.h
lammpswrapper.cpp lammpswrapper.cpp
lammpswrapper.h lammpswrapper.h
@ -93,6 +93,8 @@ set(PROJECT_SOURCES
preferences.h preferences.h
setvariables.cpp setvariables.cpp
setvariables.h setvariables.h
slideshow.h
slideshow.cpp
stdcapture.cpp stdcapture.cpp
${PLUGIN_LOADER_SRC} ${PLUGIN_LOADER_SRC}
${ICON_RC_FILE} ${ICON_RC_FILE}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -20,6 +20,7 @@
#include "logwindow.h" #include "logwindow.h"
#include "preferences.h" #include "preferences.h"
#include "setvariables.h" #include "setvariables.h"
#include "slideshow.h"
#include "stdcapture.h" #include "stdcapture.h"
#include "ui_lammpsgui.h" #include "ui_lammpsgui.h"
@ -96,8 +97,8 @@ static bool has_exe(const QString &exe)
LammpsGui::LammpsGui(QWidget *parent, const char *filename) : LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
QMainWindow(parent), ui(new Ui::LammpsGui), highlighter(nullptr), capturer(nullptr), QMainWindow(parent), ui(new Ui::LammpsGui), highlighter(nullptr), capturer(nullptr),
status(nullptr), logwindow(nullptr), imagewindow(nullptr), chartwindow(nullptr), status(nullptr), logwindow(nullptr), imagewindow(nullptr), chartwindow(nullptr),
logupdater(nullptr), dirstatus(nullptr), progress(nullptr), prefdialog(nullptr), slideshow(nullptr), logupdater(nullptr), dirstatus(nullptr), progress(nullptr),
lammpsstatus(nullptr), varwindow(nullptr) prefdialog(nullptr), lammpsstatus(nullptr), varwindow(nullptr)
{ {
// enforce using the plain ASCII C locale within the GUI. // enforce using the plain ASCII C locale within the GUI.
QLocale::setDefault(QLocale("C")); QLocale::setDefault(QLocale("C"));
@ -239,6 +240,7 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
connect(ui->actionView_Log_Window, &QAction::triggered, this, &LammpsGui::view_log); connect(ui->actionView_Log_Window, &QAction::triggered, this, &LammpsGui::view_log);
connect(ui->actionView_Graph_Window, &QAction::triggered, this, &LammpsGui::view_chart); connect(ui->actionView_Graph_Window, &QAction::triggered, this, &LammpsGui::view_chart);
connect(ui->actionView_Image_Window, &QAction::triggered, this, &LammpsGui::view_image); connect(ui->actionView_Image_Window, &QAction::triggered, this, &LammpsGui::view_image);
connect(ui->actionView_Slide_Show, &QAction::triggered, this, &LammpsGui::view_slides);
connect(ui->actionView_Variable_Window, &QAction::triggered, this, &LammpsGui::view_variables); connect(ui->actionView_Variable_Window, &QAction::triggered, this, &LammpsGui::view_variables);
connect(ui->action_1, &QAction::triggered, this, &LammpsGui::open_recent); connect(ui->action_1, &QAction::triggered, this, &LammpsGui::open_recent);
connect(ui->action_2, &QAction::triggered, this, &LammpsGui::open_recent); connect(ui->action_2, &QAction::triggered, this, &LammpsGui::open_recent);
@ -265,15 +267,19 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
auto *lammpsrun = new QPushButton(QIcon(":/system-run.png"), ""); auto *lammpsrun = new QPushButton(QIcon(":/system-run.png"), "");
auto *lammpsstop = new QPushButton(QIcon(":/process-stop.png"), ""); auto *lammpsstop = new QPushButton(QIcon(":/process-stop.png"), "");
auto *lammpsimage = new QPushButton(QIcon(":/emblem-photos.png"), ""); auto *lammpsimage = new QPushButton(QIcon(":/emblem-photos.png"), "");
auto *lammpsslide = new QPushButton(QIcon(":/image-x-generic.png"), "");
lammpsrun->setToolTip("Run LAMMPS on input"); lammpsrun->setToolTip("Run LAMMPS on input");
lammpsstop->setToolTip("Stop LAMMPS"); lammpsstop->setToolTip("Stop LAMMPS");
lammpsimage->setToolTip("Create snapshot image"); lammpsimage->setToolTip("Create snapshot image");
lammpsslide->setToolTip("View Slide Show");
ui->statusbar->addWidget(lammpsrun); ui->statusbar->addWidget(lammpsrun);
ui->statusbar->addWidget(lammpsstop); ui->statusbar->addWidget(lammpsstop);
ui->statusbar->addWidget(lammpsimage); ui->statusbar->addWidget(lammpsimage);
ui->statusbar->addWidget(lammpsslide);
connect(lammpsrun, &QPushButton::released, this, &LammpsGui::run_buffer); connect(lammpsrun, &QPushButton::released, this, &LammpsGui::run_buffer);
connect(lammpsstop, &QPushButton::released, this, &LammpsGui::stop_run); connect(lammpsstop, &QPushButton::released, this, &LammpsGui::stop_run);
connect(lammpsimage, &QPushButton::released, this, &LammpsGui::render_image); connect(lammpsimage, &QPushButton::released, this, &LammpsGui::render_image);
connect(lammpsslide, &QPushButton::released, this, &LammpsGui::view_slides);
status = new QLabel("Ready."); status = new QLabel("Ready.");
status->setFixedWidth(300); status->setFixedWidth(300);
@ -307,6 +313,7 @@ LammpsGui::~LammpsGui()
delete chartwindow; delete chartwindow;
delete dirstatus; delete dirstatus;
delete varwindow; delete varwindow;
delete slideshow;
} }
void LammpsGui::new_document() void LammpsGui::new_document()
@ -982,6 +989,15 @@ void LammpsGui::render_image()
imagewindow->show(); imagewindow->show();
} }
void LammpsGui::view_slides()
{
if (!slideshow) slideshow = new SlideShow(current_file, &lammps);
if (slideshow->isVisible())
slideshow->hide();
else
slideshow->show();
}
void LammpsGui::view_chart() void LammpsGui::view_chart()
{ {
QSettings settings; QSettings settings;

View File

@ -45,6 +45,7 @@ class StdCapture;
class Preferences; class Preferences;
class ImageViewer; class ImageViewer;
class ChartWindow; class ChartWindow;
class SlideShow;
class LammpsGui : public QMainWindow { class LammpsGui : public QMainWindow {
Q_OBJECT Q_OBJECT
@ -84,6 +85,7 @@ private slots:
void stop_run(); void stop_run();
void edit_variables(); void edit_variables();
void render_image(); void render_image();
void view_slides();
void view_image(); void view_image();
void view_chart(); void view_chart();
void view_log(); void view_log();
@ -107,6 +109,7 @@ private:
LogWindow *logwindow; LogWindow *logwindow;
ImageViewer *imagewindow; ImageViewer *imagewindow;
ChartWindow *chartwindow; ChartWindow *chartwindow;
SlideShow *slideshow;
QTimer *logupdater; QTimer *logupdater;
QLabel *dirstatus; QLabel *dirstatus;
QProgressBar *progress; QProgressBar *progress;

View File

@ -29,6 +29,7 @@
<file>help-browser.png</file> <file>help-browser.png</file>
<file>help-faq.png</file> <file>help-faq.png</file>
<file>help_index.table</file> <file>help_index.table</file>
<file>image-x-generic.png</file>
<file>object-rotate-left.png</file> <file>object-rotate-left.png</file>
<file>object-rotate-right.png</file> <file>object-rotate-right.png</file>
<file>ovito.png</file> <file>ovito.png</file>

View File

@ -93,6 +93,7 @@
<addaction name="actionView_Log_Window"/> <addaction name="actionView_Log_Window"/>
<addaction name="actionView_Graph_Window"/> <addaction name="actionView_Graph_Window"/>
<addaction name="actionView_Image_Window"/> <addaction name="actionView_Image_Window"/>
<addaction name="actionView_Slide_Show"/>
<addaction name="actionView_Variable_Window"/> <addaction name="actionView_Variable_Window"/>
</widget> </widget>
<addaction name="menuFile"/> <addaction name="menuFile"/>
@ -352,6 +353,17 @@
<string>Ctrl+Shift+C</string> <string>Ctrl+Shift+C</string>
</property> </property>
</action> </action>
<action name="actionView_Slide_Show">
<property name="icon">
<iconset theme=":/image-x-generic.png"/>
</property>
<property name="text">
<string>&amp;Slide Show Window</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+W</string>
</property>
</action>
<action name="action_1"> <action name="action_1">
<property name="icon"> <property name="icon">
<iconset theme=":/document-open-recent.png"/> <iconset theme=":/document-open-recent.png"/>

View File

@ -0,0 +1,190 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "slideshow.h"
#include "lammpswrapper.h"
#include <QAction>
#include <QDialogButtonBox>
#include <QDir>
#include <QFileDialog>
#include <QGuiApplication>
#include <QImage>
#include <QImageReader>
#include <QLabel>
#include <QMenuBar>
#include <QMessageBox>
#include <QPalette>
#include <QPoint>
#include <QPushButton>
#include <QScreen>
#include <QScrollArea>
#include <QScrollBar>
#include <QSettings>
#include <QStatusBar>
#include <QVBoxLayout>
#include <QWidgetAction>
#include <cmath>
static const QString blank(" ");
SlideShow::SlideShow(const QString &fileName, LammpsWrapper *_lammps, QWidget *parent) :
QDialog(parent), imageLabel(new QLabel), scrollArea(new QScrollArea), menuBar(new QMenuBar),
lammps(_lammps)
{
imageLabel->setBackgroundRole(QPalette::Base);
imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
imageLabel->setScaledContents(true);
imageLabel->minimumSizeHint();
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setWidget(imageLabel);
scrollArea->setVisible(false);
buttonBox = new QDialogButtonBox(QDialogButtonBox::Close);
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
QVBoxLayout *mainLayout = new QVBoxLayout;
QSettings settings;
mainLayout->addWidget(scrollArea);
mainLayout->addWidget(buttonBox);
setWindowTitle(QString("Slide Show: ") + QFileInfo(fileName).fileName());
createActions();
scaleFactor = 1.0;
resize(image.width() + 20, image.height() + 50);
scrollArea->setVisible(true);
fitToWindowAct->setEnabled(true);
updateActions();
if (!fitToWindowAct->isChecked()) imageLabel->adjustSize();
setLayout(mainLayout);
}
void SlideShow::saveAs()
{
QString fileName = QFileDialog::getSaveFileName(this, "Save Image File As", QString(),
"Image Files (*.jpg *.png *.bmp *.ppm)");
saveFile(fileName);
}
void SlideShow::copy() {}
void SlideShow::zoomIn()
{
scaleImage(1.25);
}
void SlideShow::zoomOut()
{
scaleImage(0.8);
}
void SlideShow::normalSize()
{
imageLabel->adjustSize();
scaleFactor = 1.0;
}
void SlideShow::fitToWindow()
{
bool fitToWindow = fitToWindowAct->isChecked();
scrollArea->setWidgetResizable(fitToWindow);
if (!fitToWindow) normalSize();
updateActions();
}
void SlideShow::saveFile(const QString &fileName)
{
if (!fileName.isEmpty()) image.save(fileName);
}
void SlideShow::createActions()
{
QMenu *fileMenu = menuBar->addMenu("&File");
saveAsAct = fileMenu->addAction("&Save As...", this, &SlideShow::saveAs);
saveAsAct->setIcon(QIcon(":/document-save-as.png"));
saveAsAct->setEnabled(false);
fileMenu->addSeparator();
copyAct = fileMenu->addAction("&Copy", this, &SlideShow::copy);
copyAct->setIcon(QIcon(":/edit-copy.png"));
copyAct->setShortcut(QKeySequence::Copy);
copyAct->setEnabled(false);
fileMenu->addSeparator();
QAction *exitAct = fileMenu->addAction("&Close", this, &QWidget::close);
exitAct->setIcon(QIcon(":/window-close.png"));
exitAct->setShortcut(QKeySequence::fromString("Ctrl+W"));
QMenu *viewMenu = menuBar->addMenu("&View");
zoomInAct = viewMenu->addAction("Image Zoom &In (25%)", this, &SlideShow::zoomIn);
zoomInAct->setShortcut(QKeySequence::ZoomIn);
zoomInAct->setIcon(QIcon(":/gtk-zoom-in.png"));
zoomInAct->setEnabled(false);
zoomOutAct = viewMenu->addAction("Image Zoom &Out (25%)", this, &SlideShow::zoomOut);
zoomOutAct->setShortcut(QKeySequence::ZoomOut);
zoomOutAct->setIcon(QIcon(":/gtk-zoom-out.png"));
zoomOutAct->setEnabled(false);
normalSizeAct = viewMenu->addAction("&Reset Image Size", this, &SlideShow::normalSize);
normalSizeAct->setShortcut(QKeySequence::fromString("Ctrl+0"));
normalSizeAct->setIcon(QIcon(":/gtk-zoom-fit.png"));
normalSizeAct->setEnabled(false);
viewMenu->addSeparator();
fitToWindowAct = viewMenu->addAction("&Fit to Window", this, &SlideShow::fitToWindow);
fitToWindowAct->setEnabled(false);
fitToWindowAct->setCheckable(true);
fitToWindowAct->setShortcut(QKeySequence::fromString("Ctrl+="));
}
void SlideShow::updateActions()
{
saveAsAct->setEnabled(!image.isNull());
copyAct->setEnabled(!image.isNull());
zoomInAct->setEnabled(!fitToWindowAct->isChecked());
zoomOutAct->setEnabled(!fitToWindowAct->isChecked());
normalSizeAct->setEnabled(!fitToWindowAct->isChecked());
}
void SlideShow::scaleImage(double factor)
{
scaleFactor *= factor;
#if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
imageLabel->resize(scaleFactor * imageLabel->pixmap()->size());
#else
imageLabel->resize(scaleFactor * imageLabel->pixmap(Qt::ReturnByValue).size());
#endif
adjustScrollBar(scrollArea->horizontalScrollBar(), factor);
adjustScrollBar(scrollArea->verticalScrollBar(), factor);
zoomInAct->setEnabled(scaleFactor < 3.0);
zoomOutAct->setEnabled(scaleFactor > 0.333);
}
void SlideShow::adjustScrollBar(QScrollBar *scrollBar, double factor)
{
scrollBar->setValue(
int(factor * scrollBar->value() + ((factor - 1) * scrollBar->pageStep() / 2)));
}
// Local Variables:
// c-basic-offset: 4
// End:

View File

@ -0,0 +1,76 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
LAMMPS development team: developers@lammps.org
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifndef SLIDESHOW_H
#define SLIDESHOW_H
#include <QComboBox>
#include <QDialog>
#include <QImage>
#include <QString>
class QAction;
class QMenuBar;
class QDialogButtonBox;
class QLabel;
class QObject;
class QScrollArea;
class QScrollBar;
class QStatusBar;
class LammpsWrapper;
class QComboBox;
class SlideShow : public QDialog {
Q_OBJECT
public:
explicit SlideShow(const QString &fileName, LammpsWrapper *_lammps,
QWidget *parent = nullptr);
private slots:
void saveAs();
void copy();
void zoomIn();
void zoomOut();
void normalSize();
void fitToWindow();
private:
void createActions();
void updateActions();
void saveFile(const QString &fileName);
void scaleImage(double factor);
void adjustScrollBar(QScrollBar *scrollBar, double factor);
private:
QImage image;
QMenuBar *menuBar;
QLabel *imageLabel;
QScrollArea *scrollArea;
QDialogButtonBox *buttonBox;
double scaleFactor = 1.0;
QAction *saveAsAct;
QAction *copyAct;
QAction *zoomInAct;
QAction *zoomOutAct;
QAction *normalSizeAct;
QAction *fitToWindowAct;
LammpsWrapper *lammps;
};
#endif
// Local Variables:
// c-basic-offset: 4
// End: