2009-05-26 15:31:29 +02:00
|
|
|
/**************************************************************************
|
|
|
|
|
**
|
|
|
|
|
** This file is part of Qt Creator
|
|
|
|
|
**
|
|
|
|
|
** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
|
|
|
**
|
|
|
|
|
** Contact: Qt Software Information (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 qt-sales@nokia.com.
|
|
|
|
|
**
|
|
|
|
|
**************************************************************************/
|
|
|
|
|
|
|
|
|
|
#include "s60manager.h"
|
|
|
|
|
|
|
|
|
|
#include "s60devices.h"
|
|
|
|
|
#include "s60devicespreferencepane.h"
|
2009-05-28 18:36:52 +02:00
|
|
|
#include "winscwtoolchain.h"
|
2009-06-05 16:10:26 +02:00
|
|
|
#include "gccetoolchain.h"
|
2009-06-16 15:11:47 +02:00
|
|
|
#include "s60emulatorrunconfiguration.h"
|
2009-06-17 15:29:45 +02:00
|
|
|
#include "s60Devicerunconfiguration.h"
|
2009-05-26 15:31:29 +02:00
|
|
|
|
|
|
|
|
#include <extensionsystem/pluginmanager.h>
|
|
|
|
|
|
|
|
|
|
using namespace Qt4ProjectManager::Internal;
|
|
|
|
|
|
2009-05-28 18:36:52 +02:00
|
|
|
S60Manager *S60Manager::m_instance = 0;
|
|
|
|
|
|
2009-05-28 13:22:23 +02:00
|
|
|
namespace {
|
|
|
|
|
static const char *S60_AUTODETECTION_SOURCE = "QTS60";
|
|
|
|
|
}
|
|
|
|
|
|
2009-05-28 18:36:52 +02:00
|
|
|
S60Manager *S60Manager::instance() { return m_instance; }
|
|
|
|
|
|
2009-05-26 15:31:29 +02:00
|
|
|
S60Manager::S60Manager(QObject *parent)
|
|
|
|
|
: QObject(parent),
|
|
|
|
|
m_devices(new S60Devices(this)),
|
2009-06-16 15:11:47 +02:00
|
|
|
m_devicesPreferencePane(new S60DevicesPreferencePane(m_devices, this)),
|
|
|
|
|
m_s60EmulatorRunConfigurationFactory(new S60EmulatorRunConfigurationFactory(this)),
|
2009-06-17 15:29:45 +02:00
|
|
|
m_s60EmulatorRunConfigurationRunner(new S60EmulatorRunConfigurationRunner(this)),
|
|
|
|
|
m_s60DeviceRunConfigurationFactory(new S60DeviceRunConfigurationFactory(this)),
|
|
|
|
|
m_s60DeviceRunConfigurationRunner(new S60DeviceRunConfigurationRunner(this))
|
2009-05-26 15:31:29 +02:00
|
|
|
{
|
2009-05-28 18:36:52 +02:00
|
|
|
m_instance = this;
|
2009-05-26 15:31:29 +02:00
|
|
|
m_devices->detectQtForDevices();
|
|
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->addObject(m_devicesPreferencePane);
|
2009-06-16 15:11:47 +02:00
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->addObject(m_s60EmulatorRunConfigurationFactory);
|
|
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->addObject(m_s60EmulatorRunConfigurationRunner);
|
2009-06-17 15:29:45 +02:00
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->addObject(m_s60DeviceRunConfigurationFactory);
|
|
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->addObject(m_s60DeviceRunConfigurationRunner);
|
2009-05-28 13:22:23 +02:00
|
|
|
updateQtVersions();
|
2009-05-28 16:48:02 +02:00
|
|
|
connect(m_devices, SIGNAL(qtVersionsChanged()),
|
|
|
|
|
this, SLOT(updateQtVersions()));
|
2009-05-26 15:31:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
S60Manager::~S60Manager()
|
|
|
|
|
{
|
2009-06-17 15:29:45 +02:00
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->removeObject(m_s60DeviceRunConfigurationRunner);
|
|
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->removeObject(m_s60DeviceRunConfigurationFactory);
|
2009-06-16 15:11:47 +02:00
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->removeObject(m_s60EmulatorRunConfigurationRunner);
|
|
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->removeObject(m_s60EmulatorRunConfigurationFactory);
|
2009-05-26 15:31:29 +02:00
|
|
|
ExtensionSystem::PluginManager::instance()
|
|
|
|
|
->removeObject(m_devicesPreferencePane);
|
|
|
|
|
}
|
2009-05-28 13:22:23 +02:00
|
|
|
|
2009-06-16 15:11:47 +02:00
|
|
|
QString S60Manager::deviceIdFromDetectionSource(const QString &autoDetectionSource) const
|
|
|
|
|
{
|
|
|
|
|
if (autoDetectionSource.startsWith(S60_AUTODETECTION_SOURCE))
|
|
|
|
|
return autoDetectionSource.mid(QString(S60_AUTODETECTION_SOURCE).length()+1);
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
2009-05-28 13:22:23 +02:00
|
|
|
void S60Manager::updateQtVersions()
|
|
|
|
|
{
|
|
|
|
|
// This assumes that the QtVersionManager has already read
|
|
|
|
|
// the Qt versions from the settings
|
|
|
|
|
QtVersionManager *versionManager = QtVersionManager::instance();
|
|
|
|
|
QList<QtVersion *> versions = versionManager->versions();
|
|
|
|
|
QList<QtVersion *> handledVersions;
|
|
|
|
|
QList<QtVersion *> versionsToAdd;
|
|
|
|
|
foreach (const S60Devices::Device &device, m_devices->devices()) {
|
|
|
|
|
if (device.qt.isEmpty()) // no Qt version found for this sdk
|
|
|
|
|
continue;
|
|
|
|
|
QtVersion *deviceVersion = 0;
|
|
|
|
|
// look if we have a respective Qt version already
|
|
|
|
|
foreach (QtVersion *version, versions) {
|
|
|
|
|
if (version->isAutodetected()
|
2009-06-16 15:11:47 +02:00
|
|
|
&& deviceIdFromDetectionSource(version->autodetectionSource()) == device.id) {
|
2009-05-28 13:22:23 +02:00
|
|
|
deviceVersion = version;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (deviceVersion) {
|
|
|
|
|
deviceVersion->setName(QString("%1 (Qt %2)").arg(device.id, deviceVersion->qtVersionString()));
|
|
|
|
|
deviceVersion->setPath(device.qt);
|
|
|
|
|
handledVersions.append(deviceVersion);
|
|
|
|
|
} else {
|
|
|
|
|
deviceVersion = new QtVersion(QString("%1 (Qt %2)").arg(device.id), device.qt,
|
|
|
|
|
true, QString("%1.%2").arg(S60_AUTODETECTION_SOURCE, device.id));
|
|
|
|
|
deviceVersion->setName(deviceVersion->name().arg(deviceVersion->qtVersionString()));
|
|
|
|
|
versionsToAdd.append(deviceVersion);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// remove old autodetected versions
|
|
|
|
|
foreach (QtVersion *version, versions) {
|
|
|
|
|
if (version->isAutodetected()
|
|
|
|
|
&& version->autodetectionSource().startsWith(S60_AUTODETECTION_SOURCE)
|
|
|
|
|
&& !handledVersions.contains(version)) {
|
|
|
|
|
versionManager->removeVersion(version);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// add new versions
|
|
|
|
|
foreach (QtVersion *version, versionsToAdd) {
|
|
|
|
|
versionManager->addVersion(version);
|
|
|
|
|
}
|
|
|
|
|
}
|
2009-05-28 18:36:52 +02:00
|
|
|
|
|
|
|
|
ProjectExplorer::ToolChain *S60Manager::createWINSCWToolChain(const Qt4ProjectManager::QtVersion *version) const
|
|
|
|
|
{
|
|
|
|
|
QString id = version->autodetectionSource().mid(QString(S60_AUTODETECTION_SOURCE).length()+1);
|
2009-06-04 10:50:44 +02:00
|
|
|
return new WINSCWToolChain(m_devices->deviceForId(id), version->mwcDirectory());
|
2009-05-28 18:36:52 +02:00
|
|
|
}
|
2009-06-05 16:10:26 +02:00
|
|
|
|
|
|
|
|
ProjectExplorer::ToolChain *S60Manager::createGCCEToolChain(const Qt4ProjectManager::QtVersion *version) const
|
|
|
|
|
{
|
|
|
|
|
QString id = version->autodetectionSource().mid(QString(S60_AUTODETECTION_SOURCE).length()+1);
|
|
|
|
|
return new GCCEToolChain(m_devices->deviceForId(id));
|
|
|
|
|
}
|