diff --git a/tools/lammps-gui/icons/tutorial1-logo.png b/tools/lammps-gui/icons/tutorial1-logo.png new file mode 100644 index 0000000000..20500fdbe3 Binary files /dev/null and b/tools/lammps-gui/icons/tutorial1-logo.png differ diff --git a/tools/lammps-gui/lammpsgui.cpp b/tools/lammps-gui/lammpsgui.cpp index 0be49a58be..dadd3756c1 100644 --- a/tools/lammps-gui/lammpsgui.cpp +++ b/tools/lammps-gui/lammpsgui.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -49,6 +50,8 @@ #include #include #include +#include +#include #include #include @@ -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("

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 lammpstutorials.github.io.

" + "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(); diff --git a/tools/lammps-gui/lammpsgui.h b/tools/lammps-gui/lammpsgui.h index b9f67d5609..03f15eb550 100644 --- a/tools/lammps-gui/lammpsgui.h +++ b/tools/lammps-gui/lammpsgui.h @@ -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; diff --git a/tools/lammps-gui/lammpsgui.qrc b/tools/lammps-gui/lammpsgui.qrc index 510d86689f..02da934b5c 100644 --- a/tools/lammps-gui/lammpsgui.qrc +++ b/tools/lammps-gui/lammpsgui.qrc @@ -2,6 +2,7 @@ icons/lammps-icon-128x128.png + icons/tutorial1-logo.png help_index.table lammps_internal_commands.txt diff --git a/tools/lammps-gui/lammpsgui.ui b/tools/lammps-gui/lammpsgui.ui index e9edb12c69..64a9d85061 100644 --- a/tools/lammps-gui/lammpsgui.ui +++ b/tools/lammps-gui/lammpsgui.ui @@ -79,6 +79,16 @@ + + + &Tutorials + + + + + + + &About @@ -103,6 +113,7 @@ + @@ -320,7 +331,7 @@ - LAMMPS &Manual + LAMMPS Online &Manual Ctrl+Shift+M @@ -331,7 +342,7 @@ - LAMMPS &Tutorial + LAMMPS &Tutorial Website Ctrl+Shift+T @@ -473,6 +484,22 @@ Ctrl+Shift+W + + + + + + Start LAMMPS Tutorial &1 + + + + + + + + Start LAMMPS Tutorial &2 + +