117 lines
2.9 KiB
C++
117 lines
2.9 KiB
C++
/*
|
|
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
|
* running old operating systems and software designed for IBM
|
|
* PC systems and compatibles from 1981 through fairly recent
|
|
* system designs based on the PCI bus.
|
|
*
|
|
* This file is part of the 86Box distribution.
|
|
*
|
|
* Header for 86Box VM manager add machine wizard
|
|
*
|
|
*
|
|
*
|
|
* Authors: cold-brewed
|
|
*
|
|
* Copyright 2024 cold-brewed
|
|
*/
|
|
|
|
#ifndef QT_VMMANAGER_ADDMACHINE_H
|
|
#define QT_VMMANAGER_ADDMACHINE_H
|
|
|
|
#include <QLabel>
|
|
#include <QLineEdit>
|
|
#include <QPlainTextEdit>
|
|
#include <QRadioButton>
|
|
#include <QRegularExpression>
|
|
#include <QWizard>
|
|
|
|
// Implementation note: There are several classes in this header:
|
|
// One for the main Wizard class and one for each page of the wizard
|
|
|
|
class VMManagerAddMachine final : public QWizard {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum {
|
|
Page_Intro,
|
|
Page_Fresh,
|
|
Page_WithExistingConfig,
|
|
Page_NameAndLocation,
|
|
Page_Conclusion
|
|
};
|
|
|
|
explicit VMManagerAddMachine(QWidget *parent = nullptr);
|
|
|
|
#if 0
|
|
private slots:
|
|
void showHelp();
|
|
#endif
|
|
};
|
|
|
|
class IntroPage : public QWizardPage {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit IntroPage(QWidget *parent = nullptr);
|
|
[[nodiscard]] int nextId() const override;
|
|
|
|
private:
|
|
QLabel *topLabel;
|
|
QRadioButton *newConfigRadioButton;
|
|
QRadioButton *existingConfigRadioButton;
|
|
};
|
|
|
|
class WithExistingConfigPage final : public QWizardPage {
|
|
Q_OBJECT
|
|
Q_PROPERTY(QString configuration READ configuration WRITE setConfiguration NOTIFY configurationChanged)
|
|
|
|
public:
|
|
explicit WithExistingConfigPage(QWidget *parent = nullptr);
|
|
// These extra functions are required to register QPlainTextEdit fields
|
|
[[nodiscard]] QString configuration() const;
|
|
void setConfiguration(const QString &configuration);
|
|
signals:
|
|
void configurationChanged(const QString &configuration);
|
|
private:
|
|
QPlainTextEdit *existingConfiguration;
|
|
private slots:
|
|
void chooseExistingConfigFile();
|
|
protected:
|
|
[[nodiscard]] int nextId() const override;
|
|
[[nodiscard]] bool isComplete() const override;
|
|
|
|
};
|
|
|
|
class NameAndLocationPage final : public QWizardPage {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit NameAndLocationPage(QWidget *parent = nullptr);
|
|
[[nodiscard]] int nextId() const override;
|
|
private:
|
|
QLineEdit *systemName;
|
|
QLineEdit *systemLocation;
|
|
QLabel *systemNameValidation;
|
|
QLabel *systemLocationValidation;
|
|
QRegularExpression dirValidate;
|
|
private slots:
|
|
void chooseDirectoryLocation();
|
|
protected:
|
|
[[nodiscard]] bool isComplete() const override;
|
|
bool eventFilter(QObject *watched, QEvent *event) override;
|
|
|
|
};
|
|
|
|
class ConclusionPage final : public QWizardPage {
|
|
Q_OBJECT
|
|
public:
|
|
explicit ConclusionPage(QWidget *parent = nullptr);
|
|
private:
|
|
QLabel *topLabel;
|
|
QLabel *systemName;
|
|
QLabel *systemLocation;
|
|
protected:
|
|
void initializePage() override;
|
|
};
|
|
|
|
#endif // QT_VMMANAGER_ADDMACHINE_H
|