diff --git a/src/plugins/qt4projectmanager/projectloadwizard.cpp b/src/plugins/qt4projectmanager/projectloadwizard.cpp index aa5ea0b4d349efc37354a5809d11e6004bc707ce..680da0f0d180a47d00b5c5020a7e3d4f9ead793a 100644 --- a/src/plugins/qt4projectmanager/projectloadwizard.cpp +++ b/src/plugins/qt4projectmanager/projectloadwizard.cpp @@ -36,7 +36,7 @@ #include "qt4buildconfiguration.h" #include "qt4projectmanagerconstants.h" -#include "wizards/targetspage.h" +#include "wizards/targetsetuppage.h" #include <QtGui/QCheckBox> #include <QtGui/QHeaderView> @@ -48,52 +48,19 @@ using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; ProjectLoadWizard::ProjectLoadWizard(Qt4Project *project, QWidget *parent, Qt::WindowFlags flags) - : QWizard(parent, flags), m_project(project), m_importVersion(0), m_temporaryVersion(false), - m_targetsPage(0) + : QWizard(parent, flags), m_project(project), m_targetSetupPage(0) { - setWindowTitle(tr("Import existing build settings")); - QtVersionManager * vm = QtVersionManager::instance(); - QString directory = project->projectDirectory(); - QString importVersion = QtVersionManager::findQMakeBinaryFromMakefile(directory); - - if (!importVersion.isNull()) { - // This also means we have a build in there - // First get the qt version - m_importVersion = vm->qtVersionForQMakeBinary(importVersion); - // Okay does not yet exist, create - if (!m_importVersion) { - m_importVersion = new QtVersion(importVersion); - m_temporaryVersion = true; - } - - QPair<QtVersion::QmakeBuildConfigs, QStringList> result = - QtVersionManager::scanMakeFile(directory, m_importVersion->defaultBuildConfig()); - m_importBuildConfig = result.first; - m_additionalArguments = Qt4BuildConfiguration::removeSpecFromArgumentList(result.second); - - QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArgumentList(result.second, directory, m_importVersion); - QString versionSpec = m_importVersion->mkspec(); - - // Compare mkspecs and add to additional arguments - if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == "default") { - // using the default spec, don't modify additional arguments - } else { - m_additionalArguments.prepend(parsedSpec); - m_additionalArguments.prepend("-spec"); - } - } - - // So now we have the version and the configuration for that version - // If buildAll we create debug and release configurations, - // if not then just either debug or release - // The default buildConfiguration depends on QmakeBuildConfig::DebugBuild - // Also if the qt version is not yet in the Tools Options dialog we offer to add it there - - QList<QtVersion *> validVersions = vm->validVersions(); - if (m_importVersion) - setupImportPage(m_importVersion, m_importBuildConfig, m_additionalArguments); - else if (validVersions.count() > 1) - setupTargetsPage(); + Q_ASSERT(project); + + setWindowTitle(tr("Project setup")); + + m_importVersions = TargetSetupPage::recursivelyCheckDirectoryForBuild(project->projectDirectory()); + m_importVersions.append(TargetSetupPage::recursivelyCheckDirectoryForBuild(project->defaultTopLevelBuildDirectory())); + + m_importVersions.append(TargetSetupPage::importInfosForKnownQtVersions(project)); + + if (m_importVersions.count() > 1) + setupTargetPage(); setOptions(options() | QWizard::NoCancelButton | QWizard::NoBackButtonOnLastPage); } @@ -114,59 +81,12 @@ ProjectLoadWizard::~ProjectLoadWizard() void ProjectLoadWizard::done(int result) { - QtVersionManager *vm = QtVersionManager::instance(); QWizard::done(result); // This normally happens on showing the final page, but since we // don't show it anymore, do it here - if (m_importVersion && importCheckbox->isChecked()) { - // Importing - if (m_temporaryVersion) - vm->addVersion(m_importVersion); - - // Import the existing stuff - // qDebug()<<"Creating m_buildconfiguration entry from imported stuff"; - // qDebug()<<((m_importBuildConfig& QtVersion::BuildAll)? "debug_and_release" : "")<<((m_importBuildConfig & QtVersion::DebugBuild)? "debug" : "release"); - foreach (const QString &id, m_importVersion->supportedTargetIds()) { - Qt4Target *t(m_project->targetFactory()->create(m_project, id, QList<QtVersion*>() << m_importVersion)); - if (!t) - continue; - m_project->addTarget(t); - } - if (m_project->targets().isEmpty()) - qWarning() << "Failed to populate project with default targets for imported Qt" << m_importVersion->displayName(); - return; - } - - if (m_targetsPage) { - m_targetsPage->setupProject(m_project); - return; - } - - // Not importing anything - if (m_temporaryVersion) - delete m_importVersion; - - // Find a Qt version: - QList<QtVersion *> candidates = vm->versions(); - QtVersion *defaultVersion = candidates.at(0); // always there and always valid! - // Check for the first valid desktop-Qt, fall back to any valid Qt if no desktop - // flavour is available. - foreach (QtVersion *v, candidates) { - if (v->isValid()) - defaultVersion = v; - if (v->supportsTargetId(Constants::DESKTOP_TARGET_ID) && v->isValid()) - break; - } - - foreach (const QString &id, defaultVersion->supportedTargetIds()) { - Qt4Target *t(m_project->targetFactory()->create(m_project, id, QList<QtVersion *>() << defaultVersion)); - if (!t) - continue; - m_project->addTarget(t); - } - if (m_project->targets().isEmpty()) - qWarning() << "Failed to populate project with default targets for default Qt" << defaultVersion->displayName(); + if (result == Accepted) + applySettings(); } // This function used to do the commented stuff instead of having only one page @@ -175,51 +95,22 @@ int ProjectLoadWizard::nextId() const return -1; } -void ProjectLoadWizard::setupImportPage(QtVersion *version, QtVersion::QmakeBuildConfigs buildConfig, QStringList addtionalArguments) +void ProjectLoadWizard::setupTargetPage() { - resize(605, 490); - // Import Page - importPage = new QWizardPage(this); - importPage->setTitle(tr("Import existing build settings")); - QVBoxLayout *importLayout = new QVBoxLayout(importPage); - importLabel = new QLabel(importPage); - - QString versionString = version->displayName() + QLatin1String(" (") + - QDir::toNativeSeparators(version->qmakeCommand()) + - QLatin1Char(')'); - QString buildConfigString = (buildConfig & QtVersion::BuildAll) ? QLatin1String("debug_and_release ") : QString(); - buildConfigString.append((buildConfig & QtVersion::DebugBuild) ? QLatin1String("debug") : QLatin1String("release")); - importLabel->setTextFormat(Qt::RichText); - importLabel->setText(tr("Qt Creator has found an already existing build in the source directory.<br><br>" - "<b>Qt Version:</b> %1<br>" - "<b>Build configuration:</b> %2<br>" - "<b>Additional qmake Arguments:</b>%3") - .arg(versionString) - .arg(buildConfigString) - .arg(ProjectExplorer::Environment::joinArgumentList(addtionalArguments))); - - importLayout->addWidget(importLabel); - - - importCheckbox = new QCheckBox(importPage); - importCheckbox->setText(tr("Import existing build settings.")); - importCheckbox->setChecked(true); - importLayout->addWidget(importCheckbox); - import2Label = new QLabel(importPage); - import2Label->setTextFormat(Qt::RichText); - if (m_temporaryVersion) - import2Label->setText(tr("<b>Note:</b> Importing the settings will automatically add the Qt Version identified by <br><b>%1</b> to the list of Qt versions.") - .arg(QDir::toNativeSeparators(m_importVersion->qmakeCommand()))); - importLayout->addWidget(import2Label); - addPage(importPage); + if (m_targetSetupPage) + return; + + m_targetSetupPage = new TargetSetupPage(this); + m_targetSetupPage->setImportInfos(m_importVersions); + m_targetSetupPage->setImportDirectoryBrowsingEnabled(true); + m_targetSetupPage->setImportDirectoryBrowsingLocation(m_project->projectDirectory()); + + addPage(m_targetSetupPage); } -void ProjectLoadWizard::setupTargetsPage() +void ProjectLoadWizard::applySettings() { - if (m_targetsPage) - return; - - m_targetsPage = new TargetsPage(this); - addPage(m_targetsPage); + Q_ASSERT(m_targetSetupPage); + m_targetSetupPage->setupProject(m_project); } diff --git a/src/plugins/qt4projectmanager/projectloadwizard.h b/src/plugins/qt4projectmanager/projectloadwizard.h index 6c497097132b1d8ead2a59531273454094ba34a9..1a5aef422cfde29ebe991e4d1ea448448014e47a 100644 --- a/src/plugins/qt4projectmanager/projectloadwizard.h +++ b/src/plugins/qt4projectmanager/projectloadwizard.h @@ -31,17 +31,9 @@ #define PROJECTLOADWIZARD_H #include "qtversionmanager.h" - -#include <QtGui/QWizard> - -QT_BEGIN_NAMESPACE -class QWizardPage; -class QLabel; -class QCheckBox; -QT_END_NAMESPACE +#include "wizards/targetsetuppage.h" namespace Qt4ProjectManager { - class Qt4Project; namespace Internal { @@ -59,28 +51,14 @@ public: void execDialog(); private: - void setupImportPage(QtVersion *version, QtVersion::QmakeBuildConfigs buildConfig, QStringList addtionalArguments); - void setupTargetsPage(); + void setupTargetPage(); - Qt4Project *m_project; - - // Only used for imported stuff - QtVersion *m_importVersion; - QtVersion::QmakeBuildConfigs m_importBuildConfig; - QStringList m_additionalArguments; - // Those that we might add - bool m_temporaryVersion; + void applySettings(); - // This was a file autogenarated by Designer, before I found out you can't actually - // create non linear wizards in it - // So those variables should all be m_*, but that one has to wait for refactoring support :) - QWizardPage *importPage; - QLabel *importLabel; - QLabel *import2Label; - QCheckBox *importCheckbox; - TargetsPage *m_targetsPage; + Qt4Project *m_project; + QList<TargetSetupPage::ImportInfo> m_importVersions; - void setupUi(); + TargetSetupPage *m_targetSetupPage; }; } // namespace Internal