diff --git a/projectbuilders/cmakebuilder/cmakebuilder.h b/projectbuilders/cmakebuilder/cmakebuilder.h
--- a/projectbuilders/cmakebuilder/cmakebuilder.h
+++ b/projectbuilders/cmakebuilder/cmakebuilder.h
@@ -60,6 +60,9 @@
// bool updateConfig( KDevelop::IProject* project );
+ static QStringList supportedGenerators();
+ static QString defaultGenerator();
+
int configPages() const override;
KDevelop::ConfigPage* configPage(int number, QWidget* parent) override;
diff --git a/projectbuilders/cmakebuilder/cmakebuilder.cpp b/projectbuilders/cmakebuilder/cmakebuilder.cpp
--- a/projectbuilders/cmakebuilder/cmakebuilder.cpp
+++ b/projectbuilders/cmakebuilder/cmakebuilder.cpp
@@ -249,7 +249,7 @@
}
//It means that it still has to be generated, so use the builder for
//the generator we use
- return m_buildersForGenerator[CMakeBuilderSettings::self()->generator()];
+ return m_buildersForGenerator[defaultGenerator()];
}
QList< KDevelop::IProjectBuilder* > CMakeBuilder::additionalBuilderPlugins( KDevelop::IProject* project ) const
@@ -266,6 +266,39 @@
return 1;
}
+QStringList CMakeBuilder::supportedGenerators()
+{
+ QStringList generatorNames;
+
+ bool hasNinja = KDevelop::ICore::self()->pluginController()->pluginForExtension("org.kdevelop.IProjectBuilder", "KDevNinjaBuilder");
+ if (hasNinja)
+ generatorNames << "Ninja";
+
+#ifdef Q_OS_WIN
+ // Visual Studio solution is the standard generator under windows, but we dont want to use
+ // the VS IDE, so we need nmake makefiles
+ generatorNames << "NMake Makefiles";
+#endif
+ generatorNames << "Unix Makefiles";
+
+ return generatorNames;
+}
+
+QString CMakeBuilder::defaultGenerator()
+{
+ const QStringList generatorNames = supportedGenerators();
+
+ QString defGen = generatorNames.value(CMakeBuilderSettings::self()->generator());
+ if (defGen.isEmpty())
+ {
+ qWarning() << "Couldn't find builder with index " << CMakeBuilderSettings::self()->generator()
+ << ", defaulting to 0";
+ CMakeBuilderSettings::self()->setGenerator(0);
+ defGen = generatorNames.at(0);
+ }
+ return defGen;
+}
+
KDevelop::ConfigPage* CMakeBuilder::configPage(int number, QWidget* parent)
{
if (number == 0) {
diff --git a/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg b/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg
--- a/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg
+++ b/projectbuilders/cmakebuilder/cmakebuilderconfig.kcfg
@@ -8,8 +8,8 @@
-
- Unix Makefiles
+
+ 0
diff --git a/projectbuilders/cmakebuilder/cmakebuilderpreferences.h b/projectbuilders/cmakebuilder/cmakebuilderpreferences.h
--- a/projectbuilders/cmakebuilder/cmakebuilderpreferences.h
+++ b/projectbuilders/cmakebuilder/cmakebuilderpreferences.h
@@ -40,13 +40,6 @@
QString fullName() const override;
QIcon icon() const override;
- void apply() override;
- void reset() override;
- void defaults() override;
-
-public slots:
- void generatorChanged(const QString& generator);
-
private:
Ui::CMakeBuilderPreferences* m_prefsUi;
};
diff --git a/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp b/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp
--- a/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp
+++ b/projectbuilders/cmakebuilder/cmakebuilderpreferences.cpp
@@ -26,6 +26,7 @@
#include
#include "ui_cmakebuilderpreferences.h"
+#include "cmakebuilder.h"
#include "cmakebuilderconfig.h"
#include "cmakeutils.h"
@@ -39,55 +40,18 @@
l->addWidget( w );
#ifdef Q_OS_WIN
- // Visual Studio solution is the standard generator under windows, but we dont want to use
- // the VS IDE, so we need nmake makefiles
- m_prefsUi->kcfg_generator->addItem("NMake Makefiles");
- static_cast(CMakeBuilderSettings::self()->findItem("generator"))->setDefaultValue("NMake Makefiles");
-
m_prefsUi->kcfg_cmakeExe->setFilter("*.exe");
-#else
- m_prefsUi->kcfg_generator->addItem("Unix Makefiles");
#endif
- bool hasNinja = KDevelop::ICore::self()->pluginController()->pluginForExtension("org.kdevelop.IProjectBuilder", "KDevNinjaBuilder");
- if(hasNinja)
- m_prefsUi->kcfg_generator->addItem("Ninja");
-
- connect(m_prefsUi->kcfg_generator, static_cast(&QComboBox::currentIndexChanged), this, &CMakeBuilderPreferences::generatorChanged);
+ foreach(const QString& generator, CMakeBuilder::supportedGenerators())
+ m_prefsUi->kcfg_generator->addItem(generator);
}
CMakeBuilderPreferences::~CMakeBuilderPreferences()
{
delete m_prefsUi;
}
-void CMakeBuilderPreferences::defaults()
-{
- m_prefsUi->kcfg_generator->setCurrentIndex(0);
- KDevelop::ConfigPage::defaults();
-}
-
-void CMakeBuilderPreferences::apply()
-{
- CMakeBuilderSettings::setGenerator(m_prefsUi->kcfg_generator->currentText());
- KDevelop::ConfigPage::apply();
- CMakeBuilderSettings::self()->save();
-}
-
-void CMakeBuilderPreferences::reset()
-{
- int idx = m_prefsUi->kcfg_generator->findText(CMakeBuilderSettings::self()->generator());
- m_prefsUi->kcfg_generator->setCurrentIndex(idx);
- KDevelop::ConfigPage::reset();
-}
-
-void CMakeBuilderPreferences::generatorChanged(const QString& generator)
-{
- if (CMakeBuilderSettings::self()->generator() != generator) {
- emit changed();
- }
-}
-
QString CMakeBuilderPreferences::name() const
{
return i18n("CMake");
diff --git a/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui b/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui
--- a/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui
+++ b/projectbuilders/cmakebuilder/cmakebuilderpreferences.ui
@@ -31,7 +31,7 @@
-
- Generator:
+ Default generator:
diff --git a/projectbuilders/cmakebuilder/cmakejob.cpp b/projectbuilders/cmakebuilder/cmakejob.cpp
--- a/projectbuilders/cmakebuilder/cmakejob.cpp
+++ b/projectbuilders/cmakebuilder/cmakejob.cpp
@@ -23,6 +23,7 @@
#include "cmakejob.h"
#include
+#include
#include
#include
@@ -107,7 +108,7 @@
QDir builddir(CMake::currentBuildDir( m_project ).toLocalFile());
if(!builddir.exists() || builddir.count()==2) {
CMakeBuilderSettings::self()->load();
- args << QString("-G") << CMakeBuilderSettings::self()->generator();
+ args << QString("-G") << CMakeBuilder::defaultGenerator();
}
QString cmakeargs = CMake::currentExtraArguments( m_project );
if( !cmakeargs.isEmpty() ) {