summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@nokia.com>2012-05-29 17:00:24 +0200
committerTobias Hunger <tobias.hunger@nokia.com>2012-05-30 15:54:38 +0200
commit468d7c32b634d207fad2e37888f787fdd7f92762 (patch)
treeee80f3f6ffe12cfa8479cdb0c6489cc60e02713b
parentefb1b7fc3b578af873b854190e6dce7051d5d545 (diff)
downloadqt-creator-468d7c32b634d207fad2e37888f787fdd7f92762.tar.gz
DeviceFactory: Allow for querying supported device types
Allow to query the DeviceFactory for device types it can create as well as the display names to use for those types. Also allow to create any of the supported device types. The MaddeDeviceFactory makes use of the information to set the correct type in the wizard. Change-Id: I8c05ecd467e5bb1b151a84a8d62ef98a57849605 Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com>
-rw-r--r--src/plugins/madde/maddedeviceconfigurationfactory.cpp12
-rw-r--r--src/plugins/madde/maddedeviceconfigurationfactory.h7
-rw-r--r--src/plugins/madde/maemodeviceconfigwizard.cpp23
-rw-r--r--src/plugins/madde/maemodeviceconfigwizard.h2
-rw-r--r--src/plugins/madde/maemodeviceconfigwizardstartpage.ui42
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevice.cpp6
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevice.h2
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp23
-rw-r--r--src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h5
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp14
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.h5
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp4
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp8
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevicefactory.cpp58
-rw-r--r--src/plugins/projectexplorer/devicesupport/idevicefactory.h16
-rw-r--r--src/plugins/projectexplorer/projectexplorer.cpp2
-rw-r--r--src/plugins/projectexplorer/projectexplorer.pro1
-rw-r--r--src/plugins/projectexplorer/projectexplorer.qbs1
-rw-r--r--src/plugins/projectexplorer/projectexplorerconstants.h4
-rw-r--r--src/plugins/projectexplorer/target.cpp3
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp14
-rw-r--r--src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h6
-rw-r--r--src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp10
-rw-r--r--src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h7
24 files changed, 177 insertions, 98 deletions
diff --git a/src/plugins/madde/maddedeviceconfigurationfactory.cpp b/src/plugins/madde/maddedeviceconfigurationfactory.cpp
index 0f550e1b66..2f3f2fb384 100644
--- a/src/plugins/madde/maddedeviceconfigurationfactory.cpp
+++ b/src/plugins/madde/maddedeviceconfigurationfactory.cpp
@@ -48,19 +48,19 @@ MaddeDeviceConfigurationFactory::MaddeDeviceConfigurationFactory(QObject *parent
{
}
-QString MaddeDeviceConfigurationFactory::displayName() const
+QString MaddeDeviceConfigurationFactory::displayNameForId(Core::Id type) const
{
- return tr("Device with MADDE support (Fremantle, Harmattan, MeeGo)");
+ return MaddeDevice::maddeDisplayType(type);
}
-bool MaddeDeviceConfigurationFactory::canCreate() const
+QList<Core::Id> MaddeDeviceConfigurationFactory::availableCreationIds() const
{
- return true;
+ return QList<Core::Id>() << Core::Id(Maemo5OsType) << Core::Id(HarmattanOsType) << Core::Id(MeeGoOsType);
}
-IDevice::Ptr MaddeDeviceConfigurationFactory::create() const
+IDevice::Ptr MaddeDeviceConfigurationFactory::create(Core::Id id) const
{
- MaemoDeviceConfigWizard wizard;
+ MaemoDeviceConfigWizard wizard(id);
if (wizard.exec() != QDialog::Accepted)
return IDevice::Ptr();
return wizard.device();
diff --git a/src/plugins/madde/maddedeviceconfigurationfactory.h b/src/plugins/madde/maddedeviceconfigurationfactory.h
index ebeed4a64a..b57d8a5dbc 100644
--- a/src/plugins/madde/maddedeviceconfigurationfactory.h
+++ b/src/plugins/madde/maddedeviceconfigurationfactory.h
@@ -43,9 +43,10 @@ class MaddeDeviceConfigurationFactory : public ProjectExplorer::IDeviceFactory
public:
MaddeDeviceConfigurationFactory(QObject *parent = 0);
- QString displayName() const;
- bool canCreate() const;
- ProjectExplorer::IDevice::Ptr create() const;
+ QString displayNameForId(Core::Id type) const;
+ QList<Core::Id> availableCreationIds() const;
+
+ ProjectExplorer::IDevice::Ptr create(Core::Id id) const;
bool canRestore(const QVariantMap &map) const;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const;
};
diff --git a/src/plugins/madde/maemodeviceconfigwizard.cpp b/src/plugins/madde/maemodeviceconfigwizard.cpp
index 40628569eb..65df2f67e3 100644
--- a/src/plugins/madde/maemodeviceconfigwizard.cpp
+++ b/src/plugins/madde/maemodeviceconfigwizard.cpp
@@ -99,21 +99,13 @@ class MaemoDeviceConfigWizardStartPage : public QWizardPage
Q_OBJECT
public:
- MaemoDeviceConfigWizardStartPage(QWidget *parent = 0)
+ explicit MaemoDeviceConfigWizardStartPage(QWidget *parent = 0)
: QWizardPage(parent), m_ui(new Ui::MaemoDeviceConfigWizardStartPage)
{
m_ui->setupUi(this);
setTitle(tr("General Information"));
setSubTitle(QLatin1String(" ")); // For Qt bug (background color)
- m_ui->osTypeComboBox->addItem(MaddeDevice::maddeDisplayType(Core::Id(Maemo5OsType)),
- QVariant::fromValue(Core::Id(Maemo5OsType)));
- const QVariant harmattanIdVariant = QVariant::fromValue(Core::Id(HarmattanOsType));
- m_ui->osTypeComboBox->addItem(MaddeDevice::maddeDisplayType(Core::Id(HarmattanOsType)),
- harmattanIdVariant);
- m_ui->osTypeComboBox->addItem(MaddeDevice::maddeDisplayType(Core::Id(MeeGoOsType)),
- QVariant::fromValue(Core::Id(MeeGoOsType)));
-
QButtonGroup *buttonGroup = new QButtonGroup(this);
buttonGroup->setExclusive(true);
buttonGroup->addButton(m_ui->hwButton);
@@ -121,7 +113,6 @@ public:
connect(buttonGroup, SIGNAL(buttonClicked(int)), SLOT(handleMachineTypeChanged()));
m_ui->nameLineEdit->setText(tr("MeeGo Device"));
- m_ui->osTypeComboBox->setCurrentIndex(m_ui->osTypeComboBox->findData(harmattanIdVariant));
m_ui->hwButton->setChecked(true);
handleMachineTypeChanged();
m_ui->hostNameLineEdit->setText(defaultHost(machineType()));
@@ -134,6 +125,12 @@ public:
SIGNAL(completeChanged()));
}
+ void setDeviceType(Core::Id type)
+ {
+ m_deviceType = type;
+ m_ui->nameLineEdit->setText(tr("%1 Device").arg(MaddeDevice::maddeDisplayType(m_deviceType)));
+ }
+
virtual bool isComplete() const
{
return !configName().isEmpty() && !hostName().isEmpty();
@@ -150,7 +147,7 @@ public:
Core::Id deviceType() const
{
- return m_ui->osTypeComboBox->itemData(m_ui->osTypeComboBox->currentIndex()).value<Core::Id>();
+ return m_deviceType;
}
LinuxDeviceConfiguration::MachineType machineType() const
@@ -177,6 +174,7 @@ private slots:
private:
const QScopedPointer<Ui::MaemoDeviceConfigWizardStartPage> m_ui;
+ Core::Id m_deviceType;
};
class MaemoDeviceConfigWizardPreviousKeySetupCheckPage : public QWizardPage
@@ -540,11 +538,12 @@ struct MaemoDeviceConfigWizardPrivate
};
-MaemoDeviceConfigWizard::MaemoDeviceConfigWizard(QWidget *parent)
+MaemoDeviceConfigWizard::MaemoDeviceConfigWizard(Core::Id id, QWidget *parent)
: QWizard(parent), d(new MaemoDeviceConfigWizardPrivate(this))
{
setWindowTitle(tr("New Device Configuration Setup"));
setPage(StartPageId, &d->startPage);
+ d->startPage.setDeviceType(id);
setPage(PreviousKeySetupCheckPageId, &d->previousKeySetupPage);
setPage(ReuseKeysCheckPageId, &d->reuseKeysCheckPage);
setPage(KeyCreationPageId, &d->keyCreationPage);
diff --git a/src/plugins/madde/maemodeviceconfigwizard.h b/src/plugins/madde/maemodeviceconfigwizard.h
index 04ffd6893b..bea425307d 100644
--- a/src/plugins/madde/maemodeviceconfigwizard.h
+++ b/src/plugins/madde/maemodeviceconfigwizard.h
@@ -46,7 +46,7 @@ class MaemoDeviceConfigWizard : public QWizard
Q_OBJECT
public:
- explicit MaemoDeviceConfigWizard(QWidget *parent = 0);
+ explicit MaemoDeviceConfigWizard(Core::Id id, QWidget *parent = 0);
~MaemoDeviceConfigWizard();
ProjectExplorer::IDevice::Ptr device();
diff --git a/src/plugins/madde/maemodeviceconfigwizardstartpage.ui b/src/plugins/madde/maemodeviceconfigwizardstartpage.ui
index 94e3cc836a..370fc5baea 100644
--- a/src/plugins/madde/maemodeviceconfigwizardstartpage.ui
+++ b/src/plugins/madde/maemodeviceconfigwizardstartpage.ui
@@ -7,13 +7,16 @@
<x>0</x>
<y>0</y>
<width>721</width>
- <height>176</height>
+ <height>136</height>
</rect>
</property>
<property name="windowTitle">
<string>WizardPage</string>
</property>
<layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
<item row="0" column="0">
<widget class="QLabel" name="nameLabel">
<property name="text">
@@ -25,40 +28,13 @@
<widget class="QLineEdit" name="nameLineEdit"/>
</item>
<item row="1" column="0">
- <widget class="QLabel" name="maemoVersionLabel">
- <property name="text">
- <string>The system running on the device:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QComboBox" name="osTypeComboBox"/>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item row="2" column="0">
<widget class="QLabel" name="typeLabel">
<property name="text">
<string>The kind of device:</string>
</property>
</widget>
</item>
- <item row="2" column="1">
+ <item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QRadioButton" name="emulatorButton">
@@ -89,24 +65,24 @@
</item>
</layout>
</item>
- <item row="3" column="0">
+ <item row="2" column="0">
<widget class="QLabel" name="hostNameLabel">
<property name="text">
<string>The device's host name or IP address:</string>
</property>
</widget>
</item>
- <item row="3" column="1">
+ <item row="2" column="1">
<widget class="QLineEdit" name="hostNameLineEdit"/>
</item>
- <item row="4" column="0">
+ <item row="3" column="0">
<widget class="QLabel" name="sshPortLabel">
<property name="text">
<string>The SSH server port:</string>
</property>
</widget>
</item>
- <item row="4" column="1">
+ <item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QSpinBox" name="sshPortSpinBox"/>
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
index 26d50dac49..8daf180e6a 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.cpp
@@ -31,13 +31,12 @@
**************************************************************************/
#include "desktopdevice.h"
+#include "projectexplorerconstants.h"
#include <QCoreApplication>
namespace ProjectExplorer {
-const Core::Id DesktopDevice::Id = Core::Id("Desktop Device");
-
IDevice::DeviceInfo DesktopDevice::deviceInformation() const
{
return DeviceInfo();
@@ -74,7 +73,8 @@ IDevice::Ptr DesktopDevice::clone() const
return Ptr(new DesktopDevice(*this));
}
-DesktopDevice::DesktopDevice() : IDevice(Core::Id("Desktop"), IDevice::AutoDetected, Id)
+DesktopDevice::DesktopDevice() : IDevice(Core::Id(Constants::DESKTOP_DEVICE_TYPE), IDevice::AutoDetected,
+ Core::Id(Constants::DESKTOP_DEVICE_ID))
{
setDisplayName(QCoreApplication::translate("ProjectExplorer::DesktopDevice", "Run locally"));
}
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevice.h b/src/plugins/projectexplorer/devicesupport/desktopdevice.h
index 9300c02ae4..c1782bc653 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevice.h
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevice.h
@@ -56,8 +56,6 @@ public:
IDevice::Ptr clone() const;
- static const Core::Id Id;
-
protected:
DesktopDevice();
DesktopDevice(const DesktopDevice &other);
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp
index 6968e5dcd4..15e9c01d0e 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.cpp
@@ -32,13 +32,24 @@
#include "desktopdevicefactory.h"
#include "desktopdevice.h"
+#include "projectexplorerconstants.h"
namespace ProjectExplorer {
namespace Internal {
-QString DesktopDeviceFactory::displayName() const
+DesktopDeviceFactory::DesktopDeviceFactory(QObject *parent) : IDeviceFactory(parent)
+{ }
+
+QString DesktopDeviceFactory::displayNameForId(Core::Id type) const
{
- return tr("Desktop");
+ if (type == Core::Id(Constants::DESKTOP_DEVICE_TYPE))
+ return tr("Desktop");
+ return QString();
+}
+
+QList<Core::Id> DesktopDeviceFactory::availableCreationIds() const
+{
+ return QList<Core::Id>() << Core::Id(Constants::DESKTOP_DEVICE_TYPE);
}
bool DesktopDeviceFactory::canCreate() const
@@ -46,14 +57,15 @@ bool DesktopDeviceFactory::canCreate() const
return false;
}
-IDevice::Ptr DesktopDeviceFactory::create() const
+IDevice::Ptr DesktopDeviceFactory::create(Core::Id id) const
{
+ Q_UNUSED(id);
return IDevice::Ptr();
}
bool DesktopDeviceFactory::canRestore(const QVariantMap &map) const
{
- return IDevice::idFromMap(map) == DesktopDevice::Id;
+ return IDevice::idFromMap(map) == Core::Id(Constants::DESKTOP_DEVICE_ID);
}
IDevice::Ptr DesktopDeviceFactory::restore(const QVariantMap &map) const
@@ -62,8 +74,5 @@ IDevice::Ptr DesktopDeviceFactory::restore(const QVariantMap &map) const
return IDevice::Ptr(new DesktopDevice);
}
-DesktopDeviceFactory::DesktopDeviceFactory(QObject *parent) : IDeviceFactory(parent)
-{ }
-
} // namespace Internal
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h
index 5395d6949f..79b5127e51 100644
--- a/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h
+++ b/src/plugins/projectexplorer/devicesupport/desktopdevicefactory.h
@@ -45,10 +45,11 @@ class DesktopDeviceFactory : public IDeviceFactory
public:
explicit DesktopDeviceFactory(QObject *parent = 0);
- QString displayName() const;
+ QString displayNameForId(Core::Id type) const;
+ QList<Core::Id> availableCreationIds() const;
bool canCreate() const;
- IDevice::Ptr create() const;
+ IDevice::Ptr create(Core::Id id) const;
bool canRestore(const QVariantMap &map) const;
IDevice::Ptr restore(const QVariantMap &map) const;
};
diff --git a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp
index c8093c70ee..26a03d8e31 100644
--- a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.cpp
@@ -54,8 +54,11 @@ DeviceFactorySelectionDialog::DeviceFactorySelectionDialog(QWidget *parent) :
foreach (const IDeviceFactory * const factory, factories) {
if (!factory->canCreate())
continue;
- m_factories << factory;
- ui->listWidget->addItem(factory->displayName());
+ foreach (Core::Id id, factory->availableCreationIds()) {
+ QListWidgetItem *item = new QListWidgetItem(factory->displayNameForId(id));
+ item->setData(Qt::UserRole, QVariant::fromValue(id));
+ ui->listWidget->addItem(item);
+ }
}
connect(ui->listWidget, SIGNAL(itemSelectionChanged()), SLOT(handleItemSelectionChanged()));
@@ -73,9 +76,12 @@ void DeviceFactorySelectionDialog::handleItemSelectionChanged()
->setEnabled(!ui->listWidget->selectedItems().isEmpty());
}
-const IDeviceFactory *DeviceFactorySelectionDialog::selectedFactory() const
+Core::Id DeviceFactorySelectionDialog::selectedId() const
{
- return m_factories.at(ui->listWidget->row(ui->listWidget->selectedItems().first()));
+ QList<QListWidgetItem *> selected = ui->listWidget->selectedItems();
+ if (selected.isEmpty())
+ return Core::Id();
+ return selected.at(0)->data(Qt::UserRole).value<Core::Id>();
}
} // namespace Internal
diff --git a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.h b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.h
index f56ce34ba8..579807a1f8 100644
--- a/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.h
+++ b/src/plugins/projectexplorer/devicesupport/devicefactoryselectiondialog.h
@@ -33,6 +33,8 @@
#ifndef DEVICEFACTORYSELECTIONDIALOG_H
#define DEVICEFACTORYSELECTIONDIALOG_H
+#include <coreplugin/id.h>
+
#include <QList>
#include <QDialog>
@@ -49,13 +51,12 @@ class DeviceFactorySelectionDialog : public QDialog
public:
explicit DeviceFactorySelectionDialog(QWidget *parent = 0);
~DeviceFactorySelectionDialog();
- const IDeviceFactory *selectedFactory() const;
+ Core::Id selectedId() const;
private:
Q_SLOT void handleItemSelectionChanged();
Ui::DeviceFactorySelectionDialog *ui;
- QList<const IDeviceFactory *> m_factories;
};
} // namespace Internal
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp
index 6c0d9003ed..352b4d58e6 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicemanagermodel.cpp
@@ -31,7 +31,7 @@
**************************************************************************/
#include "devicemanagermodel.h"
-#include "desktopdevice.h"
+#include "../projectexplorerconstants.h"
#include "devicemanager.h"
#include <coreplugin/id.h>
@@ -127,7 +127,7 @@ void DeviceManagerModel::handleDeviceListChanged()
for (int i = 0; i < d->deviceManager->deviceCount(); ++i) {
IDevice::ConstPtr dev = d->deviceManager->deviceAt(i);
- if (dev->id() == DesktopDevice::Id)
+ if (dev->id() == Core::Id(Constants::DESKTOP_DEVICE_ID))
continue;
d->devices << dev;
}
diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
index 0d0debdf5d..e62275919d 100644
--- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp
@@ -169,7 +169,13 @@ void DeviceSettingsWidget::addDevice()
if (d.exec() != QDialog::Accepted)
return;
- IDevice::Ptr device = d.selectedFactory()->create();
+ Core::Id toCreate = d.selectedId();
+ if (!toCreate.isValid())
+ return;
+ IDeviceFactory *factory = IDeviceFactory::find(toCreate);
+ if (!factory)
+ return;
+ IDevice::Ptr device = factory->create(toCreate);
if (device.isNull())
return;
diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp
new file mode 100644
index 0000000000..6cd07b4dbc
--- /dev/null
+++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.cpp
@@ -0,0 +1,58 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** 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.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include "idevicefactory.h"
+
+#include <extensionsystem/pluginmanager.h>
+
+namespace ProjectExplorer {
+
+bool IDeviceFactory::canCreate() const
+{
+ return !availableCreationIds().isEmpty();
+}
+
+IDeviceFactory *IDeviceFactory::find(Core::Id type)
+{
+ QList<IDeviceFactory *> factories
+ = ExtensionSystem::PluginManager::instance()->getObjects<IDeviceFactory>();
+ foreach (IDeviceFactory *factory, factories) {
+ if (factory->availableCreationIds().contains(type))
+ return factory;
+ }
+ return 0;
+}
+
+IDeviceFactory::IDeviceFactory(QObject *parent) : QObject(parent)
+{ }
+
+} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/devicesupport/idevicefactory.h b/src/plugins/projectexplorer/devicesupport/idevicefactory.h
index b4fdda6fff..a523a26822 100644
--- a/src/plugins/projectexplorer/devicesupport/idevicefactory.h
+++ b/src/plugins/projectexplorer/devicesupport/idevicefactory.h
@@ -60,20 +60,24 @@ class PROJECTEXPLORER_EXPORT IDeviceFactory : public QObject
public:
/*!
- A short, one-line description of what kind of device this factory supports.
+ A short, one-line description of what the device type.
*/
- virtual QString displayName() const = 0;
+ virtual QString displayNameForId(Core::Id type) const = 0;
+ /*!
+ A list of device types this factory can create.
+ */
+ virtual QList<Core::Id> availableCreationIds() const = 0;
/*!
Check whether this factory can create new devices. This is used to hide
auto-detect-only factories from the listing of possible devices to create.
*/
- virtual bool canCreate() const = 0;
+ virtual bool canCreate() const;
/*!
Create a new device. This may or may not open a wizard.
*/
- virtual IDevice::Ptr create() const = 0;
+ virtual IDevice::Ptr create(Core::Id id) const = 0;
/*!
Check whether this factory can restore a device from the given serialized state.
@@ -86,8 +90,10 @@ public:
*/
virtual IDevice::Ptr restore(const QVariantMap &map) const = 0;
+ static IDeviceFactory *find(Core::Id type);
+
protected:
- IDeviceFactory(QObject *parent) : QObject(parent) { }
+ IDeviceFactory(QObject *parent = 0);
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 1efaa4f6e8..8ae852501d 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1131,7 +1131,7 @@ void ProjectExplorerPlugin::extensionsInitialized()
bool ProjectExplorerPlugin::delayedInitialize()
{
DeviceManager *dm = DeviceManager::instance();
- if (dm->find(DesktopDevice::Id).isNull())
+ if (dm->find(Core::Id(Constants::DESKTOP_DEVICE_ID)).isNull())
DeviceManager::instance()->addDevice(IDevice::Ptr(new DesktopDevice));
return true;
diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro
index 1c586140db..7a22c3bf2f 100644
--- a/src/plugins/projectexplorer/projectexplorer.pro
+++ b/src/plugins/projectexplorer/projectexplorer.pro
@@ -200,6 +200,7 @@ SOURCES += projectexplorer.cpp \
devicesupport/idevice.cpp \
devicesupport/desktopdevice.cpp \
devicesupport/desktopdevicefactory.cpp \
+ devicesupport/idevicefactory.cpp \
devicesupport/devicemanager.cpp \
devicesupport/devicemanagermodel.cpp \
devicesupport/devicefactoryselectiondialog.cpp \
diff --git a/src/plugins/projectexplorer/projectexplorer.qbs b/src/plugins/projectexplorer/projectexplorer.qbs
index 3df35b7a88..2ccda10a1d 100644
--- a/src/plugins/projectexplorer/projectexplorer.qbs
+++ b/src/plugins/projectexplorer/projectexplorer.qbs
@@ -285,6 +285,7 @@ QtcPlugin {
"devicesupport/devicesettingswidget.h",
"devicesupport/devicesettingswidget.ui",
"devicesupport/idevicewidget.h",
+ "devicesupport/idevicefactory.cpp",
"devicesupport/idevicefactory.h"
]
diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h
index c2021f993c..04fcd6cf17 100644
--- a/src/plugins/projectexplorer/projectexplorerconstants.h
+++ b/src/plugins/projectexplorer/projectexplorerconstants.h
@@ -232,6 +232,10 @@ const int QML_DEFAULT_DEBUG_SERVER_PORT = 3768;
// Default directory to run custom (build) commands in.
const char DEFAULT_WORKING_DIR[] = "%{buildDir}";
+// Desktop Device related ids:
+const char DESKTOP_DEVICE_ID[] = "Desktop Device";
+const char DESKTOP_DEVICE_TYPE[] = "Desktop";
+
} // namespace Constants
// Run modes
diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp
index e6f2cc12ec..1acb4f73fc 100644
--- a/src/plugins/projectexplorer/target.cpp
+++ b/src/plugins/projectexplorer/target.cpp
@@ -43,7 +43,6 @@
#include <limits>
#include <coreplugin/coreconstants.h>
#include <projectexplorer/buildmanager.h>
-#include <projectexplorer/devicesupport/desktopdevice.h>
#include <projectexplorer/devicesupport/devicemanager.h>
#include <extensionsystem/pluginmanager.h>
#include <projectexplorer/projectexplorer.h>
@@ -545,7 +544,7 @@ void Target::updateDeviceState()
ProjectExplorer::IDevice::ConstPtr Target::currentDevice() const
{
- return DeviceManager::instance()->find(ProjectExplorer::DesktopDevice::Id);
+ return DeviceManager::instance()->find(ProjectExplorer::Constants::DESKTOP_DEVICE_ID);
}
void Target::setEnabled(bool enabled)
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp
index db3d93a788..b561ec0c94 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.cpp
@@ -42,9 +42,16 @@ namespace Internal {
SymbianIDeviceFactory::SymbianIDeviceFactory(QObject *parent) : IDeviceFactory(parent)
{ }
-QString SymbianIDeviceFactory::displayName() const
+QString SymbianIDeviceFactory::displayNameForId(Core::Id type) const
{
- return tr("Symbian Device");
+ if (type == deviceType())
+ return tr("Symbian Device");
+ return QString();
+}
+
+QList<Core::Id> SymbianIDeviceFactory::availableCreationIds() const
+{
+ return QList<Core::Id>() << deviceType();
}
bool SymbianIDeviceFactory::canCreate() const
@@ -52,8 +59,9 @@ bool SymbianIDeviceFactory::canCreate() const
return false;
}
-ProjectExplorer::IDevice::Ptr SymbianIDeviceFactory::create() const
+ProjectExplorer::IDevice::Ptr SymbianIDeviceFactory::create(Core::Id id) const
{
+ Q_UNUSED(id);
return ProjectExplorer::IDevice::Ptr();
}
diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h
index 2b4e5340cb..040edd0c96 100644
--- a/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h
+++ b/src/plugins/qt4projectmanager/qt-s60/symbianidevicefactory.h
@@ -45,9 +45,11 @@ class SymbianIDeviceFactory : public ProjectExplorer::IDeviceFactory
public:
SymbianIDeviceFactory(QObject *parent = 0);
- QString displayName() const;
+ QString displayNameForId(Core::Id type) const;
+ QList<Core::Id> availableCreationIds() const;
+
bool canCreate() const;
- ProjectExplorer::IDevice::Ptr create() const;
+ ProjectExplorer::IDevice::Ptr create(Core::Id id) const;
bool canRestore(const QVariantMap &map) const;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const;
diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp
index 163939b1b3..9716d0e496 100644
--- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp
+++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.cpp
@@ -46,18 +46,20 @@ GenericLinuxDeviceConfigurationFactory::GenericLinuxDeviceConfigurationFactory(Q
{
}
-QString GenericLinuxDeviceConfigurationFactory::displayName() const
+QString GenericLinuxDeviceConfigurationFactory::displayNameForId(Core::Id type) const
{
+ QTC_ASSERT(type == Core::Id(Constants::GenericLinuxOsType), return QString());
return tr("Generic Linux Device");
}
-bool GenericLinuxDeviceConfigurationFactory::canCreate() const
+QList<Core::Id> GenericLinuxDeviceConfigurationFactory::availableCreationIds() const
{
- return true;
+ return QList<Core::Id>() << Core::Id(Constants::GenericLinuxOsType);
}
-IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create() const
+IDevice::Ptr GenericLinuxDeviceConfigurationFactory::create(Core::Id id) const
{
+ QTC_ASSERT(id == Core::Id(Constants::GenericLinuxOsType), return IDevice::Ptr());
GenericLinuxDeviceConfigurationWizard wizard;
if (wizard.exec() != QDialog::Accepted)
return IDevice::Ptr();
diff --git a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h
index 0b8d5ccea1..01b979c2eb 100644
--- a/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h
+++ b/src/plugins/remotelinux/genericlinuxdeviceconfigurationfactory.h
@@ -46,9 +46,10 @@ class REMOTELINUX_EXPORT GenericLinuxDeviceConfigurationFactory
public:
GenericLinuxDeviceConfigurationFactory(QObject *parent = 0);
- QString displayName() const;
- bool canCreate() const;
- ProjectExplorer::IDevice::Ptr create() const;
+ QString displayNameForId(Core::Id type) const;
+ QList<Core::Id> availableCreationIds() const;
+
+ ProjectExplorer::IDevice::Ptr create(Core::Id id) const;
bool canRestore(const QVariantMap &map) const;
ProjectExplorer::IDevice::Ptr restore(const QVariantMap &map) const;
};