Skip to content
Snippets Groups Projects
Commit db20c44d authored by dt's avatar dt
Browse files

Fixes: Add a settings page to the cmake plugin.

Details:  There's a linedit on there, we restore and save the settings,
only thing missing is actually using it.
parent f73861d4
No related branches found
No related tags found
No related merge requests found
......@@ -105,6 +105,7 @@ public:
CMakeStep *cmakeStep() const;
QStringList targets() const;
private:
void parseCMakeLists(const QDir &directory);
QString findCbpFile(const QDir &);
......
......@@ -39,16 +39,25 @@
#include <coreplugin/icore.h>
#include <coreplugin/uniqueidmanager.h>
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/environment.h>
#include <QtCore/QSettings>
#include <QFormLayout>
using namespace CMakeProjectManager::Internal;
CMakeManager::CMakeManager()
CMakeManager::CMakeManager(CMakeSettingsPage *cmakeSettingsPage)
: m_settingsPage(cmakeSettingsPage)
{
Core::ICore *core = Core::ICore::instance();
m_projectContext = core->uniqueIDManager()->uniqueIdentifier(CMakeProjectManager::Constants::PROJECTCONTEXT);
m_projectLanguage = core->uniqueIDManager()->uniqueIdentifier(ProjectExplorer::Constants::LANG_CXX);
}
CMakeSettingsPage::~CMakeSettingsPage()
{
}
int CMakeManager::projectContext() const
{
return m_projectContext;
......@@ -62,6 +71,14 @@ int CMakeManager::projectLanguage() const
ProjectExplorer::Project *CMakeManager::openProject(const QString &fileName)
{
// TODO check wheter this project is already opened
// Check that we have a cmake executable first
// Look at the settings first
QString cmakeExecutable = m_settingsPage->cmakeExecutable();
if (cmakeExecutable.isNull())
m_settingsPage->askUserForCMakeExecutable();
cmakeExecutable = m_settingsPage->cmakeExecutable();
if (cmakeExecutable.isNull())
return 0;
return new CMakeProject(this, fileName);
}
......@@ -69,3 +86,89 @@ QString CMakeManager::mimeType() const
{
return Constants::CMAKEMIMETYPE;
}
/////
// CMakeSettingsPage
////
CMakeSettingsPage::CMakeSettingsPage()
{
Core::ICore *core = Core::ICore::instance();
QSettings * settings = core->settings();
settings->beginGroup("CMakeSettings");
m_cmakeExecutable = settings->value("cmakeExecutable").toString();
settings->endGroup();
}
QString CMakeSettingsPage::findCmakeExecutable() const
{
ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
return env.searchInPath("cmake");
}
QString CMakeSettingsPage::name() const
{
return "CMake";
}
QString CMakeSettingsPage::category() const
{
return "CMake";
}
QString CMakeSettingsPage::trCategory() const
{
return tr("CMake");
}
QWidget *CMakeSettingsPage::createPage(QWidget *parent)
{
QWidget *w = new QWidget(parent);
QFormLayout *fl = new QFormLayout(w);
m_pathchooser = new Core::Utils::PathChooser(w);
m_pathchooser->setExpectedKind(Core::Utils::PathChooser::Command);
fl->addRow("CMake executable", m_pathchooser);
m_pathchooser->setPath(cmakeExecutable());
return w;
}
void CMakeSettingsPage::saveSettings() const
{
QSettings *settings = Core::ICore::instance()->settings();
settings->beginGroup("CMakeSettings");
settings->setValue("cmakeExecutable", m_cmakeExecutable);
settings->endGroup();
}
void CMakeSettingsPage::apply()
{
m_cmakeExecutable = m_pathchooser->path();
saveSettings();
}
void CMakeSettingsPage::finish()
{
}
QString CMakeSettingsPage::cmakeExecutable() const
{
if (m_cmakeExecutable.isEmpty()) {
m_cmakeExecutable = findCmakeExecutable();
if (!m_cmakeExecutable.isEmpty()) {
saveSettings();
}
}
return m_cmakeExecutable;
}
void CMakeSettingsPage::askUserForCMakeExecutable()
{
// TODO implement
// That is ideally add a label to the settings page, which says something
// to the effect: please configure the cmake executable
// and show the settings page
// ensure that we rehide the label in the finish() function
// But to test that i need an environment without cmake, e.g. windows
}
......@@ -34,16 +34,20 @@
#ifndef CMAKEPROJECTMANAGER_H
#define CMAKEPROJECTMANAGER_H
#include <coreplugin/dialogs/ioptionspage.h>
#include <projectexplorer/iprojectmanager.h>
#include <utils/pathchooser.h>
namespace CMakeProjectManager {
namespace Internal {
class CMakeSettingsPage;
class CMakeManager : public ProjectExplorer::IProjectManager
{
Q_OBJECT
public:
CMakeManager();
CMakeManager(CMakeSettingsPage *cmakeSettingsPage);
virtual int projectContext() const;
virtual int projectLanguage() const;
......@@ -55,6 +59,30 @@ public:
private:
int m_projectContext;
int m_projectLanguage;
CMakeSettingsPage *m_settingsPage;
};
class CMakeSettingsPage : public Core::IOptionsPage
{
Q_OBJECT
public:
CMakeSettingsPage();
virtual ~CMakeSettingsPage();
virtual QString name() const;
virtual QString category() const;
virtual QString trCategory() const;
virtual QWidget *createPage(QWidget *parent);
virtual void apply();
virtual void finish();
QString cmakeExecutable() const;
void askUserForCMakeExecutable();
private:
void saveSettings() const;
QString findCmakeExecutable() const;
mutable QString m_cmakeExecutable;
Core::Utils::PathChooser *m_pathchooser;
};
} // namespace Internal
......
......@@ -18,3 +18,4 @@ SOURCES = cmakeproject.cpp \
makestep.cpp \
cmakerunconfiguration.cpp
RESOURCES += cmakeproject.qrc
FORMS += cmakesettingspage.ui
......@@ -59,7 +59,9 @@ bool CMakeProjectPlugin::initialize(const QStringList & /*arguments*/, QString *
Core::ICore *core = Core::ICore::instance();
if (!core->mimeDatabase()->addMimeTypes(QLatin1String(":cmakeproject/CMakeProject.mimetypes.xml"), errorMessage))
return false;
addAutoReleasedObject(new CMakeManager());
CMakeSettingsPage *cmp = new CMakeSettingsPage();
addAutoReleasedObject(cmp);
addAutoReleasedObject(new CMakeManager(cmp));
addAutoReleasedObject(new CMakeBuildStepFactory());
addAutoReleasedObject(new MakeBuildStepFactory());
addAutoReleasedObject(new CMakeRunConfigurationFactory());
......
......@@ -183,10 +183,6 @@ void Environment::clear()
m_values.clear();
}
// currently it returns the string that was passed in, except
// under windows and if the executable does not end in .exe
// then it returns executable appended with .exe
// that is clearly wrong
QString Environment::searchInPath(QString executable)
{
// qDebug()<<"looking for "<<executable<< "in PATH: "<<m_values.value("PATH");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment