partial implementation of wizards to start tutorials

This commit is contained in:
Axel Kohlmeyer
2024-08-07 22:44:10 -04:00
parent 03bc0768cd
commit da26b69d8d
5 changed files with 163 additions and 20 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

@ -37,6 +37,7 @@
#include <QFont>
#include <QGuiApplication>
#include <QLabel>
#include <QLineEdit>
#include <QLocale>
#include <QMessageBox>
#include <QProcess>
@ -49,6 +50,8 @@
#include <QTextStream>
#include <QTimer>
#include <QUrl>
#include <QWizard>
#include <QWizardPage>
#include <algorithm>
#include <cstdint>
@ -67,8 +70,8 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
QMainWindow(parent), ui(new Ui::LammpsGui), highlighter(nullptr), capturer(nullptr),
status(nullptr), logwindow(nullptr), imagewindow(nullptr), chartwindow(nullptr),
slideshow(nullptr), logupdater(nullptr), dirstatus(nullptr), progress(nullptr),
prefdialog(nullptr), lammpsstatus(nullptr), varwindow(nullptr), runner(nullptr),
is_running(false), run_counter(0)
prefdialog(nullptr), lammpsstatus(nullptr), varwindow(nullptr), wizard(nullptr),
runner(nullptr), is_running(false), run_counter(0)
{
// enforce using the plain ASCII C locale within the GUI.
QLocale::setDefault(QLocale("C"));
@ -213,11 +216,13 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
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);
connect(ui->actionLAMMPS_Tutorial, &QAction::triggered, this, &LammpsGui::tutorial_web);
connect(ui->actionTutorial1, &QAction::triggered, this, &LammpsGui::start_tutorial1);
connect(ui->actionTutorial2, &QAction::triggered, this, &LammpsGui::start_tutorial2);
connect(ui->actionAbout_LAMMPS_GUI, &QAction::triggered, this, &LammpsGui::about);
connect(ui->action_Help, &QAction::triggered, this, &LammpsGui::help);
connect(ui->actionLAMMPS_GUI_Howto, &QAction::triggered, this, &LammpsGui::howto);
connect(ui->actionLAMMPS_Manual, &QAction::triggered, this, &LammpsGui::manual);
connect(ui->actionLAMMPS_Tutorial, &QAction::triggered, this, &LammpsGui::tutorial);
connect(ui->actionPreferences, &QAction::triggered, this, &LammpsGui::preferences);
connect(ui->actionDefaults, &QAction::triggered, this, &LammpsGui::defaults);
connect(ui->actionView_in_OVITO, &QAction::triggered, this, &LammpsGui::start_exe);
@ -1495,11 +1500,113 @@ void LammpsGui::manual()
QDesktopServices::openUrl(QUrl(QString("https://docs.lammps.org%1").arg(docver)));
}
void LammpsGui::tutorial()
void LammpsGui::tutorial_web()
{
QDesktopServices::openUrl(QUrl("https://lammpstutorials.github.io/"));
}
void LammpsGui::start_tutorial1()
{
if (wizard) delete wizard;
wizard = new QWizard;
wizard->addPage(tutorial1_intro());
wizard->addPage(tutorial1_directory());
wizard->setWindowTitle("Tutorial 1 Setup Wizard");
wizard->show();
}
QWizardPage *LammpsGui::tutorial1_intro()
{
auto *page = new QWizardPage;
page->setTitle("Getting Started With Tutorial 1");
auto *logo = new QLabel;
logo->setPixmap(QPixmap(":/icons/tutorial1-logo.png"));
logo->setFrameStyle(QFrame::Panel);
logo->setLineWidth(2);
auto *label = new QLabel("<p>This wizard will help you to select and populate a folder "
"with the materials to work through Tutorial 1 from the LAMMPS "
"tutorials by Simon Gravelle at <b>lammpstutorials.github.io</b>.</p>"
"Please click on \"Next\" to begin.");
label->setWordWrap(true);
label->setMargin(10);
label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
label->setLineWidth(2);
auto *main = new QHBoxLayout;
main->addWidget(logo);
main->addWidget(label);
main->setStretch(0, 0);
main->setStretch(1, 100);
auto *layout = new QVBoxLayout;
layout->addLayout(main);
page->setLayout(layout);
return page;
}
QWizardPage *LammpsGui::tutorial1_directory()
{
auto *page = new QWizardPage;
page->setTitle("Select Directory for Tutorial 1");
auto *logo = new QLabel;
logo->setPixmap(QPixmap(":/icons/tutorial1-logo.png"));
logo->setFrameStyle(QFrame::Panel);
logo->setLineWidth(2);
auto *label = new QLabel("Please select a directory to store the files for Tutorial 1");
label->setWordWrap(true);
label->setMargin(10);
label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
label->setLineWidth(2);
auto *main = new QHBoxLayout;
main->addWidget(logo);
main->addWidget(label);
main->setStretch(0, 0);
main->setStretch(1, 100);
auto *directory = new QLineEdit(current_dir + "/" + "my-first-input");
auto *layout = new QVBoxLayout;
layout->addLayout(main);
layout->addWidget(directory);
page->setLayout(layout);
return page;
}
void LammpsGui::start_tutorial2()
{
if (wizard) delete wizard;
wizard = new QWizard;
wizard->addPage(tutorial2_intro());
wizard->addPage(tutorial2_directory());
wizard->setWindowTitle("Tutorial 2 Setup Wizard");
wizard->show();
}
QWizardPage *LammpsGui::tutorial2_intro()
{
auto *page = new QWizardPage;
page->setTitle("Starting Tutorial 2");
auto *label = new QLabel("This wizard will guide you to get set up for working "
"through the Tutorial 2 from lammpstutorials.github.io.");
label->setWordWrap(true);
auto *layout = new QVBoxLayout;
layout->addWidget(label);
page->setLayout(layout);
return page;
}
QWizardPage *LammpsGui::tutorial2_directory()
{
auto *page = new QWizardPage;
page->setTitle("Select Directory for Tutorial 2");
auto *label = new QLabel("Please select a directory to store the files for tutorial 2");
label->setWordWrap(true);
auto *layout = new QVBoxLayout;
layout->addWidget(label);
page->setLayout(layout);
return page;
}
void LammpsGui::howto()
{
if (docver.isEmpty()) setDocver();

View File

@ -34,9 +34,13 @@
// forward declarations
class GeneralTab;
class LammpsRunner;
class LogWindow;
class QLabel;
class QPlainTextEdit;
class QProgressBar;
class QTimer;
class QWidget;
class QWizard;
class QWizardPage;
QT_BEGIN_NAMESPACE
namespace Ui {
@ -44,18 +48,15 @@ class LammpsGui;
}
QT_END_NAMESPACE
class QLabel;
class QPlainTextEdit;
class QProgressBar;
class QTimer;
class QWidget;
class Highlighter;
class StdCapture;
class Preferences;
class ImageViewer;
class ChartWindow;
class GeneralTab;
class Highlighter;
class ImageViewer;
class LammpsRunner;
class LogWindow;
class Preferences;
class SlideShow;
class StdCapture;
class LammpsGui : public QMainWindow {
Q_OBJECT
@ -79,6 +80,10 @@ protected:
void run_done();
void setDocver();
void autoSave();
QWizardPage *tutorial1_intro();
QWizardPage *tutorial1_directory();
QWizardPage *tutorial2_intro();
QWizardPage *tutorial2_directory();
void purge_inspect_list();
bool eventFilter(QObject *watched, QEvent *event) override;
@ -113,7 +118,9 @@ private slots:
void about();
void help();
void manual();
void tutorial();
void tutorial_web();
void start_tutorial1();
void start_tutorial2();
void howto();
void logupdate();
void modified();
@ -137,6 +144,7 @@ private:
Preferences *prefdialog;
QLabel *lammpsstatus;
QLabel *varwindow;
QWizard *wizard;
struct InspectData {
QWidget *info;

View File

@ -2,6 +2,7 @@
<RCC>
<qresource prefix="/">
<file>icons/lammps-icon-128x128.png</file>
<file>icons/tutorial1-logo.png</file>
<file>help_index.table</file>
<!-- This file is updated with: grep 'mycmd ==' ../../src/input.cpp | sed -e 's/^.*mycmd == "\(.*\)".*$/\1/' > lammps_internal_commands.txt -->
<file>lammps_internal_commands.txt</file>

View File

@ -79,6 +79,16 @@
<addaction name="actionView_in_OVITO"/>
<addaction name="actionView_in_VMD"/>
</widget>
<widget class="QMenu" name="menu_Tutorial">
<property name="title">
<string>&amp;Tutorials</string>
</property>
<addaction name="actionLAMMPS_Tutorial"/>
<addaction name="separator"/>
<addaction name="actionTutorial1"/>
<addaction name="actionTutorial2"/>
<addaction name="separator"/>
</widget>
<widget class="QMenu" name="menuAbout">
<property name="title">
<string>&amp;About</string>
@ -103,6 +113,7 @@
<addaction name="menuEdit"/>
<addaction name="menu_Run"/>
<addaction name="menu_View"/>
<addaction name="menu_Tutorial"/>
<addaction name="menuAbout"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
@ -320,7 +331,7 @@
<iconset theme=":/icons/help-browser.png"/>
</property>
<property name="text">
<string>LAMMPS &amp;Manual</string>
<string>LAMMPS Online &amp;Manual</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+M</string>
@ -331,7 +342,7 @@
<iconset theme=":/icons/help-tutorial.png"/>
</property>
<property name="text">
<string>LAMMPS &amp;Tutorial</string>
<string>LAMMPS &amp;Tutorial Website</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+T</string>
@ -473,6 +484,22 @@
<string>Ctrl+Shift+W</string>
</property>
</action>
<action name="actionTutorial1">
<property name="icon">
<iconset theme=":/icons/document-new.png"/>
</property>
<property name="text">
<string>Start LAMMPS Tutorial &amp;1</string>
</property>
</action>
<action name="actionTutorial2">
<property name="icon">
<iconset theme=":/icons/document-new.png"/>
</property>
<property name="text">
<string>Start LAMMPS Tutorial &amp;2</string>
</property>
</action>
<action name="actionLAMMPS_GUI_Howto">
<property name="icon">
<iconset theme=":/icons/system-help.png"/>