You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

218 lines
5.0 KiB

#pragma once
#include <QWizard>
#include <QWizardPage>
#include "cmake.h"
#include "ui_Compilers.h"
#include "ui_CrossCompiler.h"
class QRadioButton;
class QComboBox;
//! the wizard pages we'll use for the first configure of a build
enum FirstConfigurePages
{
Start,
NativeSetup,
ToolchainSetup,
CrossSetup,
Done
};
enum class CompilerOption
{
DefaultNative,
SpecifyNative,
ToolchainFile,
Options,
};
//! the first page that gives basic options for what compilers setup to choose
//! from
class StartCompilerSetup : public QWizardPage
{
Q_OBJECT
public:
StartCompilerSetup(QString defaultGeneratorPlatform,
QString defaultGeneratorToolset, QWidget* p);
~StartCompilerSetup();
void setGenerators(std::vector<cmake::GeneratorInfo> const& gens);
void setCurrentGenerator(const QString& gen);
void setToolset(const QString& toolset);
void setPlatform(const QString& platform);
void setCompilerOption(CompilerOption option);
QString getGenerator() const;
QString getToolset() const;
QString getPlatform() const;
bool defaultSetup() const;
bool compilerSetup() const;
bool crossCompilerSetup() const;
bool crossCompilerToolChainFile() const;
int nextId() const;
signals:
void selectionChanged();
protected slots:
void onSelectionChanged(bool);
void onGeneratorChanged(int index);
protected:
QComboBox* GeneratorOptions;
QRadioButton* CompilerSetupOptions[4];
QFrame* ToolsetFrame;
QLineEdit* Toolset;
QLabel* ToolsetLabel;
QFrame* PlatformFrame;
QComboBox* PlatformOptions;
QLabel* PlatformLabel;
QStringList GeneratorsSupportingToolset;
QStringList GeneratorsSupportingPlatform;
QMultiMap<QString, QString> GeneratorSupportedPlatforms;
QMap<QString, QString> GeneratorDefaultPlatform;
QString DefaultGeneratorPlatform, DefaultGeneratorToolset;
private:
QFrame* CreateToolsetWidgets();
QFrame* CreatePlatformWidgets();
};
//! the page that gives basic options for native compilers
class NativeCompilerSetup
: public QWizardPage
, protected Ui::Compilers
{
Q_OBJECT
public:
NativeCompilerSetup(QWidget* p);
~NativeCompilerSetup();
QString getCCompiler() const;
void setCCompiler(const QString&);
QString getCXXCompiler() const;
void setCXXCompiler(const QString&);
QString getFortranCompiler() const;
void setFortranCompiler(const QString&);
int nextId() const { return -1; }
};
//! the page that gives options for cross compilers
class CrossCompilerSetup
: public QWizardPage
, protected Ui::CrossCompiler
{
Q_OBJECT
public:
CrossCompilerSetup(QWidget* p);
~CrossCompilerSetup();
QString getSystem() const;
void setSystem(const QString&);
QString getVersion() const;
void setVersion(const QString&);
QString getProcessor() const;
void setProcessor(const QString&);
QString getCCompiler() const;
void setCCompiler(const QString&);
QString getCXXCompiler() const;
void setCXXCompiler(const QString&);
QString getFortranCompiler() const;
void setFortranCompiler(const QString&);
QString getFindRoot() const;
void setFindRoot(const QString&);
enum CrossMode
{
BOTH,
ONLY,
NEVER
};
int getProgramMode() const;
void setProgramMode(int);
int getLibraryMode() const;
void setLibraryMode(int);
int getIncludeMode() const;
void setIncludeMode(int);
int nextId() const { return -1; }
};
//! the page that gives options for a toolchain file
class ToolchainCompilerSetup : public QWizardPage
{
Q_OBJECT
public:
ToolchainCompilerSetup(QWidget* p);
~ToolchainCompilerSetup();
QString toolchainFile() const;
void setToolchainFile(const QString&);
int nextId() const { return -1; }
protected:
QCMakeFilePathEditor* ToolchainFile;
};
//! the wizard with the pages
class FirstConfigure : public QWizard
{
Q_OBJECT
public:
FirstConfigure();
~FirstConfigure();
void setGenerators(std::vector<cmake::GeneratorInfo> const& gens);
void setCurrentGenerator(const QString& gen);
void setToolset(const QString& toolset);
void setPlatform(const QString& platform);
void setCompilerOption(CompilerOption option);
QString getGenerator() const;
QString getPlatform() const;
QString getToolset() const;
bool defaultSetup() const;
bool compilerSetup() const;
bool crossCompilerSetup() const;
bool crossCompilerToolChainFile() const;
QString getCCompiler() const;
QString getCXXCompiler() const;
QString getFortranCompiler() const;
QString getSystemName() const;
QString getSystemVersion() const;
QString getSystemProcessor() const;
QString getCrossRoot() const;
QString getCrossProgramMode() const;
QString getCrossLibraryMode() const;
QString getCrossIncludeMode() const;
QString getCrossCompilerToolChainFile() const;
void loadFromSettings();
void saveToSettings();
protected:
StartCompilerSetup* mStartCompilerSetupPage;
NativeCompilerSetup* mNativeCompilerSetupPage;
CrossCompilerSetup* mCrossCompilerSetupPage;
ToolchainCompilerSetup* mToolchainCompilerSetupPage;
QString mDefaultGenerator;
};