summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketarget.cpp2
-rw-r--r--src/plugins/cmakeprojectmanager/cmaketarget.h2
-rw-r--r--src/plugins/genericprojectmanager/generictarget.cpp2
-rw-r--r--src/plugins/genericprojectmanager/generictarget.h2
-rw-r--r--src/plugins/projectexplorer/project.cpp58
-rw-r--r--src/plugins/projectexplorer/project.h11
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp1
-rw-r--r--src/plugins/projectexplorer/projectwindow.cpp66
-rw-r--r--src/plugins/projectexplorer/projectwindow.h7
-rw-r--r--src/plugins/projectexplorer/target.h5
-rw-r--r--src/plugins/projectexplorer/targetsettingspanel.cpp47
-rw-r--r--src/plugins/qmlprojectmanager/qmlproject.cpp1
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojecttarget.cpp2
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojecttarget.h2
-rw-r--r--src/plugins/qt4projectmanager/externaleditors.cpp1
-rw-r--r--src/plugins/qt4projectmanager/projectloadwizard.cpp12
-rw-r--r--src/plugins/qt4projectmanager/qmakestep.h2
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt-desktop.pri14
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.cpp92
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.h63
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp177
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h61
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp (renamed from src/plugins/qt4projectmanager/qt4runconfiguration.cpp)25
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.h (renamed from src/plugins/qt4projectmanager/qt4runconfiguration.h)10
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.cpp96
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.h64
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp178
-rw-r--r--src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h64
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp5
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodeployables.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodeployables.h6
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp3
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp4
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemomanager.h2
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp3
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp14
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h11
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp1
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp14
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp11
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.h6
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri10
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.cpp57
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.h53
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp102
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h64
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp178
-rw-r--r--src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h63
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/qt-s60.pri10
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp247
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h79
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp196
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h (renamed from src/plugins/qt4projectmanager/qt4deployconfiguration.h)37
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp37
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h4
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp30
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h10
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp28
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h11
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/s60manager.cpp3
-rw-r--r--src/plugins/qt4projectmanager/qt4buildconfiguration.cpp28
-rw-r--r--src/plugins/qt4projectmanager/qt4buildconfiguration.h10
-rw-r--r--src/plugins/qt4projectmanager/qt4deployconfiguration.cpp109
-rw-r--r--src/plugins/qt4projectmanager/qt4project.cpp76
-rw-r--r--src/plugins/qt4projectmanager/qt4project.h8
-rw-r--r--src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp2
-rw-r--r--src/plugins/qt4projectmanager/qt4projectconfigwidget.h4
-rw-r--r--src/plugins/qt4projectmanager/qt4projectmanager.pro8
-rw-r--r--src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp8
-rw-r--r--src/plugins/qt4projectmanager/qt4target.cpp461
-rw-r--r--src/plugins/qt4projectmanager/qt4target.h92
-rw-r--r--src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp1
-rw-r--r--src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h1
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp6
-rw-r--r--src/plugins/qt4projectmanager/wizards/mobileappwizard.h1
-rw-r--r--src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.cpp9
-rw-r--r--src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.h1
-rw-r--r--src/plugins/qt4projectmanager/wizards/qtwizard.cpp7
-rw-r--r--src/plugins/qt4projectmanager/wizards/qtwizard.h1
-rw-r--r--src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp191
-rw-r--r--src/plugins/qt4projectmanager/wizards/targetsetuppage.h20
81 files changed, 2404 insertions, 1010 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmaketarget.cpp b/src/plugins/cmakeprojectmanager/cmaketarget.cpp
index 55f9f85024..655173f4c3 100644
--- a/src/plugins/cmakeprojectmanager/cmaketarget.cpp
+++ b/src/plugins/cmakeprojectmanager/cmaketarget.cpp
@@ -186,7 +186,7 @@ CMakeTargetFactory::~CMakeTargetFactory()
{
}
-QStringList CMakeTargetFactory::availableCreationIds(ProjectExplorer::Project *parent) const
+QStringList CMakeTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
{
if (!qobject_cast<CMakeProject *>(parent))
return QStringList();
diff --git a/src/plugins/cmakeprojectmanager/cmaketarget.h b/src/plugins/cmakeprojectmanager/cmaketarget.h
index 4563fd8922..a710dbb742 100644
--- a/src/plugins/cmakeprojectmanager/cmaketarget.h
+++ b/src/plugins/cmakeprojectmanager/cmaketarget.h
@@ -89,7 +89,7 @@ public:
bool supportsTargetId(const QString &id) const;
- QStringList availableCreationIds(ProjectExplorer::Project *parent) const;
+ QStringList supportedTargetIds(ProjectExplorer::Project *parent) const;
QString displayNameForId(const QString &id) const;
bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
diff --git a/src/plugins/genericprojectmanager/generictarget.cpp b/src/plugins/genericprojectmanager/generictarget.cpp
index 3f60955017..ae5b402800 100644
--- a/src/plugins/genericprojectmanager/generictarget.cpp
+++ b/src/plugins/genericprojectmanager/generictarget.cpp
@@ -121,7 +121,7 @@ bool GenericTargetFactory::supportsTargetId(const QString &id) const
return id == QLatin1String(GENERIC_DESKTOP_TARGET_ID);
}
-QStringList GenericTargetFactory::availableCreationIds(ProjectExplorer::Project *parent) const
+QStringList GenericTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
{
if (!qobject_cast<GenericProject *>(parent))
return QStringList();
diff --git a/src/plugins/genericprojectmanager/generictarget.h b/src/plugins/genericprojectmanager/generictarget.h
index 07ad77f203..3aa281b7e3 100644
--- a/src/plugins/genericprojectmanager/generictarget.h
+++ b/src/plugins/genericprojectmanager/generictarget.h
@@ -91,7 +91,7 @@ public:
bool supportsTargetId(const QString &id) const;
- QStringList availableCreationIds(ProjectExplorer::Project *parent) const;
+ QStringList supportedTargetIds(ProjectExplorer::Project *parent) const;
QString displayNameForId(const QString &id) const;
bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index c754be241d..dcc632a14d 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -63,7 +63,6 @@ namespace ProjectExplorer {
class ProjectPrivate {
public:
ProjectPrivate();
- QSet<QString> m_supportedTargetIds;
QList<Target *> m_targets;
Target *m_activeTarget;
EditorConfiguration *m_editorConfiguration;
@@ -102,34 +101,6 @@ QString Project::makeUnique(const QString &preferredName, const QStringList &use
return tryName;
}
-QSet<QString> Project::supportedTargetIds() const
-{
- return d->m_supportedTargetIds;
-}
-
-QSet<QString> Project::possibleTargetIds() const
-{
- QSet<QString> result(d->m_supportedTargetIds);
- foreach (ProjectExplorer::Target *t, targets())
- result.remove(t->id());
-
- return result;
-}
-
-bool Project::canAddTarget(const QString &id) const
-{
- return possibleTargetIds().contains(id);
-}
-
-void Project::setSupportedTargetIds(const QSet<QString> &ids)
-{
- if (ids == d->m_supportedTargetIds)
- return;
-
- d->m_supportedTargetIds = ids;
- emit supportedTargetIdsChanged();
-}
-
void Project::changeEnvironment()
{
Target *t(qobject_cast<Target *>(sender()));
@@ -280,26 +251,31 @@ bool Project::fromMap(const QVariantMap &map)
qWarning() << key << "was not found in data.";
return false;
}
- QVariantMap targetMap = map.value(key).toMap();
+ QVariantMap targetMap = map.value(key).toMap();
QList<ITargetFactory *> factories =
ExtensionSystem::PluginManager::instance()->getObjects<ITargetFactory>();
Target *t = 0;
- foreach (ITargetFactory *factory, factories) {
- if (factory->canRestore(this, targetMap)) {
- t = factory->restore(this, targetMap);
- break;
+
+ if(target(idFromMap(targetMap))) {
+ qWarning() << "Duplicated target id found, not restoring second target with id"<<idFromMap(targetMap)<<"(Continuing)";
+ } else {
+ foreach (ITargetFactory *factory, factories) {
+ if (factory->canRestore(this, targetMap)) {
+ t = factory->restore(this, targetMap);
+ break;
+ }
}
- }
- if (!t) {
- qWarning() << "Restoration of a target failed! (Continuing)";
- continue;
+ if (!t) {
+ qWarning() << "Restoration of a target failed! (Continuing)";
+ continue;
+ }
+ addTarget(t);
+ if (i == active)
+ setActiveTarget(t);
}
- addTarget(t);
- if (i == active)
- setActiveTarget(t);
}
return true;
}
diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 56621c925c..5e3b0004f7 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -82,13 +82,6 @@ public:
EditorConfiguration *editorConfiguration() const;
// Target:
-
- // Note: You can only add a specific kind of target (identified by id)
- // once.
- QSet<QString> supportedTargetIds() const;
- QSet<QString> possibleTargetIds() const;
- bool canAddTarget(const QString &id) const;
-
void addTarget(Target *target);
void removeTarget(Target *target);
@@ -136,8 +129,6 @@ signals:
void removedTarget(ProjectExplorer::Target *target);
void addedTarget(ProjectExplorer::Target *target);
- void supportedTargetIdsChanged();
-
/// convenience signal emitted if the activeBuildConfiguration emits environmentChanged
/// or if the activeBuildConfiguration changes
/// (which theoretically might happen due to the active target changing).
@@ -149,8 +140,6 @@ protected:
// Note: Do not forget to call your base class' fromMap method!
virtual bool fromMap(const QVariantMap &map);
- void setSupportedTargetIds(const QSet<QString> &ids);
-
private slots:
void changeEnvironment();
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 94106572f7..88c2b27fab 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -961,6 +961,7 @@ void ProjectExplorerPlugin::clearSession()
void ProjectExplorerPlugin::extensionsInitialized()
{
+ d->m_proWindow->extensionsInitialized();
d->m_fileFactories = ProjectFileFactory::createFactories(&d->m_projectFilterString);
foreach (ProjectFileFactory *pf, d->m_fileFactories) {
d->m_profileMimeTypes += pf->mimeTypes();
diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp
index ba2635e98f..728c1c4ba5 100644
--- a/src/plugins/projectexplorer/projectwindow.cpp
+++ b/src/plugins/projectexplorer/projectwindow.cpp
@@ -42,6 +42,7 @@
#include "projecttreewidget.h"
#include "iprojectproperties.h"
#include "targetsettingspanel.h"
+#include "target.h"
#include <coreplugin/icore.h>
#include <coreplugin/ifile.h>
@@ -261,6 +262,14 @@ ProjectWindow::~ProjectWindow()
{
}
+void ProjectWindow::extensionsInitialized()
+{
+ foreach (ITargetFactory *fac, ExtensionSystem::PluginManager::instance()->getObjects<ITargetFactory>())
+ connect(fac, SIGNAL(supportedTargetIdsChanged()),
+ this, SLOT(targetFactoriesChanged()));
+
+}
+
void ProjectWindow::aboutToShutdown()
{
showProperties(-1, -1); // TODO that's a bit stupid, but otherwise stuff is still
@@ -268,6 +277,35 @@ void ProjectWindow::aboutToShutdown()
disconnect(ProjectExplorerPlugin::instance()->session(), 0, this, 0);
}
+void ProjectWindow::targetFactoriesChanged()
+{
+ bool changed = false;
+ int index = m_tabWidget->currentIndex();
+ QList<Project *> projects = m_tabIndexToProject;
+ foreach (ProjectExplorer::Project *project, projects) {
+ if (m_usesTargetPage.value(project) != useTargetPage(project)) {
+ changed = true;
+ deregisterProject(project);
+ registerProject(project);
+ }
+ }
+ if (changed)
+ m_tabWidget->setCurrentIndex(index);
+}
+
+bool ProjectWindow::useTargetPage(ProjectExplorer::Project *project)
+{
+ if (project->targets().size() > 1)
+ return true;
+ QStringList tmp;
+ foreach (ITargetFactory *fac, ExtensionSystem::PluginManager::instance()->getObjects<ITargetFactory>()) {
+ tmp.append(fac->supportedTargetIds(project));
+ if (tmp.size() > 1)
+ return true;
+ }
+ return false;
+}
+
void ProjectWindow::registerProject(ProjectExplorer::Project *project)
{
if (!project || m_tabIndexToProject.contains(project))
@@ -284,7 +322,11 @@ void ProjectWindow::registerProject(ProjectExplorer::Project *project)
}
QStringList subtabs;
- if (project->supportedTargetIds().count() <= 1) {
+
+ bool usesTargetPage = useTargetPage(project);
+ m_usesTargetPage.insert(project, usesTargetPage);
+
+ if (!usesTargetPage){
// Show the target specific pages directly
QList<ITargetPanelFactory *> factories =
ExtensionSystem::PluginManager::instance()->getObjects<ITargetPanelFactory>();
@@ -308,9 +350,6 @@ void ProjectWindow::registerProject(ProjectExplorer::Project *project)
m_tabIndexToProject.insert(index, project);
m_tabWidget->insertTab(index, project->displayName(), subtabs);
-
- connect(project, SIGNAL(supportedTargetIdsChanged()),
- this, SLOT(refreshProject()));
}
void ProjectWindow::deregisterProject(ProjectExplorer::Project *project)
@@ -319,9 +358,6 @@ void ProjectWindow::deregisterProject(ProjectExplorer::Project *project)
if (index < 0)
return;
- disconnect(project, SIGNAL(supportedTargetIdsChanged()),
- this, SLOT(refreshProject()));
-
m_tabIndexToProject.removeAt(index);
m_tabWidget->removeTab(index);
}
@@ -336,19 +372,6 @@ void ProjectWindow::saveStatus()
// TODO
}
-void ProjectWindow::refreshProject()
-{
- Project *project = qobject_cast<ProjectExplorer::Project *>(sender());
- if (!m_tabIndexToProject.contains(project))
- return;
-
- // TODO this changes the subindex
- int index = m_tabWidget->currentIndex();
- deregisterProject(project);
- registerProject(project);
- m_tabWidget->setCurrentIndex(index);
-}
-
void ProjectWindow::startupProjectChanged(ProjectExplorer::Project *p)
{
int index = m_tabIndexToProject.indexOf(p);
@@ -373,7 +396,8 @@ void ProjectWindow::showProperties(int index, int subIndex)
= qobject_cast<TargetSettingsPanelWidget*>(m_currentWidget)) {
m_previousTargetSubIndex = previousPanelWidget->currentSubIndex();
}
- if (project->supportedTargetIds().count() > 1) {
+
+ if (m_usesTargetPage.value(project)) {
if (subIndex == 0) {
// Targets page
removeCurrentWidget();
diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h
index 9c2976b99a..ccf2576ffa 100644
--- a/src/plugins/projectexplorer/projectwindow.h
+++ b/src/plugins/projectexplorer/projectwindow.h
@@ -34,6 +34,7 @@
#ifndef PROJECTWINDOW_H
#define PROJECTWINDOW_H
+#include <QtCore/QMap>
#include <QtGui/QScrollArea>
QT_BEGIN_NAMESPACE
@@ -81,7 +82,9 @@ public:
~ProjectWindow();
void aboutToShutdown();
+ void extensionsInitialized();
private slots:
+ void targetFactoriesChanged();
void showProperties(int index, int subIndex);
void restoreStatus();
void saveStatus();
@@ -89,15 +92,15 @@ private slots:
void deregisterProject(ProjectExplorer::Project*);
void startupProjectChanged(ProjectExplorer::Project *);
- void refreshProject();
-
private:
+ bool useTargetPage(ProjectExplorer::Project *project);
void removeCurrentWidget();
DoubleTabWidget *m_tabWidget;
QStackedWidget *m_centralWidget;
QWidget *m_currentWidget;
QList<ProjectExplorer::Project *> m_tabIndexToProject;
+ QMap<ProjectExplorer::Project *, bool> m_usesTargetPage;
int m_previousTargetSubIndex;
};
diff --git a/src/plugins/projectexplorer/target.h b/src/plugins/projectexplorer/target.h
index 719b3ca06e..ce1dbe2fec 100644
--- a/src/plugins/projectexplorer/target.h
+++ b/src/plugins/projectexplorer/target.h
@@ -159,10 +159,9 @@ public:
explicit ITargetFactory(QObject *parent = 0);
virtual ~ITargetFactory();
+ virtual QStringList supportedTargetIds(ProjectExplorer::Project *project) const = 0;
virtual bool supportsTargetId(const QString &id) const = 0;
- // used to show the list of possible additons to a target, returns a list of types
- virtual QStringList availableCreationIds(Project *parent) const = 0;
// used to translate the types to names to display to the user
virtual QString displayNameForId(const QString &id) const = 0;
@@ -172,7 +171,7 @@ public:
virtual Target *restore(Project *parent, const QVariantMap &map) = 0;
signals:
- void availableCreationIdsChanged();
+ void supportedTargetIdsChanged();
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/targetsettingspanel.cpp b/src/plugins/projectexplorer/targetsettingspanel.cpp
index 865cefae9f..e3eff51eea 100644
--- a/src/plugins/projectexplorer/targetsettingspanel.cpp
+++ b/src/plugins/projectexplorer/targetsettingspanel.cpp
@@ -79,8 +79,14 @@ TargetSettingsPanelWidget::TargetSettingsPanelWidget(Project *project) :
connect(m_project, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
this, SLOT(activeTargetChanged(ProjectExplorer::Target*)));
- connect(m_project, SIGNAL(supportedTargetIdsChanged()),
- this, SLOT(updateTargetAddAndRemoveButtons()));
+
+ QList<ITargetFactory *> factories =
+ ExtensionSystem::PluginManager::instance()->getObjects<ITargetFactory>();
+
+ foreach (ITargetFactory *fac, factories) {
+ connect(fac, SIGNAL(supportedTargetIdsChanged()),
+ this, SLOT(updateTargetAddAndRemoveButtons()));
+ }
}
TargetSettingsPanelWidget::~TargetSettingsPanelWidget()
@@ -204,6 +210,7 @@ void TargetSettingsPanelWidget::currentTargetChanged(int targetIndex, int subInd
void TargetSettingsPanelWidget::addTarget(QAction *action)
{
QString id = action->data().toString();
+ Q_ASSERT(!m_project->target(id));
QList<ITargetFactory *> factories =
ExtensionSystem::PluginManager::instance()->getObjects<ITargetFactory>();
@@ -284,30 +291,26 @@ void TargetSettingsPanelWidget::updateTargetAddAndRemoveButtons()
QList<ITargetFactory *> factories =
ExtensionSystem::PluginManager::instance()->getObjects<ITargetFactory>();
- foreach (const QString &id, m_project->possibleTargetIds()) {
- QString displayName;
- foreach (ITargetFactory *fac, factories) {
- if (fac->supportsTargetId(id)) {
- displayName = fac->displayNameForId(id);
- break;
+ foreach (ITargetFactory *fac, factories) {
+ foreach (const QString &id, fac->supportedTargetIds(m_project)) {
+ if (m_project->target(id))
+ continue;
+ QString displayName = fac->displayNameForId(id);
+ QAction *action = new QAction(displayName, m_addMenu);
+ action->setData(QVariant(id));
+ bool added = false;
+ foreach(QAction *existing, m_addMenu->actions()) {
+ if (existing->text() > action->text()) {
+ m_addMenu->insertAction(existing, action);
+ added = true;
+ }
}
- }
- if (displayName.isEmpty())
- continue;
- QAction *action = new QAction(displayName, m_addMenu);
- action->setData(QVariant(id));
- bool added = false;
- foreach(QAction *existing, m_addMenu->actions()) {
- if (existing->text() > action->text()) {
- m_addMenu->insertAction(existing, action);
- added = true;
- }
+ if (!added)
+ m_addMenu->addAction(action);
}
-
- if (!added)
- m_addMenu->addAction(action);
}
+
m_selector->setAddButtonEnabled(!m_addMenu->actions().isEmpty());
m_selector->setRemoveButtonEnabled(m_project->targets().count() > 1);
}
diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index 69023ebaff..a104b02619 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -58,7 +58,6 @@ QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName)
m_modelManager(ExtensionSystem::PluginManager::instance()->getObject<QmlJS::ModelManagerInterface>()),
m_fileWatcher(new ProjectExplorer::FileWatcher(this))
{
- setSupportedTargetIds(QSet<QString>() << QLatin1String(Constants::QML_VIEWER_TARGET_ID));
QFileInfo fileInfo(m_fileName);
m_projectName = fileInfo.completeBaseName();
diff --git a/src/plugins/qmlprojectmanager/qmlprojecttarget.cpp b/src/plugins/qmlprojectmanager/qmlprojecttarget.cpp
index e01c8400d5..3144ad3246 100644
--- a/src/plugins/qmlprojectmanager/qmlprojecttarget.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojecttarget.cpp
@@ -108,7 +108,7 @@ bool QmlProjectTargetFactory::supportsTargetId(const QString &id) const
return id == QLatin1String(Constants::QML_VIEWER_TARGET_ID);
}
-QStringList QmlProjectTargetFactory::availableCreationIds(ProjectExplorer::Project *parent) const
+QStringList QmlProjectTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
{
if (!qobject_cast<QmlProject *>(parent))
return QStringList();
diff --git a/src/plugins/qmlprojectmanager/qmlprojecttarget.h b/src/plugins/qmlprojectmanager/qmlprojecttarget.h
index 7fc8aacebb..843e4431cc 100644
--- a/src/plugins/qmlprojectmanager/qmlprojecttarget.h
+++ b/src/plugins/qmlprojectmanager/qmlprojecttarget.h
@@ -76,7 +76,7 @@ public:
~QmlProjectTargetFactory();
bool supportsTargetId(const QString &id) const;
- QStringList availableCreationIds(ProjectExplorer::Project *parent) const;
+ QStringList supportedTargetIds(ProjectExplorer::Project *parent) const;
QString displayNameForId(const QString &id) const;
bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
diff --git a/src/plugins/qt4projectmanager/externaleditors.cpp b/src/plugins/qt4projectmanager/externaleditors.cpp
index 53d1b7ba1a..872f8bf5fd 100644
--- a/src/plugins/qt4projectmanager/externaleditors.cpp
+++ b/src/plugins/qt4projectmanager/externaleditors.cpp
@@ -34,7 +34,6 @@
#include "externaleditors.h"
#include "qt4project.h"
#include "qt4projectmanagerconstants.h"
-#include "qt4target.h"
#include "qtversionmanager.h"
#include "qt4buildconfiguration.h"
diff --git a/src/plugins/qt4projectmanager/projectloadwizard.cpp b/src/plugins/qt4projectmanager/projectloadwizard.cpp
index 0341cb19db..5797e99b17 100644
--- a/src/plugins/qt4projectmanager/projectloadwizard.cpp
+++ b/src/plugins/qt4projectmanager/projectloadwizard.cpp
@@ -32,16 +32,8 @@
**************************************************************************/
#include "projectloadwizard.h"
-
-#include "qt4project.h"
-#include "qmakestep.h"
-#include "qt4target.h"
-#include "makestep.h"
-#include "qt4buildconfiguration.h"
-#include "qt4projectmanagerconstants.h"
-#include "qtversionmanager.h"
-
#include "wizards/targetsetuppage.h"
+#include "qt4project.h"
#include <QtGui/QCheckBox>
#include <QtGui/QHeaderView>
@@ -98,7 +90,7 @@ void ProjectLoadWizard::setupTargetPage()
return;
QList<TargetSetupPage::ImportInfo> importVersions = TargetSetupPage::scanDefaultProjectDirectories(m_project);
- importVersions.append(TargetSetupPage::importInfosForKnownQtVersions());
+ importVersions.append(TargetSetupPage::importInfosForKnownQtVersions(m_project->file()->fileName()));
m_targetSetupPage = new TargetSetupPage(this);
m_targetSetupPage->setProFilePath(m_project->file()->fileName());
diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h
index 67514439d7..a1e82bbc1d 100644
--- a/src/plugins/qt4projectmanager/qmakestep.h
+++ b/src/plugins/qt4projectmanager/qmakestep.h
@@ -47,8 +47,8 @@ class Project;
}
namespace Qt4ProjectManager {
-class Qt4Project;
class Qt4BuildConfiguration;
+class Qt4Project;
namespace Internal {
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt-desktop.pri b/src/plugins/qt4projectmanager/qt-desktop/qt-desktop.pri
new file mode 100644
index 0000000000..d002792d25
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt-desktop.pri
@@ -0,0 +1,14 @@
+
+HEADERS += \
+ $$PWD/qt4runconfiguration.h \
+ $$PWD/qt4desktoptargetfactory.h \
+ $$PWD/qt4simulatortargetfactory.h \
+ $$PWD/qt4desktoptarget.h \
+ $$PWD/qt4simulatortarget.h
+
+SOURCES += \
+ $$PWD/qt4runconfiguration.cpp \
+ $$PWD/qt4desktoptargetfactory.cpp \
+ $$PWD/qt4simulatortargetfactory.cpp \
+ $$PWD/qt4desktoptarget.cpp \
+ $$PWD/qt4simulatortarget.cpp
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.cpp
new file mode 100644
index 0000000000..f4b8e47a8c
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.cpp
@@ -0,0 +1,92 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "qt4desktoptarget.h"
+#include "qt4project.h"
+#include "qt4runconfiguration.h"
+#include <projectexplorer/deployconfiguration.h>
+#include <projectexplorer/customexecutablerunconfiguration.h>
+#include <QtGui/QApplication>
+#include <QtGui/QStyle>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+Qt4DesktopTarget::Qt4DesktopTarget(Qt4Project *parent, const QString &id) :
+ Qt4BaseTarget(parent, id),
+ m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this)),
+ m_deployConfigurationFactory(new ProjectExplorer::DeployConfigurationFactory(this))
+{
+ setDisplayName(defaultDisplayName());
+ setIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon));
+}
+
+Qt4DesktopTarget::~Qt4DesktopTarget()
+{
+}
+
+QString Qt4DesktopTarget::defaultDisplayName()
+{
+ return QApplication::translate("Qt4ProjectManager::Qt4Target", "Desktop", "Qt4 Desktop target display name");
+}
+
+Qt4BuildConfigurationFactory *Qt4DesktopTarget::buildConfigurationFactory() const
+{
+ return m_buildConfigurationFactory;
+}
+
+ProjectExplorer::DeployConfigurationFactory *Qt4DesktopTarget::deployConfigurationFactory() const
+{
+ return m_deployConfigurationFactory;
+}
+
+void Qt4DesktopTarget::createApplicationProFiles()
+{
+ removeUnconfiguredCustomExectutableRunConfigurations();
+
+ // We use the list twice
+ QList<Qt4ProFileNode *> profiles = qt4Project()->applicationProFiles();
+ QSet<QString> paths;
+ foreach (Qt4ProFileNode *pro, profiles)
+ paths << pro->path();
+
+ foreach (ProjectExplorer::RunConfiguration *rc, runConfigurations())
+ if (Qt4RunConfiguration *qt4rc = qobject_cast<Qt4RunConfiguration *>(rc)) {
+ paths.remove(qt4rc->proFilePath());
+ }
+
+ // Only add new runconfigurations if there are none.
+ foreach (const QString &path, paths)
+ addRunConfiguration(new Qt4RunConfiguration(this, path));
+
+ // Oh still none? Add a custom executable runconfiguration
+ if (runConfigurations().isEmpty()) {
+ addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(this));
+ }
+}
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.h b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.h
new file mode 100644
index 0000000000..68ef63c35f
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptarget.h
@@ -0,0 +1,63 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4DESKTOPTARGET_H
+#define QT4DESKTOPTARGET_H
+
+#include "qt4target.h"
+
+namespace Qt4ProjectManager {
+
+class Qt4Project;
+
+namespace Internal {
+
+class Qt4DesktopTarget : public Qt4BaseTarget
+{
+ friend class Qt4DesktopTargetFactory;
+ Q_OBJECT
+public:
+ explicit Qt4DesktopTarget(Qt4Project *parent, const QString &id);
+ virtual ~Qt4DesktopTarget();
+
+ Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
+ ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
+
+ void createApplicationProFiles();
+
+ static QString defaultDisplayName();
+
+private:
+ Internal::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;
+ ProjectExplorer::DeployConfigurationFactory *m_deployConfigurationFactory;
+};
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+#endif // QT4DESKTOPTARGET_H
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
new file mode 100644
index 0000000000..681ccfee86
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.cpp
@@ -0,0 +1,177 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "qt4desktoptargetfactory.h"
+#include "qt4projectmanagerconstants.h"
+#include "qt4project.h"
+#include "qt4runconfiguration.h"
+#include "qt4desktoptarget.h"
+
+#include <projectexplorer/deployconfiguration.h>
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/customexecutablerunconfiguration.h>
+#include <projectexplorer/projectexplorerconstants.h>
+
+#include <QtGui/QApplication>
+#include <QtGui/QStyle>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+using ProjectExplorer::idFromMap;
+
+Qt4DesktopTargetFactory::Qt4DesktopTargetFactory(QObject *parent) :
+ Qt4BaseTargetFactory(parent)
+{
+ connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+ this, SIGNAL(supportedTargetIdsChanged()));
+}
+
+Qt4DesktopTargetFactory::~Qt4DesktopTargetFactory()
+{
+}
+
+bool Qt4DesktopTargetFactory::supportsTargetId(const QString &id) const
+{
+ return id == QLatin1String(Constants::DESKTOP_TARGET_ID);
+}
+
+QStringList Qt4DesktopTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return QStringList();
+ if (!QtVersionManager::instance()->supportsTargetId(Constants::DESKTOP_TARGET_ID))
+ return QStringList();
+ return QStringList() << QLatin1String(Constants::DESKTOP_TARGET_ID);
+}
+
+QString Qt4DesktopTargetFactory::displayNameForId(const QString &id) const
+{
+ if (id == QLatin1String(Constants::DESKTOP_TARGET_ID))
+ return Qt4DesktopTarget::defaultDisplayName();
+ return QString();
+}
+
+bool Qt4DesktopTargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return false;
+ return supportsTargetId(id);
+}
+
+bool Qt4DesktopTargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
+{
+ return canCreate(parent, idFromMap(map));
+}
+
+Qt4BaseTarget *Qt4DesktopTargetFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
+{
+ if (!canRestore(parent, map))
+ return 0;
+
+ Qt4Project *qt4project = static_cast<Qt4Project *>(parent);
+ Qt4DesktopTarget *target = new Qt4DesktopTarget(qt4project, QLatin1String("transient ID"));
+
+ if (target->fromMap(map))
+ return target;
+ delete target;
+ return 0;
+}
+
+QString Qt4DesktopTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id)
+{
+ if (id != QLatin1String(Constants::DESKTOP_TARGET_ID))
+ return QString();
+
+ // currently we can't have the build directory to be deeper than the source directory
+ // since that is broken in qmake
+ // Once qmake is fixed we can change that to have a top directory and
+ // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') )
+ return projectLocation + QLatin1String("-desktop");
+}
+
+QList<BuildConfigurationInfo> Qt4DesktopTargetFactory::availableBuildConfigurations(const QString &proFilePath)
+{
+ QList<BuildConfigurationInfo> infos;
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(Constants::DESKTOP_TARGET_ID);
+
+ foreach (QtVersion *version, knownVersions) {
+ bool buildAll = version->defaultBuildConfig() & QtVersion::BuildAll;
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+
+ QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), Constants::DESKTOP_TARGET_ID);
+ infos.append(BuildConfigurationInfo(version, config, QString(), dir));
+ infos.append(BuildConfigurationInfo(version, config | QtVersion::DebugBuild, QString(), dir));
+ }
+ return infos;
+}
+
+Qt4BaseTarget *Qt4DesktopTargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
+{
+ if (!canCreate(parent, id))
+ return 0;
+
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id);
+ if (knownVersions.isEmpty())
+ return 0;
+
+ QtVersion *qtVersion = knownVersions.first();
+ bool buildAll = qtVersion->isValid() && (qtVersion->defaultBuildConfig() & QtVersion::BuildAll);
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+
+ QList<BuildConfigurationInfo> infos;
+ infos.append(BuildConfigurationInfo(qtVersion, config | QtVersion::DebugBuild, QString(), QString()));
+ infos.append(BuildConfigurationInfo(qtVersion, config, QString(), QString()));
+
+ return create(parent, id, infos);
+}
+
+Qt4BaseTarget *Qt4DesktopTargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos)
+{
+ if (!canCreate(parent, id))
+ return 0;
+ Qt4DesktopTarget *t = new Qt4DesktopTarget(static_cast<Qt4Project *>(parent), id);
+
+ foreach (const BuildConfigurationInfo &info, infos) {
+ QString displayName = info.version->displayName() + QLatin1Char(' ');
+ displayName += (info.buildConfig & QtVersion::DebugBuild) ? tr("Debug") : tr("Release");
+ t->addQt4BuildConfiguration(displayName,
+ info.version,
+ info.buildConfig,
+ info.additionalArguments,
+ info.directory);
+ }
+
+ t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
+
+ t->createApplicationProFiles();
+
+ if (t->runConfigurations().isEmpty())
+ t->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(t));
+ return t;
+}
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h
new file mode 100644
index 0000000000..b65d9716f7
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4desktoptargetfactory.h
@@ -0,0 +1,61 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4DESKTOPTARGETFACTORY_H
+#define QT4DESKTOPTARGETFACTORY_H
+
+#include "qt4target.h"
+
+namespace Qt4ProjectManager {
+namespace Internal {
+class Qt4DesktopTargetFactory : public Qt4BaseTargetFactory
+{
+ Q_OBJECT
+public:
+ Qt4DesktopTargetFactory(QObject *parent = 0);
+ ~Qt4DesktopTargetFactory();
+
+ QStringList supportedTargetIds(ProjectExplorer::Project *parent) const;
+ QString displayNameForId(const QString &id) const;
+
+ bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
+ bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
+ Qt4ProjectManager::Qt4BaseTarget *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
+ QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id);
+
+ virtual bool supportsTargetId(const QString &id) const;
+
+ QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &proFilePath);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos);
+};
+}
+}
+
+#endif // QT4DESKTOPTARGETFACTORY_H
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp
index 43d964de2a..ecae28a091 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.cpp
@@ -41,6 +41,7 @@
#include "qt4buildconfiguration.h"
#include "qt4projectmanagerconstants.h"
#include "qtoutputformatter.h"
+#include "qt4desktoptarget.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/icore.h>
@@ -100,7 +101,7 @@ QString pathToId(const QString &path)
// Qt4RunConfiguration
//
-Qt4RunConfiguration::Qt4RunConfiguration(Qt4Target *parent, const QString &proFilePath) :
+Qt4RunConfiguration::Qt4RunConfiguration(Qt4BaseTarget *parent, const QString &proFilePath) :
LocalApplicationRunConfiguration(parent, QLatin1String(QT4_RC_ID)),
m_proFilePath(proFilePath),
m_runMode(Gui),
@@ -111,7 +112,7 @@ Qt4RunConfiguration::Qt4RunConfiguration(Qt4Target *parent, const QString &proFi
ctor();
}
-Qt4RunConfiguration::Qt4RunConfiguration(Qt4Target *parent, Qt4RunConfiguration *source) :
+Qt4RunConfiguration::Qt4RunConfiguration(Qt4BaseTarget *parent, Qt4RunConfiguration *source) :
LocalApplicationRunConfiguration(parent, source),
m_commandLineArguments(source->m_commandLineArguments),
m_proFilePath(source->m_proFilePath),
@@ -129,9 +130,9 @@ Qt4RunConfiguration::~Qt4RunConfiguration()
{
}
-Qt4Target *Qt4RunConfiguration::qt4Target() const
+Qt4DesktopTarget *Qt4RunConfiguration::qt4Target() const
{
- return static_cast<Qt4Target *>(target());
+ return static_cast<Qt4DesktopTarget *>(target());
}
bool Qt4RunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration * /* configuration */) const
@@ -719,7 +720,7 @@ Qt4RunConfigurationFactory::~Qt4RunConfigurationFactory()
bool Qt4RunConfigurationFactory::canCreate(ProjectExplorer::Target *parent, const QString &id) const
{
- Qt4Target *t = qobject_cast<Qt4Target *>(parent);
+ Qt4DesktopTarget *t = qobject_cast<Qt4DesktopTarget *>(parent);
if (!t)
return false;
if (t->id() != QLatin1String(Constants::DESKTOP_TARGET_ID))
@@ -731,13 +732,13 @@ ProjectExplorer::RunConfiguration *Qt4RunConfigurationFactory::create(ProjectExp
{
if (!canCreate(parent, id))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
+ Qt4DesktopTarget *t(static_cast<Qt4DesktopTarget *>(parent));
return new Qt4RunConfiguration(t, pathFromId(id));
}
bool Qt4RunConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const
{
- if (!qobject_cast<Qt4Target *>(parent))
+ if (!qobject_cast<Qt4DesktopTarget *>(parent))
return false;
if (parent->id() != QLatin1String(Constants::DESKTOP_TARGET_ID))
return false;
@@ -749,8 +750,8 @@ ProjectExplorer::RunConfiguration *Qt4RunConfigurationFactory::restore(ProjectEx
{
if (!canRestore(parent, map))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
- Qt4RunConfiguration *rc(new Qt4RunConfiguration(t, QString()));
+ Qt4DesktopTarget *t = static_cast<Qt4DesktopTarget *>(parent);
+ Qt4RunConfiguration *rc = new Qt4RunConfiguration(t, QString());
if (rc->fromMap(map))
return rc;
@@ -767,14 +768,14 @@ ProjectExplorer::RunConfiguration *Qt4RunConfigurationFactory::clone(ProjectExpl
{
if (!canClone(parent, source))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
- Qt4RunConfiguration *old(static_cast<Qt4RunConfiguration *>(source));
+ Qt4DesktopTarget *t = static_cast<Qt4DesktopTarget *>(parent);
+ Qt4RunConfiguration *old = static_cast<Qt4RunConfiguration *>(source);
return new Qt4RunConfiguration(t, old);
}
QStringList Qt4RunConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const
{
- Qt4Target *t(qobject_cast<Qt4Target *>(parent));
+ Qt4DesktopTarget *t = qobject_cast<Qt4DesktopTarget *>(parent);
if (!t)
return QStringList();
if (t->id() != Constants::DESKTOP_TARGET_ID)
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.h
index 86210b53c3..182521bfa7 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4runconfiguration.h
@@ -59,10 +59,12 @@ namespace ProjectExplorer {
}
namespace Qt4ProjectManager {
+
class Qt4Project;
-class Qt4Target;
+class Qt4BaseTarget;
namespace Internal {
+class Qt4DesktopTarget;
class Qt4PriFileNode;
class Qt4ProFileNode;
class Qt4RunConfigurationFactory;
@@ -75,10 +77,10 @@ class Qt4RunConfiguration : public ProjectExplorer::LocalApplicationRunConfigura
friend class Qt4RunConfigurationFactory;
public:
- Qt4RunConfiguration(Qt4Target *parent, const QString &proFilePath);
+ Qt4RunConfiguration(Qt4BaseTarget *parent, const QString &proFilePath);
virtual ~Qt4RunConfiguration();
- Qt4Target *qt4Target() const;
+ Qt4DesktopTarget *qt4Target() const;
virtual bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const;
using ProjectExplorer::LocalApplicationRunConfiguration::isEnabled;
@@ -119,7 +121,7 @@ private slots:
void proFileInvalidated(Qt4ProjectManager::Internal::Qt4ProFileNode *pro);
protected:
- Qt4RunConfiguration(Qt4Target *parent, Qt4RunConfiguration *source);
+ Qt4RunConfiguration(Qt4BaseTarget *parent, Qt4RunConfiguration *source);
virtual bool fromMap(const QVariantMap &map);
private:
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.cpp
new file mode 100644
index 0000000000..c15df4ccb4
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.cpp
@@ -0,0 +1,96 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "qt4simulatortarget.h"
+#include "qt4project.h"
+#include "qt4runconfiguration.h"
+
+#include <projectexplorer/customexecutablerunconfiguration.h>
+#include <projectexplorer/deployconfiguration.h>
+#include <QtGui/QApplication>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+
+// -------------------------------------------------------------------------
+// Qt4Target
+// -------------------------------------------------------------------------
+
+Qt4SimulatorTarget::Qt4SimulatorTarget(Qt4Project *parent, const QString &id) :
+ Qt4BaseTarget(parent, id),
+ m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this)),
+ m_deployConfigurationFactory(new ProjectExplorer::DeployConfigurationFactory(this))
+{
+ setDisplayName(defaultDisplayName());
+ setIcon(QIcon(":/projectexplorer/images/SymbianEmulator.png"));
+}
+
+Qt4SimulatorTarget::~Qt4SimulatorTarget()
+{
+}
+
+QString Qt4SimulatorTarget::defaultDisplayName()
+{
+ return QApplication::translate("Qt4ProjectManager::Qt4Target", "Qt Simulator", "Qt4 Simulator target display name");
+}
+
+Qt4BuildConfigurationFactory *Qt4SimulatorTarget::buildConfigurationFactory() const
+{
+ return m_buildConfigurationFactory;
+}
+
+ProjectExplorer::DeployConfigurationFactory *Qt4SimulatorTarget::deployConfigurationFactory() const
+{
+ return m_deployConfigurationFactory;
+}
+
+void Qt4SimulatorTarget::createApplicationProFiles()
+{
+ removeUnconfiguredCustomExectutableRunConfigurations();
+
+ // We use the list twice
+ QList<Qt4ProFileNode *> profiles = qt4Project()->applicationProFiles();
+ QSet<QString> paths;
+ foreach (Qt4ProFileNode *pro, profiles)
+ paths << pro->path();
+
+ foreach (ProjectExplorer::RunConfiguration *rc, runConfigurations())
+ if (Qt4RunConfiguration *qt4rc = qobject_cast<Qt4RunConfiguration *>(rc))
+ paths.remove(qt4rc->proFilePath());
+
+ // Only add new runconfigurations if there are none.
+ foreach (const QString &path, paths)
+ addRunConfiguration(new Qt4RunConfiguration(this, path));
+
+ // Oh still none? Add a custom executable runconfiguration
+ if (runConfigurations().isEmpty()) {
+ addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(this));
+ }
+}
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.h b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.h
new file mode 100644
index 0000000000..c9b6858a7a
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortarget.h
@@ -0,0 +1,64 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4SIMULATORTARGET_H
+#define QT4SIMULATORTARGET_H
+
+#include "qt4target.h"
+
+namespace Qt4ProjectManager {
+
+class Qt4Project;
+
+namespace Internal {
+
+class Qt4SimulatorTarget : public Qt4BaseTarget
+{
+ friend class Qt4SimulatorTargetFactory;
+ Q_OBJECT
+public:
+ explicit Qt4SimulatorTarget(Qt4Project *parent, const QString &id);
+ virtual ~Qt4SimulatorTarget();
+
+ Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
+ ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
+
+ void createApplicationProFiles();
+
+ static QString defaultDisplayName();
+
+private:
+ Internal::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;
+ ProjectExplorer::DeployConfigurationFactory *m_deployConfigurationFactory;
+};
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif // QT4SIMULATORTARGET_H
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
new file mode 100644
index 0000000000..0ce2888dca
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.cpp
@@ -0,0 +1,178 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "qt4simulatortargetfactory.h"
+#include "qt4projectmanagerconstants.h"
+#include "qt4project.h"
+#include "qt4runconfiguration.h"
+#include "qt4simulatortarget.h"
+
+#include <projectexplorer/deployconfiguration.h>
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/customexecutablerunconfiguration.h>
+
+#include <QtGui/QApplication>
+#include <QtGui/QStyle>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+using ProjectExplorer::idFromMap;
+
+// -------------------------------------------------------------------------
+// Qt4SimulatorTargetFactory
+// -------------------------------------------------------------------------
+
+Qt4SimulatorTargetFactory::Qt4SimulatorTargetFactory(QObject *parent) :
+ Qt4BaseTargetFactory(parent)
+{
+ connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+ this, SIGNAL(supportedTargetIdsChanged()));
+}
+
+Qt4SimulatorTargetFactory::~Qt4SimulatorTargetFactory()
+{
+}
+
+bool Qt4SimulatorTargetFactory::supportsTargetId(const QString &id) const
+{
+ return id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID);
+}
+
+QStringList Qt4SimulatorTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return QStringList();
+ if (!QtVersionManager::instance()->supportsTargetId(Constants::QT_SIMULATOR_TARGET_ID))
+ return QStringList();
+ return QStringList() << QLatin1String(Constants::QT_SIMULATOR_TARGET_ID);
+}
+
+QString Qt4SimulatorTargetFactory::displayNameForId(const QString &id) const
+{
+ if (id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
+ return Qt4SimulatorTarget::defaultDisplayName();
+ return QString();
+}
+
+bool Qt4SimulatorTargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return false;
+ return supportsTargetId(id);
+}
+
+bool Qt4SimulatorTargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
+{
+ return canCreate(parent, idFromMap(map));
+}
+
+Qt4BaseTarget *Qt4SimulatorTargetFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
+{
+ if (!canRestore(parent, map))
+ return 0;
+
+ Qt4Project *qt4project = static_cast<Qt4Project *>(parent);
+ Qt4SimulatorTarget *target = new Qt4SimulatorTarget(qt4project, QLatin1String("transient ID"));
+ if (target->fromMap(map))
+ return target;
+ delete target;
+ return 0;
+}
+
+QString Qt4SimulatorTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id)
+{
+ if (id != QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
+ return QString();
+
+ // currently we can't have the build directory to be deeper than the source directory
+ // since that is broken in qmake
+ // Once qmake is fixed we can change that to have a top directory and
+ // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') )
+ return projectLocation + QLatin1String("-simulator");
+}
+
+QList<BuildConfigurationInfo> Qt4SimulatorTargetFactory::availableBuildConfigurations(const QString &proFilePath)
+{
+ QList<BuildConfigurationInfo> infos;
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(Constants::QT_SIMULATOR_TARGET_ID);
+
+ foreach (QtVersion *version, knownVersions) {
+ bool buildAll = version->defaultBuildConfig() & QtVersion::BuildAll;
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+ QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), Constants::QT_SIMULATOR_TARGET_ID);
+ infos.append(BuildConfigurationInfo(version, config, QString(), dir));
+ infos.append(BuildConfigurationInfo(version, config | QtVersion::DebugBuild, QString(), dir));
+ }
+ return infos;
+}
+
+Qt4BaseTarget *Qt4SimulatorTargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
+{
+ if (!canCreate(parent, id))
+ return 0;
+
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id);
+ if (knownVersions.isEmpty())
+ return 0;
+
+ QtVersion *qtVersion = knownVersions.first();
+ bool buildAll = qtVersion->isValid() && (qtVersion->defaultBuildConfig() & QtVersion::BuildAll);
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+
+ QList<BuildConfigurationInfo> infos;
+ infos.append(BuildConfigurationInfo(qtVersion, config | QtVersion::DebugBuild, QString(), QString()));
+ infos.append(BuildConfigurationInfo(qtVersion, config, QString(), QString()));
+
+ return create(parent, id, infos);
+}
+
+Qt4BaseTarget *Qt4SimulatorTargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos)
+{
+ if (!canCreate(parent, id))
+ return 0;
+ Qt4SimulatorTarget *t = new Qt4SimulatorTarget(static_cast<Qt4Project *>(parent), id);
+
+ foreach (const BuildConfigurationInfo &info, infos) {
+ QString displayName = info.version->displayName() + QLatin1Char(' ');
+ displayName += (info.buildConfig & QtVersion::DebugBuild) ? tr("Debug") : tr("Release");
+ t->addQt4BuildConfiguration(displayName,
+ info.version,
+ info.buildConfig,
+ info.additionalArguments,
+ info.directory);
+ }
+
+ t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
+
+ t->createApplicationProFiles();
+
+ if (t->runConfigurations().isEmpty())
+ t->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(t));
+ return t;
+}
diff --git a/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h
new file mode 100644
index 0000000000..9b2df9d12b
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-desktop/qt4simulatortargetfactory.h
@@ -0,0 +1,64 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4SIMULATORTARGETFACTORY_H
+#define QT4SIMULATORTARGETFACTORY_H
+#include "qt4target.h"
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class Qt4SimulatorTargetFactory : public Qt4BaseTargetFactory
+{
+ Q_OBJECT
+public:
+ Qt4SimulatorTargetFactory(QObject *parent = 0);
+ ~Qt4SimulatorTargetFactory();
+
+ bool supportsTargetId(const QString &id);
+
+ QStringList supportedTargetIds(ProjectExplorer::Project *parent) const;
+ QString displayNameForId(const QString &id) const;
+
+ bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
+ bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
+ Qt4ProjectManager::Qt4BaseTarget *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
+ QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id);
+
+ virtual bool supportsTargetId(const QString &id) const;
+
+ QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &proFilePath);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos);
+};
+
+}
+}
+
+#endif // QT4SIMULATORTARGETFACTORY_H
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp
index 073949e2ea..320ba3669a 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeployablelistmodel.cpp
@@ -34,6 +34,7 @@
#include "maemodeployablelistmodel.h"
#include "maemoglobal.h"
+#include "qt4maemotarget.h"
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/session.h>
@@ -340,8 +341,8 @@ const QtVersion *MaemoDeployableListModel::qtVersion() const
const ProjectExplorer::Project *const activeProject
= ProjectExplorer::ProjectExplorerPlugin::instance()->session()->startupProject();
QTC_ASSERT(activeProject, return 0);
- const Qt4Target *const activeTarget
- = qobject_cast<Qt4Target *>(activeProject->activeTarget());
+ const Qt4MaemoTarget *const activeTarget
+ = qobject_cast<Qt4MaemoTarget *>(activeProject->activeTarget());
QTC_ASSERT(activeTarget, return 0);
const Qt4BuildConfiguration *const bc
= activeTarget->activeBuildConfiguration();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.cpp
index f25b4b90cc..b664e9ea4e 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.cpp
@@ -42,20 +42,20 @@
#include "maemodeployables.h"
#include "maemoprofilesupdatedialog.h"
+#include "qt4maemotarget.h"
#include <profileevaluator.h>
#include <projectexplorer/buildstep.h>
#include <qt4projectmanager/qt4projectmanagerconstants.h>
#include <qt4projectmanager/qt4buildconfiguration.h>
#include <qt4projectmanager/qt4project.h>
-#include <qt4projectmanager/qt4target.h>
#include <QtCore/QTimer>
namespace Qt4ProjectManager {
namespace Internal {
-MaemoDeployables::MaemoDeployables(const Qt4Target *target)
+MaemoDeployables::MaemoDeployables(const Qt4MaemoTarget *target)
: m_target(target), m_updateTimer(new QTimer(this))
{
QTimer::singleShot(0, this, SLOT(init()));
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.h
index 8f0712ac1a..df7e676e77 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeployables.h
@@ -53,16 +53,16 @@ QT_FORWARD_DECLARE_CLASS(QTimer)
namespace Qt4ProjectManager {
class Qt4BuildConfiguration;
-class Qt4Target;
namespace Internal {
class Qt4ProFileNode;
+class Qt4MaemoTarget;
class MaemoDeployables : public QAbstractListModel
{
Q_OBJECT
public:
- MaemoDeployables(const Qt4Target *target);
+ MaemoDeployables(const Qt4MaemoTarget *target);
~MaemoDeployables();
void setUnmodified();
bool isModified() const;
@@ -84,7 +84,7 @@ private:
QList<MaemoDeployableListModel *> m_listModels;
UpdateSettingsMap m_updateSettings;
- const Qt4Target * const m_target;
+ const Qt4MaemoTarget * const m_target;
QTimer *const m_updateTimer;
};
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
index 104ce44bac..3db09d2495 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp
@@ -41,6 +41,7 @@
#include "maemorunconfiguration.h"
#include "maemotoolchain.h"
#include "maemousedportsgatherer.h"
+#include "qt4maemotarget.h"
#include <coreplugin/ssh/sftpchannel.h>
#include <coreplugin/ssh/sshconnection.h>
@@ -96,7 +97,7 @@ void MaemoDeployStep::ctor()
const QList<DeployConfiguration *> &deployConfigs
= target()->deployConfigurations();
if (deployConfigs.isEmpty()) {
- const Qt4Target * const qt4Target = qobject_cast<Qt4Target *>(target());
+ const Qt4MaemoTarget * const qt4Target = qobject_cast<Qt4MaemoTarget *>(target());
Q_ASSERT(qt4Target);
m_deployables = QSharedPointer<MaemoDeployables>(new MaemoDeployables(qt4Target));
} else {
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
index bf2107e3f0..32f118a93f 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
@@ -44,6 +44,7 @@
#include "maemosettingspages.h"
#include "maemotemplatesmanager.h"
#include "maemotoolchain.h"
+#include "qt4maemotargetfactory.h"
#include <extensionsystem/pluginmanager.h>
#include <qt4projectmanager/qtversionmanager.h>
@@ -69,6 +70,7 @@ MaemoManager::MaemoManager()
, m_deviceConfigurationsSettingsPage(new MaemoDeviceConfigurationsSettingsPage(this))
, m_qemuSettingsPage(new MaemoQemuSettingsPage(this))
, m_publishingFactoryFremantleFree(new MaemoPublishingWizardFactoryFremantleFree(this))
+ , m_maemoTargetFactory(new Qt4MaemoTargetFactory(this))
{
Q_ASSERT(!m_instance);
@@ -85,6 +87,7 @@ MaemoManager::MaemoManager()
pluginManager->addObject(m_deviceConfigurationsSettingsPage);
pluginManager->addObject(m_qemuSettingsPage);
pluginManager->addObject(m_publishingFactoryFremantleFree);
+ pluginManager->addObject(m_maemoTargetFactory);
}
MaemoManager::~MaemoManager()
@@ -98,6 +101,7 @@ MaemoManager::~MaemoManager()
pluginManager->removeObject(m_deviceConfigurationsSettingsPage);
pluginManager->removeObject(m_qemuSettingsPage);
pluginManager->removeObject(m_publishingFactoryFremantleFree);
+ pluginManager->removeObject(m_maemoTargetFactory);
m_instance = 0;
}
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h
index d3730b4df6..d8af50191a 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h
@@ -53,6 +53,7 @@ class MaemoRunConfigurationFactory;
class MaemoDeviceConfigurationsSettingsPage;
class MaemoQemuManager;
class MaemoQemuSettingsPage;
+class Qt4MaemoTargetFactory;
class MaemoManager : public QObject
{
@@ -80,6 +81,7 @@ private:
MaemoQemuSettingsPage *m_qemuSettingsPage;
MaemoQemuManager *m_qemuRuntimeManager;
MaemoPublishingWizardFactoryFremantleFree *m_publishingFactoryFremantleFree;
+ Qt4MaemoTargetFactory *m_maemoTargetFactory;
};
} // namespace Internal
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
index 4691c5db4d..22e7894982 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp
@@ -41,6 +41,7 @@
#include "qtversionmanager.h"
#include "qt4project.h"
#include "qt4projectmanagerconstants.h"
+#include "qt4maemotarget.h"
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
@@ -506,7 +507,7 @@ void MaemoQemuManager::toggleStarterButton(Target *target)
{
int uniqueId = -1;
if (target) {
- if (Qt4Target *qt4Target = qobject_cast<Qt4Target*>(target)) {
+ if (Qt4MaemoTarget *qt4Target = qobject_cast<Qt4MaemoTarget*>(target)) {
if (Qt4BuildConfiguration *bc = qt4Target->activeBuildConfiguration()) {
if (QtVersion *version = bc->qtVersion())
uniqueId = version->uniqueId();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index 2e6c7e62e5..2f893175c8 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -40,6 +40,7 @@
#include "maemoremotemountsmodel.h"
#include "maemorunconfigurationwidget.h"
#include "maemotoolchain.h"
+#include "qt4maemotarget.h"
#include "qtoutputformatter.h"
#include <coreplugin/icore.h>
@@ -65,7 +66,7 @@ const bool DefaultUseRemoteGdbValue = false;
using namespace ProjectExplorer;
-MaemoRunConfiguration::MaemoRunConfiguration(Qt4Target *parent,
+MaemoRunConfiguration::MaemoRunConfiguration(Qt4BaseTarget *parent,
const QString &proFilePath)
: RunConfiguration(parent, QLatin1String(MAEMO_RC_ID))
, m_proFilePath(proFilePath)
@@ -76,7 +77,7 @@ MaemoRunConfiguration::MaemoRunConfiguration(Qt4Target *parent,
init();
}
-MaemoRunConfiguration::MaemoRunConfiguration(Qt4Target *parent,
+MaemoRunConfiguration::MaemoRunConfiguration(Qt4BaseTarget *parent,
MaemoRunConfiguration *source)
: RunConfiguration(parent, source)
, m_proFilePath(source->m_proFilePath)
@@ -114,9 +115,9 @@ MaemoRunConfiguration::~MaemoRunConfiguration()
{
}
-Qt4Target *MaemoRunConfiguration::qt4Target() const
+Qt4MaemoTarget *MaemoRunConfiguration::qt4Target() const
{
- return static_cast<Qt4Target *>(target());
+ return static_cast<Qt4MaemoTarget *>(target());
}
Qt4BuildConfiguration *MaemoRunConfiguration::activeQt4BuildConfiguration() const
@@ -443,5 +444,10 @@ void MaemoRunConfiguration::setSystemEnvironment(const Utils::Environment &envir
}
}
+QString MaemoRunConfiguration::proFilePath() const
+{
+ return m_proFilePath;
+}
+
} // namespace Internal
} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index e05f581684..4f11271847 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -51,11 +51,12 @@ namespace Qt4ProjectManager {
class Qt4BuildConfiguration;
class Qt4Project;
-class Qt4Target;
+class Qt4BaseTarget;
namespace Internal {
class Qt4ProFileNode;
+class Qt4MaemoTarget;
class MaemoDeviceConfigListModel;
class MaemoDeployStep;
@@ -77,14 +78,14 @@ public:
enum DebuggingType { DebugCppOnly, DebugQmlOnly, DebugCppAndQml };
- MaemoRunConfiguration(Qt4Target *parent, const QString &proFilePath);
+ MaemoRunConfiguration(Qt4BaseTarget *parent, const QString &proFilePath);
virtual ~MaemoRunConfiguration();
using ProjectExplorer::RunConfiguration::isEnabled;
bool isEnabled(ProjectExplorer::BuildConfiguration *config) const;
QWidget *createConfigurationWidget();
ProjectExplorer::OutputFormatter *createOutputFormatter() const;
- Qt4Target *qt4Target() const;
+ Qt4MaemoTarget *qt4Target() const;
Qt4BuildConfiguration *activeQt4BuildConfiguration() const;
MaemoDeployStep *deployStep() const;
@@ -126,6 +127,8 @@ public:
int portsUsedByDebuggers() const;
+ QString proFilePath() const;
+
signals:
void deviceConfigurationChanged(ProjectExplorer::Target *target);
void targetInformationChanged() const;
@@ -135,7 +138,7 @@ signals:
void userEnvironmentChangesChanged(const QList<Utils::EnvironmentItem> &diff);
protected:
- MaemoRunConfiguration(Qt4Target *parent, MaemoRunConfiguration *source);
+ MaemoRunConfiguration(Qt4BaseTarget *parent, MaemoRunConfiguration *source);
virtual bool fromMap(const QVariantMap &map);
QString defaultDisplayName();
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
index 5bec1d09c9..3c8d04696b 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfigurationwidget.cpp
@@ -42,6 +42,7 @@
#include "maemoremotemountsmodel.h"
#include "maemorunconfiguration.h"
#include "maemosettingspages.h"
+#include "qt4maemotarget.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/icore.h>
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
index 5ab079c1aa..f0e4f2745d 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
@@ -40,6 +40,8 @@
#include "maemoremotemountsmodel.h"
#include "maemorunconfiguration.h"
#include "maemoruncontrol.h"
+#include "maemotoolchain.h"
+#include "qt4maemotarget.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <debugger/debuggerconstants.h>
@@ -74,7 +76,7 @@ MaemoRunConfigurationFactory::~MaemoRunConfigurationFactory()
bool MaemoRunConfigurationFactory::canCreate(Target *parent,
const QString &id) const
{
- Qt4Target *target = qobject_cast<Qt4Target *>(parent);
+ Qt4MaemoTarget *target = qobject_cast<Qt4MaemoTarget *>(parent);
if (!target
|| target->id() != QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)) {
return false;
@@ -85,7 +87,7 @@ bool MaemoRunConfigurationFactory::canCreate(Target *parent,
bool MaemoRunConfigurationFactory::canRestore(Target *parent,
const QVariantMap &map) const
{
- if (!qobject_cast<Qt4Target *>(parent))
+ if (!qobject_cast<Qt4MaemoTarget *>(parent))
return false;
return ProjectExplorer::idFromMap(map)
.startsWith(QLatin1String(MAEMO_RC_ID));
@@ -99,7 +101,7 @@ bool MaemoRunConfigurationFactory::canClone(Target *parent,
QStringList MaemoRunConfigurationFactory::availableCreationIds(Target *parent) const
{
- if (Qt4Target *t = qobject_cast<Qt4Target *>(parent)) {
+ if (Qt4MaemoTarget *t = qobject_cast<Qt4MaemoTarget *>(parent)) {
if (t->id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)) {
return t->qt4Project()->
applicationProFilePathes(QLatin1String(MAEMO_RC_ID_PREFIX));
@@ -118,7 +120,7 @@ RunConfiguration *MaemoRunConfigurationFactory::create(Target *parent,
{
if (!canCreate(parent, id))
return 0;
- Qt4Target *pqt4parent = static_cast<Qt4Target *>(parent);
+ Qt4MaemoTarget *pqt4parent = static_cast<Qt4MaemoTarget *>(parent);
return new MaemoRunConfiguration(pqt4parent, pathFromId(id));
}
@@ -128,7 +130,7 @@ RunConfiguration *MaemoRunConfigurationFactory::restore(Target *parent,
{
if (!canRestore(parent, map))
return 0;
- Qt4Target *target = static_cast<Qt4Target *>(parent);
+ Qt4MaemoTarget *target = static_cast<Qt4MaemoTarget *>(parent);
MaemoRunConfiguration *rc = new MaemoRunConfiguration(target, QString());
if (rc->fromMap(map))
return rc;
@@ -144,7 +146,7 @@ RunConfiguration *MaemoRunConfigurationFactory::clone(Target *parent,
return 0;
MaemoRunConfiguration *old = static_cast<MaemoRunConfiguration *>(source);
- return new MaemoRunConfiguration(static_cast<Qt4Target *>(parent), old);
+ return new MaemoRunConfiguration(static_cast<Qt4MaemoTarget *>(parent), old);
}
// #pragma mark -- MaemoRunControlFactory
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp
index 205dedd5eb..a9bd9f8b45 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.cpp
@@ -38,6 +38,7 @@
#include "maemodeploystep.h"
#include "maemoglobal.h"
#include "maemopackagecreationstep.h"
+#include "qt4maemotarget.h"
#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h>
@@ -119,7 +120,7 @@ bool MaemoTemplatesManager::handleTarget(ProjectExplorer::Target *target)
if (!createDebianTemplatesIfNecessary(target))
return false;
- const Qt4Target * const qt4Target = qobject_cast<Qt4Target *>(target);
+ const Qt4MaemoTarget * const qt4Target = qobject_cast<Qt4MaemoTarget *>(target);
const MaemoDeployStep * const deployStep
= MaemoGlobal::buildStep<MaemoDeployStep>(qt4Target->activeDeployConfiguration());
connect(deployStep->deployables().data(), SIGNAL(modelReset()), this,
@@ -186,7 +187,7 @@ bool MaemoTemplatesManager::createDebianTemplatesIfNecessary(const ProjectExplor
QProcess dh_makeProc;
QString error;
- const Qt4Target * const qt4Target = qobject_cast<const Qt4Target *>(target);
+ const Qt4MaemoTarget * const qt4Target = qobject_cast<const Qt4MaemoTarget *>(target);
Q_ASSERT_X(qt4Target, Q_FUNC_INFO, "Target ID does not match actual type.");
const Qt4BuildConfiguration * const bc
= qt4Target->activeBuildConfiguration();
@@ -339,9 +340,9 @@ bool MaemoTemplatesManager::adaptControlFileField(QByteArray &document,
return updated;
}
-bool MaemoTemplatesManager::updateDesktopFiles(const Qt4Target *target)
+bool MaemoTemplatesManager::updateDesktopFiles(const Qt4MaemoTarget *target)
{
- const Qt4Target * const qt4Target = qobject_cast<const Qt4Target *>(target);
+ const Qt4MaemoTarget * const qt4Target = qobject_cast<const Qt4MaemoTarget *>(target);
Q_ASSERT_X(qt4Target, Q_FUNC_INFO,
"Impossible: Target has Maemo id, but could not be cast to Qt4Target.");
const QList<Qt4ProFileNode *> &applicationProjects
@@ -352,7 +353,7 @@ bool MaemoTemplatesManager::updateDesktopFiles(const Qt4Target *target)
return success;
}
-bool MaemoTemplatesManager::updateDesktopFile(const Qt4Target *target,
+bool MaemoTemplatesManager::updateDesktopFile(const Qt4MaemoTarget *target,
Qt4ProFileNode *proFileNode)
{
const QString appName = proFileNode->targetInformation().target;
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.h b/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.h
index 0e81f8888b..8751b70334 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemotemplatesmanager.h
@@ -50,10 +50,10 @@ class Target;
namespace Qt4ProjectManager {
class Qt4Project;
-class Qt4Target;
namespace Internal {
class Qt4ProFileNode;
+class Qt4MaemoTarget;
class MaemoTemplatesManager : public QObject
{
@@ -103,8 +103,8 @@ private:
QString changeLogFilePath(const ProjectExplorer::Project *project) const;
QString controlFilePath(const ProjectExplorer::Project *project) const;
bool createDebianTemplatesIfNecessary(const ProjectExplorer::Target *target);
- bool updateDesktopFiles(const Qt4Target *target);
- bool updateDesktopFile(const Qt4Target *target,
+ bool updateDesktopFiles(const Qt4MaemoTarget *target);
+ bool updateDesktopFile(const Qt4MaemoTarget *target,
Qt4ProFileNode *proFileNode);
ProjectExplorer::Project *findProject(const QFileSystemWatcher *fsWatcher) const;
void findLine(const QByteArray &string, QByteArray &document,
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri b/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri
index 19bfd77865..26087aa920 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri
@@ -44,7 +44,10 @@ HEADERS += \
$$PWD/maemoqemuruntime.h \
$$PWD/maemoqemuruntimeparser.h \
$$PWD/maemoqemusettingswidget.h \
- $$PWD/maemoqemusettings.h
+ $$PWD/maemoqemusettings.h \
+ $$PWD/qt4maemotargetfactory.h \
+ $$PWD/qt4maemotarget.h \
+ $$PWD/qt4maemodeployconfiguration.h
SOURCES += \
$$PWD/maemoconfigtestdialog.cpp \
@@ -89,7 +92,10 @@ SOURCES += \
$$PWD/maemopublisherfremantlefree.cpp \
$$PWD/maemoqemuruntimeparser.cpp \
$$PWD/maemoqemusettingswidget.cpp \
- $$PWD/maemoqemusettings.cpp
+ $$PWD/maemoqemusettings.cpp \
+ $$PWD/qt4maemotargetfactory.cpp \
+ $$PWD/qt4maemotarget.cpp \
+ $$PWD/qt4maemodeployconfiguration.cpp
FORMS += \
$$PWD/maemoconfigtestdialog.ui \
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.cpp
new file mode 100644
index 0000000000..4b70bff1a7
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.cpp
@@ -0,0 +1,57 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+
+#include "maemodeploystep.h"
+#include "maemopackagecreationstep.h"
+#include "qt4maemodeployconfiguration.h"
+
+#include <projectexplorer/buildsteplist.h>
+#include <projectexplorer/target.h>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+Qt4MaemoDeployConfigurationFactory::Qt4MaemoDeployConfigurationFactory(QObject *parent) :
+ ProjectExplorer::DeployConfigurationFactory(parent)
+{ }
+
+ProjectExplorer::DeployConfiguration *Qt4MaemoDeployConfigurationFactory::create(ProjectExplorer::Target *parent, const QString &id)
+{
+ ProjectExplorer::DeployConfiguration *dc = ProjectExplorer::DeployConfigurationFactory::create(parent, id);
+
+ if (!dc)
+ return 0;
+
+ dc->setDefaultDisplayName(tr("Deploy to Maemo device"));
+ dc->stepList()->insertStep(0, new MaemoPackageCreationStep(dc->stepList()));
+ dc->stepList()->insertStep(1, new MaemoDeployStep(dc->stepList()));
+
+ return dc;
+}
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.h
new file mode 100644
index 0000000000..6982725679
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemodeployconfiguration.h
@@ -0,0 +1,53 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
+#define QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
+
+#include <projectexplorer/deployconfiguration.h>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class Target;
+
+class Qt4MaemoDeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
+{
+ Q_OBJECT
+
+public:
+ explicit Qt4MaemoDeployConfigurationFactory(QObject *parent = 0);
+
+ ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, const QString &id);
+};
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif // QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp
new file mode 100644
index 0000000000..bad562040a
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp
@@ -0,0 +1,102 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+
+#include "maemorunconfiguration.h"
+#include "qt4project.h"
+#include "qt4maemotarget.h"
+#include "qt4maemodeployconfiguration.h"
+
+#include <projectexplorer/customexecutablerunconfiguration.h>
+#include <QtGui/QApplication>
+#include <QtGui/QIcon>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+Qt4MaemoTarget::Qt4MaemoTarget(Qt4Project *parent, const QString &id) :
+ Qt4BaseTarget(parent, id),
+ m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this)),
+ m_deployConfigurationFactory(new Qt4MaemoDeployConfigurationFactory(this))
+{
+ setDisplayName(defaultDisplayName());
+ setIcon(QIcon(":/projectexplorer/images/MaemoDevice.png"));
+}
+
+Qt4MaemoTarget::~Qt4MaemoTarget()
+{
+
+}
+
+QString Qt4MaemoTarget::defaultDisplayName()
+{
+ return QApplication::translate("Qt4ProjectManager::Qt4Target", "Maemo", "Qt4 Maemo target display name");
+}
+
+Qt4BuildConfigurationFactory *Qt4MaemoTarget::buildConfigurationFactory() const
+{
+ return m_buildConfigurationFactory;
+}
+
+ProjectExplorer::DeployConfigurationFactory *Qt4MaemoTarget::deployConfigurationFactory() const
+{
+ return m_deployConfigurationFactory;
+}
+
+QString Qt4MaemoTarget::defaultBuildDirectory() const
+{
+ //TODO why?
+#if defined(Q_OS_WIN)
+ return project()->projectDirectory();
+#endif
+ return Qt4BaseTarget::defaultBuildDirectory();
+}
+
+void Qt4MaemoTarget::createApplicationProFiles()
+{
+ removeUnconfiguredCustomExectutableRunConfigurations();
+
+ QList<Qt4ProFileNode *> profiles = qt4Project()->applicationProFiles();
+ QSet<QString> paths;
+ foreach (Qt4ProFileNode *pro, profiles)
+ paths << pro->path();
+
+ foreach (ProjectExplorer::RunConfiguration *rc, runConfigurations())
+ if (MaemoRunConfiguration *qt4rc = qobject_cast<MaemoRunConfiguration *>(rc))
+ paths.remove(qt4rc->proFilePath());
+
+ // Only add new runconfigurations if there are none.
+ foreach (const QString &path, paths)
+ addRunConfiguration(new MaemoRunConfiguration(this, path));
+
+ // Oh still none? Add a custom executable runconfiguration
+ if (runConfigurations().isEmpty()) {
+ addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(this));
+ }
+}
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h
new file mode 100644
index 0000000000..d22918c033
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h
@@ -0,0 +1,64 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4MAEMOTARGET_H
+#define QT4MAEMOTARGET_H
+
+#include "qt4target.h"
+
+namespace Qt4ProjectManager {
+class Qt4Project;
+namespace Internal {
+class Qt4MaemoDeployConfigurationFactory;
+
+class Qt4MaemoTarget : public Qt4BaseTarget
+{
+ friend class Qt4MaemoTargetFactory;
+ Q_OBJECT
+public:
+ explicit Qt4MaemoTarget(Qt4Project *parent, const QString &id);
+ virtual ~Qt4MaemoTarget();
+
+ Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
+ ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
+
+ QString defaultBuildDirectory() const;
+
+ void createApplicationProFiles();
+
+ static QString defaultDisplayName();
+
+private:
+ Internal::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;
+ Internal::Qt4MaemoDeployConfigurationFactory *m_deployConfigurationFactory;
+};
+}
+}
+
+#endif // QT4MAEMOTARGET_H
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp
new file mode 100644
index 0000000000..7e49fb5066
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.cpp
@@ -0,0 +1,178 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "qt4maemotargetfactory.h"
+#include "qt4project.h"
+#include "qt4projectmanagerconstants.h"
+#include "qt-maemo/maemodeploystep.h"
+#include "qt-maemo/maemopackagecreationstep.h"
+#include "qt-maemo/maemorunconfiguration.h"
+#include "qt-maemo/qt4maemotarget.h"
+
+#include <projectexplorer/deployconfiguration.h>
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/customexecutablerunconfiguration.h>
+
+#include <QtGui/QApplication>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+using ProjectExplorer::idFromMap;
+
+// -------------------------------------------------------------------------
+// Qt4MaemoTargetFactory
+// -------------------------------------------------------------------------
+Qt4MaemoTargetFactory::Qt4MaemoTargetFactory(QObject *parent) :
+ Qt4BaseTargetFactory(parent)
+{
+ connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+ this, SIGNAL(supportedTargetIdsChanged()));
+}
+
+Qt4MaemoTargetFactory::~Qt4MaemoTargetFactory()
+{
+}
+
+bool Qt4MaemoTargetFactory::supportsTargetId(const QString &id) const
+{
+ return id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID);
+}
+
+QStringList Qt4MaemoTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return QStringList();
+ if (!QtVersionManager::instance()->supportsTargetId(Constants::MAEMO_DEVICE_TARGET_ID))
+ return QStringList();
+ return QStringList() << QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID);
+}
+
+QString Qt4MaemoTargetFactory::displayNameForId(const QString &id) const
+{
+ if (id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
+ return Qt4MaemoTarget::defaultDisplayName();
+ return QString();
+}
+
+bool Qt4MaemoTargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return false;
+ return supportsTargetId(id);
+}
+
+bool Qt4MaemoTargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
+{
+ return canCreate(parent, idFromMap(map));
+}
+
+Qt4BaseTarget *Qt4MaemoTargetFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
+{
+ if (!canRestore(parent, map))
+ return 0;
+
+ Qt4Project *qt4project = static_cast<Qt4Project *>(parent);
+ Qt4MaemoTarget *target = new Qt4MaemoTarget(qt4project, QLatin1String("transient ID"));
+
+ if (target->fromMap(map))
+ return target;
+ delete target;
+ return 0;
+}
+
+QString Qt4MaemoTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id)
+{
+ if (id != QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
+ return QString();
+
+ // currently we can't have the build directory to be deeper than the source directory
+ // since that is broken in qmake
+ // Once qmake is fixed we can change that to have a top directory and
+ // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') )
+ return projectLocation + QLatin1String("-maemo");
+}
+
+QList<BuildConfigurationInfo> Qt4MaemoTargetFactory::availableBuildConfigurations(const QString &proFilePath)
+{
+ QList<BuildConfigurationInfo> infos;
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(Constants::MAEMO_DEVICE_TARGET_ID);
+
+ foreach (QtVersion *version, knownVersions) {
+ bool buildAll = version->defaultBuildConfig() & QtVersion::BuildAll;
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+ QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), Constants::MAEMO_DEVICE_TARGET_ID);
+ infos.append(BuildConfigurationInfo(version, config, QString(), dir));
+ infos.append(BuildConfigurationInfo(version, config | QtVersion::DebugBuild, QString(), dir));
+ }
+ return infos;
+}
+
+Qt4BaseTarget *Qt4MaemoTargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
+{
+ if (!canCreate(parent, id))
+ return 0;
+
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id);
+ if (knownVersions.isEmpty())
+ return 0;
+
+ QtVersion *qtVersion = knownVersions.first();
+ bool buildAll = qtVersion->isValid() && (qtVersion->defaultBuildConfig() & QtVersion::BuildAll);
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+
+ QList<BuildConfigurationInfo> infos;
+ infos.append(BuildConfigurationInfo(qtVersion, config | QtVersion::DebugBuild, QString(), QString()));
+ infos.append(BuildConfigurationInfo(qtVersion, config, QString(), QString()));
+
+ return create(parent, id, infos);
+}
+
+Qt4BaseTarget *Qt4MaemoTargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos)
+{
+ if (!canCreate(parent, id))
+ return 0;
+ Qt4MaemoTarget *t = new Qt4MaemoTarget(static_cast<Qt4Project *>(parent), id);
+ foreach (const BuildConfigurationInfo &info, infos) {
+ QString displayName = info.version->displayName() + QLatin1Char(' ');
+ displayName += (info.buildConfig & QtVersion::DebugBuild) ? tr("Debug") : tr("Release");
+ t->addQt4BuildConfiguration(displayName,
+ info.version,
+ info.buildConfig,
+ info.additionalArguments,
+ info.directory);
+ }
+
+ t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
+
+ t->createApplicationProFiles();
+
+ if (t->runConfigurations().isEmpty())
+ t->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(t));
+ return t;
+}
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h
new file mode 100644
index 0000000000..d27ce6deda
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt4maemotargetfactory.h
@@ -0,0 +1,63 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4MAEMOTARGETFACTORY_H
+#define QT4MAEMOTARGETFACTORY_H
+
+#include "qt4target.h"
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class Qt4MaemoTargetFactory : public Qt4BaseTargetFactory
+{
+ Q_OBJECT
+public:
+ Qt4MaemoTargetFactory(QObject *parent = 0);
+ ~Qt4MaemoTargetFactory();
+
+ QStringList supportedTargetIds(ProjectExplorer::Project *parent) const;
+ QString displayNameForId(const QString &id) const;
+
+ bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
+ bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
+ Qt4ProjectManager::Qt4BaseTarget *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
+ QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id);
+
+ virtual bool supportsTargetId(const QString &id) const;
+
+ QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &proFilePath);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos);
+};
+
+} // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif // QT4MAEMOTARGETFACTORY_H
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
index ed097c0cee..ebd09902b9 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
+++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
@@ -25,7 +25,10 @@ SOURCES += $$PWD/s60devices.cpp \
$$PWD/s60certificateinfo.cpp \
$$PWD/certificatepathchooser.cpp \
$$PWD/s60symbiancertificate.cpp \
- $$PWD/s60certificatedetailsdialog.cpp
+ $$PWD/s60certificatedetailsdialog.cpp \
+ $$PWD/qt4symbiantargetfactory.cpp \
+ $$PWD/qt4symbiantarget.cpp
+
HEADERS += $$PWD/s60devices.h \
$$PWD/s60devicespreferencepane.h \
$$PWD/s60manager.h \
@@ -50,7 +53,10 @@ HEADERS += $$PWD/s60devices.h \
$$PWD/s60certificateinfo.h \
$$PWD/certificatepathchooser.h \
$$PWD/s60symbiancertificate.h \
- $$PWD/s60certificatedetailsdialog.h
+ $$PWD/s60certificatedetailsdialog.h \
+ $$PWD/qt4symbiantargetfactory.h \
+ $$PWD/qt4symbiantarget.h
+
FORMS += $$PWD/s60devicespreferencepane.ui \
$$PWD/s60createpackagestep.ui \
$$PWD/s60certificatedetailsdialog.ui
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp
new file mode 100644
index 0000000000..9028ac194d
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.cpp
@@ -0,0 +1,247 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "qt4symbiantarget.h"
+#include "qt4projectmanagerconstants.h"
+#include "qt4project.h"
+#include "qt-s60/s60deployconfiguration.h"
+#include "qt-s60/s60emulatorrunconfiguration.h"
+#include "qt-s60/s60devicerunconfiguration.h"
+
+#include <coreplugin/coreconstants.h>
+#include <projectexplorer/project.h>
+#include <projectexplorer/customexecutablerunconfiguration.h>
+#include <symbianutils/symbiandevicemanager.h>
+#include <QtGui/QPainter>
+#include <QtGui/QApplication>
+
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+Qt4SymbianTarget::Qt4SymbianTarget(Qt4Project *parent, const QString &id) :
+ Qt4BaseTarget(parent, id),
+ m_connectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOn.png")),
+ m_disconnectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOff.png")),
+ m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this)),
+ m_deployConfigurationFactory(new S60DeployConfigurationFactory(this))
+{
+ setDisplayName(defaultDisplayName(id));
+ setIcon(iconForId(id));
+ connect(this, SIGNAL(addedDeployConfiguration(ProjectExplorer::DeployConfiguration*)),
+ this, SLOT(onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration*)));
+ connect(this, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)),
+ this, SLOT(updateToolTipAndIcon()));
+}
+
+Qt4SymbianTarget::~Qt4SymbianTarget()
+{
+
+}
+
+QString Qt4SymbianTarget::defaultDisplayName(const QString &id)
+{
+ if (id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
+ return QApplication::translate("Qt4ProjectManager::Qt4Target", "Symbian Emulator", "Qt4 Symbian Emulator target display name");
+ if (id == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
+ return QApplication::translate("Qt4ProjectManager::Qt4Target", "Symbian Device", "Qt4 Symbian Device target display name");
+ return QString();
+}
+
+QIcon Qt4SymbianTarget::iconForId(const QString &id)
+{
+ if (id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
+ return QIcon(":/projectexplorer/images/SymbianEmulator.png");
+ if (id == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
+ return QIcon(":/projectexplorer/images/SymbianDevice.png");
+ return QIcon();
+}
+
+Qt4BuildConfigurationFactory *Qt4SymbianTarget::buildConfigurationFactory() const
+{
+ return m_buildConfigurationFactory;
+}
+
+ProjectExplorer::DeployConfigurationFactory *Qt4SymbianTarget::deployConfigurationFactory() const
+{
+ return m_deployConfigurationFactory;
+}
+
+QList<ProjectExplorer::ToolChainType> Qt4SymbianTarget::filterToolChainTypes(const QList<ProjectExplorer::ToolChainType> &candidates) const
+{
+ QList<ProjectExplorer::ToolChainType> tmp(candidates);
+ if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID)) {
+ if (tmp.contains(ProjectExplorer::ToolChain_WINSCW))
+ return QList<ProjectExplorer::ToolChainType>() << ProjectExplorer::ToolChain_WINSCW;
+ else
+ return QList<ProjectExplorer::ToolChainType>();
+ } else if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID)) {
+ tmp.removeAll(ProjectExplorer::ToolChain_WINSCW);
+ return tmp;
+ }
+ return tmp;
+}
+
+ProjectExplorer::ToolChainType Qt4SymbianTarget::preferredToolChainType(const QList<ProjectExplorer::ToolChainType> &candidates) const
+{
+ ProjectExplorer::ToolChainType preferredType = ProjectExplorer::ToolChain_INVALID;
+ if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID) &&
+ candidates.contains(ProjectExplorer::ToolChain_WINSCW))
+ preferredType = ProjectExplorer::ToolChain_WINSCW;
+ if (!candidates.isEmpty())
+ preferredType = candidates.at(0);
+ return preferredType;
+}
+
+QString Qt4SymbianTarget::defaultBuildDirectory() const
+{
+ return project()->projectDirectory();
+}
+
+void Qt4SymbianTarget::createApplicationProFiles()
+{
+ removeUnconfiguredCustomExectutableRunConfigurations();
+
+ // We use the list twice
+ QList<Qt4ProFileNode *> profiles = qt4Project()->applicationProFiles();
+ QSet<QString> paths;
+ foreach (Qt4ProFileNode *pro, profiles)
+ paths << pro->path();
+
+ if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID)) {
+ foreach (ProjectExplorer::RunConfiguration *rc, runConfigurations())
+ if (S60EmulatorRunConfiguration *qt4rc = qobject_cast<S60EmulatorRunConfiguration *>(rc))
+ paths.remove(qt4rc->proFilePath());
+
+ // Only add new runconfigurations if there are none.
+ foreach (const QString &path, paths)
+ addRunConfiguration(new S60EmulatorRunConfiguration(this, path));
+ } else if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID)) {
+ foreach (ProjectExplorer::RunConfiguration *rc, runConfigurations())
+ if (S60DeviceRunConfiguration *qt4rc = qobject_cast<S60DeviceRunConfiguration *>(rc))
+ paths.remove(qt4rc->proFilePath());
+
+ // Only add new runconfigurations if there are none.
+ foreach (const QString &path, paths)
+ addRunConfiguration(new S60DeviceRunConfiguration(this, path));
+ }
+
+ // Oh still none? Add a custom executable runconfiguration
+ if (runConfigurations().isEmpty()) {
+ addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(this));
+ }
+}
+
+bool Qt4SymbianTarget::isSymbianConnectionAvailable(QString &tooltipText)
+{
+ const S60DeployConfiguration *s60DeployConf = qobject_cast<S60DeployConfiguration *>(activeDeployConfiguration());
+ if (!s60DeployConf)
+ return false;
+ switch (s60DeployConf->communicationChannel()) {
+ case S60DeployConfiguration::CommunicationSerialConnection: {
+ const SymbianUtils::SymbianDeviceManager *sdm = SymbianUtils::SymbianDeviceManager::instance();
+ const int deviceIndex = sdm->findByPortName(s60DeployConf->serialPortName());
+ if (deviceIndex == -1) {
+ tooltipText = tr("<b>Device:</b> Not connected");
+ return false;
+ } else {
+ // device connected
+ const SymbianUtils::SymbianDevice device = sdm->devices().at(deviceIndex);
+ tooltipText = device.additionalInformation().isEmpty() ?
+ tr("<b>Device:</b> %1").arg(device.friendlyName()) :
+ tr("<b>Device:</b> %1, %2").arg(device.friendlyName(), device.additionalInformation());
+ return true;
+ }
+ }
+ break;
+ case S60DeployConfiguration::CommunicationTcpConnection: {
+ if(!s60DeployConf->deviceAddress().isEmpty() && !s60DeployConf->devicePort().isEmpty()) {
+ tooltipText = tr("<b>IP address:</b> %1:%2").arg(s60DeployConf->deviceAddress(), s60DeployConf->devicePort());
+ return true;
+ }
+ return false;
+ }
+ break;
+ default:
+ break;
+ }
+ return false;
+}
+
+void Qt4SymbianTarget::onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc)
+{
+ Q_ASSERT(dc);
+ S60DeployConfiguration *deployConf(qobject_cast<S60DeployConfiguration *>(dc));
+ if (!deployConf)
+ return;
+ connect(deployConf, SIGNAL(serialPortNameChanged()),
+ this, SLOT(slotUpdateDeviceInformation()));
+ connect(deployConf, SIGNAL(communicationChannelChanged()),
+ this, SLOT(slotUpdateDeviceInformation()));
+ connect(deployConf, SIGNAL(deviceAddressChanged()),
+ this, SLOT(slotUpdateDeviceInformation()));
+ connect(deployConf, SIGNAL(devicePortChanged()),
+ this, SLOT(slotUpdateDeviceInformation()));
+}
+
+void Qt4SymbianTarget::slotUpdateDeviceInformation()
+{
+ S60DeployConfiguration *dc(qobject_cast<S60DeployConfiguration *>(sender()));
+ if (dc && dc == activeDeployConfiguration()) {
+ updateToolTipAndIcon();
+ }
+}
+
+void Qt4SymbianTarget::updateToolTipAndIcon()
+{
+ static const int TARGET_OVERLAY_ORIGINAL_SIZE = 32;
+
+ if (qobject_cast<S60DeployConfiguration *>(activeDeployConfiguration())) {
+ QPixmap overlay;
+ QString tooltip;
+ if (isSymbianConnectionAvailable(tooltip))
+ overlay = m_connectedPixmap;
+ else
+ overlay = m_disconnectedPixmap;
+ setToolTip(tooltip);
+
+ double factor = Core::Constants::TARGET_ICON_SIZE / (double)TARGET_OVERLAY_ORIGINAL_SIZE;
+ QSize overlaySize(overlay.size().width()*factor, overlay.size().height()*factor);
+ QPixmap pixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE);
+ pixmap.fill(Qt::transparent);
+ QPainter painter(&pixmap);
+ painter.drawPixmap(Core::Constants::TARGET_ICON_SIZE - overlaySize.width(),
+ Core::Constants::TARGET_ICON_SIZE - overlaySize.height(),
+ overlay.scaled(overlaySize));
+
+ setOverlayIcon(QIcon(pixmap));
+ } else {
+ setToolTip(QString());
+ setOverlayIcon(QIcon());
+ }
+}
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h
new file mode 100644
index 0000000000..e4a2c9225b
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantarget.h
@@ -0,0 +1,79 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#ifndef QT4SYMBIANTARGET_H
+#define QT4SYMBIANTARGET_H
+
+#include "qt4target.h"
+
+#include <QtGui/QPixmap>
+
+namespace Qt4ProjectManager {
+class Qt4Project;
+namespace Internal {
+
+
+class Qt4SymbianTarget : public Qt4BaseTarget
+{
+ friend class Qt4SymbianTargetFactory; // for from Map
+ Q_OBJECT
+public:
+ explicit Qt4SymbianTarget(Qt4Project *parent, const QString &id);
+ virtual ~Qt4SymbianTarget();
+
+ Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
+ ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
+
+ QList<ProjectExplorer::ToolChainType> filterToolChainTypes(const QList<ProjectExplorer::ToolChainType> &candidates) const;
+ ProjectExplorer::ToolChainType preferredToolChainType(const QList<ProjectExplorer::ToolChainType> &candidates) const;
+
+ QString defaultBuildDirectory() const;
+
+ void createApplicationProFiles();
+
+ static QString defaultDisplayName(const QString &id);
+ static QIcon iconForId(const QString &id);
+private:
+ bool isSymbianConnectionAvailable(QString &tooltipText);
+
+private slots:
+ void onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc);
+ void slotUpdateDeviceInformation();
+ void updateToolTipAndIcon();
+
+private:
+ const QPixmap m_connectedPixmap;
+ const QPixmap m_disconnectedPixmap;
+
+ Internal::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;
+ ProjectExplorer::DeployConfigurationFactory *m_deployConfigurationFactory;
+};
+} // namespace Internal
+} // namespace Qt4ProjectManager
+#endif // QT4SYMBIANTARGET_H
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
new file mode 100644
index 0000000000..901a0ec70b
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp
@@ -0,0 +1,196 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "qt4symbiantargetfactory.h"
+#include "qt4projectmanagerconstants.h"
+#include "qt4project.h"
+
+#include "qt-s60/s60deployconfiguration.h"
+#include "qt-s60/s60devicerunconfiguration.h"
+#include "qt-s60/s60emulatorrunconfiguration.h"
+#include "qt-s60/s60createpackagestep.h"
+#include "qt-s60/s60deploystep.h"
+#include "qt-s60/qt4symbiantarget.h"
+
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/customexecutablerunconfiguration.h>
+
+using ProjectExplorer::idFromMap;
+using namespace Qt4ProjectManager;
+using namespace Qt4ProjectManager::Internal;
+
+// -------------------------------------------------------------------------
+// Qt4SymbianTargetFactory
+// -------------------------------------------------------------------------
+
+Qt4SymbianTargetFactory::Qt4SymbianTargetFactory(QObject *parent) :
+ Qt4BaseTargetFactory(parent)
+{
+ connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
+ this, SIGNAL(supportedTargetIdsChanged()));
+}
+
+Qt4SymbianTargetFactory::~Qt4SymbianTargetFactory()
+{
+}
+
+bool Qt4SymbianTargetFactory::supportsTargetId(const QString &id) const
+{
+ return id == QLatin1String(Constants::S60_DEVICE_TARGET_ID)
+ || id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID);
+}
+
+QStringList Qt4SymbianTargetFactory::supportedTargetIds(ProjectExplorer::Project *parent) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return QStringList();
+
+ QStringList ids;
+ if (QtVersionManager::instance()->supportsTargetId(Constants::S60_DEVICE_TARGET_ID))
+ ids << QLatin1String(Constants::S60_DEVICE_TARGET_ID);
+ if (QtVersionManager::instance()->supportsTargetId(Constants::S60_EMULATOR_TARGET_ID))
+ ids << QLatin1String(Constants::S60_EMULATOR_TARGET_ID);
+
+ return ids;
+}
+
+QString Qt4SymbianTargetFactory::displayNameForId(const QString &id) const
+{
+ return Qt4SymbianTarget::defaultDisplayName(id);
+}
+
+bool Qt4SymbianTargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
+{
+ if (!qobject_cast<Qt4Project *>(parent))
+ return false;
+ return supportsTargetId(id);
+}
+
+bool Qt4SymbianTargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
+{
+ return canCreate(parent, idFromMap(map));
+}
+
+Qt4BaseTarget *Qt4SymbianTargetFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
+{
+ if (!canRestore(parent, map))
+ return 0;
+
+ Qt4Project *qt4project = static_cast<Qt4Project *>(parent);
+ Qt4SymbianTarget *target = new Qt4SymbianTarget(qt4project, idFromMap(map));
+
+ if (target->fromMap(map))
+ return target;
+ delete target;
+ return 0;
+}
+
+QString Qt4SymbianTargetFactory::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id)
+{
+ QString shortName = QLatin1String("unknown");
+ if (id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
+ shortName = QLatin1String("symbian_emulator");
+ else if (id == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
+ shortName = QLatin1String("symbian");
+
+ // currently we can't have the build directory to be deeper than the source directory
+ // since that is broken in qmake
+ // Once qmake is fixed we can change that to have a top directory and
+ // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') )
+ return projectLocation + QChar('-') + shortName;
+}
+
+QList<BuildConfigurationInfo> Qt4SymbianTargetFactory::availableBuildConfigurations(const QString &proFilePath)
+{
+ QList<BuildConfigurationInfo> infos;
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(Constants::S60_EMULATOR_TARGET_ID);
+
+ foreach (QtVersion *version, knownVersions) {
+ bool buildAll = version->defaultBuildConfig() & QtVersion::BuildAll;
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+ QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), Constants::S60_EMULATOR_TARGET_ID);
+ infos.append(BuildConfigurationInfo(version, config | QtVersion::DebugBuild, QString(), dir));
+ }
+
+ knownVersions = QtVersionManager::instance()->versionsForTargetId(Constants::S60_DEVICE_TARGET_ID);
+ foreach (QtVersion *version, knownVersions) {
+ bool buildAll = version->defaultBuildConfig() & QtVersion::BuildAll;
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+ QString dir = defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(proFilePath), Constants::S60_DEVICE_TARGET_ID);
+ infos.append(BuildConfigurationInfo(version, config, QString(), dir));
+ infos.append(BuildConfigurationInfo(version, config | QtVersion::DebugBuild, QString(), dir));
+ }
+
+ return infos;
+}
+
+Qt4BaseTarget *Qt4SymbianTargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
+{
+ if (!canCreate(parent, id))
+ return 0;
+
+ QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id);
+ if (knownVersions.isEmpty())
+ return 0;
+
+ QtVersion *qtVersion = knownVersions.first();
+ bool buildAll = qtVersion->isValid() && (qtVersion->defaultBuildConfig() & QtVersion::BuildAll);
+ QtVersion::QmakeBuildConfigs config = buildAll ? QtVersion::BuildAll : QtVersion::QmakeBuildConfig(0);
+
+ QList<BuildConfigurationInfo> infos;
+ infos.append(BuildConfigurationInfo(qtVersion, config | QtVersion::DebugBuild, QString(), QString()));
+ if (id != Constants::S60_EMULATOR_TARGET_ID)
+ infos.append(BuildConfigurationInfo(qtVersion, config, QString(), QString()));
+
+ return create(parent, id, infos);
+}
+
+Qt4BaseTarget *Qt4SymbianTargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos)
+{
+ if (!canCreate(parent, id))
+ return 0;
+ Qt4SymbianTarget *t = new Qt4SymbianTarget(static_cast<Qt4Project *>(parent), id);
+ foreach (const BuildConfigurationInfo &info, infos) {
+ QString displayName = info.version->displayName() + QLatin1Char(' ');
+ displayName += (info.buildConfig & QtVersion::DebugBuild) ? tr("Debug") : tr("Release");
+ t->addQt4BuildConfiguration(displayName,
+ info.version,
+ info.buildConfig,
+ info.additionalArguments,
+ info.directory);
+ }
+
+ t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
+
+ t->createApplicationProFiles();
+
+ if (t->runConfigurations().isEmpty())
+ t->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(t));
+ return t;
+}
diff --git a/src/plugins/qt4projectmanager/qt4deployconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h
index 46b21acfcb..dbb5af9f3c 100644
--- a/src/plugins/qt4projectmanager/qt4deployconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h
@@ -31,36 +31,37 @@
**
**************************************************************************/
-#ifndef QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
-#define QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
+#ifndef QT4SYMBIANTARGETFACTORY_H
+#define QT4SYMBIANTARGETFACTORY_H
-#include <projectexplorer/deployconfiguration.h>
+#include "qt4target.h"
namespace Qt4ProjectManager {
namespace Internal {
-
-class Target;
-class S60DeployConfigurationFactory;
-
-class Qt4DeployConfigurationFactory : public ProjectExplorer::DeployConfigurationFactory
+class Qt4SymbianTargetFactory : public Qt4BaseTargetFactory
{
Q_OBJECT
-
public:
- explicit Qt4DeployConfigurationFactory(QObject *parent = 0);
+ Qt4SymbianTargetFactory(QObject *parent = 0);
+ ~Qt4SymbianTargetFactory();
- ProjectExplorer::DeployConfiguration *create(ProjectExplorer::Target *parent, const QString &id);
- bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
- ProjectExplorer::DeployConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
- bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *product) const;
- ProjectExplorer::DeployConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *product);
+ QStringList supportedTargetIds(ProjectExplorer::Project *parent) const;
+ bool supportsTargetId(const QString &id) const;
+ QString displayNameForId(const QString &id) const;
-private:
- S60DeployConfigurationFactory *m_s60DeployConfigurationFactory;
+ bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
+ bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
+ Qt4ProjectManager::Qt4BaseTarget *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id);
+ Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos);
+
+ QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id);
+ QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &proFilePath);
};
} // namespace Internal
} // namespace Qt4ProjectManager
-#endif // QT4PROJECTMANAGER_QT4DEPLOYCONFIGURATION_H
+
+#endif // QT4SYMBIANTARGETFACTORY_H
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp
index fcbf9f6ddd..22a0ede8f0 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp
@@ -37,11 +37,14 @@
#include "qt4target.h"
#include "qt4projectmanagerconstants.h"
#include "qt4buildconfiguration.h"
+#include "qt4symbiantarget.h"
#include "s60createpackagestep.h"
+#include "s60deploystep.h"
#include <utils/qtcassert.h>
#include <symbianutils/symbiandevicemanager.h>
+#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/project.h>
@@ -278,9 +281,8 @@ QString S60DeployConfiguration::symbianTarget() const
const QtVersion *S60DeployConfiguration::qtVersion() const
{
- if (const BuildConfiguration *bc = target()->activeBuildConfiguration())
- if (const Qt4BuildConfiguration *qt4bc = qobject_cast<const Qt4BuildConfiguration *>(bc))
- return qt4bc->qtVersion();
+ if (const Qt4BuildConfiguration *qt4bc = qt4Target()->activeBuildConfiguration())
+ return qt4bc->qtVersion();
return 0;
}
@@ -342,9 +344,9 @@ bool S60DeployConfiguration::fromMap(const QVariantMap &map)
return true;
}
-Qt4Target *S60DeployConfiguration::qt4Target() const
+Qt4SymbianTarget *S60DeployConfiguration::qt4Target() const
{
- return static_cast<Qt4Target *>(target());
+ return static_cast<Qt4SymbianTarget *>(target());
}
QString S60DeployConfiguration::serialPortName() const
@@ -436,7 +438,7 @@ S60DeployConfigurationFactory::~S60DeployConfigurationFactory()
QStringList S60DeployConfigurationFactory::availableCreationIds(Target *parent) const
{
- Qt4Target *target = qobject_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget *target = qobject_cast<Qt4SymbianTarget *>(parent);
if (!target ||
target->id() != QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return QStringList();
@@ -456,13 +458,18 @@ DeployConfiguration *S60DeployConfigurationFactory::create(Target *parent, const
if (!canCreate(parent, id))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
- return new S60DeployConfiguration(t);
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
+ S60DeployConfiguration *dc = new S60DeployConfiguration(t);
+
+ dc->setDefaultDisplayName(tr("Deploy to Symbian device"));
+ dc->stepList()->insertStep(0, new S60CreatePackageStep(dc->stepList()));
+ dc->stepList()->insertStep(1, new S60DeployStep(dc->stepList()));
+ return dc;
}
bool S60DeployConfigurationFactory::canCreate(Target *parent, const QString& /*id*/) const
{
- Qt4Target *t = qobject_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget * t = qobject_cast<Qt4SymbianTarget *>(parent);
if (!t || t->id() != QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return false;
return true;
@@ -470,7 +477,7 @@ bool S60DeployConfigurationFactory::canCreate(Target *parent, const QString& /*i
bool S60DeployConfigurationFactory::canRestore(Target *parent, const QVariantMap& /*map*/) const
{
- Qt4Target *t = qobject_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget * t = qobject_cast<Qt4SymbianTarget *>(parent);
return t && t->id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID);
}
@@ -478,8 +485,8 @@ DeployConfiguration *S60DeployConfigurationFactory::restore(Target *parent, cons
{
if (!canRestore(parent, map))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
- S60DeployConfiguration *dc(new S60DeployConfiguration(t));
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
+ S60DeployConfiguration *dc = new S60DeployConfiguration(t);
if (dc->fromMap(map))
return dc;
@@ -489,7 +496,7 @@ DeployConfiguration *S60DeployConfigurationFactory::restore(Target *parent, cons
bool S60DeployConfigurationFactory::canClone(Target *parent, DeployConfiguration *source) const
{
- if (!qobject_cast<Qt4Target *>(parent))
+ if (!qobject_cast<Qt4SymbianTarget *>(parent))
return false;
return source->id() == QLatin1String(S60_DC_ID);
}
@@ -498,7 +505,7 @@ DeployConfiguration *S60DeployConfigurationFactory::clone(Target *parent, Deploy
{
if (!canClone(parent, source))
return 0;
- Qt4Target *t = static_cast<Qt4Target *>(parent);
- S60DeployConfiguration *old = static_cast<S60DeployConfiguration *>(source);
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
+ S60DeployConfiguration * old = static_cast<S60DeployConfiguration *>(source);
return new S60DeployConfiguration(t, old);
}
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h
index 1f2b780e4d..1348870774 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h
@@ -44,9 +44,9 @@ class RunConfiguration;
namespace Qt4ProjectManager {
class QtVersion;
-class Qt4Target;
namespace Internal {
+class Qt4SymbianTarget;
class Qt4ProFileNode;
class S60DeployConfigurationFactory;
class S60DeviceRunConfiguration;
@@ -70,7 +70,7 @@ public:
ProjectExplorer::DeployConfigurationWidget *configurationWidget() const;
const QtVersion *qtVersion() const;
- Qt4Target *qt4Target() const;
+ Qt4SymbianTarget *qt4Target() const;
ProjectExplorer::ToolChainType toolChainType() const;
QString serialPortName() const;
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 8c727672c5..f873bab995 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -41,6 +41,7 @@
#include "s60runconfigbluetoothstarter.h"
#include "qt4projectmanagerconstants.h"
#include "qtoutputformatter.h"
+#include "qt4symbiantarget.h"
#include "tcftrkdevice.h"
#include "tcftrkmessage.h"
@@ -126,7 +127,7 @@ bool isProcessRunning(const TcfTrkCommandResult &result, const QString &processN
// ======== S60DeviceRunConfiguration
-S60DeviceRunConfiguration::S60DeviceRunConfiguration(Qt4Target *parent, const QString &proFilePath) :
+S60DeviceRunConfiguration::S60DeviceRunConfiguration(Qt4BaseTarget *parent, const QString &proFilePath) :
RunConfiguration(parent, QLatin1String(S60_DEVICE_RC_ID)),
m_proFilePath(proFilePath),
m_validParse(parent->qt4Project()->validParse(proFilePath))
@@ -134,7 +135,7 @@ S60DeviceRunConfiguration::S60DeviceRunConfiguration(Qt4Target *parent, const QS
ctor();
}
-S60DeviceRunConfiguration::S60DeviceRunConfiguration(Qt4Target *target, S60DeviceRunConfiguration *source) :
+S60DeviceRunConfiguration::S60DeviceRunConfiguration(Qt4BaseTarget *target, S60DeviceRunConfiguration *source) :
RunConfiguration(target, source),
m_proFilePath(source->m_proFilePath),
m_commandLineArguments(source->m_commandLineArguments),
@@ -186,9 +187,9 @@ S60DeviceRunConfiguration::~S60DeviceRunConfiguration()
{
}
-Qt4Target *S60DeviceRunConfiguration::qt4Target() const
+Qt4SymbianTarget *S60DeviceRunConfiguration::qt4Target() const
{
- return static_cast<Qt4Target *>(target());
+ return static_cast<Qt4SymbianTarget *>(target());
}
ProjectExplorer::ToolChainType S60DeviceRunConfiguration::toolChainType(
@@ -428,6 +429,11 @@ void S60DeviceRunConfiguration::setCommandLineArguments(const QString &args)
m_commandLineArguments = args;
}
+QString S60DeviceRunConfiguration::proFilePath() const
+{
+ return m_proFilePath;
+}
+
// ======== S60DeviceRunConfigurationFactory
S60DeviceRunConfigurationFactory::S60DeviceRunConfigurationFactory(QObject *parent) :
@@ -441,7 +447,7 @@ S60DeviceRunConfigurationFactory::~S60DeviceRunConfigurationFactory()
QStringList S60DeviceRunConfigurationFactory::availableCreationIds(Target *parent) const
{
- Qt4Target *target = qobject_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget *target = qobject_cast<Qt4SymbianTarget *>(parent);
if (!target || target->id() != QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return QStringList();
@@ -457,7 +463,7 @@ QString S60DeviceRunConfigurationFactory::displayNameForId(const QString &id) co
bool S60DeviceRunConfigurationFactory::canCreate(Target *parent, const QString &id) const
{
- Qt4Target *t = qobject_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget *t = qobject_cast<Qt4SymbianTarget *>(parent);
if (!t || t->id() != QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return false;
return t->qt4Project()->hasApplicationProFile(pathFromId(id));
@@ -468,13 +474,13 @@ RunConfiguration *S60DeviceRunConfigurationFactory::create(Target *parent, const
if (!canCreate(parent, id))
return 0;
- Qt4Target *t = static_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
return new S60DeviceRunConfiguration(t, pathFromId(id));
}
bool S60DeviceRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
{
- Qt4Target *t = qobject_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget *t = qobject_cast<Qt4SymbianTarget *>(parent);
if (!t || t->id() != QLatin1String(Constants::S60_DEVICE_TARGET_ID))
return false;
QString id = ProjectExplorer::idFromMap(map);
@@ -485,8 +491,8 @@ RunConfiguration *S60DeviceRunConfigurationFactory::restore(Target *parent, cons
{
if (!canRestore(parent, map))
return 0;
- Qt4Target *t = static_cast<Qt4Target *>(parent);
- S60DeviceRunConfiguration *rc(new S60DeviceRunConfiguration(t, QString()));
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
+ S60DeviceRunConfiguration *rc = new S60DeviceRunConfiguration(t, QString());
if (rc->fromMap(map))
return rc;
@@ -496,7 +502,7 @@ RunConfiguration *S60DeviceRunConfigurationFactory::restore(Target *parent, cons
bool S60DeviceRunConfigurationFactory::canClone(Target *parent, RunConfiguration *source) const
{
- if (!qobject_cast<Qt4Target *>(parent))
+ if (!qobject_cast<Qt4SymbianTarget *>(parent))
return false;
return source->id() == QLatin1String(S60_DEVICE_RC_ID);
}
@@ -505,7 +511,7 @@ RunConfiguration *S60DeviceRunConfigurationFactory::clone(Target *parent, RunCon
{
if (!canClone(parent, source))
return 0;
- Qt4Target *t = static_cast<Qt4Target *>(parent);
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
S60DeviceRunConfiguration *old = static_cast<S60DeviceRunConfiguration *>(source);
return new S60DeviceRunConfiguration(t, old);
}
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index ba355fa12e..e5f02d951b 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -66,9 +66,10 @@ class TcfTrkEvent;
namespace Qt4ProjectManager {
class QtVersion;
-class Qt4Target;
+class Qt4BaseTarget;
namespace Internal {
+class Qt4SymbianTarget;
class Qt4ProFileNode;
class S60DeviceRunConfigurationFactory;
@@ -78,10 +79,10 @@ class S60DeviceRunConfiguration : public ProjectExplorer::RunConfiguration
friend class S60DeviceRunConfigurationFactory;
public:
- S60DeviceRunConfiguration(Qt4ProjectManager::Qt4Target *parent, const QString &proFilePath);
+ S60DeviceRunConfiguration(Qt4ProjectManager::Qt4BaseTarget *parent, const QString &proFilePath);
virtual ~S60DeviceRunConfiguration();
- Qt4Target *qt4Target() const;
+ Qt4SymbianTarget *qt4Target() const;
const QtVersion *qtVersion() const;
using ProjectExplorer::RunConfiguration::isEnabled;
@@ -106,11 +107,12 @@ public:
QVariantMap toMap() const;
+ QString proFilePath() const;
signals:
void targetInformationChanged();
protected:
- S60DeviceRunConfiguration(Qt4ProjectManager::Qt4Target *parent, S60DeviceRunConfiguration *source);
+ S60DeviceRunConfiguration(Qt4ProjectManager::Qt4BaseTarget *parent, S60DeviceRunConfiguration *source);
QString defaultDisplayName() const;
virtual bool fromMap(const QVariantMap &map);
private slots:
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
index 0d41bdb638..a6e8728c8f 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp
@@ -36,6 +36,7 @@
#include "qt4project.h"
#include "qt4target.h"
#include "s60manager.h"
+#include "qt4symbiantarget.h"
#include "qt4projectmanagerconstants.h"
#include "qtoutputformatter.h"
@@ -72,7 +73,7 @@ QString pathToId(const QString &path)
// ======== S60EmulatorRunConfiguration
-S60EmulatorRunConfiguration::S60EmulatorRunConfiguration(Qt4Target *parent, const QString &proFilePath) :
+S60EmulatorRunConfiguration::S60EmulatorRunConfiguration(Qt4BaseTarget *parent, const QString &proFilePath) :
RunConfiguration(parent, QLatin1String(S60_EMULATOR_RC_ID)),
m_proFilePath(proFilePath),
m_validParse(parent->qt4Project()->validParse(proFilePath))
@@ -80,7 +81,7 @@ S60EmulatorRunConfiguration::S60EmulatorRunConfiguration(Qt4Target *parent, cons
ctor();
}
-S60EmulatorRunConfiguration::S60EmulatorRunConfiguration(Qt4Target *parent, S60EmulatorRunConfiguration *source) :
+S60EmulatorRunConfiguration::S60EmulatorRunConfiguration(Qt4BaseTarget *parent, S60EmulatorRunConfiguration *source) :
RunConfiguration(parent, source),
m_proFilePath(source->m_proFilePath),
m_validParse(source->m_validParse)
@@ -132,9 +133,9 @@ void S60EmulatorRunConfiguration::proFileUpdate(Qt4ProjectManager::Internal::Qt4
emit targetInformationChanged();
}
-Qt4Target *S60EmulatorRunConfiguration::qt4Target() const
+Qt4SymbianTarget *S60EmulatorRunConfiguration::qt4Target() const
{
- return static_cast<Qt4Target *>(target());
+ return static_cast<Qt4SymbianTarget *>(target());
}
bool S60EmulatorRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const
@@ -200,6 +201,11 @@ QString S60EmulatorRunConfiguration::executable() const
return executable;
}
+QString S60EmulatorRunConfiguration::proFilePath() const
+{
+ return m_proFilePath;
+}
+
// ======== S60EmulatorRunConfigurationWidget
S60EmulatorRunConfigurationWidget::S60EmulatorRunConfigurationWidget(S60EmulatorRunConfiguration *runConfiguration,
@@ -255,7 +261,7 @@ S60EmulatorRunConfigurationFactory::~S60EmulatorRunConfigurationFactory()
bool S60EmulatorRunConfigurationFactory::canCreate(Target *parent, const QString &id) const
{
- Qt4Target * t(qobject_cast<Qt4Target *>(parent));
+ Qt4SymbianTarget *t = qobject_cast<Qt4SymbianTarget *>(parent);
if (!t ||
t->id() != QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
return false;
@@ -266,13 +272,13 @@ RunConfiguration *S60EmulatorRunConfigurationFactory::create(Target *parent, con
{
if (!canCreate(parent, id))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
return new S60EmulatorRunConfiguration(t, pathFromId(id));
}
bool S60EmulatorRunConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
{
- Qt4Target * t(qobject_cast<Qt4Target *>(parent));
+ Qt4SymbianTarget *t = qobject_cast<Qt4SymbianTarget *>(parent);
if (!t ||
t->id() != QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
return false;
@@ -284,8 +290,8 @@ RunConfiguration *S60EmulatorRunConfigurationFactory::restore(Target *parent, co
{
if (!canRestore(parent, map))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
- S60EmulatorRunConfiguration *rc(new S60EmulatorRunConfiguration(t, QString()));
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
+ S60EmulatorRunConfiguration *rc = new S60EmulatorRunConfiguration(t, QString());
if (rc->fromMap(map))
return rc;
delete rc;
@@ -301,13 +307,13 @@ RunConfiguration *S60EmulatorRunConfigurationFactory::clone(Target *parent, RunC
{
if (!canClone(parent, source))
return 0;
- Qt4Target *t(static_cast<Qt4Target *>(parent));
+ Qt4SymbianTarget *t = static_cast<Qt4SymbianTarget *>(parent);
return new S60EmulatorRunConfiguration(t, QString());
}
QStringList S60EmulatorRunConfigurationFactory::availableCreationIds(Target *parent) const
{
- Qt4Target * t(qobject_cast<Qt4Target *>(parent));
+ Qt4SymbianTarget *t = qobject_cast<Qt4SymbianTarget *>(parent);
if (!t ||
t->id() != QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
return QStringList();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
index b2a8faee71..d81e7d2f17 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
@@ -51,9 +51,10 @@ class DetailsWidget;
namespace Qt4ProjectManager {
class Qt4Project;
-class Qt4Target;
+class Qt4BaseTarget;
namespace Internal {
+class Qt4SymbianTarget;
class Qt4ProFileNode;
class S60EmulatorRunConfigurationFactory;
@@ -63,10 +64,10 @@ class S60EmulatorRunConfiguration : public ProjectExplorer::RunConfiguration
friend class S60EmulatorRunConfigurationFactory;
public:
- S60EmulatorRunConfiguration(Qt4ProjectManager::Qt4Target *parent, const QString &proFilePath);
+ S60EmulatorRunConfiguration(Qt4ProjectManager::Qt4BaseTarget *parent, const QString &proFilePath);
virtual ~S60EmulatorRunConfiguration();
- Qt4Target *qt4Target() const;
+ Qt4SymbianTarget *qt4Target() const;
using ProjectExplorer::RunConfiguration::isEnabled;
bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const;
@@ -78,6 +79,8 @@ public:
QVariantMap toMap() const;
+ QString proFilePath() const;
+
signals:
void targetInformationChanged();
@@ -86,7 +89,7 @@ private slots:
void proFileInvalidated(Qt4ProjectManager::Internal::Qt4ProFileNode *pro);
protected:
- S60EmulatorRunConfiguration(Qt4ProjectManager::Qt4Target *parent, S60EmulatorRunConfiguration *source);
+ S60EmulatorRunConfiguration(Qt4ProjectManager::Qt4BaseTarget *parent, S60EmulatorRunConfiguration *source);
virtual bool fromMap(const QVariantMap &map);
private:
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
index e3fb186b25..cafee45fb7 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
@@ -42,6 +42,7 @@
#include "s60devicerunconfiguration.h"
#include "s60createpackagestep.h"
#include "s60deploystep.h"
+#include "qt4symbiantargetfactory.h"
#include <symbianutils/symbiandevicemanager.h>
@@ -130,6 +131,8 @@ S60Manager::S60Manager(QObject *parent)
S60DeviceRunConfiguration>
(QLatin1String(Debugger::Constants::DEBUGMODE),
tr("Debug on Device"), parent));
+ addAutoReleasedObject(new Qt4SymbianTargetFactory);
+
updateQtVersions();
connect(m_devices, SIGNAL(qtVersionsChanged()),
this, SLOT(updateQtVersions()));
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index e94a77124e..d8b399eaf4 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -67,7 +67,7 @@ const char * const QT_VERSION_ID_KEY("Qt4ProjectManager.Qt4BuildConfiguration.Qt
enum { debug = 0 };
}
-Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target) :
+Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4BaseTarget *target) :
BuildConfiguration(target, QLatin1String(QT4_BC_ID)),
m_shadowBuild(true),
m_qtVersionId(-1),
@@ -78,7 +78,7 @@ Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target) :
ctor();
}
-Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target, const QString &id) :
+Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4BaseTarget *target, const QString &id) :
BuildConfiguration(target, id),
m_shadowBuild(true),
m_qtVersionId(-1),
@@ -89,7 +89,7 @@ Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target, const QString &i
ctor();
}
-Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Target *target, Qt4BuildConfiguration *source) :
+Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4BaseTarget *target, Qt4BuildConfiguration *source) :
BuildConfiguration(target, source),
m_shadowBuild(source->m_shadowBuild),
m_buildDirectory(source->m_buildDirectory),
@@ -205,9 +205,9 @@ void Qt4BuildConfiguration::pickValidQtVersion()
setQtVersion(QtVersionManager::instance()->emptyVersion());
}
-Qt4Target *Qt4BuildConfiguration::qt4Target() const
+Qt4BaseTarget *Qt4BuildConfiguration::qt4Target() const
{
- return static_cast<Qt4Target *>(target());
+ return static_cast<Qt4BaseTarget *>(target());
}
Utils::Environment Qt4BuildConfiguration::baseEnvironment() const
@@ -687,7 +687,7 @@ void Qt4BuildConfigurationFactory::update()
QStringList Qt4BuildConfigurationFactory::availableCreationIds(ProjectExplorer::Target *parent) const
{
- if (!qobject_cast<Qt4Target *>(parent))
+ if (!qobject_cast<Qt4BaseTarget *>(parent))
return QStringList();
QStringList results;
@@ -709,7 +709,7 @@ QString Qt4BuildConfigurationFactory::displayNameForId(const QString &id) const
bool Qt4BuildConfigurationFactory::canCreate(ProjectExplorer::Target *parent, const QString &id) const
{
- if (!qobject_cast<Qt4Target *>(parent))
+ if (!qobject_cast<Qt4BaseTarget *>(parent))
return false;
if (!m_versions.contains(id))
return false;
@@ -730,7 +730,7 @@ BuildConfiguration *Qt4BuildConfigurationFactory::create(ProjectExplorer::Target
QtVersion *version = QtVersionManager::instance()->version(info.versionId);
Q_ASSERT(version);
- Qt4Target *qt4Target = static_cast<Qt4Target *>(parent);
+ Qt4BaseTarget *qt4Target = static_cast<Qt4BaseTarget *>(parent);
bool ok;
QString buildConfigurationName = QInputDialog::getText(0,
@@ -757,7 +757,7 @@ BuildConfiguration *Qt4BuildConfigurationFactory::create(ProjectExplorer::Target
bool Qt4BuildConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::BuildConfiguration *source) const
{
- if (!qobject_cast<Qt4Target *>(parent))
+ if (!qobject_cast<Qt4BaseTarget *>(parent))
return false;
Qt4BuildConfiguration *qt4bc(qobject_cast<Qt4BuildConfiguration *>(source));
if (!qt4bc)
@@ -774,15 +774,15 @@ BuildConfiguration *Qt4BuildConfigurationFactory::clone(Target *parent, BuildCon
{
if (!canClone(parent, source))
return 0;
- Qt4Target *target(static_cast<Qt4Target *>(parent));
+ Qt4BaseTarget *target = static_cast<Qt4BaseTarget *>(parent);
Qt4BuildConfiguration *oldbc(static_cast<Qt4BuildConfiguration *>(source));
return new Qt4BuildConfiguration(target, oldbc);
}
bool Qt4BuildConfigurationFactory::canRestore(Target *parent, const QVariantMap &map) const
{
- QString id(ProjectExplorer::idFromMap(map));
- if (!qobject_cast<Qt4Target *>(parent))
+ QString id = ProjectExplorer::idFromMap(map);
+ if (!qobject_cast<Qt4BaseTarget *>(parent))
return false;
return id.startsWith(QLatin1String(QT4_BC_ID_PREFIX)) ||
id == QLatin1String(QT4_BC_ID);
@@ -792,8 +792,8 @@ BuildConfiguration *Qt4BuildConfigurationFactory::restore(Target *parent, const
{
if (!canRestore(parent, map))
return 0;
- Qt4Target *target(static_cast<Qt4Target *>(parent));
- Qt4BuildConfiguration *bc(new Qt4BuildConfiguration(target));
+ Qt4BaseTarget *target = static_cast<Qt4BaseTarget *>(parent);
+ Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(target);
if (bc->fromMap(map))
return bc;
delete bc;
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index 449dfa1ef5..b7bf7c6392 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -47,7 +47,7 @@ namespace Qt4ProjectManager {
class QMakeStep;
class MakeStep;
-class Qt4Target;
+class Qt4BaseTarget;
namespace Internal {
class Qt4ProFileNode;
@@ -60,10 +60,10 @@ class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration
friend class Internal::Qt4BuildConfigurationFactory;
public:
- explicit Qt4BuildConfiguration(Qt4Target *target);
+ explicit Qt4BuildConfiguration(Qt4BaseTarget *target);
virtual ~Qt4BuildConfiguration();
- Qt4Target *qt4Target() const;
+ Qt4BaseTarget *qt4Target() const;
virtual Utils::Environment baseEnvironment() const;
@@ -150,8 +150,8 @@ private slots:
void emitBuildDirectoryChanged();
protected:
- Qt4BuildConfiguration(Qt4Target *target, Qt4BuildConfiguration *source);
- Qt4BuildConfiguration(Qt4Target *target, const QString &id);
+ Qt4BuildConfiguration(Qt4BaseTarget *target, Qt4BuildConfiguration *source);
+ Qt4BuildConfiguration(Qt4BaseTarget *target, const QString &id);
virtual bool fromMap(const QVariantMap &map);
private:
diff --git a/src/plugins/qt4projectmanager/qt4deployconfiguration.cpp b/src/plugins/qt4projectmanager/qt4deployconfiguration.cpp
deleted file mode 100644
index 7495f9e2c5..0000000000
--- a/src/plugins/qt4projectmanager/qt4deployconfiguration.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/**************************************************************************
-**
-** This file is part of Qt Creator
-**
-** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
-**
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** No Commercial Usage
-**
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-**
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**************************************************************************/
-
-#include "qt4deployconfiguration.h"
-
-#include "qt4projectmanagerconstants.h"
-#include "qt4target.h"
-#include "qt-maemo/maemodeploystep.h"
-#include "qt-maemo/maemopackagecreationstep.h"
-#include "qt-s60/s60createpackagestep.h"
-#include "qt-s60/s60deploystep.h"
-#include "qt-s60/s60deployconfiguration.h"
-
-#include <projectexplorer/buildsteplist.h>
-#include <projectexplorer/target.h>
-
-using namespace Qt4ProjectManager;
-using namespace Qt4ProjectManager::Internal;
-
-Qt4DeployConfigurationFactory::Qt4DeployConfigurationFactory(QObject *parent) :
- ProjectExplorer::DeployConfigurationFactory(parent),
- m_s60DeployConfigurationFactory(new S60DeployConfigurationFactory(this))
-{ }
-
-ProjectExplorer::DeployConfiguration *Qt4DeployConfigurationFactory::create(ProjectExplorer::Target *parent, const QString &id)
-{
- ProjectExplorer::DeployConfiguration *dc = 0;
- if (parent->id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
- dc = m_s60DeployConfigurationFactory->create(parent, id);
- else
- dc = ProjectExplorer::DeployConfigurationFactory::create(parent, id);
-
- if (!dc)
- return 0;
-
- if (parent->id() == Constants::S60_DEVICE_TARGET_ID) {
- dc->setDefaultDisplayName(tr("Deploy to Symbian device"));
- dc->stepList()->insertStep(0, new S60CreatePackageStep(dc->stepList()));
- dc->stepList()->insertStep(1, new S60DeployStep(dc->stepList()));
- } else if (parent->id() == Constants::MAEMO_DEVICE_TARGET_ID) {
- dc->setDefaultDisplayName(tr("Deploy to Maemo device"));
- dc->stepList()->insertStep(0, new MaemoPackageCreationStep(dc->stepList()));
- dc->stepList()->insertStep(1, new MaemoDeployStep(dc->stepList()));
- }
-
- return dc;
-}
-
-bool Qt4DeployConfigurationFactory::canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const
-{
- if (parent->id() == Constants::S60_DEVICE_TARGET_ID)
- return m_s60DeployConfigurationFactory->canRestore(parent, map);
- else
- return ProjectExplorer::DeployConfigurationFactory::canRestore(parent, map);
-}
-
-ProjectExplorer::DeployConfiguration *Qt4DeployConfigurationFactory::restore(ProjectExplorer::Target *parent, const QVariantMap &map)
-{
- if (parent->id() == Constants::S60_DEVICE_TARGET_ID)
- return m_s60DeployConfigurationFactory->restore(parent, map);
- else
- return ProjectExplorer::DeployConfigurationFactory::restore(parent, map);
-}
-
-bool Qt4DeployConfigurationFactory::canClone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *product) const
-{
- if (parent->id() == Constants::S60_DEVICE_TARGET_ID)
- return m_s60DeployConfigurationFactory->canClone(parent, product);
- else
- return ProjectExplorer::DeployConfigurationFactory::canClone(parent, product);
-}
-
-ProjectExplorer::DeployConfiguration *Qt4DeployConfigurationFactory::clone(ProjectExplorer::Target *parent, ProjectExplorer::DeployConfiguration *product)
-{
- if (parent->id() == Constants::S60_DEVICE_TARGET_ID)
- return m_s60DeployConfigurationFactory->clone(parent, product);
- else
- return ProjectExplorer::DeployConfigurationFactory::clone(parent, product);
-}
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index fab6f8c7c9..6a29d15103 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -37,7 +37,6 @@
#include "qt4projectmanager.h"
#include "makestep.h"
#include "qmakestep.h"
-#include "qt4runconfiguration.h"
#include "qt4nodes.h"
#include "qt4projectconfigwidget.h"
#include "qt4projectmanagerconstants.h"
@@ -264,8 +263,6 @@ Qt4Project::Qt4Project(Qt4Manager *manager, const QString& fileName) :
m_asyncUpdateTimer.setSingleShot(true);
m_asyncUpdateTimer.setInterval(3000);
connect(&m_asyncUpdateTimer, SIGNAL(timeout()), this, SLOT(asyncUpdate()));
-
- setSupportedTargetIds(QtVersionManager::instance()->supportedTargetIds());
}
Qt4Project::~Qt4Project()
@@ -327,14 +324,12 @@ bool Qt4Project::fromMap(const QVariantMap &map)
// This might be incorrect, need a full update
updateCodeModels();
- createApplicationProjects();
+ foreach (Target *t, targets())
+ static_cast<Qt4BaseTarget *>(t)->createApplicationProFiles();
foreach (Target *t, targets())
onAddedTarget(t);
- setSupportedTargetIds(QtVersionManager::instance()->supportedTargetIds());
-
-
connect(m_nodesWatcher, SIGNAL(proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode*,bool)),
this, SIGNAL(proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *,bool)));
@@ -349,32 +344,29 @@ bool Qt4Project::fromMap(const QVariantMap &map)
connect(this, SIGNAL(addedTarget(ProjectExplorer::Target*)),
this, SLOT(onAddedTarget(ProjectExplorer::Target*)));
- connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
- this, SLOT(qtVersionsChanged()));
-
connect(this, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
this, SLOT(activeTargetWasChanged()));
return true;
}
-Qt4Target *Qt4Project::activeTarget() const
+Qt4BaseTarget *Qt4Project::activeTarget() const
{
- return static_cast<Qt4Target *>(Project::activeTarget());
+ return static_cast<Qt4BaseTarget *>(Project::activeTarget());
}
void Qt4Project::onAddedTarget(ProjectExplorer::Target *t)
{
Q_ASSERT(t);
- Qt4Target *qt4target = qobject_cast<Qt4Target *>(t);
+ Qt4BaseTarget *qt4target = qobject_cast<Qt4BaseTarget *>(t);
Q_ASSERT(qt4target);
connect(qt4target, SIGNAL(buildDirectoryInitialized()),
this, SIGNAL(buildDirectoryInitialized()));
- connect(qt4target, SIGNAL(proFileEvaluateNeeded(Qt4ProjectManager::Qt4Target*)),
- this, SLOT(proFileEvaluateNeeded(Qt4ProjectManager::Qt4Target*)));
+ connect(qt4target, SIGNAL(proFileEvaluateNeeded(Qt4ProjectManager::Qt4BaseTarget*)),
+ this, SLOT(proFileEvaluateNeeded(Qt4ProjectManager::Qt4BaseTarget*)));
}
-void Qt4Project::proFileEvaluateNeeded(Qt4ProjectManager::Qt4Target *target)
+void Qt4Project::proFileEvaluateNeeded(Qt4ProjectManager::Qt4BaseTarget *target)
{
if (activeTarget() == target)
scheduleAsyncUpdate();
@@ -606,11 +598,6 @@ void Qt4Project::updateQmlJSCodeModel()
modelManager->updateProjectInfo(projectInfo);
}
-void Qt4Project::qtVersionsChanged()
-{
- setSupportedTargetIds(QtVersionManager::instance()->supportedTargetIds());
-}
-
///*!
// Updates complete project
// */
@@ -763,6 +750,8 @@ void Qt4Project::decrementPendingEvaluateFutures()
m_asyncUpdateTimer.start();
} else if (m_asyncUpdateState != ShuttingDown){
// After being done, we need to call:
+ foreach (Target *t, targets())
+ static_cast<Qt4BaseTarget *>(t)->createApplicationProFiles();
updateFileList();
updateCodeModels();
if (debug)
@@ -1000,51 +989,6 @@ void Qt4Project::collectApplicationProFiles(QList<Qt4ProFileNode *> &list, Qt4Pr
}
}
-void Qt4Project::createApplicationProjects()
-{
- foreach (Target *target, targets()) {
- if (target->runConfigurations().count()) {
- // Remove all run configurations which the new project wizard created
- QList<RunConfiguration*> toRemove;
- foreach (RunConfiguration * rc, target->runConfigurations()) {
- CustomExecutableRunConfiguration *cerc = qobject_cast<CustomExecutableRunConfiguration *>(rc);
- if (cerc && !cerc->isConfigured())
- toRemove.append(rc);
- }
- foreach (RunConfiguration *rc, toRemove)
- target->removeRunConfiguration(rc);
- }
-
- // We use the list twice
- QList<Qt4ProFileNode *> profiles = applicationProFiles();
- QStringList paths;
- foreach (Qt4ProFileNode *pro, profiles)
- paths << pro->path();
-
- foreach (RunConfiguration *rc, target->runConfigurations()) {
- if (Qt4RunConfiguration *qt4rc = qobject_cast<Qt4RunConfiguration *>(rc)) {
- if (!paths.contains(qt4rc->proFilePath())) {
- // A deleted .pro file? or a change template
- // We do remove those though
- target->removeRunConfiguration(rc);
- }
- }
- }
-
- // Only add new runconfigurations if there are none.
- if (target->runConfigurations().isEmpty()) {
- Qt4Target *qt4Target = static_cast<Qt4Target *>(target);
- foreach (Qt4ProFileNode *qt4proFile, profiles) {
- qt4Target->addRunConfigurationForPath(qt4proFile->path());
- }
- }
- // Oh still none? Add a custom executable runconfiguration
- if (target->runConfigurations().isEmpty()) {
- target->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(target));
- }
- }
-}
-
QList<Qt4ProFileNode *> Qt4Project::leafProFiles() const
{
QList<Qt4ProFileNode *> list;
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index f20cdeb7be..f75a3d97d3 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -59,7 +59,6 @@ namespace Internal {
class FileItem;
class Qt4ProFileNode;
class Qt4PriFileNode;
- class Qt4RunConfiguration;
class GCCPreprocessor;
struct Qt4ProjectFiles;
class Qt4ProjectConfigWidget;
@@ -155,7 +154,7 @@ public:
ProjectExplorer::IProjectManager *projectManager() const;
Qt4Manager *qt4ProjectManager() const;
- Qt4Target *activeTarget() const;
+ Qt4BaseTarget *activeTarget() const;
QList<Core::IFile *> dependencies(); //NBS remove
QList<ProjectExplorer::Project *>dependsOn();
@@ -210,18 +209,16 @@ protected:
virtual bool fromMap(const QVariantMap &map);
private slots:
- void proFileEvaluateNeeded(Qt4ProjectManager::Qt4Target *target);
+ void proFileEvaluateNeeded(Qt4ProjectManager::Qt4BaseTarget *target);
void asyncUpdate();
- void qtVersionsChanged();
void onAddedTarget(ProjectExplorer::Target *t);
void activeTargetWasChanged();
private:
void scheduleAsyncUpdate();
- void createApplicationProjects();
void updateCodeModels();
void updateCppCodeModel();
void updateQmlJSCodeModel();
@@ -273,4 +270,5 @@ private:
} // namespace Qt4ProjectManager
+
#endif // QT4PROJECT_H
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
index 43cf95e18c..cb25702b00 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp
@@ -63,7 +63,7 @@ using namespace Qt4ProjectManager;
using namespace Qt4ProjectManager::Internal;
using ProjectExplorer::ToolChain;
-Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Target *target)
+Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4BaseTarget *target)
: BuildConfigWidget(),
m_buildConfiguration(0),
m_ignoreChange(false)
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
index 2e01e2a985..cf2227bb87 100644
--- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
+++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h
@@ -45,7 +45,7 @@ namespace Utils {
}
namespace Qt4ProjectManager {
-class Qt4Target;
+class Qt4BaseTarget;
class Qt4BuildConfiguration;
class Qt4Target;
@@ -58,7 +58,7 @@ class Qt4ProjectConfigWidget : public ProjectExplorer::BuildConfigWidget
{
Q_OBJECT
public:
- explicit Qt4ProjectConfigWidget(Qt4Target *target);
+ explicit Qt4ProjectConfigWidget(Qt4BaseTarget *target);
~Qt4ProjectConfigWidget();
QString displayName() const;
diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro
index 9e221211fd..298a0259ba 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanager.pro
+++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro
@@ -4,7 +4,7 @@ DEFINES += QT_CREATOR QT4PROJECTMANAGER_LIBRARY
QT += network
include(../../qtcreatorplugin.pri)
include(qt4projectmanager_dependencies.pri)
-HEADERS += qt4deployconfiguration.h \
+HEADERS += \
qtparser.h \
qt4projectmanagerplugin.h \
qt4projectmanager.h \
@@ -46,7 +46,6 @@ HEADERS += qt4deployconfiguration.h \
qt4projectmanagerconstants.h \
makestep.h \
qmakestep.h \
- qt4runconfiguration.h \
qtmodulesinfo.h \
qt4projectconfigwidget.h \
projectloadwizard.h \
@@ -69,7 +68,6 @@ HEADERS += qt4deployconfiguration.h \
profilecompletion.h \
profilekeywords.h
SOURCES += qt4projectmanagerplugin.cpp \
- qt4deployconfiguration.cpp \
qtparser.cpp \
qt4projectmanager.cpp \
qt4project.cpp \
@@ -109,7 +107,6 @@ SOURCES += qt4projectmanagerplugin.cpp \
wizards/subdirsprojectwizarddialog.cpp \
makestep.cpp \
qmakestep.cpp \
- qt4runconfiguration.cpp \
qtmodulesinfo.cpp \
qt4projectconfigwidget.cpp \
projectloadwizard.cpp \
@@ -146,10 +143,13 @@ FORMS += makestep.ui \
librarydetailswidget.ui
RESOURCES += qt4projectmanager.qrc \
wizards/wizards.qrc
+
DEFINES += PROPARSER_THREAD_SAFE PROEVALUATOR_THREAD_SAFE
include(../../shared/proparser/proparser.pri)
include(qt-s60/qt-s60.pri)
include(qt-maemo/qt-maemo.pri)
+include(qt-desktop/qt-desktop.pri)
include(customwidgetwizard/customwidgetwizard.pri)
+
DEFINES += QT_NO_CAST_TO_ASCII
OTHER_FILES += Qt4ProjectManager.mimetypes.xml
diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
index a92fe593e2..7ed77f57bf 100644
--- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
+++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp
@@ -48,7 +48,6 @@
#include "profileeditorfactory.h"
#include "qt4projectmanagerconstants.h"
#include "qt4project.h"
-#include "qt4runconfiguration.h"
#include "profileeditor.h"
#include "profilereader.h"
#include "qtversionmanager.h"
@@ -59,6 +58,9 @@
#include "qt-maemo/maemomanager.h"
#include "qt-s60/s60manager.h"
+#include "qt-desktop/qt4desktoptargetfactory.h"
+#include "qt-desktop/qt4simulatortargetfactory.h"
+#include "qt-desktop/qt4runconfiguration.h"
#include <coreplugin/uniqueidmanager.h>
#include <coreplugin/icore.h>
@@ -151,7 +153,6 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
addAutoReleasedObject(new QMakeStepFactory);
addAutoReleasedObject(new MakeStepFactory);
- addAutoReleasedObject(new Qt4TargetFactory);
addAutoReleasedObject(new Qt4RunConfigurationFactory);
#ifdef Q_OS_MAC
@@ -164,6 +165,9 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString *
addAutoReleasedObject(new S60Manager);
addAutoReleasedObject(new MaemoManager);
+ addAutoReleasedObject(new Qt4DesktopTargetFactory);
+ addAutoReleasedObject(new Qt4SimulatorTargetFactory);
+
ProFileCompletion *completion = new ProFileCompletion;
addAutoReleasedObject(completion);
// Set completion settings and keep them up to date
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index ecc01b744f..f966894a30 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -34,274 +34,115 @@
#include "qt4target.h"
#include "makestep.h"
-#include "profilereader.h"
#include "qmakestep.h"
-#include "qt4deployconfiguration.h"
#include "qt4project.h"
-#include "qt4runconfiguration.h"
#include "qt4projectmanagerconstants.h"
-#include "qt-maemo/maemodeploystep.h"
-#include "qt-maemo/maemopackagecreationstep.h"
-#include "qt-maemo/maemorunconfiguration.h"
-#include "qt-s60/s60deployconfiguration.h"
-#include "qt-s60/s60devicerunconfiguration.h"
-#include "qt-s60/s60emulatorrunconfiguration.h"
-#include "qt-s60/s60createpackagestep.h"
-#include "qt-s60/s60deploystep.h"
#include "qt4projectconfigwidget.h"
+#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/buildsteplist.h>
+#include <projectexplorer/runconfiguration.h>
#include <projectexplorer/customexecutablerunconfiguration.h>
-#include <projectexplorer/toolchaintype.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <coreplugin/coreconstants.h>
-#include <symbianutils/symbiandevicemanager.h>
-#include <QtGui/QApplication>
-#include <QtGui/QPixmap>
-#include <QtGui/QPainter>
-
-using namespace ProjectExplorer;
using namespace Qt4ProjectManager;
using namespace Qt4ProjectManager::Internal;
-namespace {
-
-QString displayNameForId(const QString &id) {
- if (id == QLatin1String(Qt4ProjectManager::Constants::DESKTOP_TARGET_ID))
- return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Desktop", "Qt4 Desktop target display name");
- if (id == QLatin1String(Qt4ProjectManager::Constants::S60_EMULATOR_TARGET_ID))
- return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Symbian Emulator", "Qt4 Symbian Emulator target display name");
- if (id == QLatin1String(Qt4ProjectManager::Constants::S60_DEVICE_TARGET_ID))
- return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Symbian Device", "Qt4 Symbian Device target display name");
- if (id == QLatin1String(Qt4ProjectManager::Constants::MAEMO_DEVICE_TARGET_ID))
- return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Maemo", "Qt4 Maemo target display name");
- if (id == QLatin1String(Qt4ProjectManager::Constants::QT_SIMULATOR_TARGET_ID))
- return QApplication::translate("Qt4ProjectManager::Internal::Qt4Target", "Qt Simulator", "Qt4 Simulator target display name");
- return QString();
-}
-
-QIcon iconForId(const QString &id) {
- if (id == QLatin1String(Qt4ProjectManager::Constants::DESKTOP_TARGET_ID))
- return QIcon(qApp->style()->standardIcon(QStyle::SP_ComputerIcon));
- if (id == QLatin1String(Qt4ProjectManager::Constants::S60_EMULATOR_TARGET_ID))
- return QIcon(QLatin1String(":/projectexplorer/images/SymbianEmulator.png"));
- if (id == QLatin1String(Qt4ProjectManager::Constants::S60_DEVICE_TARGET_ID))
- return QIcon(QLatin1String(":/projectexplorer/images/SymbianDevice.png"));
- if (id == QLatin1String(Qt4ProjectManager::Constants::MAEMO_DEVICE_TARGET_ID))
- return QIcon(QLatin1String(":/projectexplorer/images/MaemoDevice.png"));
- if (id == QLatin1String(Qt4ProjectManager::Constants::QT_SIMULATOR_TARGET_ID))
- return QIcon(QLatin1String(":/projectexplorer/images/SymbianEmulator.png"));
- return QIcon();
-}
-
-} // namespace
-
// -------------------------------------------------------------------------
-// Qt4TargetFactory
+// Qt4BaseTargetFactory
// -------------------------------------------------------------------------
-Qt4TargetFactory::Qt4TargetFactory(QObject *parent) :
+Qt4BaseTargetFactory::Qt4BaseTargetFactory(QObject *parent) :
ITargetFactory(parent)
{
- connect(QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList<int>)),
- this, SIGNAL(availableCreationIdsChanged()));
-}
-
-Qt4TargetFactory::~Qt4TargetFactory()
-{
-}
-
-bool Qt4TargetFactory::supportsTargetId(const QString &id) const
-{
- QSet<QString> ids;
- ids << QLatin1String("Qt4ProjectManager.Target.DesktopTarget")
- << QLatin1String("Qt4ProjectManager.Target.S60EmulatorTarget")
- << QLatin1String("Qt4ProjectManager.Target.S60DeviceTarget")
- << QLatin1String("Qt4ProjectManager.Target.MaemoDeviceTarget")
- << QLatin1String("Qt4ProjectManager.Target.QtSimulatorTarget");
- return ids.contains(id);
-}
-
-QStringList Qt4TargetFactory::availableCreationIds(ProjectExplorer::Project *parent) const
-{
- if (!qobject_cast<Qt4Project *>(parent))
- return QStringList();
- QSet<QString> ids;
- ids << QLatin1String("Qt4ProjectManager.Target.DesktopTarget")
- << QLatin1String("Qt4ProjectManager.Target.S60EmulatorTarget")
- << QLatin1String("Qt4ProjectManager.Target.S60DeviceTarget")
- << QLatin1String("Qt4ProjectManager.Target.MaemoDeviceTarget")
- << QLatin1String("Qt4ProjectManager.Target.QtSimulatorTarget");
-
-
- return parent->possibleTargetIds().intersect(ids).toList();
-}
-
-QString Qt4TargetFactory::displayNameForId(const QString &id) const
-{
- return ::displayNameForId(id);
}
-bool Qt4TargetFactory::canCreate(ProjectExplorer::Project *parent, const QString &id) const
+Qt4BaseTargetFactory::~Qt4BaseTargetFactory()
{
- if (!qobject_cast<Qt4Project *>(parent))
- return false;
-
- return parent->canAddTarget(id);
-}
-Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QString &id)
-{
- QList<QtVersion *> knownVersions = QtVersionManager::instance()->versionsForTargetId(id);
- if (knownVersions.count() > 1)
- knownVersions = knownVersions.mid(0, 1);
- return create(parent, id, knownVersions);
}
-Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<QtVersion *> versions)
+Qt4BaseTargetFactory *Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(const QString &id)
{
- QList<BuildConfigurationInfo> infos;
- foreach (QtVersion *version, versions) {
- bool buildAll = false;
- if (version && version->isValid() && (version->defaultBuildConfig() & QtVersion::BuildAll))
- buildAll = true;
-
- if (buildAll) {
- infos.append(BuildConfigurationInfo(version, QtVersion::BuildAll | QtVersion::DebugBuild));
- infos.append(BuildConfigurationInfo(version, QtVersion::BuildAll));
- } else {
- infos.append(BuildConfigurationInfo(version, QtVersion::DebugBuild));
- infos.append(BuildConfigurationInfo(version, QtVersion::QmakeBuildConfig(0)));
- }
- }
-
- return create(parent, id, infos);
-}
-
-Qt4Target *Qt4TargetFactory::create(ProjectExplorer::Project *parent, const QString &id, QList<BuildConfigurationInfo> infos)
-{
- if (!canCreate(parent, id))
- return 0;
-
- Qt4Project *qt4project = static_cast<Qt4Project *>(parent);
- Qt4Target *t = new Qt4Target(qt4project, id);
-
- QList<QtVersion *> knownVersions(QtVersionManager::instance()->versionsForTargetId(id));
- if (knownVersions.isEmpty())
- return t;
-
- // count Qt versions:
- int qtVersionCount = 0;
- {
- QSet<QtVersion *> differentVersions;
- foreach (const BuildConfigurationInfo &info, infos) {
- if (knownVersions.contains(info.version))
- differentVersions.insert(info.version);
- }
- qtVersionCount = differentVersions.count();
+ QList<Qt4BaseTargetFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<Qt4BaseTargetFactory>();
+ foreach (Qt4BaseTargetFactory *fac, factories) {
+ if (fac->supportsTargetId(id))
+ return fac;
}
-
- // Create Buildconfigurations:
- foreach (const BuildConfigurationInfo &info, infos) {
- if (!info.version || !knownVersions.contains(info.version))
- continue;
-
- QString displayName;
-
- if (qtVersionCount > 1)
- displayName = info.version->displayName() + QChar(' ');
- displayName.append((info.buildConfig & QtVersion::DebugBuild) ? tr("Debug") : tr("Release"));
-
- // Skip release builds for the symbian emulator.
- if (id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID) &&
- !(info.buildConfig & QtVersion::DebugBuild))
- continue;
-
- t->addQt4BuildConfiguration(displayName, info.version, info.buildConfig, info.additionalArguments, info.directory);
- }
-
- t->addDeployConfiguration(t->deployConfigurationFactory()->create(t, ProjectExplorer::Constants::DEFAULT_DEPLOYCONFIGURATION_ID));
-
- // create RunConfigurations:
- QStringList pathes = qt4project->applicationProFilePathes();
- foreach (const QString &path, pathes)
- t->addRunConfigurationForPath(path);
-
- if (t->runConfigurations().isEmpty())
- t->addRunConfiguration(new CustomExecutableRunConfiguration(t));
-
- return t;
-}
-
-bool Qt4TargetFactory::canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const
-{
- return canCreate(parent, ProjectExplorer::idFromMap(map));
-}
-
-Qt4Target *Qt4TargetFactory::restore(ProjectExplorer::Project *parent, const QVariantMap &map)
-{
- if (!canRestore(parent, map))
- return 0;
-
- Qt4Project *qt4project(static_cast<Qt4Project *>(parent));
- Qt4Target *t(new Qt4Target(qt4project, QLatin1String("transient ID")));
- if (t->fromMap(map))
- return t;
- delete t;
return 0;
}
// -------------------------------------------------------------------------
-// Qt4Target
+// Qt4BaseTarget
// -------------------------------------------------------------------------
-Qt4Target::Qt4Target(Qt4Project *parent, const QString &id) :
- ProjectExplorer::Target(parent, id),
- m_connectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOn.png")),
- m_disconnectedPixmap(QLatin1String(":/projectexplorer/images/ConnectionOff.png")),
- m_buildConfigurationFactory(new Qt4BuildConfigurationFactory(this)),
- m_deployConfigurationFactory(new Qt4DeployConfigurationFactory(this))
+Qt4BaseTarget::Qt4BaseTarget(Qt4Project *parent, const QString &id) :
+ ProjectExplorer::Target(parent, id)
{
- connect(project(), SIGNAL(supportedTargetIdsChanged()),
- this, SLOT(updateQtVersion()));
-
connect(this, SIGNAL(activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*)),
this, SLOT(emitProFileEvaluateNeeded()));
connect(this, SIGNAL(activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*)),
this, SIGNAL(environmentChanged()));
connect(this, SIGNAL(addedBuildConfiguration(ProjectExplorer::BuildConfiguration*)),
this, SLOT(onAddedBuildConfiguration(ProjectExplorer::BuildConfiguration*)));
- connect(this, SIGNAL(addedDeployConfiguration(ProjectExplorer::DeployConfiguration*)),
- this, SLOT(onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration*)));
- connect(this, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)),
- this, SLOT(updateToolTipAndIcon()));
-
- setDefaultDisplayName(displayNameForId(id));
- setIcon(iconForId(id));
}
-Qt4Target::~Qt4Target()
+Qt4BaseTarget::~Qt4BaseTarget()
{
}
-ProjectExplorer::BuildConfigWidget *Qt4Target::createConfigWidget()
+ProjectExplorer::BuildConfigWidget *Qt4BaseTarget::createConfigWidget()
{
return new Qt4ProjectConfigWidget(this);
}
-Qt4BuildConfiguration *Qt4Target::activeBuildConfiguration() const
+Qt4BuildConfiguration *Qt4BaseTarget::activeBuildConfiguration() const
{
return static_cast<Qt4BuildConfiguration *>(Target::activeBuildConfiguration());
}
-Qt4Project *Qt4Target::qt4Project() const
+Qt4Project *Qt4BaseTarget::qt4Project() const
{
return static_cast<Qt4Project *>(project());
}
-Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName, QtVersion *qtversion,
+QList<ProjectExplorer::ToolChainType> Qt4BaseTarget::filterToolChainTypes(const QList<ProjectExplorer::ToolChainType> &candidates) const
+{
+ return candidates;
+}
+
+ProjectExplorer::ToolChainType Qt4BaseTarget::preferredToolChainType(const QList<ProjectExplorer::ToolChainType> &candidates) const
+{
+ ProjectExplorer::ToolChainType preferredType = ProjectExplorer::ToolChain_INVALID;
+ if (!candidates.isEmpty())
+ preferredType = candidates.at(0);
+ return preferredType;
+}
+
+QString Qt4BaseTarget::defaultBuildDirectory() const
+{
+ Qt4BaseTargetFactory *fac = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(id());
+ return fac->defaultShadowBuildDirectory(qt4Project()->defaultTopLevelBuildDirectory(), id());
+}
+
+void Qt4BaseTarget::removeUnconfiguredCustomExectutableRunConfigurations()
+{
+ if (runConfigurations().count()) {
+ // Remove all run configurations which the new project wizard created
+ QList<ProjectExplorer::RunConfiguration*> toRemove;
+ foreach (ProjectExplorer::RunConfiguration * rc, runConfigurations()) {
+ ProjectExplorer::CustomExecutableRunConfiguration *cerc
+ = qobject_cast<ProjectExplorer::CustomExecutableRunConfiguration *>(rc);
+ if (cerc && !cerc->isConfigured())
+ toRemove.append(rc);
+ }
+ foreach (ProjectExplorer::RunConfiguration *rc, toRemove)
+ removeRunConfiguration(rc);
+ }
+}
+
+Qt4BuildConfiguration *Qt4BaseTarget::addQt4BuildConfiguration(QString displayName, QtVersion *qtversion,
QtVersion::QmakeBuildConfigs qmakeBuildConfiguration,
QString additionalArguments,
QString directory)
@@ -313,8 +154,8 @@ Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName,
Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this);
bc->setDefaultDisplayName(displayName);
- BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
+ ProjectExplorer::BuildStepList *buildSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
+ ProjectExplorer::BuildStepList *cleanSteps = bc->stepList(ProjectExplorer::Constants::BUILDSTEPS_CLEAN);
Q_ASSERT(buildSteps);
Q_ASSERT(cleanSteps);
@@ -348,103 +189,7 @@ Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName,
return bc;
}
-Qt4BuildConfigurationFactory *Qt4Target::buildConfigurationFactory() const
-{
- return m_buildConfigurationFactory;
-}
-
-ProjectExplorer::DeployConfigurationFactory *Qt4Target::deployConfigurationFactory() const
-{
- return m_deployConfigurationFactory;
-}
-
-void Qt4Target::addRunConfigurationForPath(const QString &proFilePath)
-{
- if (id() == QLatin1String(Constants::DESKTOP_TARGET_ID) ||
- id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
- addRunConfiguration(new Qt4RunConfiguration(this, proFilePath));
- else if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
- addRunConfiguration(new S60EmulatorRunConfiguration(this, proFilePath));
- else if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
- addRunConfiguration(new S60DeviceRunConfiguration(this, proFilePath));
- else if (id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
- addRunConfiguration(new MaemoRunConfiguration(this, proFilePath));
-}
-
-QList<ProjectExplorer::ToolChainType> Qt4Target::filterToolChainTypes(const QList<ProjectExplorer::ToolChainType> &candidates) const
-{
- QList<ProjectExplorer::ToolChainType> tmp(candidates);
- if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID)) {
- if (tmp.contains(ProjectExplorer::ToolChain_WINSCW))
- return QList<ProjectExplorer::ToolChainType>() << ProjectExplorer::ToolChain_WINSCW;
- else
- return QList<ProjectExplorer::ToolChainType>();
- } else if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID)) {
- tmp.removeAll(ProjectExplorer::ToolChain_WINSCW);
- return tmp;
- }
- return tmp;
-}
-
-ProjectExplorer::ToolChainType Qt4Target::preferredToolChainType(const QList<ProjectExplorer::ToolChainType> &candidates) const
-{
- ProjectExplorer::ToolChainType preferredType = ProjectExplorer::ToolChain_INVALID;
- if (id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID) &&
- candidates.contains(ProjectExplorer::ToolChain_WINSCW))
- preferredType = ProjectExplorer::ToolChain_WINSCW;
- if (!candidates.isEmpty())
- preferredType = candidates.at(0);
- return preferredType;
-}
-
-QString Qt4Target::defaultBuildDirectory() const
-{
- if (id() == QLatin1String(Constants::S60_DEVICE_TARGET_ID)
- || id() == QLatin1String(Constants::S60_EMULATOR_TARGET_ID)
-#if defined(Q_OS_WIN)
- || id() == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID)
-#endif
- )
- return project()->projectDirectory();
-
- return defaultShadowBuildDirectory(qt4Project()->defaultTopLevelBuildDirectory(), id());
-}
-
-QString Qt4Target::defaultShadowBuildDirectory(const QString &projectLocation, const QString &id)
-{
- QString shortName = QLatin1String("unknown");
- if (id == QLatin1String(Constants::DESKTOP_TARGET_ID))
- shortName = QLatin1String("desktop");
- else if (id == QLatin1String(Constants::S60_EMULATOR_TARGET_ID))
- shortName = QLatin1String("symbian_emulator");
- else if (id == QLatin1String(Constants::S60_DEVICE_TARGET_ID))
- shortName = QLatin1String("symbian");
- else if (id == QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))
- shortName = QLatin1String("maemo");
- else if (id == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
- shortName = QLatin1String("simulator");
-
- // currently we can't have the build directory to be deeper then the source directory
- // since that is broken in qmake
- // Once qmake is fixed we can change that to have a top directory and
- // subdirectories per build. (Replacing "QChar('-')" with "QChar('/') )
- return projectLocation + QChar('-') + shortName;
-}
-
-bool Qt4Target::fromMap(const QVariantMap &map)
-{
- bool success = Target::fromMap(map);
- setIcon(iconForId(id()));
- setDefaultDisplayName(displayNameForId(id()));
- return success;
-}
-
-void Qt4Target::updateQtVersion()
-{
- setEnabled(project()->supportedTargetIds().contains(id()));
-}
-
-void Qt4Target::onAddedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc)
+void Qt4BaseTarget::onAddedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc)
{
Q_ASSERT(bc);
Qt4BuildConfiguration *qt4bc = qobject_cast<Qt4BuildConfiguration *>(bc);
@@ -455,103 +200,13 @@ void Qt4Target::onAddedBuildConfiguration(ProjectExplorer::BuildConfiguration *b
this, SLOT(onProFileEvaluateNeeded(Qt4ProjectManager::Qt4BuildConfiguration *)));
}
-void Qt4Target::onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc)
-{
- Q_ASSERT(dc);
- S60DeployConfiguration *deployConf(qobject_cast<S60DeployConfiguration *>(dc));
- if (!deployConf)
- return;
- connect(deployConf, SIGNAL(serialPortNameChanged()),
- this, SLOT(slotUpdateDeviceInformation()));
- connect(deployConf, SIGNAL(communicationChannelChanged()),
- this, SLOT(slotUpdateDeviceInformation()));
- connect(deployConf, SIGNAL(deviceAddressChanged()),
- this, SLOT(slotUpdateDeviceInformation()));
- connect(deployConf, SIGNAL(devicePortChanged()),
- this, SLOT(slotUpdateDeviceInformation()));
-}
-
-void Qt4Target::slotUpdateDeviceInformation()
-{
- S60DeployConfiguration *dc(qobject_cast<S60DeployConfiguration *>(sender()));
- if (dc && dc == activeDeployConfiguration()) {
- updateToolTipAndIcon();
- }
-}
-
-void Qt4Target::onProFileEvaluateNeeded(Qt4ProjectManager::Qt4BuildConfiguration *bc)
+void Qt4BaseTarget::onProFileEvaluateNeeded(Qt4ProjectManager::Qt4BuildConfiguration *bc)
{
if (bc && bc == activeBuildConfiguration())
emit proFileEvaluateNeeded(this);
}
-void Qt4Target::emitProFileEvaluateNeeded()
+void Qt4BaseTarget::emitProFileEvaluateNeeded()
{
emit proFileEvaluateNeeded(this);
}
-
-void Qt4Target::updateToolTipAndIcon()
-{
- static const int TARGET_OVERLAY_ORIGINAL_SIZE = 32;
-
- if (qobject_cast<S60DeployConfiguration *>(activeDeployConfiguration())) {
- QPixmap overlay;
- QString tooltip;
- if (isSymbianConnectionAvailable(tooltip))
- overlay = m_connectedPixmap;
- else
- overlay = m_disconnectedPixmap;
- setToolTip(tooltip);
-
- double factor = Core::Constants::TARGET_ICON_SIZE / (double)TARGET_OVERLAY_ORIGINAL_SIZE;
- QSize overlaySize(overlay.size().width()*factor, overlay.size().height()*factor);
- QPixmap pixmap(Core::Constants::TARGET_ICON_SIZE, Core::Constants::TARGET_ICON_SIZE);
- pixmap.fill(Qt::transparent);
- QPainter painter(&pixmap);
- painter.drawPixmap(Core::Constants::TARGET_ICON_SIZE - overlaySize.width(),
- Core::Constants::TARGET_ICON_SIZE - overlaySize.height(),
- overlay.scaled(overlaySize));
-
- setOverlayIcon(QIcon(pixmap));
- } else {
- setToolTip(QString());
- setOverlayIcon(QIcon());
- }
-}
-
-bool Qt4Target::isSymbianConnectionAvailable(QString &tooltipText)
-{
- const S60DeployConfiguration *s60DeployConf = qobject_cast<S60DeployConfiguration *>(activeDeployConfiguration());
- if (!s60DeployConf)
- return false;
- switch (s60DeployConf->communicationChannel()) {
- case S60DeployConfiguration::CommunicationSerialConnection: {
- const SymbianUtils::SymbianDeviceManager *sdm = SymbianUtils::SymbianDeviceManager::instance();
- const int deviceIndex = sdm->findByPortName(s60DeployConf->serialPortName());
- if (deviceIndex == -1) {
- tooltipText = tr("<b>Device:</b> Not connected");
- return false;
- } else {
- // device connected
- const SymbianUtils::SymbianDevice device = sdm->devices().at(deviceIndex);
- tooltipText = device.additionalInformation().isEmpty() ?
- tr("<b>Device:</b> %1").arg(device.friendlyName()) :
- tr("<b>Device:</b> %1, %2").arg(device.friendlyName(), device.additionalInformation());
- return true;
- }
- }
- break;
- case S60DeployConfiguration::CommunicationTcpConnection: {
- if(!s60DeployConf->deviceAddress().isEmpty() && !s60DeployConf->devicePort().isEmpty()) {
- tooltipText = tr("<b>IP address:</b> %1:%2").arg(s60DeployConf->deviceAddress(), s60DeployConf->devicePort());
- return true;
- }
- return false;
- }
- break;
- default:
- break;
- }
- return false;
-}
-
diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h
index 0e27c702be..926a8717a8 100644
--- a/src/plugins/qt4projectmanager/qt4target.h
+++ b/src/plugins/qt4projectmanager/qt4target.h
@@ -35,23 +35,20 @@
#define QT4TARGET_H
#include "qt4buildconfiguration.h"
+#include "qtversionmanager.h"
#include <projectexplorer/target.h>
-#include <QtGui/QPixmap>
-
namespace Qt4ProjectManager {
class Qt4Project;
namespace Internal {
class Qt4ProFileNode;
-class Qt4TargetFactory;
-class Qt4BuildConfigurationFactory;
-class Qt4DeployConfigurationFactory;
+}
struct BuildConfigurationInfo {
- explicit BuildConfigurationInfo(QtVersion *v = 0, QtVersion::QmakeBuildConfigs bc = QtVersion::QmakeBuildConfig(0),
- const QString &aa = QString(), const QString &d = QString()) :
+ explicit BuildConfigurationInfo(QtVersion *v, QtVersion::QmakeBuildConfigs bc,
+ const QString &aa, const QString &d) :
version(v), buildConfig(bc), additionalArguments(aa), directory(d)
{ }
QtVersion *version;
@@ -59,88 +56,63 @@ struct BuildConfigurationInfo {
QString additionalArguments;
QString directory;
};
-}
-class Qt4Target : public ProjectExplorer::Target
+class Qt4BaseTarget : public ProjectExplorer::Target
{
Q_OBJECT
- friend class Internal::Qt4TargetFactory;
-
public:
- explicit Qt4Target(Qt4Project *parent, const QString &id);
- virtual ~Qt4Target();
+ explicit Qt4BaseTarget(Qt4Project *parent, const QString &id);
+ virtual ~Qt4BaseTarget();
ProjectExplorer::BuildConfigWidget *createConfigWidget();
Qt4BuildConfiguration *activeBuildConfiguration() const;
Qt4ProjectManager::Qt4Project *qt4Project() const;
+ // This is the same for almost all Qt4Targets
+ // so for now offer a convience function
Qt4BuildConfiguration *addQt4BuildConfiguration(QString displayName,
- QtVersion *qtversion,
- QtVersion::QmakeBuildConfigs qmakeBuildConfiguration,
- QString additionalArguments,
- QString directory);
- void addRunConfigurationForPath(const QString &proFilePath);
-
- Internal::Qt4BuildConfigurationFactory *buildConfigurationFactory() const;
- ProjectExplorer::DeployConfigurationFactory *deployConfigurationFactory() const;
-
- QList<ProjectExplorer::ToolChainType> filterToolChainTypes(const QList<ProjectExplorer::ToolChainType> &candidates) const;
- ProjectExplorer::ToolChainType preferredToolChainType(const QList<ProjectExplorer::ToolChainType> &candidates) const;
-
- QString defaultBuildDirectory() const;
- static QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id);
-
- bool fromMap(const QVariantMap &map);
-
+ QtVersion *qtversion,
+ QtVersion::QmakeBuildConfigs qmakeBuildConfiguration,
+ QString additionalArguments,
+ QString directory);
+
+ virtual void createApplicationProFiles() = 0;
+ virtual QList<ProjectExplorer::ToolChainType> filterToolChainTypes(const QList<ProjectExplorer::ToolChainType> &candidates) const;
+ virtual ProjectExplorer::ToolChainType preferredToolChainType(const QList<ProjectExplorer::ToolChainType> &candidates) const;
+ virtual QString defaultBuildDirectory() const;
signals:
void buildDirectoryInitialized();
/// emitted if the build configuration changed in a way that
/// should trigger a reevaluation of all .pro files
- void proFileEvaluateNeeded(Qt4ProjectManager::Qt4Target *);
+ void proFileEvaluateNeeded(Qt4ProjectManager::Qt4BaseTarget *);
+
+protected:
+ void removeUnconfiguredCustomExectutableRunConfigurations();
private slots:
- void updateQtVersion();
void onAddedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc);
- void onAddedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc);
- void slotUpdateDeviceInformation();
void onProFileEvaluateNeeded(Qt4ProjectManager::Qt4BuildConfiguration *bc);
void emitProFileEvaluateNeeded();
- void updateToolTipAndIcon();
-
-private:
- bool isSymbianConnectionAvailable(QString &tooltipText);
-
-private:
- const QPixmap m_connectedPixmap;
- const QPixmap m_disconnectedPixmap;
-
- Internal::Qt4BuildConfigurationFactory *m_buildConfigurationFactory;
- Internal::Qt4DeployConfigurationFactory *m_deployConfigurationFactory;
};
-namespace Internal {
-class Qt4TargetFactory : public ProjectExplorer::ITargetFactory
+class QT4PROJECTMANAGER_EXPORT Qt4BaseTargetFactory : public ProjectExplorer::ITargetFactory
{
Q_OBJECT
-
public:
- Qt4TargetFactory(QObject *parent = 0);
- ~Qt4TargetFactory();
+ Qt4BaseTargetFactory(QObject *parent);
+ ~Qt4BaseTargetFactory();
- virtual bool supportsTargetId(const QString &id) const;
+ virtual QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id) =0;
+ virtual QList<BuildConfigurationInfo> availableBuildConfigurations(const QString &proFilePath) = 0;
- QStringList availableCreationIds(ProjectExplorer::Project *parent) const;
- QString displayNameForId(const QString &id) const;
+ virtual Qt4BaseTarget *create(ProjectExplorer::Project *parent, const QString &id) = 0;
+ virtual Qt4BaseTarget *create(ProjectExplorer::Project *parent,
+ const QString &id,
+ QList<BuildConfigurationInfo> infos) = 0;
- bool canCreate(ProjectExplorer::Project *parent, const QString &id) const;
- Qt4ProjectManager::Qt4Target *create(ProjectExplorer::Project *parent, const QString &id);
- Qt4ProjectManager::Qt4Target *create(ProjectExplorer::Project *parent, const QString &id, QList<QtVersion *> versions);
- Qt4ProjectManager::Qt4Target *create(ProjectExplorer::Project *parent, const QString &id, QList<Internal::BuildConfigurationInfo> infos);
- bool canRestore(ProjectExplorer::Project *parent, const QVariantMap &map) const;
- Qt4ProjectManager::Qt4Target *restore(ProjectExplorer::Project *parent, const QVariantMap &map);
+ static Qt4BaseTargetFactory *qt4BaseTargetFactoryForId(const QString &id);
};
-}
} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
index ecf8c2f5f6..4e307bd0bb 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.cpp
@@ -215,6 +215,7 @@ void AbstractMobileAppWizard::useProjectPath(const QString &projectName,
app()->setProjectName(projectName);
app()->setProjectPath(projectPath);
wizardDialog()->m_targetsPage->setProFilePath(app()->path(AbstractMobileApp::AppPro));
+ projectPathChanged(app()->path(AbstractMobileApp::AppPro));
}
} // end of namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h
index 752c0c37ec..e198027262 100644
--- a/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/abstractmobileappwizard.h
@@ -99,6 +99,7 @@ private:
virtual AbstractMobileApp *app() const=0;
virtual AbstractMobileAppWizardDialog *wizardDialog() const=0;
virtual AbstractMobileAppWizardDialog *createWizardDialogInternal(QWidget *parent) const=0;
+ virtual void projectPathChanged(const QString &path) const=0;
virtual void prepareGenerateFiles(const QWizard *wizard,
QString *errorMessage) const=0;
virtual bool postGenerateFilesInternal(const Core::GeneratedFiles &l,
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
index 4880601d4e..d8fbeea4ff 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.cpp
@@ -107,11 +107,15 @@ Core::BaseFileWizardParameters MobileAppWizard::parameters()
AbstractMobileAppWizardDialog *MobileAppWizard::createWizardDialogInternal(QWidget *parent) const
{
m_d->wizardDialog = new MobileAppWizardDialog(parent);
- m_d->wizardDialog->m_targetsPage->setImportInfos(TargetSetupPage::importInfosForKnownQtVersions());
m_d->wizardDialog->m_targetsPage->setPreferMobile(true);
return m_d->wizardDialog;
}
+void MobileAppWizard::projectPathChanged(const QString &path) const
+{
+ m_d->wizardDialog->m_targetsPage->setImportInfos(TargetSetupPage::importInfosForKnownQtVersions(path));
+}
+
void MobileAppWizard::prepareGenerateFiles(const QWizard *w,
QString *errorMessage) const
{
diff --git a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
index 7491ef99b2..d6421ef883 100644
--- a/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/mobileappwizard.h
@@ -53,6 +53,7 @@ private:
virtual AbstractMobileApp *app() const;
virtual AbstractMobileAppWizardDialog *wizardDialog() const;
virtual AbstractMobileAppWizardDialog *createWizardDialogInternal(QWidget *parent) const;
+ virtual void projectPathChanged(const QString &path) const;
virtual void prepareGenerateFiles(const QWizard *wizard,
QString *errorMessage) const;
virtual bool postGenerateFilesInternal(const Core::GeneratedFiles &l,
diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.cpp b/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.cpp
index e9c38e911c..a1915f9643 100644
--- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.cpp
@@ -117,8 +117,13 @@ Core::BaseFileWizardParameters QmlStandaloneAppWizard::parameters()
AbstractMobileAppWizardDialog *QmlStandaloneAppWizard::createWizardDialogInternal(QWidget *parent) const
{
m_d->wizardDialog = new QmlStandaloneAppWizardDialog(parent);
+ return m_d->wizardDialog;
+}
+
+void QmlStandaloneAppWizard::projectPathChanged(const QString &path) const
+{
const QList<TargetSetupPage::ImportInfo> &qtVersions
- = TargetSetupPage::importInfosForKnownQtVersions();
+ = TargetSetupPage::importInfosForKnownQtVersions(path);
QList<TargetSetupPage::ImportInfo> qmlQtVersions;
foreach (const TargetSetupPage::ImportInfo &qtVersion, qtVersions) {
const QString versionString = qtVersion.version->qtVersionString();
@@ -132,8 +137,6 @@ AbstractMobileAppWizardDialog *QmlStandaloneAppWizard::createWizardDialogInterna
qmlQtVersions << qtVersion;
}
m_d->wizardDialog->m_targetsPage->setImportInfos(qmlQtVersions);
-
- return m_d->wizardDialog;
}
void QmlStandaloneAppWizard::prepareGenerateFiles(const QWizard *w,
diff --git a/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.h b/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.h
index 1eac5f18e7..666ef94610 100644
--- a/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/qmlstandaloneappwizard.h
@@ -53,6 +53,7 @@ private:
virtual AbstractMobileApp *app() const;
virtual AbstractMobileAppWizardDialog *wizardDialog() const;
virtual AbstractMobileAppWizardDialog *createWizardDialogInternal(QWidget *parent) const;
+ virtual void projectPathChanged(const QString &path) const;
virtual void prepareGenerateFiles(const QWizard *wizard,
QString *errorMessage) const;
virtual bool postGenerateFilesInternal(const Core::GeneratedFiles &l,
diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
index 6630f59624..dc7a3a53f0 100644
--- a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
@@ -237,12 +237,13 @@ int BaseQt4ProjectWizardDialog::addModulesPage(int id)
int BaseQt4ProjectWizardDialog::addTargetSetupPage(QSet<QString> targets, bool mobile, int id)
{
m_targetSetupPage = new TargetSetupPage;
+ m_targets = targets;
resize(900, 450);
connect(this, SIGNAL(projectLocationChanged(QString)),
m_targetSetupPage, SLOT(setProFilePath(QString)));
- QList<TargetSetupPage::ImportInfo> infos = TargetSetupPage::importInfosForKnownQtVersions();
+ QList<TargetSetupPage::ImportInfo> infos = TargetSetupPage::importInfosForKnownQtVersions(path());
if (!targets.isEmpty())
infos = TargetSetupPage::filterImportInfos(targets, infos);
m_targetSetupPage->setImportDirectoryBrowsingEnabled(false);
@@ -323,6 +324,10 @@ bool BaseQt4ProjectWizardDialog::isTargetSelected(const QString &targetid) const
void BaseQt4ProjectWizardDialog::generateProfileName(const QString &name, const QString &path)
{
const QString proFile = QDir::fromNativeSeparators(path) + QChar('/') + name + QChar('/') + name + QLatin1String(".pro");
+ QList<TargetSetupPage::ImportInfo> infos = TargetSetupPage::importInfosForKnownQtVersions(proFile);
+ if (!m_targets.isEmpty())
+ infos = TargetSetupPage::filterImportInfos(m_targets, infos);
+ m_targetSetupPage->setImportInfos(infos);
emit projectLocationChanged(proFile);
}
diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.h b/src/plugins/qt4projectmanager/wizards/qtwizard.h
index 2871e7ae8b..a0a507bee2 100644
--- a/src/plugins/qt4projectmanager/wizards/qtwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/qtwizard.h
@@ -159,6 +159,7 @@ private:
TargetSetupPage *m_targetSetupPage;
QString m_selectedModules;
QString m_deselectedModules;
+ QSet<QString> m_targets;
};
} // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
index fc0e1915d2..b6d4bf0cbb 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.cpp
@@ -85,8 +85,6 @@ TargetSetupPage::TargetSetupPage(QWidget *parent) :
this, SLOT(addShadowBuildLocation()));
connect(m_ui->uncheckButton, SIGNAL(clicked()),
this, SLOT(checkAllButtonClicked()));
- connect(m_ui->versionTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
- this, SLOT(handleDoubleClicks(QTreeWidgetItem*,int)));
connect(m_ui->versionTree, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(contextMenuRequested(QPoint)));
@@ -128,7 +126,7 @@ void TargetSetupPage::setImportInfos(const QList<ImportInfo> &infos)
m_infos.clear();
// Find possible targets:
- QStringList targets;
+ QStringList targetIds;
foreach (const ImportInfo &i, infos) {
// Make sure we have no duplicate directories:
bool skip = false;
@@ -148,28 +146,42 @@ void TargetSetupPage::setImportInfos(const QList<ImportInfo> &infos)
QSet<QString> versionTargets = i.version->supportedTargetIds();
foreach (const QString &t, versionTargets) {
- if (!targets.contains(t))
- targets.append(t);
+ if (!targetIds.contains(t))
+ targetIds.append(t);
}
}
- qSort(targets.begin(), targets.end());
+ qSort(targetIds.begin(), targetIds.end());
m_ui->versionTree->clear();
- Qt4TargetFactory factory;
- foreach (const QString &t, targets) {
+
+ foreach (const QString &targetId, targetIds) {
QTreeWidgetItem *targetItem = new QTreeWidgetItem(m_ui->versionTree);
- const QString targetName = factory.displayNameForId(t);
- targetItem->setText(NAME_COLUMN, targetName);
- targetItem->setToolTip(NAME_COLUMN, targetName);
+
+ Qt4BaseTargetFactory *factory = 0;
+ QList<Qt4BaseTargetFactory *> factories =
+ ExtensionSystem::PluginManager::instance()->getObjects<Qt4BaseTargetFactory>();
+ foreach (Qt4BaseTargetFactory *fac, factories) {
+ if (fac->supportsTargetId(targetId)) {
+ factory = fac;
+ break;
+ }
+ }
+ if (!factory)
+ continue;
+
+ QString displayName = factory->displayNameForId(targetId);
+
+ targetItem->setText(0, displayName);
+ targetItem->setToolTip(0, displayName);
targetItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
- targetItem->setData(NAME_COLUMN, Qt::UserRole, t);
+ targetItem->setData(NAME_COLUMN, Qt::UserRole, targetId);
targetItem->setExpanded(true);
int pos = -1;
foreach (const ImportInfo &i, m_infos) {
++pos;
- if (!i.version->supportsTargetId(t))
+ if (!i.version->supportsTargetId(targetId))
continue;
QTreeWidgetItem *versionItem = new QTreeWidgetItem(targetItem);
updateVersionItem(versionItem, pos);
@@ -236,58 +248,70 @@ bool TargetSetupPage::setupProject(Qt4ProjectManager::Qt4Project *project)
{
Q_ASSERT(project->targets().isEmpty());
QtVersionManager *vm = QtVersionManager::instance();
-
- // TODO remove again
- Qt4TargetFactory *factory =
- ExtensionSystem::PluginManager::instance()->getObject<Qt4TargetFactory>();
-
for (int i = 0; i < m_ui->versionTree->topLevelItemCount(); ++i) {
QTreeWidgetItem *current = m_ui->versionTree->topLevelItem(i);
QString targetId = current->data(NAME_COLUMN, Qt::UserRole).toString();
- QList<BuildConfigurationInfo> targetInfos;
- for (int j = 0; j < current->childCount(); ++j) {
- QTreeWidgetItem *child = current->child(j);
- if (child->checkState(0) != Qt::Checked)
- continue;
-
- ImportInfo &info = m_infos[child->data(NAME_COLUMN, Qt::UserRole).toInt()];
+ Qt4BaseTargetFactory *qt4TargetFactory = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(targetId);
+ if (qt4TargetFactory && qt4TargetFactory->canCreate(project, targetId)) {
+ QList<BuildConfigurationInfo> targetInfos;
+ for (int j = 0; j < current->childCount(); ++j) {
+ QTreeWidgetItem *child = current->child(j);
+ if (child->checkState(0) != Qt::Checked)
+ continue;
+ ImportInfo &info = m_infos[child->data(0, Qt::UserRole).toInt()];
+
+ // Register temporary Qt version
+ if (info.isTemporary) {
+ vm->addVersion(info.version);
+ info.isTemporary = false;
+ }
- // Register temporary Qt version
- if (info.isTemporary) {
- vm->addVersion(info.version);
- info.isTemporary = false;
+ targetInfos.append(BuildConfigurationInfo(info.version, info.buildConfig,
+ info.additionalArguments, info.directory));
}
- QString directory = info.directory;
- if (!info.isShadowBuild)
- directory = project->projectDirectory();
+ // create the target:
+ Qt4BaseTarget *target = 0;
+ if (!targetInfos.isEmpty()) {
+ target = qt4TargetFactory->create(project, targetId, targetInfos);
+ }
- // we want to havbe two BCs set up, one to build debug, the other to build release.
- targetInfos.append(BuildConfigurationInfo(info.version, info.buildConfig,
- info.additionalArguments, directory));
- targetInfos.append(BuildConfigurationInfo(info.version, info.buildConfig ^ QtVersion::DebugBuild,
- info.additionalArguments, directory));
+ if (target) {
+ project->addTarget(target);
+ if (target->id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
+ project->setActiveTarget(target);
+ }
}
+ }
- // create the target:
- Qt4Target *target = 0;
- if (!targetInfos.isEmpty())
- target = factory->create(project, targetId, targetInfos);
- if (target) {
- project->addTarget(target);
- if (target->id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
- project->setActiveTarget(target);
+ // Create a desktop target if nothing else was set up:
+ if (project->targets().isEmpty()) {
+ Qt4BaseTargetFactory *tf = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(Constants::DESKTOP_TARGET_ID);
+ if (tf) {
+ Qt4BaseTarget *target = tf->create(project, Constants::DESKTOP_TARGET_ID);
+ if (target)
+ project->addTarget(target);
}
}
- // Create the default target if nothing else was set up:
- if (project->targets().isEmpty()) {
- Qt4Target *target = factory->create(project, Constants::DESKTOP_TARGET_ID);
- if (target)
- project->addTarget(target);
+ // Select active target
+ // a) Simulator target
+ // b) Desktop target
+ // c) the first target
+ ProjectExplorer::Target *activeTarget = 0;
+ QList<ProjectExplorer::Target *> targets = project->targets();
+ foreach (ProjectExplorer::Target *t, targets) {
+ if (t->id() == Constants::QT_SIMULATOR_TARGET_ID)
+ activeTarget = t;
+ else if (!activeTarget && t->id() == Constants::DESKTOP_TARGET_ID)
+ activeTarget = t;
}
+ if (!activeTarget && !targets.isEmpty())
+ activeTarget = targets.first();
+ if (activeTarget)
+ project->setActiveTarget(activeTarget);
return !project->targets().isEmpty();
}
@@ -330,24 +354,31 @@ void TargetSetupPage::setProFilePath(const QString &path)
setImportInfos(tmp);
}
-QList<TargetSetupPage::ImportInfo> TargetSetupPage::importInfosForKnownQtVersions()
+QList<TargetSetupPage::ImportInfo> TargetSetupPage::importInfosForKnownQtVersions(const QString &proFilePath)
{
- QList<ImportInfo> results;
- QtVersionManager * vm = QtVersionManager::instance();
- QList<QtVersion *> validVersions = vm->validVersions();
- // Fallback in case no valid versions are found:
- if (validVersions.isEmpty())
- validVersions.append(vm->versions().at(0)); // there is always one!
- foreach (QtVersion *v, validVersions) {
+ QList<Qt4BaseTargetFactory *> factories =
+ ExtensionSystem::PluginManager::instance()->getObjects<Qt4BaseTargetFactory>();
+
+ QList<BuildConfigurationInfo> bcinfos;
+
+ foreach(Qt4BaseTargetFactory *fac, factories)
+ bcinfos.append(fac->availableBuildConfigurations(proFilePath));
+
+ QList<ImportInfo> infos;
+ foreach (const BuildConfigurationInfo &info, bcinfos) {
+ infos.append(ImportInfo(info));
+ }
+
+ if (infos.isEmpty()) {
+ // Fallback to the Qt in Path version
ImportInfo info;
info.isExistingBuild = false;
info.isTemporary = false;
- info.isShadowBuild = v->supportsShadowBuilds();
- info.version = v;
- info.buildConfig = v->defaultBuildConfig();
- results.append(info);
+ info.version = QtVersionManager::instance()->versions().at(0);
+ info.buildConfig = info.version->defaultBuildConfig();
+ infos.append(info);
}
- return results;
+ return infos;
}
QList<TargetSetupPage::ImportInfo> TargetSetupPage::filterImportInfos(const QSet<QString> &validTargets,
@@ -372,7 +403,8 @@ TargetSetupPage::scanDefaultProjectDirectories(Qt4ProjectManager::Qt4Project *pr
project->file()->fileName());
QtVersionManager *vm = QtVersionManager::instance();
foreach(const QString &id, vm->supportedTargetIds()) {
- QString location = Qt4Target::defaultShadowBuildDirectory(project->defaultTopLevelBuildDirectory(), id);
+ Qt4BaseTargetFactory *qt4Factory = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(id);
+ QString location = qt4Factory->defaultShadowBuildDirectory(project->defaultTopLevelBuildDirectory(), id);
importVersions.append(TargetSetupPage::recursivelyCheckDirectoryForBuild(location,
project->file()->fileName()));
}
@@ -404,7 +436,6 @@ TargetSetupPage::recursivelyCheckDirectoryForBuild(const QString &directory, con
QtVersionManager * vm = QtVersionManager::instance();
TargetSetupPage::ImportInfo info;
info.directory = dir.absolutePath();
- info.isShadowBuild = (info.directory != QFileInfo(proFile).absolutePath());
// This also means we have a build in there
// First get the qt version
@@ -513,17 +544,6 @@ void TargetSetupPage::checkOneTriggered()
checkOne(true, item);
}
-void TargetSetupPage::handleDoubleClicks(QTreeWidgetItem *item, int column)
-{
- int idx = item->data(NAME_COLUMN, Qt::UserRole).toInt();
- if (column == DIRECTORY_COLUMN && item->parent()) {
- if (m_infos[idx].isExistingBuild || !m_infos[idx].version->supportsShadowBuilds())
- return;
- m_infos[idx].isShadowBuild = !m_infos[idx].isShadowBuild;
- updateVersionItem(item, idx);
- }
-}
-
void TargetSetupPage::contextMenuRequested(const QPoint &position)
{
m_contextMenu->clear();
@@ -596,18 +616,7 @@ QPair<QIcon, QString> TargetSetupPage::reportIssues(Qt4ProjectManager::QtVersion
void TargetSetupPage::updateVersionItem(QTreeWidgetItem *versionItem, int index)
{
ImportInfo &info = m_infos[index];
- const QString target = versionItem->parent()->data(NAME_COLUMN, Qt::UserRole).toString();
- QString dir;
- if (info.directory.isEmpty()) {
- Q_ASSERT(!info.isTemporary && !info.isExistingBuild);
- if (info.isShadowBuild)
- dir = Qt4Target::defaultShadowBuildDirectory(Qt4Project::defaultTopLevelBuildDirectory(m_proFilePath), target);
- else
- dir = Qt4Project::projectDirectory(m_proFilePath);
- } else {
- dir = info.directory;
- }
- QPair<QIcon, QString> issues = reportIssues(info.version, dir);
+ QPair<QIcon, QString> issues = reportIssues(info.version, info.directory);
//: We are going to build debug and release
QString buildType = tr("debug and release");
@@ -631,7 +640,7 @@ void TargetSetupPage::updateVersionItem(QTreeWidgetItem *versionItem, int index)
// Column 0:
versionItem->setToolTip(NAME_COLUMN, toolTip);
versionItem->setIcon(NAME_COLUMN, issues.first);
- versionItem->setText(NAME_COLUMN, info.version->displayName());
+ versionItem->setText(NAME_COLUMN, info.version->displayName() + " " + buildType);
versionItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
versionItem->setData(NAME_COLUMN, Qt::UserRole, index);
@@ -646,6 +655,6 @@ void TargetSetupPage::updateVersionItem(QTreeWidgetItem *versionItem, int index)
// Column 2 (directory):
Q_ASSERT(versionItem->parent());
- versionItem->setText(DIRECTORY_COLUMN, QDir::toNativeSeparators(dir));
- versionItem->setToolTip(DIRECTORY_COLUMN, QDir::toNativeSeparators(dir));
+ versionItem->setText(DIRECTORY_COLUMN, QDir::toNativeSeparators(info.directory));
+ versionItem->setToolTip(DIRECTORY_COLUMN, QDir::toNativeSeparators(info.directory));
}
diff --git a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
index 257a333f10..47b9c847b8 100644
--- a/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
+++ b/src/plugins/qt4projectmanager/wizards/targetsetuppage.h
@@ -34,6 +34,7 @@
#ifndef TARGETSETUPPAGE_H
#define TARGETSETUPPAGE_H
+#include "qt4target.h"
#include "qtversionmanager.h"
#include <QtCore/QList>
@@ -71,21 +72,28 @@ public:
version(0),
isTemporary(false),
buildConfig(QtVersion::QmakeBuildConfig(0)),
- isExistingBuild(false),
- isShadowBuild(false)
+ isExistingBuild(false)
{
if (version && version->isValid())
buildConfig = version->defaultBuildConfig();
}
+ ImportInfo(const BuildConfigurationInfo &source)
+ : version(source.version),
+ isTemporary(false),
+ buildConfig(source.buildConfig),
+ additionalArguments(source.additionalArguments),
+ directory(source.directory),
+ isExistingBuild(false)
+ {}
+
ImportInfo(const ImportInfo &other) :
version(other.version),
isTemporary(other.isTemporary),
buildConfig(other.buildConfig),
additionalArguments(other.additionalArguments),
directory(other.directory),
- isExistingBuild(other.isExistingBuild),
- isShadowBuild(other.isShadowBuild)
+ isExistingBuild(other.isExistingBuild)
{ }
QtVersion *version;
@@ -94,7 +102,6 @@ public:
QString additionalArguments;
QString directory;
bool isExistingBuild;
- bool isShadowBuild;
};
explicit TargetSetupPage(QWidget* parent = 0);
@@ -109,7 +116,7 @@ public:
void setImportDirectoryBrowsingLocation(const QString &directory);
void setPreferMobile(bool mobile);
- static QList<ImportInfo> importInfosForKnownQtVersions();
+ static QList<ImportInfo> importInfosForKnownQtVersions(const QString &proFilePath);
static QList<ImportInfo> filterImportInfos(const QSet<QString> &validTargets,
const QList<ImportInfo> &infos);
@@ -135,7 +142,6 @@ private slots:
void uncheckAllTriggered();
void checkOneTriggered();
void addShadowBuildLocation();
- void handleDoubleClicks(QTreeWidgetItem *, int);
void contextMenuRequested(const QPoint & pos);
private: