#ifndef VMCHOOSER_SESSION_H_ #define VMCHOOSER_SESSION_H_ #include #include class QString; class QIcon; enum SectionType { SECTION_nullptr, SECTION_XSESSION, SECTION_FOR_LOCATION, SECTION_TEMPLATES, SECTION_GENERIC }; class Session { public: virtual ~Session() {} virtual bool isActive() const = 0; virtual bool isLocked() const = 0; virtual void checkCanRun() final { error = checkCanRunInternal(); } virtual bool canRun(bool showError = false) const final { if (!error.isEmpty()) { if (showError) { QMessageBox::critical( nullptr, QObject::trUtf8("vmchooser"), QObject::trUtf8("Cannot start selected session:") + QStringLiteral("\n") + error); } return false; } return true; } virtual int priority() const = 0; virtual QString shortDescription() const = 0; virtual QString description() const = 0; virtual QIcon icon() const = 0; virtual bool prepareRun() const = 0; virtual void run() const = 0; virtual QString execCommand() const { return QString(); } virtual QString uuid() const { return QString(); } virtual int type() const = 0; virtual SectionType section() const = 0; virtual bool needsVtx() const { return false; } virtual QVariant foregroundRole() const { return QVariant(); } virtual bool operator<(const Session& s) const = 0; const static int XSESSION = 0; const static int VSESSION = 1; virtual bool containsKeywords(const QList& keywords) const = 0; protected: virtual QString checkCanRunInternal() const = 0; private: QString error; }; #endif /*VMCHOOSER_SESSION_H_*/