ENH: Add cross compiling support in the GUI in the same dialog that prompts for
the generator on the first configure. It either ask for a toolchain file or asks for all the information a toolchain file might contain. Also added option for setting non-default compilers if not cross compiling. Fixes #6849. Also a bit of code cleanup and re-organizing.
This commit is contained in:
parent
3e6decf312
commit
f8f4140b6c
|
@ -21,9 +21,9 @@
|
||||||
static const int NumTypes = 4;
|
static const int NumTypes = 4;
|
||||||
static const QString TypeStrings[NumTypes] =
|
static const QString TypeStrings[NumTypes] =
|
||||||
{ "BOOL", "PATH", "FILEPATH", "STRING" };
|
{ "BOOL", "PATH", "FILEPATH", "STRING" };
|
||||||
static const QCMakeCacheProperty::PropertyType Types[NumTypes] =
|
static const QCMakeProperty::PropertyType Types[NumTypes] =
|
||||||
{ QCMakeCacheProperty::BOOL, QCMakeCacheProperty::PATH,
|
{ QCMakeProperty::BOOL, QCMakeProperty::PATH,
|
||||||
QCMakeCacheProperty::FILEPATH, QCMakeCacheProperty::STRING};
|
QCMakeProperty::FILEPATH, QCMakeProperty::STRING};
|
||||||
|
|
||||||
AddCacheEntry::AddCacheEntry(QWidget* p)
|
AddCacheEntry::AddCacheEntry(QWidget* p)
|
||||||
: QWidget(p)
|
: QWidget(p)
|
||||||
|
@ -34,8 +34,8 @@ AddCacheEntry::AddCacheEntry(QWidget* p)
|
||||||
this->Type->addItem(TypeStrings[i]);
|
this->Type->addItem(TypeStrings[i]);
|
||||||
}
|
}
|
||||||
QWidget* cb = new QCheckBox();
|
QWidget* cb = new QCheckBox();
|
||||||
QWidget* path = new QCMakeCachePathEditor();
|
QWidget* path = new QCMakePathEditor();
|
||||||
QWidget* filepath = new QCMakeCacheFilePathEditor();
|
QWidget* filepath = new QCMakeFilePathEditor();
|
||||||
QWidget* string = new QLineEdit();
|
QWidget* string = new QLineEdit();
|
||||||
this->StackedWidget->addWidget(cb);
|
this->StackedWidget->addWidget(cb);
|
||||||
this->StackedWidget->addWidget(path);
|
this->StackedWidget->addWidget(path);
|
||||||
|
@ -73,14 +73,14 @@ QString AddCacheEntry::description() const
|
||||||
return this->Description->text();
|
return this->Description->text();
|
||||||
}
|
}
|
||||||
|
|
||||||
QCMakeCacheProperty::PropertyType AddCacheEntry::type() const
|
QCMakeProperty::PropertyType AddCacheEntry::type() const
|
||||||
{
|
{
|
||||||
int idx = this->Type->currentIndex();
|
int idx = this->Type->currentIndex();
|
||||||
if(idx >= 0 && idx < NumTypes)
|
if(idx >= 0 && idx < NumTypes)
|
||||||
{
|
{
|
||||||
return Types[idx];
|
return Types[idx];
|
||||||
}
|
}
|
||||||
return QCMakeCacheProperty::BOOL;
|
return QCMakeProperty::BOOL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ public:
|
||||||
QString name() const;
|
QString name() const;
|
||||||
QVariant value() const;
|
QVariant value() const;
|
||||||
QString description() const;
|
QString description() const;
|
||||||
QCMakeCacheProperty::PropertyType type() const;
|
QCMakeProperty::PropertyType type() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -65,14 +65,14 @@
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>QCMakeCachePathEditor</class>
|
<class>QCMakePathEditor</class>
|
||||||
<extends>QLineEdit</extends>
|
<extends>QLineEdit</extends>
|
||||||
<header>QCMakeCacheView.h</header>
|
<header>QCMakeWidgets.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>QCMakeCacheFilePathEditor</class>
|
<class>QCMakeFilePathEditor</class>
|
||||||
<extends>QLineEdit</extends>
|
<extends>QLineEdit</extends>
|
||||||
<header>QCMakeCacheView.h</header>
|
<header>QCMakeWidgets.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
@ -0,0 +1,244 @@
|
||||||
|
|
||||||
|
#include "CMakeFirstConfigure.h"
|
||||||
|
|
||||||
|
#include <QSettings>
|
||||||
|
|
||||||
|
CMakeFirstConfigure::CMakeFirstConfigure()
|
||||||
|
{
|
||||||
|
this->UI.setupUi(this);
|
||||||
|
this->UI.useDefaults->setChecked(true);
|
||||||
|
this->updatePage();
|
||||||
|
|
||||||
|
this->UI.useToolChainFile->setChecked(true);
|
||||||
|
this->updateToolChainPage();
|
||||||
|
|
||||||
|
QObject::connect(this->UI.useDefaults, SIGNAL(toggled(bool)),
|
||||||
|
this, SLOT(updatePage()));
|
||||||
|
QObject::connect(this->UI.compilerSetup, SIGNAL(toggled(bool)),
|
||||||
|
this, SLOT(updatePage()));
|
||||||
|
QObject::connect(this->UI.crossCompilerSetup, SIGNAL(toggled(bool)),
|
||||||
|
this, SLOT(updatePage()));
|
||||||
|
|
||||||
|
QObject::connect(this->UI.useToolChainFile, SIGNAL(toggled(bool)),
|
||||||
|
this, SLOT(updateToolChainPage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
CMakeFirstConfigure::~CMakeFirstConfigure()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeFirstConfigure::setGenerators(const QStringList& gens)
|
||||||
|
{
|
||||||
|
this->UI.generators->clear();
|
||||||
|
this->UI.generators->addItems(gens);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getGenerator() const
|
||||||
|
{
|
||||||
|
return this->UI.generators->currentText();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeFirstConfigure::loadFromSettings()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("Settings/StartPath");
|
||||||
|
|
||||||
|
// restore generator
|
||||||
|
QString lastGen = settings.value("LastGenerator").toString();
|
||||||
|
int idx = this->UI.generators->findText(lastGen);
|
||||||
|
if(idx != -1)
|
||||||
|
{
|
||||||
|
this->UI.generators->setCurrentIndex(idx);
|
||||||
|
}
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
// restore compiler setup
|
||||||
|
settings.beginGroup("Settings/Compiler");
|
||||||
|
this->UI.CCompiler->setText(settings.value("CCompiler").toString());
|
||||||
|
this->UI.CXXCompiler->setText(settings.value("CXXCompiler").toString());
|
||||||
|
this->UI.FortranCompiler->setText(settings.value("FortranCompiler").toString());
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
// restore cross compiler setup
|
||||||
|
settings.beginGroup("Settings/CrossCompiler");
|
||||||
|
this->UI.crossCCompiler->setText(settings.value("CCompiler").toString());
|
||||||
|
this->UI.crossCXXCompiler->setText(settings.value("CXXCompiler").toString());
|
||||||
|
this->UI.crossFortranCompiler->setText(settings.value("FortranCompiler").toString());
|
||||||
|
this->UI.useToolChainFile->setChecked(settings.value("UseToolChainFile", true).toBool());
|
||||||
|
this->UI.toolChainFile->setText(settings.value("ToolChainFile").toString());
|
||||||
|
this->UI.systemName->setText(settings.value("SystemName").toString());
|
||||||
|
this->UI.systemVersion->setText(settings.value("SystemVersion").toString());
|
||||||
|
this->UI.systemProcessor->setText(settings.value("SystemProcessor").toString());
|
||||||
|
this->UI.crossFindRoot->setText(settings.value("FindRoot").toString());
|
||||||
|
this->UI.crossProgramMode->setCurrentIndex(settings.value("ProgramMode", 0).toInt());
|
||||||
|
this->UI.crossLibraryMode->setCurrentIndex(settings.value("LibraryMode", 0).toInt());
|
||||||
|
this->UI.crossIncludeMode->setCurrentIndex(settings.value("IncludeMode", 0).toInt());
|
||||||
|
settings.endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeFirstConfigure::saveToSettings()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
settings.beginGroup("Settings/StartPath");
|
||||||
|
|
||||||
|
// save generator
|
||||||
|
QString lastGen = this->UI.generators->currentText();
|
||||||
|
settings.setValue("LastGenerator", lastGen);
|
||||||
|
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
// save compiler setup
|
||||||
|
settings.beginGroup("Settings/Compiler");
|
||||||
|
settings.setValue("CCompiler", this->UI.CCompiler->text());
|
||||||
|
settings.setValue("CXXCompiler", this->UI.CXXCompiler->text());
|
||||||
|
settings.setValue("FortranCompiler", this->UI.FortranCompiler->text());
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
// save cross compiler setup
|
||||||
|
settings.beginGroup("Settings/CrossCompiler");
|
||||||
|
settings.setValue("CCompiler", this->UI.crossCCompiler->text());
|
||||||
|
settings.setValue("CXXCompiler", this->UI.crossCXXCompiler->text());
|
||||||
|
settings.setValue("FortranCompiler", this->UI.crossFortranCompiler->text());
|
||||||
|
settings.setValue("UseToolChainFile", this->UI.useToolChainFile->isChecked());
|
||||||
|
settings.setValue("ToolChainFile", this->UI.toolChainFile->text());
|
||||||
|
settings.setValue("SystemName", this->UI.systemName->text());
|
||||||
|
settings.setValue("SystemVersion", this->UI.systemVersion->text());
|
||||||
|
settings.setValue("SystemProcessor", this->UI.systemProcessor->text());
|
||||||
|
settings.setValue("FindRoot", this->UI.crossFindRoot->text());
|
||||||
|
settings.setValue("ProgramMode", this->UI.crossProgramMode->currentIndex());
|
||||||
|
settings.setValue("LibraryMode", this->UI.crossLibraryMode->currentIndex());
|
||||||
|
settings.setValue("IncludeMode", this->UI.crossIncludeMode->currentIndex());
|
||||||
|
settings.endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeFirstConfigure::updatePage()
|
||||||
|
{
|
||||||
|
if(this->UI.useDefaults->isChecked())
|
||||||
|
{
|
||||||
|
this->UI.stackedWidget->setCurrentIndex(0);
|
||||||
|
}
|
||||||
|
else if(this->UI.compilerSetup->isChecked())
|
||||||
|
{
|
||||||
|
this->UI.stackedWidget->setCurrentIndex(1);
|
||||||
|
}
|
||||||
|
else if(this->UI.crossCompilerSetup->isChecked())
|
||||||
|
{
|
||||||
|
this->UI.stackedWidget->setCurrentIndex(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMakeFirstConfigure::updateToolChainPage()
|
||||||
|
{
|
||||||
|
if(this->UI.useToolChainFile->isChecked())
|
||||||
|
{
|
||||||
|
this->UI.toolChainStack->setCurrentIndex(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->UI.toolChainStack->setCurrentIndex(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMakeFirstConfigure::defaultSetup() const
|
||||||
|
{
|
||||||
|
return this->UI.useDefaults->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMakeFirstConfigure::compilerSetup() const
|
||||||
|
{
|
||||||
|
return this->UI.compilerSetup->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CMakeFirstConfigure::crossCompilerSetup() const
|
||||||
|
{
|
||||||
|
return this->UI.crossCompilerSetup->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::crossCompilerToolChainFile() const
|
||||||
|
{
|
||||||
|
if(this->UI.useToolChainFile->isChecked())
|
||||||
|
{
|
||||||
|
return this->UI.toolChainFile->text();
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getSystemName() const
|
||||||
|
{
|
||||||
|
return this->UI.systemName->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getCCompiler() const
|
||||||
|
{
|
||||||
|
if(this->compilerSetup())
|
||||||
|
{
|
||||||
|
return this->UI.CCompiler->text();
|
||||||
|
}
|
||||||
|
else if(this->crossCompilerSetup())
|
||||||
|
{
|
||||||
|
return this->UI.crossCCompiler->text();
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getCXXCompiler() const
|
||||||
|
{
|
||||||
|
if(this->compilerSetup())
|
||||||
|
{
|
||||||
|
return this->UI.CXXCompiler->text();
|
||||||
|
}
|
||||||
|
else if(this->crossCompilerSetup())
|
||||||
|
{
|
||||||
|
return this->UI.crossCXXCompiler->text();
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getFortranCompiler() const
|
||||||
|
{
|
||||||
|
if(this->compilerSetup())
|
||||||
|
{
|
||||||
|
return this->UI.FortranCompiler->text();
|
||||||
|
}
|
||||||
|
else if(this->crossCompilerSetup())
|
||||||
|
{
|
||||||
|
return this->UI.crossFortranCompiler->text();
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getSystemVersion() const
|
||||||
|
{
|
||||||
|
return this->UI.systemVersion->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getSystemProcessor() const
|
||||||
|
{
|
||||||
|
return this->UI.systemProcessor->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getCrossRoot() const
|
||||||
|
{
|
||||||
|
return this->UI.crossFindRoot->text();
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char* crossModes[3] = {"BOTH", "ONLY", "NEVER" };
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getCrossProgramMode() const
|
||||||
|
{
|
||||||
|
return crossModes[this->UI.crossProgramMode->currentIndex()];
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getCrossLibraryMode() const
|
||||||
|
{
|
||||||
|
return crossModes[this->UI.crossLibraryMode->currentIndex()];
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CMakeFirstConfigure::getCrossIncludeMode() const
|
||||||
|
{
|
||||||
|
return crossModes[this->UI.crossIncludeMode->currentIndex()];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
#ifndef CMakeFirstConfigure_h
|
||||||
|
#define CMakeFirstConfigure_h
|
||||||
|
|
||||||
|
#include <QDialog>
|
||||||
|
#include "ui_CMakeFirstConfigure.h"
|
||||||
|
|
||||||
|
class CMakeFirstConfigure : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
CMakeFirstConfigure();
|
||||||
|
~CMakeFirstConfigure();
|
||||||
|
|
||||||
|
void setGenerators(const QStringList& gens);
|
||||||
|
QString getGenerator() const;
|
||||||
|
|
||||||
|
bool defaultSetup() const;
|
||||||
|
bool compilerSetup() const;
|
||||||
|
bool crossCompilerSetup() const;
|
||||||
|
QString 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;
|
||||||
|
|
||||||
|
void loadFromSettings();
|
||||||
|
void saveToSettings();
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void updatePage();
|
||||||
|
void updateToolChainPage();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Ui::CMakeFirstConfigure UI;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CMakeFirstConfigure_h
|
||||||
|
|
|
@ -0,0 +1,606 @@
|
||||||
|
<ui version="4.0" >
|
||||||
|
<class>CMakeFirstConfigure</class>
|
||||||
|
<widget class="QDialog" name="CMakeFirstConfigure" >
|
||||||
|
<property name="geometry" >
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>609</width>
|
||||||
|
<height>547</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle" >
|
||||||
|
<string>First Configure Setup</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QLabel" name="label" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Minimum" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Please select what build system you want CMake to generate files for. You should select the tool that you will use to build the project.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<layout class="QHBoxLayout" >
|
||||||
|
<item>
|
||||||
|
<widget class="QComboBox" name="generators" />
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" >
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" >
|
||||||
|
<layout class="QVBoxLayout" >
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="useDefaults" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Use Defaults</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="compilerSetup" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Compiler Setup</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="crossCompilerSetup" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Cross Compiler Setup</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" >
|
||||||
|
<widget class="Line" name="line" >
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0" >
|
||||||
|
<widget class="QStackedWidget" name="stackedWidget" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex" >
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="defaultPage" >
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<property name="leftMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="1" >
|
||||||
|
<widget class="QLabel" name="label_2" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>The default compilers will be used.</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment" >
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" >
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" >
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="compilerPage" >
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QGroupBox" name="groupBox_4" >
|
||||||
|
<property name="title" >
|
||||||
|
<string>Compilers</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QLabel" name="label_16" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" >
|
||||||
|
<widget class="QCMakeFilePathEditor" name="CCompiler" />
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2" >
|
||||||
|
<widget class="QLabel" name="label_17" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>C++</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3" >
|
||||||
|
<widget class="QCMakeFilePathEditor" name="CXXCompiler" />
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<widget class="QLabel" name="label_18" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Fortran</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" >
|
||||||
|
<widget class="QCMakeFilePathEditor" name="FortranCompiler" />
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" >
|
||||||
|
<size>
|
||||||
|
<width>566</width>
|
||||||
|
<height>71</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="crossCompilerPage" >
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<property name="leftMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin" >
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<widget class="QStackedWidget" name="toolChainStack" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex" >
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="page" >
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<property name="leftMargin" >
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin" >
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin" >
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin" >
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="1" >
|
||||||
|
<widget class="QCMakeFilePathEditor" name="toolChainFile" />
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" >
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" >
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QLabel" name="label_5" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Tool Chain File</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="page_2" >
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QGroupBox" name="groupBox" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="title" >
|
||||||
|
<string>System</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<layout class="QHBoxLayout" >
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_6" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="systemName" />
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_10" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Version</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="systemVersion" />
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_11" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Processor</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="systemProcessor" />
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<widget class="QGroupBox" name="groupBox_3" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="title" >
|
||||||
|
<string>Compilers</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QLabel" name="label_8" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>C</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" >
|
||||||
|
<widget class="QCMakeFilePathEditor" name="crossCCompiler" />
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2" >
|
||||||
|
<widget class="QLabel" name="label_7" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>C++</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3" >
|
||||||
|
<widget class="QCMakeFilePathEditor" name="crossCXXCompiler" />
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<widget class="QLabel" name="label_15" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Fortran</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" >
|
||||||
|
<widget class="QCMakeFilePathEditor" name="crossFortranCompiler" />
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" >
|
||||||
|
<widget class="QGroupBox" name="groupBox_2" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="title" >
|
||||||
|
<string>Find Program/Library/Include</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" >
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QLabel" name="label_9" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Root</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" >
|
||||||
|
<widget class="QCMakePathEditor" name="crossFindRoot" />
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2" >
|
||||||
|
<widget class="QLabel" name="label_12" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Program Mode</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3" >
|
||||||
|
<widget class="QComboBox" name="crossProgramMode" >
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Find from Root then system</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Only find from Root</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Don't find from Root</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" >
|
||||||
|
<widget class="QLabel" name="label_13" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Library Mode</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" >
|
||||||
|
<widget class="QComboBox" name="crossLibraryMode" >
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Find from Root then system</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Only find from Root</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Don't find from Root</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2" >
|
||||||
|
<widget class="QLabel" name="label_14" >
|
||||||
|
<property name="sizePolicy" >
|
||||||
|
<sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Include Mode</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3" >
|
||||||
|
<widget class="QComboBox" name="crossIncludeMode" >
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Find from Root then system</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Only find from Root</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text" >
|
||||||
|
<string>Don't find from Root</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" >
|
||||||
|
<widget class="QCheckBox" name="useToolChainFile" >
|
||||||
|
<property name="text" >
|
||||||
|
<string>Use ToolChain File</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked" >
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0" >
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox" >
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons" >
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0" >
|
||||||
|
<spacer>
|
||||||
|
<property name="orientation" >
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType" >
|
||||||
|
<enum>QSizePolicy::Expanding</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" >
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>QCMakeFilePathEditor</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header>QCMakeWidgets.h</header>
|
||||||
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>QCMakePathEditor</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header>QCMakeWidgets.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>CMakeFirstConfigure</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel" >
|
||||||
|
<x>227</x>
|
||||||
|
<y>284</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel" >
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>CMakeFirstConfigure</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel" >
|
||||||
|
<x>295</x>
|
||||||
|
<y>290</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel" >
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
|
@ -1,5 +1,5 @@
|
||||||
PROJECT(QtDialog)
|
PROJECT(QtDialog)
|
||||||
SET(QT_MIN_VERSION "4.2.0")
|
SET(QT_MIN_VERSION "4.3.0")
|
||||||
FIND_PACKAGE(Qt4 REQUIRED)
|
FIND_PACKAGE(Qt4 REQUIRED)
|
||||||
|
|
||||||
IF(NOT QT4_FOUND)
|
IF(NOT QT4_FOUND)
|
||||||
|
@ -16,6 +16,8 @@ ELSE(NOT QT4_FOUND)
|
||||||
SET(SRCS
|
SET(SRCS
|
||||||
AddCacheEntry.cxx
|
AddCacheEntry.cxx
|
||||||
AddCacheEntry.h
|
AddCacheEntry.h
|
||||||
|
CMakeFirstConfigure.cxx
|
||||||
|
CMakeFirstConfigure.h
|
||||||
CMakeSetup.cxx
|
CMakeSetup.cxx
|
||||||
CMakeSetupDialog.cxx
|
CMakeSetupDialog.cxx
|
||||||
CMakeSetupDialog.h
|
CMakeSetupDialog.h
|
||||||
|
@ -23,19 +25,24 @@ ELSE(NOT QT4_FOUND)
|
||||||
QCMake.h
|
QCMake.h
|
||||||
QCMakeCacheView.cxx
|
QCMakeCacheView.cxx
|
||||||
QCMakeCacheView.h
|
QCMakeCacheView.h
|
||||||
|
QCMakeWidgets.cxx
|
||||||
|
QCMakeWidgets.h
|
||||||
QMacInstallDialog.cxx
|
QMacInstallDialog.cxx
|
||||||
QMacInstallDialog.h
|
QMacInstallDialog.h
|
||||||
)
|
)
|
||||||
QT4_WRAP_UI(UI_SRCS
|
QT4_WRAP_UI(UI_SRCS
|
||||||
|
CMakeFirstConfigure.ui
|
||||||
CMakeSetupDialog.ui
|
CMakeSetupDialog.ui
|
||||||
AddCacheEntry.ui
|
AddCacheEntry.ui
|
||||||
MacInstallDialog.ui
|
MacInstallDialog.ui
|
||||||
)
|
)
|
||||||
QT4_WRAP_CPP(MOC_SRCS
|
QT4_WRAP_CPP(MOC_SRCS
|
||||||
AddCacheEntry.h
|
AddCacheEntry.h
|
||||||
|
CMakeFirstConfigure.h
|
||||||
CMakeSetupDialog.h
|
CMakeSetupDialog.h
|
||||||
QCMake.h
|
QCMake.h
|
||||||
QCMakeCacheView.h
|
QCMakeCacheView.h
|
||||||
|
QCMakeWidgets.h
|
||||||
QMacInstallDialog.h
|
QMacInstallDialog.h
|
||||||
)
|
)
|
||||||
QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc)
|
QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc)
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "QCMake.h"
|
#include "QCMake.h"
|
||||||
#include "QCMakeCacheView.h"
|
#include "QCMakeCacheView.h"
|
||||||
#include "AddCacheEntry.h"
|
#include "AddCacheEntry.h"
|
||||||
|
#include "CMakeFirstConfigure.h"
|
||||||
|
|
||||||
QCMakeThread::QCMakeThread(QObject* p)
|
QCMakeThread::QCMakeThread(QObject* p)
|
||||||
: QThread(p), CMakeInstance(NULL)
|
: QThread(p), CMakeInstance(NULL)
|
||||||
|
@ -60,7 +61,6 @@ void QCMakeThread::run()
|
||||||
CMakeSetupDialog::CMakeSetupDialog()
|
CMakeSetupDialog::CMakeSetupDialog()
|
||||||
: ExitAfterGenerate(true), CacheModified(false), CurrentState(Interrupting)
|
: ExitAfterGenerate(true), CacheModified(false), CurrentState(Interrupting)
|
||||||
{
|
{
|
||||||
this->SuppressDevWarnings = false;
|
|
||||||
// create the GUI
|
// create the GUI
|
||||||
QSettings settings;
|
QSettings settings;
|
||||||
settings.beginGroup("Settings/StartPath");
|
settings.beginGroup("Settings/StartPath");
|
||||||
|
@ -104,11 +104,9 @@ CMakeSetupDialog::CMakeSetupDialog()
|
||||||
this, SLOT(doInstallForCommandLine()));
|
this, SLOT(doInstallForCommandLine()));
|
||||||
#endif
|
#endif
|
||||||
QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options"));
|
QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options"));
|
||||||
QAction* supressDevWarningsAction = OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)"));
|
this->SuppressDevWarningsAction = OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)"));
|
||||||
QObject::connect(supressDevWarningsAction, SIGNAL(triggered(bool)),
|
this->SuppressDevWarningsAction->setCheckable(true);
|
||||||
this, SLOT(doSuppressDev()));
|
|
||||||
|
|
||||||
supressDevWarningsAction->setCheckable(true);
|
|
||||||
QAction* debugAction = OptionsMenu->addAction(tr("&Debug Output"));
|
QAction* debugAction = OptionsMenu->addAction(tr("&Debug Output"));
|
||||||
debugAction->setCheckable(true);
|
debugAction->setCheckable(true);
|
||||||
QObject::connect(debugAction, SIGNAL(toggled(bool)),
|
QObject::connect(debugAction, SIGNAL(toggled(bool)),
|
||||||
|
@ -153,9 +151,9 @@ void CMakeSetupDialog::initialize()
|
||||||
{
|
{
|
||||||
// now the cmake worker thread is running, lets make our connections to it
|
// now the cmake worker thread is running, lets make our connections to it
|
||||||
QObject::connect(this->CMakeThread->cmakeInstance(),
|
QObject::connect(this->CMakeThread->cmakeInstance(),
|
||||||
SIGNAL(propertiesChanged(const QCMakeCachePropertyList&)),
|
SIGNAL(propertiesChanged(const QCMakePropertyList&)),
|
||||||
this->CacheValues->cacheModel(),
|
this->CacheValues->cacheModel(),
|
||||||
SLOT(setProperties(const QCMakeCachePropertyList&)));
|
SLOT(setProperties(const QCMakePropertyList&)));
|
||||||
|
|
||||||
QObject::connect(this->ConfigureButton, SIGNAL(clicked(bool)),
|
QObject::connect(this->ConfigureButton, SIGNAL(clicked(bool)),
|
||||||
this, SLOT(doConfigure()));
|
this, SLOT(doConfigure()));
|
||||||
|
@ -220,6 +218,8 @@ void CMakeSetupDialog::initialize()
|
||||||
QObject::connect(this->AddEntry, SIGNAL(clicked(bool)),
|
QObject::connect(this->AddEntry, SIGNAL(clicked(bool)),
|
||||||
this, SLOT(addCacheEntry()));
|
this, SLOT(addCacheEntry()));
|
||||||
|
|
||||||
|
QObject::connect(this->SuppressDevWarningsAction, SIGNAL(triggered(bool)),
|
||||||
|
this->CMakeThread->cmakeInstance(), SLOT(setSuppressDevWarnings(bool)));
|
||||||
|
|
||||||
if(!this->SourceDirectory->text().isEmpty() ||
|
if(!this->SourceDirectory->text().isEmpty() ||
|
||||||
!this->BinaryDirectory->lineEdit()->text().isEmpty())
|
!this->BinaryDirectory->lineEdit()->text().isEmpty())
|
||||||
|
@ -275,10 +275,10 @@ void CMakeSetupDialog::doConfigure()
|
||||||
dir.mkpath(".");
|
dir.mkpath(".");
|
||||||
}
|
}
|
||||||
|
|
||||||
// prompt for generator if it hasn't been set
|
// if no generator, prompt for it and other setup stuff
|
||||||
if(this->CMakeThread->cmakeInstance()->generator().isEmpty())
|
if(this->CMakeThread->cmakeInstance()->generator().isEmpty())
|
||||||
{
|
{
|
||||||
if(!this->promptForGenerator())
|
if(!this->setupFirstConfigure())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -292,7 +292,7 @@ void CMakeSetupDialog::doConfigure()
|
||||||
this->CacheValues->selectionModel()->clear();
|
this->CacheValues->selectionModel()->clear();
|
||||||
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
|
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
|
||||||
"setProperties", Qt::QueuedConnection,
|
"setProperties", Qt::QueuedConnection,
|
||||||
Q_ARG(QCMakeCachePropertyList,
|
Q_ARG(QCMakePropertyList,
|
||||||
this->CacheValues->cacheModel()->properties()));
|
this->CacheValues->cacheModel()->properties()));
|
||||||
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
|
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
|
||||||
"configure", Qt::QueuedConnection);
|
"configure", Qt::QueuedConnection);
|
||||||
|
@ -329,13 +329,6 @@ void CMakeSetupDialog::finishGenerate(int err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeSetupDialog::doSuppressDev()
|
|
||||||
{
|
|
||||||
this->SuppressDevWarnings = !this->SuppressDevWarnings;
|
|
||||||
this->CMakeThread->cmakeInstance()->
|
|
||||||
SetSuppressDevWarnings(this->SuppressDevWarnings);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CMakeSetupDialog::doInstallForCommandLine()
|
void CMakeSetupDialog::doInstallForCommandLine()
|
||||||
{
|
{
|
||||||
QMacInstallDialog setupdialog(0);
|
QMacInstallDialog setupdialog(0);
|
||||||
|
@ -542,41 +535,89 @@ void CMakeSetupDialog::setEnabledState(bool enabled)
|
||||||
this->RemoveEntry->setEnabled(false); // let selection re-enable it
|
this->RemoveEntry->setEnabled(false); // let selection re-enable it
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CMakeSetupDialog::promptForGenerator()
|
bool CMakeSetupDialog::setupFirstConfigure()
|
||||||
{
|
{
|
||||||
QSettings settings;
|
CMakeFirstConfigure dialog;
|
||||||
settings.beginGroup("Settings/StartPath");
|
|
||||||
QString lastGen = settings.value("LastGenerator").toString();
|
|
||||||
|
|
||||||
QStringList gens = this->CMakeThread->cmakeInstance()->availableGenerators();
|
// initialize dialog and restore saved settings
|
||||||
QDialog dialog;
|
|
||||||
dialog.setWindowTitle(tr("Choose Generator"));
|
// add generators
|
||||||
QLabel* lab = new QLabel(&dialog);
|
dialog.setGenerators(this->CMakeThread->cmakeInstance()->availableGenerators());
|
||||||
lab->setText(tr("Please select what build system you want CMake to generate files for.\n"
|
|
||||||
"You should select the tool that you will use to build the project.\n"
|
// restore from settings
|
||||||
"Press OK once you have made your selection."));
|
dialog.loadFromSettings();
|
||||||
QComboBox* combo = new QComboBox(&dialog);
|
|
||||||
combo->addItems(gens);
|
|
||||||
int idx = combo->findText(lastGen);
|
|
||||||
if(idx != -1)
|
|
||||||
{
|
|
||||||
combo->setCurrentIndex(idx);
|
|
||||||
}
|
|
||||||
QDialogButtonBox* btns = new QDialogButtonBox(QDialogButtonBox::Ok |
|
|
||||||
QDialogButtonBox::Cancel,
|
|
||||||
Qt::Horizontal, &dialog);
|
|
||||||
QObject::connect(btns, SIGNAL(accepted()), &dialog, SLOT(accept()));
|
|
||||||
QObject::connect(btns, SIGNAL(rejected()), &dialog, SLOT(reject()));
|
|
||||||
|
|
||||||
QVBoxLayout* l = new QVBoxLayout(&dialog);
|
|
||||||
l->addWidget(lab);
|
|
||||||
l->addWidget(combo);
|
|
||||||
l->addWidget(btns);
|
|
||||||
if(dialog.exec() == QDialog::Accepted)
|
if(dialog.exec() == QDialog::Accepted)
|
||||||
{
|
{
|
||||||
lastGen = combo->currentText();
|
dialog.saveToSettings();
|
||||||
settings.setValue("LastGenerator", lastGen);
|
this->CMakeThread->cmakeInstance()->setGenerator(dialog.getGenerator());
|
||||||
this->CMakeThread->cmakeInstance()->setGenerator(combo->currentText());
|
|
||||||
|
QCMakeCacheModel* m = this->CacheValues->cacheModel();
|
||||||
|
|
||||||
|
if(dialog.compilerSetup())
|
||||||
|
{
|
||||||
|
QString fortranCompiler = dialog.getFortranCompiler();
|
||||||
|
if(!fortranCompiler.isEmpty())
|
||||||
|
{
|
||||||
|
m->insertProperty(0, QCMakeProperty::FILEPATH, "CMAKE_Fortran_COMPILER",
|
||||||
|
"Fortran compiler.", fortranCompiler, false);
|
||||||
|
}
|
||||||
|
QString cxxCompiler = dialog.getCXXCompiler();
|
||||||
|
if(!cxxCompiler.isEmpty())
|
||||||
|
{
|
||||||
|
m->insertProperty(0, QCMakeProperty::FILEPATH, "CMAKE_CXX_COMPILER",
|
||||||
|
"CXX compiler.", cxxCompiler, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString cCompiler = dialog.getCCompiler();
|
||||||
|
if(!cCompiler.isEmpty())
|
||||||
|
{
|
||||||
|
m->insertProperty(0, QCMakeProperty::FILEPATH, "CMAKE_C_COMPILER",
|
||||||
|
"C compiler.", cCompiler, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(dialog.crossCompilerSetup())
|
||||||
|
{
|
||||||
|
QString toolchainFile = dialog.crossCompilerToolChainFile();
|
||||||
|
if(!toolchainFile.isEmpty())
|
||||||
|
{
|
||||||
|
m->insertProperty(0, QCMakeProperty::FILEPATH, "CMAKE_TOOLCHAIN_FILE",
|
||||||
|
"Cross Compile ToolChain File", toolchainFile, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QString fortranCompiler = dialog.getFortranCompiler();
|
||||||
|
if(!fortranCompiler.isEmpty())
|
||||||
|
{
|
||||||
|
m->insertProperty(0, QCMakeProperty::FILEPATH, "CMAKE_Fortran_COMPILER",
|
||||||
|
"Fortran compiler.", fortranCompiler, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString mode = dialog.getCrossIncludeMode();
|
||||||
|
m->insertProperty(0, QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE",
|
||||||
|
"CMake Find Include Mode", mode, false);
|
||||||
|
mode = dialog.getCrossLibraryMode();
|
||||||
|
m->insertProperty(0, QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY",
|
||||||
|
"CMake Find Library Mode", mode, false);
|
||||||
|
mode = dialog.getCrossProgramMode();
|
||||||
|
m->insertProperty(0, QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM",
|
||||||
|
"CMake Find Program Mode", mode, false);
|
||||||
|
|
||||||
|
QString rootPath = dialog.getCrossRoot();
|
||||||
|
m->insertProperty(0, QCMakeProperty::PATH, "CMAKE_FIND_ROOT_PATH",
|
||||||
|
"CMake Find Root Path", rootPath, false);
|
||||||
|
|
||||||
|
QString systemName = dialog.getSystemName();
|
||||||
|
m->insertProperty(0, QCMakeProperty::STRING, "CMAKE_SYSTEM_NAME",
|
||||||
|
"CMake System Name", systemName, false);
|
||||||
|
QString cxxCompiler = dialog.getCXXCompiler();
|
||||||
|
m->insertProperty(0, QCMakeProperty::FILEPATH, "CMAKE_CXX_COMPILER",
|
||||||
|
"CXX compiler.", cxxCompiler, false);
|
||||||
|
QString cCompiler = dialog.getCCompiler();
|
||||||
|
m->insertProperty(0, QCMakeProperty::FILEPATH, "CMAKE_C_COMPILER",
|
||||||
|
"C compiler.", cCompiler, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -856,20 +897,7 @@ void CMakeSetupDialog::addCacheEntry()
|
||||||
if(QDialog::Accepted == dialog.exec())
|
if(QDialog::Accepted == dialog.exec())
|
||||||
{
|
{
|
||||||
QCMakeCacheModel* m = this->CacheValues->cacheModel();
|
QCMakeCacheModel* m = this->CacheValues->cacheModel();
|
||||||
m->insertRows(0, 1, QModelIndex());
|
m->insertProperty(0, w->type(), w->name(), w->description(), w->value(), false);
|
||||||
m->setData(m->index(0, 0), w->type(), QCMakeCacheModel::TypeRole);
|
|
||||||
m->setData(m->index(0, 0), w->name(), Qt::DisplayRole);
|
|
||||||
m->setData(m->index(0, 0), w->description(), QCMakeCacheModel::HelpRole);
|
|
||||||
m->setData(m->index(0, 0), 0, QCMakeCacheModel::AdvancedRole);
|
|
||||||
if(w->type() == QCMakeCacheProperty::BOOL)
|
|
||||||
{
|
|
||||||
m->setData(m->index(0, 1), w->value().toBool() ?
|
|
||||||
Qt::Checked : Qt::Unchecked, Qt::CheckStateRole);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m->setData(m->index(0, 1), w->value(), Qt::DisplayRole);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@ protected slots:
|
||||||
void initialize();
|
void initialize();
|
||||||
void doConfigure();
|
void doConfigure();
|
||||||
void doGenerate();
|
void doGenerate();
|
||||||
void doSuppressDev();
|
|
||||||
void doInstallForCommandLine();
|
void doInstallForCommandLine();
|
||||||
void doHelp();
|
void doHelp();
|
||||||
void doAbout();
|
void doAbout();
|
||||||
|
@ -62,7 +61,7 @@ protected slots:
|
||||||
void updateBinaryDirectory(const QString& dir);
|
void updateBinaryDirectory(const QString& dir);
|
||||||
void showProgress(const QString& msg, float percent);
|
void showProgress(const QString& msg, float percent);
|
||||||
void setEnabledState(bool);
|
void setEnabledState(bool);
|
||||||
bool promptForGenerator();
|
bool setupFirstConfigure();
|
||||||
void updateGeneratorLabel(const QString& gen);
|
void updateGeneratorLabel(const QString& gen);
|
||||||
void setExitAfterGenerate(bool);
|
void setExitAfterGenerate(bool);
|
||||||
void addBinaryPath(const QString&);
|
void addBinaryPath(const QString&);
|
||||||
|
@ -89,7 +88,6 @@ protected:
|
||||||
QCMakeThread* CMakeThread;
|
QCMakeThread* CMakeThread;
|
||||||
bool ExitAfterGenerate;
|
bool ExitAfterGenerate;
|
||||||
bool CacheModified;
|
bool CacheModified;
|
||||||
bool SuppressDevWarnings;
|
|
||||||
QAction* ReloadCacheAction;
|
QAction* ReloadCacheAction;
|
||||||
QAction* DeleteCacheAction;
|
QAction* DeleteCacheAction;
|
||||||
QAction* ExitAction;
|
QAction* ExitAction;
|
||||||
|
|
|
@ -29,8 +29,8 @@ QCMake::QCMake(QObject* p)
|
||||||
: QObject(p)
|
: QObject(p)
|
||||||
{
|
{
|
||||||
this->SuppressDevWarnings = false;
|
this->SuppressDevWarnings = false;
|
||||||
qRegisterMetaType<QCMakeCacheProperty>();
|
qRegisterMetaType<QCMakeProperty>();
|
||||||
qRegisterMetaType<QCMakeCachePropertyList>();
|
qRegisterMetaType<QCMakePropertyList>();
|
||||||
|
|
||||||
QDir execDir(QCoreApplication::applicationDirPath());
|
QDir execDir(QCoreApplication::applicationDirPath());
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ void QCMake::setBinaryDirectory(const QString& dir)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QCMakeCachePropertyList props = this->properties();
|
QCMakePropertyList props = this->properties();
|
||||||
emit this->propertiesChanged(props);
|
emit this->propertiesChanged(props);
|
||||||
cmCacheManager::CacheIterator itm = cachem->NewIterator();
|
cmCacheManager::CacheIterator itm = cachem->NewIterator();
|
||||||
if ( itm.Find("CMAKE_HOME_DIRECTORY"))
|
if ( itm.Find("CMAKE_HOME_DIRECTORY"))
|
||||||
|
@ -165,9 +165,9 @@ void QCMake::generate()
|
||||||
emit this->generateDone(err);
|
emit this->generateDone(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
void QCMake::setProperties(const QCMakePropertyList& newProps)
|
||||||
{
|
{
|
||||||
QCMakeCachePropertyList props = newProps;
|
QCMakePropertyList props = newProps;
|
||||||
|
|
||||||
QStringList toremove;
|
QStringList toremove;
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
QCMakeCacheProperty prop;
|
QCMakeProperty prop;
|
||||||
prop.Key = i.GetName();
|
prop.Key = i.GetName();
|
||||||
int idx = props.indexOf(prop);
|
int idx = props.indexOf(prop);
|
||||||
if(idx == -1)
|
if(idx == -1)
|
||||||
|
@ -213,30 +213,30 @@ void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
||||||
}
|
}
|
||||||
|
|
||||||
// add some new properites
|
// add some new properites
|
||||||
foreach(QCMakeCacheProperty s, props)
|
foreach(QCMakeProperty s, props)
|
||||||
{
|
{
|
||||||
if(s.Type == QCMakeCacheProperty::BOOL)
|
if(s.Type == QCMakeProperty::BOOL)
|
||||||
{
|
{
|
||||||
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
||||||
s.Value.toBool() ? "ON" : "OFF",
|
s.Value.toBool() ? "ON" : "OFF",
|
||||||
s.Help.toAscii().data(),
|
s.Help.toAscii().data(),
|
||||||
cmCacheManager::BOOL);
|
cmCacheManager::BOOL);
|
||||||
}
|
}
|
||||||
else if(s.Type == QCMakeCacheProperty::STRING)
|
else if(s.Type == QCMakeProperty::STRING)
|
||||||
{
|
{
|
||||||
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
||||||
s.Value.toString().toAscii().data(),
|
s.Value.toString().toAscii().data(),
|
||||||
s.Help.toAscii().data(),
|
s.Help.toAscii().data(),
|
||||||
cmCacheManager::STRING);
|
cmCacheManager::STRING);
|
||||||
}
|
}
|
||||||
else if(s.Type == QCMakeCacheProperty::PATH)
|
else if(s.Type == QCMakeProperty::PATH)
|
||||||
{
|
{
|
||||||
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
||||||
s.Value.toString().toAscii().data(),
|
s.Value.toString().toAscii().data(),
|
||||||
s.Help.toAscii().data(),
|
s.Help.toAscii().data(),
|
||||||
cmCacheManager::PATH);
|
cmCacheManager::PATH);
|
||||||
}
|
}
|
||||||
else if(s.Type == QCMakeCacheProperty::FILEPATH)
|
else if(s.Type == QCMakeProperty::FILEPATH)
|
||||||
{
|
{
|
||||||
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
||||||
s.Value.toString().toAscii().data(),
|
s.Value.toString().toAscii().data(),
|
||||||
|
@ -248,9 +248,9 @@ void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
||||||
cachem->SaveCache(this->BinaryDirectory.toAscii().data());
|
cachem->SaveCache(this->BinaryDirectory.toAscii().data());
|
||||||
}
|
}
|
||||||
|
|
||||||
QCMakeCachePropertyList QCMake::properties() const
|
QCMakePropertyList QCMake::properties() const
|
||||||
{
|
{
|
||||||
QCMakeCachePropertyList ret;
|
QCMakePropertyList ret;
|
||||||
|
|
||||||
cmCacheManager *cachem = this->CMakeInstance->GetCacheManager();
|
cmCacheManager *cachem = this->CMakeInstance->GetCacheManager();
|
||||||
for(cmCacheManager::CacheIterator i = cachem->NewIterator();
|
for(cmCacheManager::CacheIterator i = cachem->NewIterator();
|
||||||
|
@ -264,7 +264,7 @@ QCMakeCachePropertyList QCMake::properties() const
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
QCMakeCacheProperty prop;
|
QCMakeProperty prop;
|
||||||
prop.Key = i.GetName();
|
prop.Key = i.GetName();
|
||||||
prop.Help = i.GetProperty("HELPSTRING");
|
prop.Help = i.GetProperty("HELPSTRING");
|
||||||
prop.Value = i.GetValue();
|
prop.Value = i.GetValue();
|
||||||
|
@ -272,20 +272,20 @@ QCMakeCachePropertyList QCMake::properties() const
|
||||||
|
|
||||||
if(i.GetType() == cmCacheManager::BOOL)
|
if(i.GetType() == cmCacheManager::BOOL)
|
||||||
{
|
{
|
||||||
prop.Type = QCMakeCacheProperty::BOOL;
|
prop.Type = QCMakeProperty::BOOL;
|
||||||
prop.Value = cmSystemTools::IsOn(i.GetValue());
|
prop.Value = cmSystemTools::IsOn(i.GetValue());
|
||||||
}
|
}
|
||||||
else if(i.GetType() == cmCacheManager::PATH)
|
else if(i.GetType() == cmCacheManager::PATH)
|
||||||
{
|
{
|
||||||
prop.Type = QCMakeCacheProperty::PATH;
|
prop.Type = QCMakeProperty::PATH;
|
||||||
}
|
}
|
||||||
else if(i.GetType() == cmCacheManager::FILEPATH)
|
else if(i.GetType() == cmCacheManager::FILEPATH)
|
||||||
{
|
{
|
||||||
prop.Type = QCMakeCacheProperty::FILEPATH;
|
prop.Type = QCMakeProperty::FILEPATH;
|
||||||
}
|
}
|
||||||
else if(i.GetType() == cmCacheManager::STRING)
|
else if(i.GetType() == cmCacheManager::STRING)
|
||||||
{
|
{
|
||||||
prop.Type = QCMakeCacheProperty::STRING;
|
prop.Type = QCMakeProperty::STRING;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret.append(prop);
|
ret.append(prop);
|
||||||
|
@ -349,14 +349,14 @@ void QCMake::deleteCache()
|
||||||
this->CMakeInstance->GetCacheManager()->LoadCache(this->BinaryDirectory.toAscii().data());
|
this->CMakeInstance->GetCacheManager()->LoadCache(this->BinaryDirectory.toAscii().data());
|
||||||
// emit no generator and no properties
|
// emit no generator and no properties
|
||||||
this->setGenerator(QString());
|
this->setGenerator(QString());
|
||||||
QCMakeCachePropertyList props = this->properties();
|
QCMakePropertyList props = this->properties();
|
||||||
emit this->propertiesChanged(props);
|
emit this->propertiesChanged(props);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QCMake::reloadCache()
|
void QCMake::reloadCache()
|
||||||
{
|
{
|
||||||
// emit that the cache was cleaned out
|
// emit that the cache was cleaned out
|
||||||
QCMakeCachePropertyList props;
|
QCMakePropertyList props;
|
||||||
emit this->propertiesChanged(props);
|
emit this->propertiesChanged(props);
|
||||||
// reload
|
// reload
|
||||||
this->CMakeInstance->GetCacheManager()->LoadCache(this->BinaryDirectory.toAscii().data());
|
this->CMakeInstance->GetCacheManager()->LoadCache(this->BinaryDirectory.toAscii().data());
|
||||||
|
@ -380,7 +380,7 @@ bool QCMake::getDebugOutput() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QCMake::SetSuppressDevWarnings(bool value)
|
void QCMake::setSuppressDevWarnings(bool value)
|
||||||
{
|
{
|
||||||
this->SuppressDevWarnings = value;
|
this->SuppressDevWarnings = value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,9 +31,9 @@
|
||||||
|
|
||||||
class cmake;
|
class cmake;
|
||||||
|
|
||||||
/// struct to represent cache properties in Qt
|
/// struct to represent cmake properties in Qt
|
||||||
/// Value is of type String or Bool
|
/// Value is of type String or Bool
|
||||||
struct QCMakeCacheProperty
|
struct QCMakeProperty
|
||||||
{
|
{
|
||||||
enum PropertyType { BOOL, PATH, FILEPATH, STRING };
|
enum PropertyType { BOOL, PATH, FILEPATH, STRING };
|
||||||
QString Key;
|
QString Key;
|
||||||
|
@ -41,20 +41,22 @@ struct QCMakeCacheProperty
|
||||||
QString Help;
|
QString Help;
|
||||||
PropertyType Type;
|
PropertyType Type;
|
||||||
bool Advanced;
|
bool Advanced;
|
||||||
bool operator==(const QCMakeCacheProperty& other) const
|
bool operator==(const QCMakeProperty& other) const
|
||||||
{
|
{
|
||||||
return this->Key == other.Key;
|
return this->Key == other.Key;
|
||||||
}
|
}
|
||||||
bool operator<(const QCMakeCacheProperty& other) const
|
bool operator<(const QCMakeProperty& other) const
|
||||||
{
|
{
|
||||||
return this->Key < other.Key;
|
return this->Key < other.Key;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// make types usable with QVariant
|
// list of properties
|
||||||
Q_DECLARE_METATYPE(QCMakeCacheProperty)
|
typedef QList<QCMakeProperty> QCMakePropertyList;
|
||||||
typedef QList<QCMakeCacheProperty> QCMakeCachePropertyList;
|
|
||||||
Q_DECLARE_METATYPE(QCMakeCachePropertyList)
|
// allow QVariant to be a property or list of properties
|
||||||
|
Q_DECLARE_METATYPE(QCMakeProperty)
|
||||||
|
Q_DECLARE_METATYPE(QCMakePropertyList)
|
||||||
|
|
||||||
/// Qt API for CMake library.
|
/// Qt API for CMake library.
|
||||||
/// Wrapper like class allows for easier integration with
|
/// Wrapper like class allows for easier integration with
|
||||||
|
@ -65,7 +67,6 @@ class QCMake : public QObject
|
||||||
public:
|
public:
|
||||||
QCMake(QObject* p=0);
|
QCMake(QObject* p=0);
|
||||||
~QCMake();
|
~QCMake();
|
||||||
void SetSuppressDevWarnings(bool value);
|
|
||||||
public slots:
|
public slots:
|
||||||
/// load the cache file in a directory
|
/// load the cache file in a directory
|
||||||
void loadCache(const QString& dir);
|
void loadCache(const QString& dir);
|
||||||
|
@ -80,7 +81,7 @@ public slots:
|
||||||
/// generate the files
|
/// generate the files
|
||||||
void generate();
|
void generate();
|
||||||
/// set the property values
|
/// set the property values
|
||||||
void setProperties(const QCMakeCachePropertyList&);
|
void setProperties(const QCMakePropertyList&);
|
||||||
/// interrupt the configure or generate process
|
/// interrupt the configure or generate process
|
||||||
void interrupt();
|
void interrupt();
|
||||||
/// delete the cache in binary directory
|
/// delete the cache in binary directory
|
||||||
|
@ -89,10 +90,12 @@ public slots:
|
||||||
void reloadCache();
|
void reloadCache();
|
||||||
/// set whether to do debug output
|
/// set whether to do debug output
|
||||||
void setDebugOutput(bool);
|
void setDebugOutput(bool);
|
||||||
|
/// set whether to do suppress dev warnings
|
||||||
|
void setSuppressDevWarnings(bool value);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// get the list of cache properties
|
/// get the list of cache properties
|
||||||
QCMakeCachePropertyList properties() const;
|
QCMakePropertyList properties() const;
|
||||||
/// get the current binary directory
|
/// get the current binary directory
|
||||||
QString binaryDirectory() const;
|
QString binaryDirectory() const;
|
||||||
/// get the current source directory
|
/// get the current source directory
|
||||||
|
@ -106,7 +109,7 @@ public:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/// signal when properties change (during read from disk or configure process)
|
/// signal when properties change (during read from disk or configure process)
|
||||||
void propertiesChanged(const QCMakeCachePropertyList& vars);
|
void propertiesChanged(const QCMakePropertyList& vars);
|
||||||
/// signal when the generator changes
|
/// signal when the generator changes
|
||||||
void generatorChanged(const QString& gen);
|
void generatorChanged(const QString& gen);
|
||||||
/// signal when the source directory changes (binary directory already
|
/// signal when the source directory changes (binary directory already
|
||||||
|
|
|
@ -17,16 +17,14 @@
|
||||||
|
|
||||||
#include "QCMakeCacheView.h"
|
#include "QCMakeCacheView.h"
|
||||||
|
|
||||||
#include <QToolButton>
|
|
||||||
#include <QFileDialog>
|
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QFileInfo>
|
|
||||||
#include <QStyle>
|
#include <QStyle>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QMenu>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QDirModel>
|
|
||||||
|
#include "QCMakeWidgets.h"
|
||||||
|
|
||||||
static QRegExp AdvancedRegExp[2] = { QRegExp("(false)"), QRegExp("(true|false)") };
|
static QRegExp AdvancedRegExp[2] = { QRegExp("(false)"), QRegExp("(true|false)") };
|
||||||
|
|
||||||
|
@ -145,21 +143,21 @@ QCMakeCacheModel::~QCMakeCacheModel()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint qHash(const QCMakeCacheProperty& p)
|
static uint qHash(const QCMakeProperty& p)
|
||||||
{
|
{
|
||||||
return qHash(p.Key);
|
return qHash(p.Key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QCMakeCacheModel::clear()
|
void QCMakeCacheModel::clear()
|
||||||
{
|
{
|
||||||
this->setProperties(QCMakeCachePropertyList());
|
this->setProperties(QCMakePropertyList());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QCMakeCacheModel::setProperties(const QCMakeCachePropertyList& props)
|
void QCMakeCacheModel::setProperties(const QCMakePropertyList& props)
|
||||||
{
|
{
|
||||||
QSet<QCMakeCacheProperty> newProps = props.toSet();
|
QSet<QCMakeProperty> newProps = props.toSet();
|
||||||
QSet<QCMakeCacheProperty> newProps2 = props.toSet();
|
QSet<QCMakeProperty> newProps2 = props.toSet();
|
||||||
QSet<QCMakeCacheProperty> oldProps = this->Properties.toSet();
|
QSet<QCMakeProperty> oldProps = this->Properties.toSet();
|
||||||
|
|
||||||
oldProps.intersect(newProps);
|
oldProps.intersect(newProps);
|
||||||
newProps.subtract(oldProps);
|
newProps.subtract(oldProps);
|
||||||
|
@ -170,18 +168,45 @@ void QCMakeCacheModel::setProperties(const QCMakeCachePropertyList& props)
|
||||||
|
|
||||||
this->Properties = newProps.toList();
|
this->Properties = newProps.toList();
|
||||||
qSort(this->Properties);
|
qSort(this->Properties);
|
||||||
QCMakeCachePropertyList tmp = newProps2.toList();
|
QCMakePropertyList tmp = newProps2.toList();
|
||||||
qSort(tmp);
|
qSort(tmp);
|
||||||
this->Properties += tmp;
|
this->Properties += tmp;
|
||||||
|
|
||||||
this->reset();
|
this->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
QCMakeCachePropertyList QCMakeCacheModel::properties() const
|
QCMakePropertyList QCMakeCacheModel::properties() const
|
||||||
{
|
{
|
||||||
return this->Properties;
|
return this->Properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QCMakeCacheModel::insertProperty(int row, QCMakeProperty::PropertyType t,
|
||||||
|
const QString& name, const QString& description,
|
||||||
|
const QVariant& value, bool advanced)
|
||||||
|
{
|
||||||
|
if(this->insertRows(row, 1, QModelIndex()))
|
||||||
|
{
|
||||||
|
QModelIndex idx1 = this->index(row, 0);
|
||||||
|
QModelIndex idx2 = this->index(row, 1);
|
||||||
|
|
||||||
|
this->setData(idx1, t, QCMakeCacheModel::TypeRole);
|
||||||
|
this->setData(idx1, name, Qt::DisplayRole);
|
||||||
|
this->setData(idx1, description, QCMakeCacheModel::HelpRole);
|
||||||
|
this->setData(idx1, advanced, QCMakeCacheModel::AdvancedRole);
|
||||||
|
if(t == QCMakeProperty::BOOL)
|
||||||
|
{
|
||||||
|
this->setData(idx2, value.toBool() ? Qt::Checked : Qt::Unchecked,
|
||||||
|
Qt::CheckStateRole);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->setData(idx2, value, Qt::DisplayRole);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void QCMakeCacheModel::setEditEnabled(bool e)
|
void QCMakeCacheModel::setEditEnabled(bool e)
|
||||||
{
|
{
|
||||||
this->EditEnabled = e;
|
this->EditEnabled = e;
|
||||||
|
@ -215,14 +240,14 @@ QVariant QCMakeCacheModel::data (const QModelIndex& idx, int role) const
|
||||||
}
|
}
|
||||||
else if(idx.column() == 1 && (role == Qt::DisplayRole || role == Qt::EditRole))
|
else if(idx.column() == 1 && (role == Qt::DisplayRole || role == Qt::EditRole))
|
||||||
{
|
{
|
||||||
if(this->Properties[idx.row()].Type != QCMakeCacheProperty::BOOL)
|
if(this->Properties[idx.row()].Type != QCMakeProperty::BOOL)
|
||||||
{
|
{
|
||||||
return this->Properties[idx.row()].Value;
|
return this->Properties[idx.row()].Value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(idx.column() == 1 && role == Qt::CheckStateRole)
|
else if(idx.column() == 1 && role == Qt::CheckStateRole)
|
||||||
{
|
{
|
||||||
if(this->Properties[idx.row()].Type == QCMakeCacheProperty::BOOL)
|
if(this->Properties[idx.row()].Type == QCMakeProperty::BOOL)
|
||||||
{
|
{
|
||||||
return this->Properties[idx.row()].Value.toBool() ? Qt::Checked : Qt::Unchecked;
|
return this->Properties[idx.row()].Value.toBool() ? Qt::Checked : Qt::Unchecked;
|
||||||
}
|
}
|
||||||
|
@ -278,7 +303,7 @@ Qt::ItemFlags QCMakeCacheModel::flags (const QModelIndex& idx) const
|
||||||
{
|
{
|
||||||
f |= Qt::ItemIsEditable;
|
f |= Qt::ItemIsEditable;
|
||||||
// booleans are editable in place
|
// booleans are editable in place
|
||||||
if(this->Properties[idx.row()].Type == QCMakeCacheProperty::BOOL)
|
if(this->Properties[idx.row()].Type == QCMakeProperty::BOOL)
|
||||||
{
|
{
|
||||||
f |= Qt::ItemIsUserCheckable;
|
f |= Qt::ItemIsUserCheckable;
|
||||||
}
|
}
|
||||||
|
@ -311,7 +336,7 @@ bool QCMakeCacheModel::setData (const QModelIndex& idx, const QVariant& value, i
|
||||||
}
|
}
|
||||||
else if(role == QCMakeCacheModel::TypeRole)
|
else if(role == QCMakeCacheModel::TypeRole)
|
||||||
{
|
{
|
||||||
this->Properties[idx.row()].Type = static_cast<QCMakeCacheProperty::PropertyType>(value.toInt());
|
this->Properties[idx.row()].Type = static_cast<QCMakeProperty::PropertyType>(value.toInt());
|
||||||
}
|
}
|
||||||
else if(role == QCMakeCacheModel::AdvancedRole)
|
else if(role == QCMakeCacheModel::AdvancedRole)
|
||||||
{
|
{
|
||||||
|
@ -324,7 +349,7 @@ QModelIndex QCMakeCacheModel::buddy(const QModelIndex& idx) const
|
||||||
{
|
{
|
||||||
if(idx.column() == 0)
|
if(idx.column() == 0)
|
||||||
{
|
{
|
||||||
if(this->Properties[idx.row()].Type != QCMakeCacheProperty::BOOL)
|
if(this->Properties[idx.row()].Type != QCMakeProperty::BOOL)
|
||||||
{
|
{
|
||||||
return this->index(idx.row(), 1);
|
return this->index(idx.row(), 1);
|
||||||
}
|
}
|
||||||
|
@ -361,7 +386,7 @@ bool QCMakeCacheModel::insertRows(int row, int num, const QModelIndex&)
|
||||||
this->beginInsertRows(QModelIndex(), row, row+num-1);
|
this->beginInsertRows(QModelIndex(), row, row+num-1);
|
||||||
for(int i=0; i<num; i++)
|
for(int i=0; i<num; i++)
|
||||||
{
|
{
|
||||||
this->Properties.insert(row+i, QCMakeCacheProperty());
|
this->Properties.insert(row+i, QCMakeProperty());
|
||||||
if(this->NewCount >= row)
|
if(this->NewCount >= row)
|
||||||
{
|
{
|
||||||
this->NewCount++;
|
this->NewCount++;
|
||||||
|
@ -387,23 +412,23 @@ QWidget* QCMakeCacheModelDelegate::createEditor(QWidget* p,
|
||||||
const QAbstractItemModel* model = idx.model();
|
const QAbstractItemModel* model = idx.model();
|
||||||
QModelIndex var = model->index(idx.row(), 0);
|
QModelIndex var = model->index(idx.row(), 0);
|
||||||
QVariant type = idx.data(QCMakeCacheModel::TypeRole);
|
QVariant type = idx.data(QCMakeCacheModel::TypeRole);
|
||||||
if(type == QCMakeCacheProperty::BOOL)
|
if(type == QCMakeProperty::BOOL)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else if(type == QCMakeCacheProperty::PATH)
|
else if(type == QCMakeProperty::PATH)
|
||||||
{
|
{
|
||||||
QCMakeCachePathEditor* editor =
|
QCMakePathEditor* editor =
|
||||||
new QCMakeCachePathEditor(p,
|
new QCMakePathEditor(p,
|
||||||
var.data(Qt::DisplayRole).toString());
|
var.data(Qt::DisplayRole).toString());
|
||||||
QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
|
QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
|
||||||
SLOT(setFileDialogFlag(bool)));
|
SLOT(setFileDialogFlag(bool)));
|
||||||
return editor;
|
return editor;
|
||||||
}
|
}
|
||||||
else if(type == QCMakeCacheProperty::FILEPATH)
|
else if(type == QCMakeProperty::FILEPATH)
|
||||||
{
|
{
|
||||||
QCMakeCacheFilePathEditor* editor =
|
QCMakeFilePathEditor* editor =
|
||||||
new QCMakeCacheFilePathEditor(p,
|
new QCMakeFilePathEditor(p,
|
||||||
var.data(Qt::DisplayRole).toString());
|
var.data(Qt::DisplayRole).toString());
|
||||||
QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
|
QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
|
||||||
SLOT(setFileDialogFlag(bool)));
|
SLOT(setFileDialogFlag(bool)));
|
||||||
|
@ -467,101 +492,3 @@ bool QCMakeCacheModelDelegate::eventFilter(QObject* object, QEvent* event)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QCMakeCacheFileEditor::QCMakeCacheFileEditor(QWidget* p, const QString& var)
|
|
||||||
: QLineEdit(p), Variable(var)
|
|
||||||
{
|
|
||||||
// this *is* instead of has a line edit so QAbstractItemView
|
|
||||||
// doesn't get confused with what the editor really is
|
|
||||||
this->setContentsMargins(0, 0, 0, 0);
|
|
||||||
this->ToolButton = new QToolButton(this);
|
|
||||||
this->ToolButton->setText("...");
|
|
||||||
this->ToolButton->setCursor(QCursor(Qt::ArrowCursor));
|
|
||||||
QObject::connect(this->ToolButton, SIGNAL(clicked(bool)),
|
|
||||||
this, SLOT(chooseFile()));
|
|
||||||
}
|
|
||||||
|
|
||||||
QCMakeCacheFilePathEditor::QCMakeCacheFilePathEditor(QWidget* p, const QString& var)
|
|
||||||
: QCMakeCacheFileEditor(p, var)
|
|
||||||
{
|
|
||||||
this->setCompleter(new QCMakeFileCompleter(this, false));
|
|
||||||
}
|
|
||||||
|
|
||||||
QCMakeCachePathEditor::QCMakeCachePathEditor(QWidget* p, const QString& var)
|
|
||||||
: QCMakeCacheFileEditor(p, var)
|
|
||||||
{
|
|
||||||
this->setCompleter(new QCMakeFileCompleter(this, true));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QCMakeCacheFileEditor::resizeEvent(QResizeEvent* e)
|
|
||||||
{
|
|
||||||
// make the tool button fit on the right side
|
|
||||||
int h = e->size().height();
|
|
||||||
this->ToolButton->resize(h, h);
|
|
||||||
this->ToolButton->move(this->width() - h, 0);
|
|
||||||
this->setContentsMargins(0, 0, h, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QCMakeCacheFilePathEditor::chooseFile()
|
|
||||||
{
|
|
||||||
// choose a file and set it
|
|
||||||
QString path;
|
|
||||||
QFileInfo info(this->text());
|
|
||||||
QString title;
|
|
||||||
if(this->Variable.isEmpty())
|
|
||||||
{
|
|
||||||
title = tr("Select File");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
title = tr("Select File for %1");
|
|
||||||
title = title.arg(this->Variable);
|
|
||||||
}
|
|
||||||
this->fileDialogExists(true);
|
|
||||||
path = QFileDialog::getOpenFileName(this, title, info.absolutePath());
|
|
||||||
this->fileDialogExists(false);
|
|
||||||
|
|
||||||
if(!path.isEmpty())
|
|
||||||
{
|
|
||||||
this->setText(QDir::fromNativeSeparators(path));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QCMakeCachePathEditor::chooseFile()
|
|
||||||
{
|
|
||||||
// choose a file and set it
|
|
||||||
QString path;
|
|
||||||
QString title;
|
|
||||||
if(this->Variable.isEmpty())
|
|
||||||
{
|
|
||||||
title = tr("Select Path");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
title = tr("Select Path for %1");
|
|
||||||
title = title.arg(this->Variable);
|
|
||||||
}
|
|
||||||
this->fileDialogExists(true);
|
|
||||||
path = QFileDialog::getExistingDirectory(this, title, this->text());
|
|
||||||
this->fileDialogExists(false);
|
|
||||||
if(!path.isEmpty())
|
|
||||||
{
|
|
||||||
this->setText(QDir::fromNativeSeparators(path));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QCMakeFileCompleter::QCMakeFileCompleter(QObject* o, bool dirs)
|
|
||||||
: QCompleter(o)
|
|
||||||
{
|
|
||||||
QDirModel* model = new QDirModel(this);
|
|
||||||
if(dirs)
|
|
||||||
{
|
|
||||||
model->setFilter(QDir::AllDirs | QDir::Drives | QDir::NoDotAndDotDot);
|
|
||||||
}
|
|
||||||
this->setModel(model);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QCMakeFileCompleter::pathFromIndex(const QModelIndex& idx) const
|
|
||||||
{
|
|
||||||
return QDir::fromNativeSeparators(QCompleter::pathFromIndex(idx));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -21,14 +21,10 @@
|
||||||
#include "QCMake.h"
|
#include "QCMake.h"
|
||||||
#include <QTableView>
|
#include <QTableView>
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
#include <QCheckBox>
|
|
||||||
#include <QLineEdit>
|
|
||||||
#include <QItemDelegate>
|
#include <QItemDelegate>
|
||||||
#include <QSortFilterProxyModel>
|
|
||||||
#include <QCompleter>
|
|
||||||
|
|
||||||
|
class QSortFilterProxyModel;
|
||||||
class QCMakeCacheModel;
|
class QCMakeCacheModel;
|
||||||
class QToolButton;
|
|
||||||
|
|
||||||
|
|
||||||
/// Qt view class for cache properties
|
/// Qt view class for cache properties
|
||||||
|
@ -65,12 +61,18 @@ public:
|
||||||
enum { HelpRole = Qt::UserRole, TypeRole, AdvancedRole };
|
enum { HelpRole = Qt::UserRole, TypeRole, AdvancedRole };
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setProperties(const QCMakeCachePropertyList& props);
|
void setProperties(const QCMakePropertyList& props);
|
||||||
void clear();
|
void clear();
|
||||||
void setEditEnabled(bool);
|
void setEditEnabled(bool);
|
||||||
bool removeRows(int row, int count, const QModelIndex& idx = QModelIndex());
|
bool removeRows(int row, int count, const QModelIndex& idx = QModelIndex());
|
||||||
bool insertRows(int row, int num, const QModelIndex&);
|
bool insertRows(int row, int num, const QModelIndex&);
|
||||||
|
|
||||||
|
// insert a property at a row specifying all the information about the
|
||||||
|
// property
|
||||||
|
bool insertProperty(int row, QCMakeProperty::PropertyType t,
|
||||||
|
const QString& name, const QString& description,
|
||||||
|
const QVariant& value, bool advanced);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// satisfy [pure] virtuals
|
// satisfy [pure] virtuals
|
||||||
int columnCount (const QModelIndex& parent) const;
|
int columnCount (const QModelIndex& parent) const;
|
||||||
|
@ -83,7 +85,7 @@ public:
|
||||||
QModelIndex buddy (const QModelIndex& index) const;
|
QModelIndex buddy (const QModelIndex& index) const;
|
||||||
|
|
||||||
// get the properties
|
// get the properties
|
||||||
QCMakeCachePropertyList properties() const;
|
QCMakePropertyList properties() const;
|
||||||
|
|
||||||
// editing enabled
|
// editing enabled
|
||||||
bool editEnabled() const;
|
bool editEnabled() const;
|
||||||
|
@ -91,7 +93,7 @@ public:
|
||||||
int newCount() const;
|
int newCount() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QCMakeCachePropertyList Properties;
|
QCMakePropertyList Properties;
|
||||||
int NewCount;
|
int NewCount;
|
||||||
bool EditEnabled;
|
bool EditEnabled;
|
||||||
};
|
};
|
||||||
|
@ -115,45 +117,5 @@ protected:
|
||||||
bool FileDialogFlag;
|
bool FileDialogFlag;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Editor widget for editing paths or file paths
|
|
||||||
class QCMakeCacheFileEditor : public QLineEdit
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QCMakeCacheFileEditor(QWidget* p, const QString& var);
|
|
||||||
protected slots:
|
|
||||||
virtual void chooseFile() = 0;
|
|
||||||
signals:
|
|
||||||
void fileDialogExists(bool);
|
|
||||||
protected:
|
|
||||||
void resizeEvent(QResizeEvent* e);
|
|
||||||
QToolButton* ToolButton;
|
|
||||||
QString Variable;
|
|
||||||
};
|
|
||||||
|
|
||||||
class QCMakeCachePathEditor : public QCMakeCacheFileEditor
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QCMakeCachePathEditor(QWidget* p = NULL, const QString& var = QString());
|
|
||||||
void chooseFile();
|
|
||||||
};
|
|
||||||
|
|
||||||
class QCMakeCacheFilePathEditor : public QCMakeCacheFileEditor
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QCMakeCacheFilePathEditor(QWidget* p = NULL, const QString& var = QString());
|
|
||||||
void chooseFile();
|
|
||||||
};
|
|
||||||
|
|
||||||
/// completer class that returns native cmake paths
|
|
||||||
class QCMakeFileCompleter : public QCompleter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QCMakeFileCompleter(QObject* o, bool dirs);
|
|
||||||
virtual QString pathFromIndex(const QModelIndex& idx) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
Program: CMake - Cross-Platform Makefile Generator
|
||||||
|
Module: $RCSfile$
|
||||||
|
Language: C++
|
||||||
|
Date: $Date$
|
||||||
|
Version: $Revision$
|
||||||
|
|
||||||
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
||||||
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
||||||
|
|
||||||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. See the above copyright notices for more information.
|
||||||
|
|
||||||
|
=========================================================================*/
|
||||||
|
|
||||||
|
#include "QCMakeWidgets.h"
|
||||||
|
|
||||||
|
#include <QDirModel>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QToolButton>
|
||||||
|
#include <QResizeEvent>
|
||||||
|
|
||||||
|
QCMakeFileEditor::QCMakeFileEditor(QWidget* p, const QString& var)
|
||||||
|
: QLineEdit(p), Variable(var)
|
||||||
|
{
|
||||||
|
this->ToolButton = new QToolButton(this);
|
||||||
|
this->ToolButton->setText("...");
|
||||||
|
this->ToolButton->setCursor(QCursor(Qt::ArrowCursor));
|
||||||
|
QObject::connect(this->ToolButton, SIGNAL(clicked(bool)),
|
||||||
|
this, SLOT(chooseFile()));
|
||||||
|
}
|
||||||
|
|
||||||
|
QCMakeFilePathEditor::QCMakeFilePathEditor(QWidget* p, const QString& var)
|
||||||
|
: QCMakeFileEditor(p, var)
|
||||||
|
{
|
||||||
|
this->setCompleter(new QCMakeFileCompleter(this, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
QCMakePathEditor::QCMakePathEditor(QWidget* p, const QString& var)
|
||||||
|
: QCMakeFileEditor(p, var)
|
||||||
|
{
|
||||||
|
this->setCompleter(new QCMakeFileCompleter(this, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
void QCMakeFileEditor::resizeEvent(QResizeEvent* e)
|
||||||
|
{
|
||||||
|
// make the tool button fit on the right side
|
||||||
|
int h = e->size().height();
|
||||||
|
// move the line edit to make room for the tool button
|
||||||
|
this->setContentsMargins(0, 0, h, 0);
|
||||||
|
// put the tool button in its place
|
||||||
|
this->ToolButton->resize(h, h);
|
||||||
|
this->ToolButton->move(this->width() - h, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QCMakeFilePathEditor::chooseFile()
|
||||||
|
{
|
||||||
|
// choose a file and set it
|
||||||
|
QString path;
|
||||||
|
QFileInfo info(this->text());
|
||||||
|
QString title;
|
||||||
|
if(this->Variable.isEmpty())
|
||||||
|
{
|
||||||
|
title = tr("Select File");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
title = tr("Select File for %1");
|
||||||
|
title = title.arg(this->Variable);
|
||||||
|
}
|
||||||
|
this->fileDialogExists(true);
|
||||||
|
path = QFileDialog::getOpenFileName(this, title, info.absolutePath());
|
||||||
|
this->fileDialogExists(false);
|
||||||
|
|
||||||
|
if(!path.isEmpty())
|
||||||
|
{
|
||||||
|
this->setText(QDir::fromNativeSeparators(path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void QCMakePathEditor::chooseFile()
|
||||||
|
{
|
||||||
|
// choose a file and set it
|
||||||
|
QString path;
|
||||||
|
QString title;
|
||||||
|
if(this->Variable.isEmpty())
|
||||||
|
{
|
||||||
|
title = tr("Select Path");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
title = tr("Select Path for %1");
|
||||||
|
title = title.arg(this->Variable);
|
||||||
|
}
|
||||||
|
this->fileDialogExists(true);
|
||||||
|
path = QFileDialog::getExistingDirectory(this, title, this->text());
|
||||||
|
this->fileDialogExists(false);
|
||||||
|
if(!path.isEmpty())
|
||||||
|
{
|
||||||
|
this->setText(QDir::fromNativeSeparators(path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QCMakeFileCompleter::QCMakeFileCompleter(QObject* o, bool dirs)
|
||||||
|
: QCompleter(o)
|
||||||
|
{
|
||||||
|
QDirModel* model = new QDirModel(this);
|
||||||
|
if(dirs)
|
||||||
|
{
|
||||||
|
model->setFilter(QDir::AllDirs | QDir::Drives | QDir::NoDotAndDotDot);
|
||||||
|
}
|
||||||
|
this->setModel(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString QCMakeFileCompleter::pathFromIndex(const QModelIndex& idx) const
|
||||||
|
{
|
||||||
|
return QDir::fromNativeSeparators(QCompleter::pathFromIndex(idx));
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
Program: CMake - Cross-Platform Makefile Generator
|
||||||
|
Module: $RCSfile$
|
||||||
|
Language: C++
|
||||||
|
Date: $Date$
|
||||||
|
Version: $Revision$
|
||||||
|
|
||||||
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
||||||
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
||||||
|
|
||||||
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
||||||
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. See the above copyright notices for more information.
|
||||||
|
|
||||||
|
=========================================================================*/
|
||||||
|
|
||||||
|
#ifndef QCMakeWidgets_h
|
||||||
|
#define QCMakeWidgets_h
|
||||||
|
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QCompleter>
|
||||||
|
class QToolButton;
|
||||||
|
|
||||||
|
// common widgets for Qt based CMake
|
||||||
|
|
||||||
|
/// Editor widget for editing paths or file paths
|
||||||
|
class QCMakeFileEditor : public QLineEdit
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
QCMakeFileEditor(QWidget* p, const QString& var);
|
||||||
|
protected slots:
|
||||||
|
virtual void chooseFile() = 0;
|
||||||
|
signals:
|
||||||
|
void fileDialogExists(bool);
|
||||||
|
protected:
|
||||||
|
void resizeEvent(QResizeEvent* e);
|
||||||
|
QToolButton* ToolButton;
|
||||||
|
QString Variable;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// editor widget for editing files
|
||||||
|
class QCMakePathEditor : public QCMakeFileEditor
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
QCMakePathEditor(QWidget* p = NULL, const QString& var = QString());
|
||||||
|
void chooseFile();
|
||||||
|
};
|
||||||
|
|
||||||
|
/// editor widget for editing paths
|
||||||
|
class QCMakeFilePathEditor : public QCMakeFileEditor
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
QCMakeFilePathEditor(QWidget* p = NULL, const QString& var = QString());
|
||||||
|
void chooseFile();
|
||||||
|
};
|
||||||
|
|
||||||
|
/// completer class that returns native cmake paths
|
||||||
|
class QCMakeFileCompleter : public QCompleter
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
QCMakeFileCompleter(QObject* o, bool dirs);
|
||||||
|
virtual QString pathFromIndex(const QModelIndex& idx) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue