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 QString TypeStrings[NumTypes] =
|
||||
{ "BOOL", "PATH", "FILEPATH", "STRING" };
|
||||
static const QCMakeCacheProperty::PropertyType Types[NumTypes] =
|
||||
{ QCMakeCacheProperty::BOOL, QCMakeCacheProperty::PATH,
|
||||
QCMakeCacheProperty::FILEPATH, QCMakeCacheProperty::STRING};
|
||||
static const QCMakeProperty::PropertyType Types[NumTypes] =
|
||||
{ QCMakeProperty::BOOL, QCMakeProperty::PATH,
|
||||
QCMakeProperty::FILEPATH, QCMakeProperty::STRING};
|
||||
|
||||
AddCacheEntry::AddCacheEntry(QWidget* p)
|
||||
: QWidget(p)
|
||||
|
@ -34,8 +34,8 @@ AddCacheEntry::AddCacheEntry(QWidget* p)
|
|||
this->Type->addItem(TypeStrings[i]);
|
||||
}
|
||||
QWidget* cb = new QCheckBox();
|
||||
QWidget* path = new QCMakeCachePathEditor();
|
||||
QWidget* filepath = new QCMakeCacheFilePathEditor();
|
||||
QWidget* path = new QCMakePathEditor();
|
||||
QWidget* filepath = new QCMakeFilePathEditor();
|
||||
QWidget* string = new QLineEdit();
|
||||
this->StackedWidget->addWidget(cb);
|
||||
this->StackedWidget->addWidget(path);
|
||||
|
@ -73,14 +73,14 @@ QString AddCacheEntry::description() const
|
|||
return this->Description->text();
|
||||
}
|
||||
|
||||
QCMakeCacheProperty::PropertyType AddCacheEntry::type() const
|
||||
QCMakeProperty::PropertyType AddCacheEntry::type() const
|
||||
{
|
||||
int idx = this->Type->currentIndex();
|
||||
if(idx >= 0 && idx < NumTypes)
|
||||
{
|
||||
return Types[idx];
|
||||
}
|
||||
return QCMakeCacheProperty::BOOL;
|
||||
return QCMakeProperty::BOOL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ public:
|
|||
QString name() const;
|
||||
QVariant value() const;
|
||||
QString description() const;
|
||||
QCMakeCacheProperty::PropertyType type() const;
|
||||
QCMakeProperty::PropertyType type() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -65,14 +65,14 @@
|
|||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>QCMakeCachePathEditor</class>
|
||||
<class>QCMakePathEditor</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>QCMakeCacheView.h</header>
|
||||
<header>QCMakeWidgets.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QCMakeCacheFilePathEditor</class>
|
||||
<class>QCMakeFilePathEditor</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>QCMakeCacheView.h</header>
|
||||
<header>QCMakeWidgets.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<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)
|
||||
SET(QT_MIN_VERSION "4.2.0")
|
||||
SET(QT_MIN_VERSION "4.3.0")
|
||||
FIND_PACKAGE(Qt4 REQUIRED)
|
||||
|
||||
IF(NOT QT4_FOUND)
|
||||
|
@ -16,6 +16,8 @@ ELSE(NOT QT4_FOUND)
|
|||
SET(SRCS
|
||||
AddCacheEntry.cxx
|
||||
AddCacheEntry.h
|
||||
CMakeFirstConfigure.cxx
|
||||
CMakeFirstConfigure.h
|
||||
CMakeSetup.cxx
|
||||
CMakeSetupDialog.cxx
|
||||
CMakeSetupDialog.h
|
||||
|
@ -23,19 +25,24 @@ ELSE(NOT QT4_FOUND)
|
|||
QCMake.h
|
||||
QCMakeCacheView.cxx
|
||||
QCMakeCacheView.h
|
||||
QCMakeWidgets.cxx
|
||||
QCMakeWidgets.h
|
||||
QMacInstallDialog.cxx
|
||||
QMacInstallDialog.h
|
||||
)
|
||||
QT4_WRAP_UI(UI_SRCS
|
||||
CMakeFirstConfigure.ui
|
||||
CMakeSetupDialog.ui
|
||||
AddCacheEntry.ui
|
||||
MacInstallDialog.ui
|
||||
)
|
||||
QT4_WRAP_CPP(MOC_SRCS
|
||||
AddCacheEntry.h
|
||||
CMakeFirstConfigure.h
|
||||
CMakeSetupDialog.h
|
||||
QCMake.h
|
||||
QCMakeCacheView.h
|
||||
QCMakeWidgets.h
|
||||
QMacInstallDialog.h
|
||||
)
|
||||
QT4_ADD_RESOURCES(RC_SRCS CMakeSetup.qrc)
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "QCMake.h"
|
||||
#include "QCMakeCacheView.h"
|
||||
#include "AddCacheEntry.h"
|
||||
#include "CMakeFirstConfigure.h"
|
||||
|
||||
QCMakeThread::QCMakeThread(QObject* p)
|
||||
: QThread(p), CMakeInstance(NULL)
|
||||
|
@ -60,7 +61,6 @@ void QCMakeThread::run()
|
|||
CMakeSetupDialog::CMakeSetupDialog()
|
||||
: ExitAfterGenerate(true), CacheModified(false), CurrentState(Interrupting)
|
||||
{
|
||||
this->SuppressDevWarnings = false;
|
||||
// create the GUI
|
||||
QSettings settings;
|
||||
settings.beginGroup("Settings/StartPath");
|
||||
|
@ -104,11 +104,9 @@ CMakeSetupDialog::CMakeSetupDialog()
|
|||
this, SLOT(doInstallForCommandLine()));
|
||||
#endif
|
||||
QMenu* OptionsMenu = this->menuBar()->addMenu(tr("&Options"));
|
||||
QAction* supressDevWarningsAction = OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)"));
|
||||
QObject::connect(supressDevWarningsAction, SIGNAL(triggered(bool)),
|
||||
this, SLOT(doSuppressDev()));
|
||||
this->SuppressDevWarningsAction = OptionsMenu->addAction(tr("&Suppress dev Warnings (-Wno-dev)"));
|
||||
this->SuppressDevWarningsAction->setCheckable(true);
|
||||
|
||||
supressDevWarningsAction->setCheckable(true);
|
||||
QAction* debugAction = OptionsMenu->addAction(tr("&Debug Output"));
|
||||
debugAction->setCheckable(true);
|
||||
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
|
||||
QObject::connect(this->CMakeThread->cmakeInstance(),
|
||||
SIGNAL(propertiesChanged(const QCMakeCachePropertyList&)),
|
||||
SIGNAL(propertiesChanged(const QCMakePropertyList&)),
|
||||
this->CacheValues->cacheModel(),
|
||||
SLOT(setProperties(const QCMakeCachePropertyList&)));
|
||||
SLOT(setProperties(const QCMakePropertyList&)));
|
||||
|
||||
QObject::connect(this->ConfigureButton, SIGNAL(clicked(bool)),
|
||||
this, SLOT(doConfigure()));
|
||||
|
@ -220,6 +218,8 @@ void CMakeSetupDialog::initialize()
|
|||
QObject::connect(this->AddEntry, SIGNAL(clicked(bool)),
|
||||
this, SLOT(addCacheEntry()));
|
||||
|
||||
QObject::connect(this->SuppressDevWarningsAction, SIGNAL(triggered(bool)),
|
||||
this->CMakeThread->cmakeInstance(), SLOT(setSuppressDevWarnings(bool)));
|
||||
|
||||
if(!this->SourceDirectory->text().isEmpty() ||
|
||||
!this->BinaryDirectory->lineEdit()->text().isEmpty())
|
||||
|
@ -275,10 +275,10 @@ void CMakeSetupDialog::doConfigure()
|
|||
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->promptForGenerator())
|
||||
if(!this->setupFirstConfigure())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -292,7 +292,7 @@ void CMakeSetupDialog::doConfigure()
|
|||
this->CacheValues->selectionModel()->clear();
|
||||
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
|
||||
"setProperties", Qt::QueuedConnection,
|
||||
Q_ARG(QCMakeCachePropertyList,
|
||||
Q_ARG(QCMakePropertyList,
|
||||
this->CacheValues->cacheModel()->properties()));
|
||||
QMetaObject::invokeMethod(this->CMakeThread->cmakeInstance(),
|
||||
"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()
|
||||
{
|
||||
QMacInstallDialog setupdialog(0);
|
||||
|
@ -542,41 +535,89 @@ void CMakeSetupDialog::setEnabledState(bool enabled)
|
|||
this->RemoveEntry->setEnabled(false); // let selection re-enable it
|
||||
}
|
||||
|
||||
bool CMakeSetupDialog::promptForGenerator()
|
||||
bool CMakeSetupDialog::setupFirstConfigure()
|
||||
{
|
||||
QSettings settings;
|
||||
settings.beginGroup("Settings/StartPath");
|
||||
QString lastGen = settings.value("LastGenerator").toString();
|
||||
CMakeFirstConfigure dialog;
|
||||
|
||||
QStringList gens = this->CMakeThread->cmakeInstance()->availableGenerators();
|
||||
QDialog dialog;
|
||||
dialog.setWindowTitle(tr("Choose Generator"));
|
||||
QLabel* lab = new QLabel(&dialog);
|
||||
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"
|
||||
"Press OK once you have made your selection."));
|
||||
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()));
|
||||
// initialize dialog and restore saved settings
|
||||
|
||||
// add generators
|
||||
dialog.setGenerators(this->CMakeThread->cmakeInstance()->availableGenerators());
|
||||
|
||||
// restore from settings
|
||||
dialog.loadFromSettings();
|
||||
|
||||
QVBoxLayout* l = new QVBoxLayout(&dialog);
|
||||
l->addWidget(lab);
|
||||
l->addWidget(combo);
|
||||
l->addWidget(btns);
|
||||
if(dialog.exec() == QDialog::Accepted)
|
||||
{
|
||||
lastGen = combo->currentText();
|
||||
settings.setValue("LastGenerator", lastGen);
|
||||
this->CMakeThread->cmakeInstance()->setGenerator(combo->currentText());
|
||||
dialog.saveToSettings();
|
||||
this->CMakeThread->cmakeInstance()->setGenerator(dialog.getGenerator());
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -856,20 +897,7 @@ void CMakeSetupDialog::addCacheEntry()
|
|||
if(QDialog::Accepted == dialog.exec())
|
||||
{
|
||||
QCMakeCacheModel* m = this->CacheValues->cacheModel();
|
||||
m->insertRows(0, 1, QModelIndex());
|
||||
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);
|
||||
}
|
||||
m->insertProperty(0, w->type(), w->name(), w->description(), w->value(), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,6 @@ protected slots:
|
|||
void initialize();
|
||||
void doConfigure();
|
||||
void doGenerate();
|
||||
void doSuppressDev();
|
||||
void doInstallForCommandLine();
|
||||
void doHelp();
|
||||
void doAbout();
|
||||
|
@ -62,7 +61,7 @@ protected slots:
|
|||
void updateBinaryDirectory(const QString& dir);
|
||||
void showProgress(const QString& msg, float percent);
|
||||
void setEnabledState(bool);
|
||||
bool promptForGenerator();
|
||||
bool setupFirstConfigure();
|
||||
void updateGeneratorLabel(const QString& gen);
|
||||
void setExitAfterGenerate(bool);
|
||||
void addBinaryPath(const QString&);
|
||||
|
@ -89,7 +88,6 @@ protected:
|
|||
QCMakeThread* CMakeThread;
|
||||
bool ExitAfterGenerate;
|
||||
bool CacheModified;
|
||||
bool SuppressDevWarnings;
|
||||
QAction* ReloadCacheAction;
|
||||
QAction* DeleteCacheAction;
|
||||
QAction* ExitAction;
|
||||
|
|
|
@ -29,8 +29,8 @@ QCMake::QCMake(QObject* p)
|
|||
: QObject(p)
|
||||
{
|
||||
this->SuppressDevWarnings = false;
|
||||
qRegisterMetaType<QCMakeCacheProperty>();
|
||||
qRegisterMetaType<QCMakeCachePropertyList>();
|
||||
qRegisterMetaType<QCMakeProperty>();
|
||||
qRegisterMetaType<QCMakePropertyList>();
|
||||
|
||||
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);
|
||||
cmCacheManager::CacheIterator itm = cachem->NewIterator();
|
||||
if ( itm.Find("CMAKE_HOME_DIRECTORY"))
|
||||
|
@ -165,9 +165,9 @@ void QCMake::generate()
|
|||
emit this->generateDone(err);
|
||||
}
|
||||
|
||||
void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
||||
void QCMake::setProperties(const QCMakePropertyList& newProps)
|
||||
{
|
||||
QCMakeCachePropertyList props = newProps;
|
||||
QCMakePropertyList props = newProps;
|
||||
|
||||
QStringList toremove;
|
||||
|
||||
|
@ -183,7 +183,7 @@ void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
|||
continue;
|
||||
}
|
||||
|
||||
QCMakeCacheProperty prop;
|
||||
QCMakeProperty prop;
|
||||
prop.Key = i.GetName();
|
||||
int idx = props.indexOf(prop);
|
||||
if(idx == -1)
|
||||
|
@ -213,30 +213,30 @@ void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
|||
}
|
||||
|
||||
// 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(),
|
||||
s.Value.toBool() ? "ON" : "OFF",
|
||||
s.Help.toAscii().data(),
|
||||
cmCacheManager::BOOL);
|
||||
}
|
||||
else if(s.Type == QCMakeCacheProperty::STRING)
|
||||
else if(s.Type == QCMakeProperty::STRING)
|
||||
{
|
||||
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
||||
s.Value.toString().toAscii().data(),
|
||||
s.Help.toAscii().data(),
|
||||
cmCacheManager::STRING);
|
||||
}
|
||||
else if(s.Type == QCMakeCacheProperty::PATH)
|
||||
else if(s.Type == QCMakeProperty::PATH)
|
||||
{
|
||||
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
||||
s.Value.toString().toAscii().data(),
|
||||
s.Help.toAscii().data(),
|
||||
cmCacheManager::PATH);
|
||||
}
|
||||
else if(s.Type == QCMakeCacheProperty::FILEPATH)
|
||||
else if(s.Type == QCMakeProperty::FILEPATH)
|
||||
{
|
||||
this->CMakeInstance->AddCacheEntry(s.Key.toAscii().data(),
|
||||
s.Value.toString().toAscii().data(),
|
||||
|
@ -248,9 +248,9 @@ void QCMake::setProperties(const QCMakeCachePropertyList& newProps)
|
|||
cachem->SaveCache(this->BinaryDirectory.toAscii().data());
|
||||
}
|
||||
|
||||
QCMakeCachePropertyList QCMake::properties() const
|
||||
QCMakePropertyList QCMake::properties() const
|
||||
{
|
||||
QCMakeCachePropertyList ret;
|
||||
QCMakePropertyList ret;
|
||||
|
||||
cmCacheManager *cachem = this->CMakeInstance->GetCacheManager();
|
||||
for(cmCacheManager::CacheIterator i = cachem->NewIterator();
|
||||
|
@ -264,7 +264,7 @@ QCMakeCachePropertyList QCMake::properties() const
|
|||
continue;
|
||||
}
|
||||
|
||||
QCMakeCacheProperty prop;
|
||||
QCMakeProperty prop;
|
||||
prop.Key = i.GetName();
|
||||
prop.Help = i.GetProperty("HELPSTRING");
|
||||
prop.Value = i.GetValue();
|
||||
|
@ -272,20 +272,20 @@ QCMakeCachePropertyList QCMake::properties() const
|
|||
|
||||
if(i.GetType() == cmCacheManager::BOOL)
|
||||
{
|
||||
prop.Type = QCMakeCacheProperty::BOOL;
|
||||
prop.Type = QCMakeProperty::BOOL;
|
||||
prop.Value = cmSystemTools::IsOn(i.GetValue());
|
||||
}
|
||||
else if(i.GetType() == cmCacheManager::PATH)
|
||||
{
|
||||
prop.Type = QCMakeCacheProperty::PATH;
|
||||
prop.Type = QCMakeProperty::PATH;
|
||||
}
|
||||
else if(i.GetType() == cmCacheManager::FILEPATH)
|
||||
{
|
||||
prop.Type = QCMakeCacheProperty::FILEPATH;
|
||||
prop.Type = QCMakeProperty::FILEPATH;
|
||||
}
|
||||
else if(i.GetType() == cmCacheManager::STRING)
|
||||
{
|
||||
prop.Type = QCMakeCacheProperty::STRING;
|
||||
prop.Type = QCMakeProperty::STRING;
|
||||
}
|
||||
|
||||
ret.append(prop);
|
||||
|
@ -349,14 +349,14 @@ void QCMake::deleteCache()
|
|||
this->CMakeInstance->GetCacheManager()->LoadCache(this->BinaryDirectory.toAscii().data());
|
||||
// emit no generator and no properties
|
||||
this->setGenerator(QString());
|
||||
QCMakeCachePropertyList props = this->properties();
|
||||
QCMakePropertyList props = this->properties();
|
||||
emit this->propertiesChanged(props);
|
||||
}
|
||||
|
||||
void QCMake::reloadCache()
|
||||
{
|
||||
// emit that the cache was cleaned out
|
||||
QCMakeCachePropertyList props;
|
||||
QCMakePropertyList props;
|
||||
emit this->propertiesChanged(props);
|
||||
// reload
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -31,9 +31,9 @@
|
|||
|
||||
class cmake;
|
||||
|
||||
/// struct to represent cache properties in Qt
|
||||
/// struct to represent cmake properties in Qt
|
||||
/// Value is of type String or Bool
|
||||
struct QCMakeCacheProperty
|
||||
struct QCMakeProperty
|
||||
{
|
||||
enum PropertyType { BOOL, PATH, FILEPATH, STRING };
|
||||
QString Key;
|
||||
|
@ -41,20 +41,22 @@ struct QCMakeCacheProperty
|
|||
QString Help;
|
||||
PropertyType Type;
|
||||
bool Advanced;
|
||||
bool operator==(const QCMakeCacheProperty& other) const
|
||||
bool operator==(const QCMakeProperty& other) const
|
||||
{
|
||||
return this->Key == other.Key;
|
||||
}
|
||||
bool operator<(const QCMakeCacheProperty& other) const
|
||||
bool operator<(const QCMakeProperty& other) const
|
||||
{
|
||||
return this->Key < other.Key;
|
||||
}
|
||||
};
|
||||
|
||||
// make types usable with QVariant
|
||||
Q_DECLARE_METATYPE(QCMakeCacheProperty)
|
||||
typedef QList<QCMakeCacheProperty> QCMakeCachePropertyList;
|
||||
Q_DECLARE_METATYPE(QCMakeCachePropertyList)
|
||||
// list of properties
|
||||
typedef QList<QCMakeProperty> QCMakePropertyList;
|
||||
|
||||
// allow QVariant to be a property or list of properties
|
||||
Q_DECLARE_METATYPE(QCMakeProperty)
|
||||
Q_DECLARE_METATYPE(QCMakePropertyList)
|
||||
|
||||
/// Qt API for CMake library.
|
||||
/// Wrapper like class allows for easier integration with
|
||||
|
@ -65,7 +67,6 @@ class QCMake : public QObject
|
|||
public:
|
||||
QCMake(QObject* p=0);
|
||||
~QCMake();
|
||||
void SetSuppressDevWarnings(bool value);
|
||||
public slots:
|
||||
/// load the cache file in a directory
|
||||
void loadCache(const QString& dir);
|
||||
|
@ -80,7 +81,7 @@ public slots:
|
|||
/// generate the files
|
||||
void generate();
|
||||
/// set the property values
|
||||
void setProperties(const QCMakeCachePropertyList&);
|
||||
void setProperties(const QCMakePropertyList&);
|
||||
/// interrupt the configure or generate process
|
||||
void interrupt();
|
||||
/// delete the cache in binary directory
|
||||
|
@ -89,10 +90,12 @@ public slots:
|
|||
void reloadCache();
|
||||
/// set whether to do debug output
|
||||
void setDebugOutput(bool);
|
||||
/// set whether to do suppress dev warnings
|
||||
void setSuppressDevWarnings(bool value);
|
||||
|
||||
public:
|
||||
/// get the list of cache properties
|
||||
QCMakeCachePropertyList properties() const;
|
||||
QCMakePropertyList properties() const;
|
||||
/// get the current binary directory
|
||||
QString binaryDirectory() const;
|
||||
/// get the current source directory
|
||||
|
@ -106,7 +109,7 @@ public:
|
|||
|
||||
signals:
|
||||
/// 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
|
||||
void generatorChanged(const QString& gen);
|
||||
/// signal when the source directory changes (binary directory already
|
||||
|
|
|
@ -17,16 +17,14 @@
|
|||
|
||||
#include "QCMakeCacheView.h"
|
||||
|
||||
#include <QToolButton>
|
||||
#include <QFileDialog>
|
||||
#include <QHBoxLayout>
|
||||
#include <QHeaderView>
|
||||
#include <QEvent>
|
||||
#include <QFileInfo>
|
||||
#include <QStyle>
|
||||
#include <QKeyEvent>
|
||||
#include <QMenu>
|
||||
#include <QDirModel>
|
||||
#include <QSortFilterProxyModel>
|
||||
|
||||
#include "QCMakeWidgets.h"
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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<QCMakeCacheProperty> newProps2 = props.toSet();
|
||||
QSet<QCMakeCacheProperty> oldProps = this->Properties.toSet();
|
||||
QSet<QCMakeProperty> newProps = props.toSet();
|
||||
QSet<QCMakeProperty> newProps2 = props.toSet();
|
||||
QSet<QCMakeProperty> oldProps = this->Properties.toSet();
|
||||
|
||||
oldProps.intersect(newProps);
|
||||
newProps.subtract(oldProps);
|
||||
|
@ -170,18 +168,45 @@ void QCMakeCacheModel::setProperties(const QCMakeCachePropertyList& props)
|
|||
|
||||
this->Properties = newProps.toList();
|
||||
qSort(this->Properties);
|
||||
QCMakeCachePropertyList tmp = newProps2.toList();
|
||||
QCMakePropertyList tmp = newProps2.toList();
|
||||
qSort(tmp);
|
||||
this->Properties += tmp;
|
||||
|
||||
this->reset();
|
||||
}
|
||||
|
||||
QCMakeCachePropertyList QCMakeCacheModel::properties() const
|
||||
QCMakePropertyList QCMakeCacheModel::properties() const
|
||||
{
|
||||
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)
|
||||
{
|
||||
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))
|
||||
{
|
||||
if(this->Properties[idx.row()].Type != QCMakeCacheProperty::BOOL)
|
||||
if(this->Properties[idx.row()].Type != QCMakeProperty::BOOL)
|
||||
{
|
||||
return this->Properties[idx.row()].Value;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -278,7 +303,7 @@ Qt::ItemFlags QCMakeCacheModel::flags (const QModelIndex& idx) const
|
|||
{
|
||||
f |= Qt::ItemIsEditable;
|
||||
// booleans are editable in place
|
||||
if(this->Properties[idx.row()].Type == QCMakeCacheProperty::BOOL)
|
||||
if(this->Properties[idx.row()].Type == QCMakeProperty::BOOL)
|
||||
{
|
||||
f |= Qt::ItemIsUserCheckable;
|
||||
}
|
||||
|
@ -311,7 +336,7 @@ bool QCMakeCacheModel::setData (const QModelIndex& idx, const QVariant& value, i
|
|||
}
|
||||
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)
|
||||
{
|
||||
|
@ -324,7 +349,7 @@ QModelIndex QCMakeCacheModel::buddy(const QModelIndex& idx) const
|
|||
{
|
||||
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);
|
||||
}
|
||||
|
@ -361,7 +386,7 @@ bool QCMakeCacheModel::insertRows(int row, int num, const QModelIndex&)
|
|||
this->beginInsertRows(QModelIndex(), row, row+num-1);
|
||||
for(int i=0; i<num; i++)
|
||||
{
|
||||
this->Properties.insert(row+i, QCMakeCacheProperty());
|
||||
this->Properties.insert(row+i, QCMakeProperty());
|
||||
if(this->NewCount >= row)
|
||||
{
|
||||
this->NewCount++;
|
||||
|
@ -387,23 +412,23 @@ QWidget* QCMakeCacheModelDelegate::createEditor(QWidget* p,
|
|||
const QAbstractItemModel* model = idx.model();
|
||||
QModelIndex var = model->index(idx.row(), 0);
|
||||
QVariant type = idx.data(QCMakeCacheModel::TypeRole);
|
||||
if(type == QCMakeCacheProperty::BOOL)
|
||||
if(type == QCMakeProperty::BOOL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else if(type == QCMakeCacheProperty::PATH)
|
||||
else if(type == QCMakeProperty::PATH)
|
||||
{
|
||||
QCMakeCachePathEditor* editor =
|
||||
new QCMakeCachePathEditor(p,
|
||||
QCMakePathEditor* editor =
|
||||
new QCMakePathEditor(p,
|
||||
var.data(Qt::DisplayRole).toString());
|
||||
QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
|
||||
SLOT(setFileDialogFlag(bool)));
|
||||
return editor;
|
||||
}
|
||||
else if(type == QCMakeCacheProperty::FILEPATH)
|
||||
else if(type == QCMakeProperty::FILEPATH)
|
||||
{
|
||||
QCMakeCacheFilePathEditor* editor =
|
||||
new QCMakeCacheFilePathEditor(p,
|
||||
QCMakeFilePathEditor* editor =
|
||||
new QCMakeFilePathEditor(p,
|
||||
var.data(Qt::DisplayRole).toString());
|
||||
QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
|
||||
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 <QTableView>
|
||||
#include <QAbstractTableModel>
|
||||
#include <QCheckBox>
|
||||
#include <QLineEdit>
|
||||
#include <QItemDelegate>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QCompleter>
|
||||
|
||||
class QSortFilterProxyModel;
|
||||
class QCMakeCacheModel;
|
||||
class QToolButton;
|
||||
|
||||
|
||||
/// Qt view class for cache properties
|
||||
|
@ -65,12 +61,18 @@ public:
|
|||
enum { HelpRole = Qt::UserRole, TypeRole, AdvancedRole };
|
||||
|
||||
public slots:
|
||||
void setProperties(const QCMakeCachePropertyList& props);
|
||||
void setProperties(const QCMakePropertyList& props);
|
||||
void clear();
|
||||
void setEditEnabled(bool);
|
||||
bool removeRows(int row, int count, const QModelIndex& idx = 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:
|
||||
// satisfy [pure] virtuals
|
||||
int columnCount (const QModelIndex& parent) const;
|
||||
|
@ -83,7 +85,7 @@ public:
|
|||
QModelIndex buddy (const QModelIndex& index) const;
|
||||
|
||||
// get the properties
|
||||
QCMakeCachePropertyList properties() const;
|
||||
QCMakePropertyList properties() const;
|
||||
|
||||
// editing enabled
|
||||
bool editEnabled() const;
|
||||
|
@ -91,7 +93,7 @@ public:
|
|||
int newCount() const;
|
||||
|
||||
protected:
|
||||
QCMakeCachePropertyList Properties;
|
||||
QCMakePropertyList Properties;
|
||||
int NewCount;
|
||||
bool EditEnabled;
|
||||
};
|
||||
|
@ -115,45 +117,5 @@ protected:
|
|||
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
|
||||
|
||||
|
|
|
@ -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