Add the ability to add Runconfigurations for cmake-targets we know about

Task: 250415
This commit is contained in:
dt
2009-04-06 17:01:26 +02:00
parent 6a55ca9776
commit 3b6d8b8f4d
3 changed files with 38 additions and 21 deletions

View File

@@ -207,30 +207,30 @@ void CMakeProject::parseCMakeLists()
// Create run configurations for m_targets // Create run configurations for m_targets
//qDebug()<<"Create run configurations of m_targets"; //qDebug()<<"Create run configurations of m_targets";
QMap<QString, QSharedPointer<CMakeRunConfiguration> > existingRunConfigurations; QMultiMap<QString, QSharedPointer<CMakeRunConfiguration> > existingRunConfigurations;
foreach(QSharedPointer<ProjectExplorer::RunConfiguration> cmakeRunConfiguration, runConfigurations()) { foreach(QSharedPointer<ProjectExplorer::RunConfiguration> cmakeRunConfiguration, runConfigurations()) {
if (QSharedPointer<CMakeRunConfiguration> rc = cmakeRunConfiguration.dynamicCast<CMakeRunConfiguration>()) { if (QSharedPointer<CMakeRunConfiguration> rc = cmakeRunConfiguration.dynamicCast<CMakeRunConfiguration>()) {
existingRunConfigurations.insert(rc->title(), rc); existingRunConfigurations.insert(rc->title(), rc);
} }
} }
bool setActive = false; bool setActive = existingRunConfigurations.isEmpty();
foreach(const CMakeTarget &ct, m_targets) { foreach(const CMakeTarget &ct, m_targets) {
if (ct.executable.isEmpty()) if (ct.executable.isEmpty())
continue; continue;
if (ct.title.endsWith("/fast")) if (ct.title.endsWith("/fast"))
continue; continue;
QMap<QString, QSharedPointer<CMakeRunConfiguration> >::iterator it = QList<QSharedPointer<CMakeRunConfiguration> > list = existingRunConfigurations.values(ct.title);
existingRunConfigurations.find(ct.title); if (!list.isEmpty()) {
if (it != existingRunConfigurations.end()) {
// Already exists, so override the settings... // Already exists, so override the settings...
QSharedPointer<CMakeRunConfiguration> rc = it.value(); foreach (QSharedPointer<CMakeRunConfiguration> rc, list) {
//qDebug()<<"Updating Run Configuration with title"<<ct.title; //qDebug()<<"Updating Run Configuration with title"<<ct.title;
//qDebug()<<" Executable new:"<<ct.executable<< "old:"<<rc->executable(); //qDebug()<<" Executable new:"<<ct.executable<< "old:"<<rc->executable();
//qDebug()<<" WD new:"<<ct.workingDirectory<<"old:"<<rc->workingDirectory(); //qDebug()<<" WD new:"<<ct.workingDirectory<<"old:"<<rc->workingDirectory();
rc->setExecutable(ct.executable); rc->setExecutable(ct.executable);
rc->setWorkingDirectory(ct.workingDirectory); rc->setWorkingDirectory(ct.workingDirectory);
existingRunConfigurations.erase(it); }
existingRunConfigurations.remove(ct.title);
} else { } else {
// Does not exist yet // Does not exist yet
//qDebug()<<"Adding new run configuration with title"<<ct.title; //qDebug()<<"Adding new run configuration with title"<<ct.title;
@@ -238,13 +238,13 @@ void CMakeProject::parseCMakeLists()
QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(this, ct.executable, ct.workingDirectory, ct.title)); QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(this, ct.executable, ct.workingDirectory, ct.title));
addRunConfiguration(rc); addRunConfiguration(rc);
// The first one gets the honour of beeing the active one // The first one gets the honour of beeing the active one
if (!setActive) { if (setActive) {
setActiveRunConfiguration(rc); setActiveRunConfiguration(rc);
setActive = true; setActive = false;
} }
} }
} }
QMap<QString, QSharedPointer<CMakeRunConfiguration> >::const_iterator it = QMultiMap<QString, QSharedPointer<CMakeRunConfiguration> >::const_iterator it =
existingRunConfigurations.constBegin(); existingRunConfigurations.constBegin();
for( ; it != existingRunConfigurations.constEnd(); ++it) { for( ; it != existingRunConfigurations.constEnd(); ++it) {
QSharedPointer<CMakeRunConfiguration> rc = it.value(); QSharedPointer<CMakeRunConfiguration> rc = it.value();
@@ -282,8 +282,13 @@ QString CMakeProject::buildParser(const QString &buildConfiguration) const
QStringList CMakeProject::targets() const QStringList CMakeProject::targets() const
{ {
QStringList results; QStringList results;
foreach (const CMakeTarget &ct, m_targets) foreach (const CMakeTarget &ct, m_targets) {
if (ct.executable.isEmpty())
continue;
if (ct.title.endsWith("/fast"))
continue;
results << ct.title; results << ct.title;
}
return results; return results;
} }
@@ -526,6 +531,14 @@ void CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader
parseCMakeLists(); // Gets the directory from the active buildconfiguration parseCMakeLists(); // Gets the directory from the active buildconfiguration
} }
CMakeTarget CMakeProject::targetForTitle(const QString &title)
{
foreach(const CMakeTarget &ct, m_targets)
if (ct.title == title)
return ct;
return CMakeTarget();
}
CMakeFile::CMakeFile(CMakeProject *parent, QString fileName) CMakeFile::CMakeFile(CMakeProject *parent, QString fileName)
: Core::IFile(parent), m_project(parent), m_fileName(fileName) : Core::IFile(parent), m_project(parent), m_fileName(fileName)
{ {

View File

@@ -101,6 +101,7 @@ public:
MakeStep *makeStep() const; MakeStep *makeStep() const;
QStringList targets() const; QStringList targets() const;
QString buildParser(const QString &buildConfiguration) const; QString buildParser(const QString &buildConfiguration) const;
CMakeTarget targetForTitle(const QString &title);
protected: protected:
virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer); virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer);

View File

@@ -168,8 +168,11 @@ QStringList CMakeRunConfigurationFactory::canCreate(ProjectExplorer::Project *pr
CMakeProject *pro = qobject_cast<CMakeProject *>(project); CMakeProject *pro = qobject_cast<CMakeProject *>(project);
if (!pro) if (!pro)
return QStringList(); return QStringList();
// TODO gather all targets and return them here QStringList allTargets = pro->targets();
return QStringList(); for (int i=0; i<allTargets.size(); ++i) {
allTargets[i] = Constants::CMAKERUNCONFIGURATION + allTargets[i];
}
return allTargets;
} }
// used to translate the types to names to display to the user // used to translate the types to names to display to the user
@@ -193,9 +196,9 @@ QSharedPointer<ProjectExplorer::RunConfiguration> CMakeRunConfigurationFactory::
return rc; return rc;
} else { } else {
// Adding new // Adding new
// TODO extract target from type const QString title = type.mid(QString(Constants::CMAKERUNCONFIGURATION).length());
QString file = type.mid(QString(Constants::CMAKERUNCONFIGURATION).length()); const CMakeTarget &ct = pro->targetForTitle(title);
QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(pro, file, QString::null, QString::null)); QSharedPointer<ProjectExplorer::RunConfiguration> rc(new CMakeRunConfiguration(pro, ct.executable, ct.workingDirectory, ct.title));
return rc; return rc;
} }
} }