Qt4projectManager: Refactor Qt4Target, split up in per target classes

Almost(*) all of the symbian and maemo specific code is now theoretically
moveable to a separate plugin. Thus making it possible to implement
new targets in a plugin.

(*) Noteable missing is the qtversion, which needs to be split up
per target too.

Also fixes
Task-Nr: QTCREATORBUG-2440

Reviewed-By: hunger
Reviewed-By: ck
This commit is contained in:
dt
2010-12-10 19:02:19 +01:00
parent 77bf0c17c5
commit 67cfb7e078
81 changed files with 2407 additions and 1013 deletions
@@ -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();
@@ -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;
@@ -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();
@@ -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;
+18 -42
View File
@@ -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 (!t) {
qWarning() << "Restoration of a target failed! (Continuing)";
continue;
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;
}
addTarget(t);
if (i == active)
setActiveTarget(t);
}
addTarget(t);
if (i == active)
setActiveTarget(t);
}
return true;
}
-11
View File
@@ -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();
@@ -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();
+45 -21
View File
@@ -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();
+5 -2
View File
@@ -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;
};
+2 -3
View File
@@ -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
@@ -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);
}
@@ -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();
@@ -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();
@@ -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;
@@ -34,7 +34,6 @@
#include "externaleditors.h"
#include "qt4project.h"
#include "qt4projectmanagerconstants.h"
#include "qt4target.h"
#include "qtversionmanager.h"
#include "qt4buildconfiguration.h"
@@ -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());
+1 -1
View File
@@ -47,8 +47,8 @@ class Project;
}
namespace Qt4ProjectManager {
class Qt4Project;
class Qt4BuildConfiguration;
class Qt4Project;
namespace Internal {
@@ -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
@@ -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));
}
}
@@ -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
@@ -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;
}
@@ -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
@@ -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)
@@ -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:
@@ -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));
}
}
@@ -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
@@ -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;
}
@@ -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
@@ -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();
@@ -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()));
@@ -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;
};
@@ -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 {
@@ -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;
}
@@ -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
@@ -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();
@@ -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
@@ -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();
@@ -42,6 +42,7 @@
#include "maemoremotemountsmodel.h"
#include "maemorunconfiguration.h"
#include "maemosettingspages.h"
#include "qt4maemotarget.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/icore.h>
@@ -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
@@ -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;
@@ -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,
@@ -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 \
@@ -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;
}
@@ -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
@@ -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));
}
}
@@ -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
@@ -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;
}
@@ -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
@@ -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
@@ -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());
}
}
@@ -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
@@ -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;
}
@@ -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
@@ -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);
}
@@ -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;
@@ -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);
}
@@ -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:
@@ -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();
@@ -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:
@@ -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()));
@@ -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;
@@ -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:
@@ -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);
}
+10 -66
View File
@@ -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;
+3 -5
View File
@@ -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
@@ -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)
@@ -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;
@@ -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
@@ -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
+60 -405
View File
@@ -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()
Qt4BaseTargetFactory::~Qt4BaseTargetFactory()
{
}
bool Qt4TargetFactory::supportsTargetId(const QString &id) const
Qt4BaseTargetFactory *Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(const QString &id)
{
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
{
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)
{
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)));
}
QList<Qt4BaseTargetFactory *> factories = ExtensionSystem::PluginManager::instance()->getObjects<Qt4BaseTargetFactory>();
foreach (Qt4BaseTargetFactory *fac, factories) {
if (fac->supportsTargetId(id))
return fac;
}
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();
}
// 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;
}
+31 -59
View File
@@ -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
@@ -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
@@ -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,
@@ -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
{
@@ -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,
@@ -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,
@@ -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,
@@ -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);
}
@@ -159,6 +159,7 @@ private:
TargetSetupPage *m_targetSetupPage;
QString m_selectedModules;
QString m_deselectedModules;
QSet<QString> m_targets;
};
} // namespace Internal
@@ -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,59 +248,71 @@ 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;
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()];
ImportInfo &info = m_infos[child->data(NAME_COLUMN, 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));
}
// 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);
if (target) {
project->addTarget(target);
if (target->id() == QLatin1String(Constants::QT_SIMULATOR_TARGET_ID))
project->setActiveTarget(target);
}
}
}
// Create the default target if nothing else was set up:
// Create a desktop 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);
Qt4BaseTargetFactory *tf = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(Constants::DESKTOP_TARGET_ID);
if (tf) {
Qt4BaseTarget *target = tf->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));
}
@@ -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: