From 399ad59faa00808634e629bae3e401be932d33df Mon Sep 17 00:00:00 2001
From: kh1 <qt-info@nokia.com>
Date: Tue, 23 Feb 2010 16:17:04 +0100
Subject: [PATCH] Move the factories inside there own source files.

---
 .../qt-maemo/maemoconstants.h                 |  55 ++++
 .../qt-maemo/maemomanager.cpp                 |   1 +
 .../qt-maemo/maemorunconfiguration.cpp        | 265 +---------------
 .../qt-maemo/maemorunconfiguration.h          |  64 +---
 .../qt-maemo/maemorunfactories.cpp            | 284 ++++++++++++++++++
 .../qt-maemo/maemorunfactories.h              |  95 ++++++
 .../qt4projectmanager/qt-maemo/qt-maemo.pri   |   9 +-
 7 files changed, 454 insertions(+), 319 deletions(-)
 create mode 100644 src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h
 create mode 100644 src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
 create mode 100644 src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.h

diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h
new file mode 100644
index 00000000000..c2d920ad9c9
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Creator.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef MAEMOCONSTANTS_H
+#define MAEMOCONSTANTS_H
+
+namespace Qt4ProjectManager {
+    namespace Internal {
+
+#define PREFIX "Qt4ProjectManager.MaemoRunConfiguration"
+
+static const QLatin1String MAEMO_RC_ID(PREFIX);
+static const QLatin1String MAEMO_RC_ID_PREFIX(PREFIX ".");
+
+static const QLatin1String ArgumentsKey(PREFIX ".Arguments");
+static const QLatin1String SimulatorPathKey(PREFIX ".Simulator");
+static const QLatin1String DeviceIdKey(PREFIX ".DeviceId");
+static const QLatin1String LastDeployedKey(PREFIX ".LastDeployed");
+static const QLatin1String DebuggingHelpersLastDeployedKey(PREFIX ".DebuggingHelpersLastDeployed");
+static const QLatin1String ProFileKey(".ProFile");
+
+    } // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif  // MAEMOCONSTANTS_H
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
index 879f9b9ad31..826f5634c98 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp
@@ -30,6 +30,7 @@
 #include "maemomanager.h"
 
 #include "maemodeviceconfigurations.h"
+#include "maemorunfactories.h"
 #include "maemosettingspage.h"
 #include "maemotoolchain.h"
 #include "maemorunconfiguration.h"
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
index ae2b5766bc0..65034d0359e 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp
@@ -28,58 +28,22 @@
 **************************************************************************/
 #include "maemorunconfiguration.h"
 
-#include "maemodeviceconfigurations.h"
+#include "maemoconstants.h"
 #include "maemomanager.h"
 #include "maemorunconfigurationwidget.h"
-#include "maemoruncontrol.h"
 #include "maemotoolchain.h"
-#include "profilereader.h"
-#include "qt4project.h"
-#include "qt4target.h"
-#include "qt4buildconfiguration.h"
 
 #include <coreplugin/icore.h>
 #include <coreplugin/messagemanager.h>
-#include <extensionsystem/pluginmanager.h>
-#include <utils/pathchooser.h>
+#include <qt4projectmanager/qt4project.h>
 #include <utils/qtcassert.h>
-#include <projectexplorer/persistentsettings.h>
-#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/session.h>
 
 #include <QtCore/QDebug>
 #include <QtCore/QProcess>
 #include <QtCore/QStringBuilder>
 
-namespace {
-const char * const MAEMO_RC_ID("Qt4ProjectManager.MaemoRunConfiguration");
-const char * const MAEMO_RC_ID_PREFIX("Qt4ProjectManager.MaemoRunConfiguration.");
-
-QString targetFromId(const QString &id)
-{
-    QString prefix(MAEMO_RC_ID_PREFIX);
-    if (!id.startsWith(prefix))
-        return QString();
-    return id.mid(prefix.size());
-}
-
-QString targetToId(const QString &target)
-{
-    return QString::fromLatin1(MAEMO_RC_ID_PREFIX) + target;
-}
-
-} // namespace
-
-static const QLatin1String ArgumentsKey("Qt4ProjectManager.MaemoRunConfiguration.Arguments");
-static const QLatin1String SimulatorPathKey("Qt4ProjectManager.MaemoRunConfiguration.Simulator");
-static const QLatin1String DeviceIdKey("Qt4ProjectManager.MaemoRunConfiguration.DeviceId");
-static const QLatin1String LastDeployedKey("Qt4ProjectManager.MaemoRunConfiguration.LastDeployed");
-static const QLatin1String DebuggingHelpersLastDeployedKey(
-    "Qt4ProjectManager.MaemoRunConfiguration.DebuggingHelpersLastDeployed");
-static const QLatin1String ProFileKey("Qt4ProjectManager.MaemoRunConfiguration.ProFile");
-
 namespace Qt4ProjectManager {
-namespace Internal {
+    namespace Internal {
 
 using namespace ProjectExplorer;
 
@@ -541,226 +505,5 @@ void MaemoRunConfiguration::updateDeviceConfigurations()
     emit deviceConfigurationsUpdated();
 }
 
-
-// #pragma mark -- MaemoRunConfigurationFactory
-
-
-MaemoRunConfigurationFactory::MaemoRunConfigurationFactory(QObject *parent)
-    : IRunConfigurationFactory(parent)
-{
-    ProjectExplorerPlugin *explorer = ProjectExplorerPlugin::instance();
-    connect(explorer->session(), SIGNAL(projectAdded(ProjectExplorer::Project*)),
-        this, SLOT(projectAdded(ProjectExplorer::Project*)));
-    connect(explorer->session(), SIGNAL(projectRemoved(ProjectExplorer::Project*)),
-        this, SLOT(projectRemoved(ProjectExplorer::Project*)));
-    connect(explorer, SIGNAL(currentProjectChanged(ProjectExplorer::Project*)),
-        this, SLOT(currentProjectChanged(ProjectExplorer::Project*)));
-}
-
-MaemoRunConfigurationFactory::~MaemoRunConfigurationFactory()
-{
-}
-
-bool MaemoRunConfigurationFactory::canCreate(Target *parent,
-    const QString &id) const
-{
-    Qt4Target *target = qobject_cast<Qt4Target *>(parent);
-    if (!target
-        || (target->id() != QLatin1String(MAEMO_DEVICE_TARGET_ID)
-            && target->id() != QLatin1String(MAEMO_EMULATOR_TARGET_ID))) {
-        return false;
-    }
-    return id == QLatin1String(MAEMO_RC_ID);
-}
-
-bool MaemoRunConfigurationFactory::canRestore(Target *parent,
-    const QVariantMap &map) const
-{
-    return canCreate(parent, ProjectExplorer::idFromMap(map));
-}
-
-bool MaemoRunConfigurationFactory::canClone(Target *parent,
-    RunConfiguration *source) const
-{
-    return canCreate(parent, source->id());
-}
-
-QStringList MaemoRunConfigurationFactory::availableCreationIds(Target *parent) const
-{
-    if (Qt4Target *t = qobject_cast<Qt4Target *>(parent)) {
-        if (t->id() == QLatin1String(MAEMO_DEVICE_TARGET_ID)
-            || t->id() == QLatin1String(MAEMO_EMULATOR_TARGET_ID)) {
-            return t->qt4Project()->
-                applicationProFilePathes(QLatin1String(MAEMO_RC_ID_PREFIX));
-        }
-    }
-    return QStringList();
-}
-
-QString MaemoRunConfigurationFactory::displayNameForId(const QString &id) const
-{
-    QString target(targetFromId(id));
-    if (target.isEmpty())
-        return QString();
-    return tr("%1 on Maemo Device").arg(QFileInfo(target).completeBaseName());
-}
-
-RunConfiguration *MaemoRunConfigurationFactory::create(Target *parent,
-    const QString &id)
-{
-    if (!canCreate(parent, id))
-        return 0;
-    Qt4Target *pqt4parent = static_cast<Qt4Target *>(parent);
-    MaemoRunConfiguration *rc = new MaemoRunConfiguration(pqt4parent,
-        targetFromId(id));
-    setupRunConfiguration(rc);
-    return rc;
-
-}
-
-RunConfiguration *MaemoRunConfigurationFactory::restore(Target *parent,
-    const QVariantMap &map)
-{
-    if (!canRestore(parent, map))
-        return 0;
-    Qt4Target *t = static_cast<Qt4Target *>(parent);
-    MaemoRunConfiguration *rc = new MaemoRunConfiguration(t, QString());
-    if (!rc->fromMap(map)) {
-        delete rc;
-        return 0;
-    }
-    setupRunConfiguration(rc);
-    return rc;
-}
-
-RunConfiguration *MaemoRunConfigurationFactory::clone(Target *parent,
-    RunConfiguration *source)
-{
-    if (!canClone(parent, source))
-        return 0;
-    Qt4Target *t = static_cast<Qt4Target *>(parent);
-    MaemoRunConfiguration *old = static_cast<MaemoRunConfiguration *>(source);
-    MaemoRunConfiguration *rc = new MaemoRunConfiguration(t, old);
-
-    setupRunConfiguration(rc);
-
-    return rc;
-}
-
-void MaemoRunConfigurationFactory::setupRunConfiguration(MaemoRunConfiguration *rc)
-{
-    if (rc) {
-        connect(MaemoManager::instance(), SIGNAL(startStopQemu()), rc,
-            SLOT(startStopQemu()));
-        connect(rc, SIGNAL(qemuProcessStatus(bool)), MaemoManager::instance(),
-            SLOT(updateQemuSimulatorStarter(bool)));
-    }
-}
-
-void MaemoRunConfigurationFactory::projectAdded(
-    ProjectExplorer::Project *project)
-{
-    connect(project, SIGNAL(addedTarget(ProjectExplorer::Target*)), this,
-        SLOT(targetAdded(ProjectExplorer::Target*)));
-    connect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)), this,
-        SLOT(targetRemoved(ProjectExplorer::Target*)));
-
-    foreach (Target *target, project->targets())
-        targetAdded(target);
-}
-
-void MaemoRunConfigurationFactory::projectRemoved(
-    ProjectExplorer::Project *project)
-{
-    disconnect(project, SIGNAL(addedTarget(ProjectExplorer::Target*)), this,
-        SLOT(targetAdded(ProjectExplorer::Target*)));
-    disconnect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)), this,
-        SLOT(targetRemoved(ProjectExplorer::Target*)));
-
-    foreach (Target *target, project->targets())
-        targetRemoved(target);
-}
-
-void MaemoRunConfigurationFactory::targetAdded(ProjectExplorer::Target *target)
-{
-    if (target->id() != QLatin1String(MAEMO_EMULATOR_TARGET_ID)
-        && target->id() != QLatin1String(MAEMO_DEVICE_TARGET_ID))
-        return;
-
-    MaemoManager::instance()->addQemuSimulatorStarter(target->project());
-}
-
-void MaemoRunConfigurationFactory::targetRemoved(ProjectExplorer::Target *target)
-{
-    if (target->id() != QLatin1String(MAEMO_EMULATOR_TARGET_ID)
-        && target->id() != QLatin1String(MAEMO_DEVICE_TARGET_ID))
-        return;
-
-    MaemoManager::instance()->removeQemuSimulatorStarter(target->project());
-}
-
-void MaemoRunConfigurationFactory::currentProjectChanged(
-    ProjectExplorer::Project *project)
-{
-    if (!project)
-        return;
-
-    Target *maemoTarget(project->target(QLatin1String(MAEMO_EMULATOR_TARGET_ID)));
-    if (!maemoTarget)
-        maemoTarget = project->target(QLatin1String(MAEMO_DEVICE_TARGET_ID));
-    MaemoManager::instance()->setQemuSimulatorStarterEnabled(maemoTarget != 0);
-
-    bool isRunning = false;
-    if (maemoTarget
-        && project->activeTarget() == maemoTarget
-        && maemoTarget->activeRunConfiguration()) {
-        MaemoRunConfiguration *mrc = qobject_cast<MaemoRunConfiguration *>
-            (maemoTarget->activeRunConfiguration());
-        if (mrc)
-            isRunning = mrc->isQemuRunning();
-    }
-    MaemoManager::instance()->updateQemuSimulatorStarter(isRunning);
-}
-
-
-// #pragma mark -- MaemoRunControlFactory
-
-
-MaemoRunControlFactory::MaemoRunControlFactory(QObject *parent)
-    : IRunControlFactory(parent)
-{
-}
-
-bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration,
-    const QString &mode) const
-{
-    return qobject_cast<MaemoRunConfiguration *>(runConfiguration)
-        && (mode == ProjectExplorer::Constants::RUNMODE
-        || mode == ProjectExplorer::Constants::DEBUGMODE);
-}
-
-RunControl* MaemoRunControlFactory::create(RunConfiguration *runConfig,
-    const QString &mode)
-{
-    MaemoRunConfiguration *rc = qobject_cast<MaemoRunConfiguration *>(runConfig);
-    Q_ASSERT(rc);
-    Q_ASSERT(mode == ProjectExplorer::Constants::RUNMODE
-        || mode == ProjectExplorer::Constants::DEBUGMODE);
-    if (mode == ProjectExplorer::Constants::RUNMODE)
-        return new MaemoRunControl(rc);
-    return new MaemoDebugRunControl(rc);
-}
-
-QString MaemoRunControlFactory::displayName() const
-{
-    return tr("Run on device");
-}
-
-QWidget* MaemoRunControlFactory::configurationWidget(RunConfiguration *config)
-{
-    Q_UNUSED(config)
-    return 0;
-}
-
-} // namespace Internal
+    } // namespace Internal
 } // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
index 9719b472f68..ad0c9796ce8 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h
@@ -32,12 +32,13 @@
 
 #include "maemodeviceconfigurations.h"
 
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/runconfiguration.h>
+
 #include <QtCore/QDateTime>
-#include <QtGui/QWidget>
 
-#include <debugger/debuggermanager.h>
-#include <projectexplorer/runconfiguration.h>
-#include <projectexplorer/applicationlauncher.h>
+QT_FORWARD_DECLARE_CLASS(QProcess)
+QT_FORWARD_DECLARE_CLASS(QWidget)
 
 namespace Qt4ProjectManager {
 
@@ -59,8 +60,7 @@ class MaemoRunConfiguration : public ProjectExplorer::RunConfiguration
     friend class MaemoRunConfigurationFactory;
 
 public:
-    MaemoRunConfiguration(Qt4Target *parent,
-                          const QString &proFilePath);
+    MaemoRunConfiguration(Qt4Target *parent, const QString &proFilePath);
     virtual ~MaemoRunConfiguration();
 
     bool isEnabled(ProjectExplorer::BuildConfiguration *config) const;
@@ -107,8 +107,7 @@ signals:
     void qemuProcessStatus(bool running);
 
 protected:
-    MaemoRunConfiguration(Qt4Target *parent,
-                          MaemoRunConfiguration *source);
+    MaemoRunConfiguration(Qt4Target *parent, MaemoRunConfiguration *source);
     virtual bool fromMap(const QVariantMap &map);
 
 private slots:
@@ -151,56 +150,9 @@ private:
     QDateTime m_debuggingHelpersLastDeployed;
 
     QProcess *qemu;
-    ErrorDumper dumper;
-};
-
-class MaemoRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory
-{
-    Q_OBJECT
-
-public:
-    explicit MaemoRunConfigurationFactory(QObject *parent = 0);
-    ~MaemoRunConfigurationFactory();
-
-    QStringList availableCreationIds(ProjectExplorer::Target *parent) const;
-    QString displayNameForId(const QString &id) const;
-
-    bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
-    bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const;
-    bool canCreate(ProjectExplorer::Target *parent, const QString &id) const;
-    ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
-    ProjectExplorer::RunConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source);
-    ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const QString &id);
-
-private slots:
-    void projectAdded(ProjectExplorer::Project *project);
-    void projectRemoved(ProjectExplorer::Project *project);
-
-    void targetAdded(ProjectExplorer::Target *target);
-    void targetRemoved(ProjectExplorer::Target *target);
-
-    void currentProjectChanged(ProjectExplorer::Project *project);
-
-private:
-    void setupRunConfiguration(MaemoRunConfiguration *rc);
-};
-
-
-class MaemoRunControlFactory : public ProjectExplorer::IRunControlFactory
-{
-    Q_OBJECT
-public:
-    MaemoRunControlFactory(QObject *parent = 0);
-    bool canRun(ProjectExplorer::RunConfiguration *runConfiguration,
-                const QString &mode) const;
-    ProjectExplorer::RunControl* create(ProjectExplorer::RunConfiguration *runConfiguration,
-                                        const QString &mode);
-    QString displayName() const;
-    QWidget *configurationWidget(ProjectExplorer::RunConfiguration *runConfiguration);
 };
 
-} // namespace Internal
+    } // namespace Internal
 } // namespace Qt4ProjectManager
 
-
 #endif // MAEMORUNCONFIGURATION_H
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
new file mode 100644
index 00000000000..5f270a13b02
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp
@@ -0,0 +1,284 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Creator.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "maemorunfactories.h"
+
+#include "maemoconstants.h"
+#include "maemomanager.h"
+#include "maemorunconfiguration.h"
+#include "maemoruncontrol.h"
+
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/projectexplorerconstants.h>
+#include <projectexplorer/session.h>
+#include <qt4projectmanager/qt4project.h>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+using namespace ProjectExplorer;
+
+namespace {
+
+QString targetFromId(const QString &id)
+{
+    if (!id.startsWith(MAEMO_RC_ID_PREFIX))
+        return QString();
+    return id.mid(QString(MAEMO_RC_ID_PREFIX).size());
+}
+
+} // namespace
+
+MaemoRunConfigurationFactory::MaemoRunConfigurationFactory(QObject *parent)
+    : IRunConfigurationFactory(parent)
+{
+    ProjectExplorerPlugin *explorer = ProjectExplorerPlugin::instance();
+    connect(explorer->session(), SIGNAL(projectAdded(ProjectExplorer::Project*)),
+        this, SLOT(projectAdded(ProjectExplorer::Project*)));
+    connect(explorer->session(), SIGNAL(projectRemoved(ProjectExplorer::Project*)),
+        this, SLOT(projectRemoved(ProjectExplorer::Project*)));
+    connect(explorer, SIGNAL(currentProjectChanged(ProjectExplorer::Project*)),
+        this, SLOT(currentProjectChanged(ProjectExplorer::Project*)));
+}
+
+MaemoRunConfigurationFactory::~MaemoRunConfigurationFactory()
+{
+}
+
+bool MaemoRunConfigurationFactory::canCreate(Target *parent,
+    const QString &id) const
+{
+    Qt4Target *target = qobject_cast<Qt4Target *>(parent);
+    if (!target
+        || (target->id() != QLatin1String(MAEMO_DEVICE_TARGET_ID)
+            && target->id() != QLatin1String(MAEMO_EMULATOR_TARGET_ID))) {
+        return false;
+    }
+    return id == QLatin1String(MAEMO_RC_ID);
+}
+
+bool MaemoRunConfigurationFactory::canRestore(Target *parent,
+    const QVariantMap &map) const
+{
+    return canCreate(parent, ProjectExplorer::idFromMap(map));
+}
+
+bool MaemoRunConfigurationFactory::canClone(Target *parent,
+    RunConfiguration *source) const
+{
+    return canCreate(parent, source->id());
+}
+
+QStringList MaemoRunConfigurationFactory::availableCreationIds(Target *parent) const
+{
+    if (Qt4Target *t = qobject_cast<Qt4Target *>(parent)) {
+        if (t->id() == QLatin1String(MAEMO_DEVICE_TARGET_ID)
+            || t->id() == QLatin1String(MAEMO_EMULATOR_TARGET_ID)) {
+            return t->qt4Project()->
+                applicationProFilePathes(QLatin1String(MAEMO_RC_ID_PREFIX));
+        }
+    }
+    return QStringList();
+}
+
+QString MaemoRunConfigurationFactory::displayNameForId(const QString &id) const
+{
+    QString target(targetFromId(id));
+    if (target.isEmpty())
+        return QString();
+    return tr("%1 on Maemo Device").arg(QFileInfo(target).completeBaseName());
+}
+
+RunConfiguration *MaemoRunConfigurationFactory::create(Target *parent,
+    const QString &id)
+{
+    if (!canCreate(parent, id))
+        return 0;
+    Qt4Target *pqt4parent = static_cast<Qt4Target *>(parent);
+    MaemoRunConfiguration *rc = new MaemoRunConfiguration(pqt4parent,
+        targetFromId(id));
+    setupRunConfiguration(rc);
+    return rc;
+
+}
+
+RunConfiguration *MaemoRunConfigurationFactory::restore(Target *parent,
+    const QVariantMap &map)
+{
+    if (!canRestore(parent, map))
+        return 0;
+    Qt4Target *t = static_cast<Qt4Target *>(parent);
+    MaemoRunConfiguration *rc = new MaemoRunConfiguration(t, QString());
+    if (!rc->fromMap(map)) {
+        delete rc;
+        return 0;
+    }
+    setupRunConfiguration(rc);
+    return rc;
+}
+
+RunConfiguration *MaemoRunConfigurationFactory::clone(Target *parent,
+    RunConfiguration *source)
+{
+    if (!canClone(parent, source))
+        return 0;
+    Qt4Target *t = static_cast<Qt4Target *>(parent);
+    MaemoRunConfiguration *old = static_cast<MaemoRunConfiguration *>(source);
+    MaemoRunConfiguration *rc = new MaemoRunConfiguration(t, old);
+
+    setupRunConfiguration(rc);
+
+    return rc;
+}
+
+void MaemoRunConfigurationFactory::setupRunConfiguration(MaemoRunConfiguration *rc)
+{
+    if (rc) {
+        connect(MaemoManager::instance(), SIGNAL(startStopQemu()), rc,
+            SLOT(startStopQemu()));
+        connect(rc, SIGNAL(qemuProcessStatus(bool)), MaemoManager::instance(),
+            SLOT(updateQemuSimulatorStarter(bool)));
+    }
+}
+
+void MaemoRunConfigurationFactory::projectAdded(
+    ProjectExplorer::Project *project)
+{
+    connect(project, SIGNAL(addedTarget(ProjectExplorer::Target*)), this,
+        SLOT(targetAdded(ProjectExplorer::Target*)));
+    connect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)), this,
+        SLOT(targetRemoved(ProjectExplorer::Target*)));
+
+    foreach (Target *target, project->targets())
+        targetAdded(target);
+}
+
+void MaemoRunConfigurationFactory::projectRemoved(
+    ProjectExplorer::Project *project)
+{
+    disconnect(project, SIGNAL(addedTarget(ProjectExplorer::Target*)), this,
+        SLOT(targetAdded(ProjectExplorer::Target*)));
+    disconnect(project, SIGNAL(removedTarget(ProjectExplorer::Target*)), this,
+        SLOT(targetRemoved(ProjectExplorer::Target*)));
+
+    foreach (Target *target, project->targets())
+        targetRemoved(target);
+}
+
+void MaemoRunConfigurationFactory::targetAdded(ProjectExplorer::Target *target)
+{
+    if (target->id() != QLatin1String(MAEMO_EMULATOR_TARGET_ID)
+        && target->id() != QLatin1String(MAEMO_DEVICE_TARGET_ID))
+        return;
+
+    MaemoManager::instance()->addQemuSimulatorStarter(target->project());
+}
+
+void MaemoRunConfigurationFactory::targetRemoved(ProjectExplorer::Target *target)
+{
+    if (target->id() != QLatin1String(MAEMO_EMULATOR_TARGET_ID)
+        && target->id() != QLatin1String(MAEMO_DEVICE_TARGET_ID))
+        return;
+
+    MaemoManager::instance()->removeQemuSimulatorStarter(target->project());
+}
+
+void MaemoRunConfigurationFactory::currentProjectChanged(
+    ProjectExplorer::Project *project)
+{
+    if (!project)
+        return;
+
+    Target *maemoTarget(project->target(QLatin1String(MAEMO_EMULATOR_TARGET_ID)));
+    if (!maemoTarget)
+        maemoTarget = project->target(QLatin1String(MAEMO_DEVICE_TARGET_ID));
+    MaemoManager::instance()->setQemuSimulatorStarterEnabled(maemoTarget != 0);
+
+    bool isRunning = false;
+    if (maemoTarget
+        && project->activeTarget() == maemoTarget
+        && maemoTarget->activeRunConfiguration()) {
+        MaemoRunConfiguration *mrc = qobject_cast<MaemoRunConfiguration *>
+            (maemoTarget->activeRunConfiguration());
+        if (mrc)
+            isRunning = mrc->isQemuRunning();
+    }
+    MaemoManager::instance()->updateQemuSimulatorStarter(isRunning);
+}
+
+
+// #pragma mark -- MaemoRunControlFactory
+
+
+MaemoRunControlFactory::MaemoRunControlFactory(QObject *parent)
+    : IRunControlFactory(parent)
+{
+}
+
+MaemoRunControlFactory::~MaemoRunControlFactory()
+{
+}
+
+bool MaemoRunControlFactory::canRun(RunConfiguration *runConfiguration,
+    const QString &mode) const
+{
+    return qobject_cast<MaemoRunConfiguration *>(runConfiguration)
+        && (mode == ProjectExplorer::Constants::RUNMODE
+        || mode == ProjectExplorer::Constants::DEBUGMODE);
+}
+
+RunControl* MaemoRunControlFactory::create(RunConfiguration *runConfig,
+    const QString &mode)
+{
+    MaemoRunConfiguration *rc = qobject_cast<MaemoRunConfiguration *>(runConfig);
+    Q_ASSERT(rc);
+    Q_ASSERT(mode == ProjectExplorer::Constants::RUNMODE
+        || mode == ProjectExplorer::Constants::DEBUGMODE);
+    if (mode == ProjectExplorer::Constants::RUNMODE)
+        return new MaemoRunControl(rc);
+    return new MaemoDebugRunControl(rc);
+}
+
+QString MaemoRunControlFactory::displayName() const
+{
+    return tr("Run on device");
+}
+
+QWidget* MaemoRunControlFactory::configurationWidget(RunConfiguration *config)
+{
+    Q_UNUSED(config)
+    return 0;
+}
+
+    } // namespace Internal
+} // namespace Qt4ProjectManager
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.h
new file mode 100644
index 00000000000..ae99dedf94e
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Creator.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef MAEMORUNFACTORIES_H
+#define MAEMORUNFACTORIES_H
+
+#include <projectexplorer/runconfiguration.h>
+
+namespace Qt4ProjectManager {
+    namespace Internal {
+
+class MaemoRunConfiguration;
+using namespace ProjectExplorer;
+
+class MaemoRunConfigurationFactory : public IRunConfigurationFactory
+{
+    Q_OBJECT
+
+public:
+    explicit MaemoRunConfigurationFactory(QObject *parent = 0);
+    ~MaemoRunConfigurationFactory();
+
+    QString displayNameForId(const QString &id) const;
+    QStringList availableCreationIds(Target *parent) const;
+
+    bool canCreate(Target *parent, const QString &id) const;
+    RunConfiguration *create(Target *parent, const QString &id);
+
+    bool canRestore(Target *parent, const QVariantMap &map) const;
+    RunConfiguration *restore(Target *parent, const QVariantMap &map);
+
+    bool canClone(Target *parent, RunConfiguration *source) const;
+    RunConfiguration *clone(Target *parent, RunConfiguration *source);
+
+private slots:
+    void projectAdded(ProjectExplorer::Project *project);
+    void projectRemoved(ProjectExplorer::Project *project);
+
+    void targetAdded(ProjectExplorer::Target *target);
+    void targetRemoved(ProjectExplorer::Target *target);
+
+    void currentProjectChanged(ProjectExplorer::Project *project);
+
+private:
+    void setupRunConfiguration(MaemoRunConfiguration *rc);
+};
+
+class MaemoRunControlFactory : public IRunControlFactory
+{
+    Q_OBJECT
+public:
+    explicit MaemoRunControlFactory(QObject *parent = 0);
+    ~MaemoRunControlFactory();
+
+    QString displayName() const;
+    QWidget *configurationWidget(RunConfiguration *runConfiguration);
+
+    bool canRun(RunConfiguration *runConfiguration, const QString &mode) const;
+    RunControl* create(RunConfiguration *runConfiguration, const QString &mode);
+};
+
+    } // namespace Internal
+} // namespace Qt4ProjectManager
+
+#endif  // MAEMORUNFACTORIES_H
diff --git a/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri b/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri
index 79abb2f613d..46c13a3fd63 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri
+++ b/src/plugins/qt4projectmanager/qt-maemo/qt-maemo.pri
@@ -10,7 +10,10 @@ HEADERS += $$PWD/maemorunconfiguration.h \
     $$PWD/maemosshconnection.h \
     $$PWD/maemosshthread.h \
     $$PWD/maemoruncontrol.h \
-    $$PWD/maemorunconfigurationwidget.h
+    $$PWD/maemorunconfigurationwidget.h \
+    $$PWD/maemorunfactories.h \
+    $$PWD/maemoconstants.h
+
 SOURCES += $$PWD/maemorunconfiguration.cpp \
     $$PWD/maemomanager.cpp \
     $$PWD/maemotoolchain.cpp \
@@ -20,6 +23,8 @@ SOURCES += $$PWD/maemorunconfiguration.cpp \
     $$PWD/maemosshconnection.cpp \
     $$PWD/maemosshthread.cpp \
     $$PWD/maemoruncontrol.cpp \
-    $$PWD/maemorunconfigurationwidget.cpp
+    $$PWD/maemorunconfigurationwidget.cpp \
+    $$PWD/maemorunfactories.cpp
+
 FORMS += $$PWD/maemosettingswidget.ui
 RESOURCES += $$PWD/qt-maemo.qrc
-- 
GitLab