diff --git a/src/plugins/qt4projectmanager/buildconfigurationinfo.h b/src/plugins/qt4projectmanager/buildconfigurationinfo.h index 7adb66ac98f01f7dbfd1e519b2530b35616437eb..6cf166c98b8d1b8f05079921d6a6e2dd497c3214 100644 --- a/src/plugins/qt4projectmanager/buildconfigurationinfo.h +++ b/src/plugins/qt4projectmanager/buildconfigurationinfo.h @@ -52,6 +52,16 @@ struct QT4PROJECTMANAGER_EXPORT BuildConfigurationInfo { return version != 0; } + bool operator ==(const BuildConfigurationInfo &other) const + { + return version == other.version + && buildConfig == other.buildConfig + && additionalArguments == other.additionalArguments + && directory == other.directory + && importing == other.importing + && temporaryQtVersion == other.temporaryQtVersion; + } + QtSupport::BaseQtVersion *version; QtSupport::BaseQtVersion::QmakeBuildConfigs buildConfig; QString additionalArguments; diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp index 6d55bb50f58464a0afafc35d2e9dbb56cda0ae44..12888dd60f0b5e88436c7a1f685741b7eda75847 100644 --- a/src/plugins/qt4projectmanager/qt4target.cpp +++ b/src/plugins/qt4projectmanager/qt4target.cpp @@ -777,6 +777,7 @@ void Qt4DefaultTargetSetupWidget::addImportClicked() m_importLineLayout->invalidate(); return; } + QList<BuildConfigurationInfo> infos = BuildConfigurationInfo::checkForBuild(m_importLinePath->path(), m_proFilePath); if (infos.isEmpty()) { QMessageBox::critical(this, @@ -804,6 +805,28 @@ void Qt4DefaultTargetSetupWidget::addImportClicked() // show something if we found incompatible builds? } + // Filter out already imported builds + infos = filterdInfos; + filterdInfos.clear(); + foreach (const BuildConfigurationInfo &info, infos) { + bool alreadyImported = false; + foreach (const BuildConfigurationInfo &existingImport, m_importInfos) { + if (info == existingImport) { + alreadyImported = true; + break; + } + } + if (!alreadyImported) + filterdInfos << info; + } + + if (filterdInfos.isEmpty() && !infos.isEmpty()) { + QMessageBox::critical(this, + tr("Already imported build"), + tr("The build found in %1 is already imported").arg(m_importLinePath->path())); + return; + } + // We switch from to "NONE" on importing if the user has not changed it if (m_buildConfigurationTemplateUnchanged) setBuildConfigurationTemplate(NONE);