Device support: Make device actions a little more flexible.

We give the implementors of the IDevice subclasses a litte more freedom
by not assuming a modal dialog.

Change-Id: I629a3ab7fc50a73229e6439af53f1bae0cf0259e
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
This commit is contained in:
Christian Kandeler
2012-05-02 16:03:26 +02:00
parent e19ad8eab2
commit d9b36a1b50
9 changed files with 30 additions and 32 deletions

View File

@@ -103,19 +103,21 @@ QString MaddeDevice::displayNameForActionId(Core::Id actionId) const
return QString(); // Can't happen.
}
QDialog *MaddeDevice::createAction(Core::Id actionId, QWidget *parent) const
void MaddeDevice::executeAction(Core::Id actionId, QWidget *parent)
{
QTC_ASSERT(actionIds().contains(actionId), return 0);
QTC_ASSERT(actionIds().contains(actionId), return);
QDialog *d;
const LinuxDeviceConfiguration::ConstPtr device
= sharedFromThis().staticCast<const LinuxDeviceConfiguration>();
if (actionId == Core::Id(MaddeDeviceTestActionId))
return new LinuxDeviceTestDialog(device, new MaddeDeviceTester, parent);
if (actionId == Core::Id(MaddeRemoteProcessesActionId))
return new RemoteLinuxProcessesDialog(new GenericRemoteLinuxProcessList(device), parent);
if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId))
return PublicKeyDeploymentDialog::createDialog(device, parent);
return 0; // Can't happen.
d = new LinuxDeviceTestDialog(device, new MaddeDeviceTester, parent);
else if (actionId == Core::Id(MaddeRemoteProcessesActionId))
d = new RemoteLinuxProcessesDialog(new GenericRemoteLinuxProcessList(device), parent);
else if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId))
d = PublicKeyDeploymentDialog::createDialog(device, parent);
if (d)
d->exec();
}
QString MaddeDevice::maddeDisplayType(const QString &type)

View File

@@ -53,7 +53,7 @@ public:
QString displayType() const;
QList<Core::Id> actionIds() const;
QString displayNameForActionId(Core::Id actionId) const;
QDialog *createAction(Core::Id actionId, QWidget *parent) const;
void executeAction(Core::Id actionId, QWidget *parent);
ProjectExplorer::IDevice::Ptr clone() const;
static QString maddeDisplayType(const QString &type);

View File

@@ -283,12 +283,9 @@ void DeviceSettingsWidget::clearDetails()
void DeviceSettingsWidget::handleAdditionalActionRequest(int actionId)
{
const IDevice::ConstPtr &device = currentDevice();
const IDevice::Ptr &device = m_deviceManager->mutableDeviceAt(currentIndex());
QTC_ASSERT(device, return);
QDialog * const action = device->createAction(Core::Id::fromUniqueIdentifier(actionId), this);
if (action)
action->exec();
delete action;
device->executeAction(Core::Id::fromUniqueIdentifier(actionId), this);
}
} // namespace Internal

View File

@@ -114,10 +114,9 @@
*/
/*!
* \fn QDialog *ProjectExplorer::IDevice::createAction(const QString &actionId) const
* \brief Produces a dialog implementing the respective action. The dialog is supposed to be
* modal, so implementers must make sure to make whatever it does interruptible as
* to not needlessly block the UI.
* \fn void ProjectExplorer::IDevice::executeAction(Core::Id actionId, QWidget *parent)
* \brief Executes the respective action. This is typically done via some sort of dialog or
* wizard, so a parent widget argument is provided.
*/
/*!

View File

@@ -41,7 +41,6 @@
#include <QVariantMap>
QT_BEGIN_NAMESPACE
class QDialog;
class QWidget;
QT_END_NAMESPACE
@@ -83,7 +82,7 @@ public:
virtual IDeviceWidget *createWidget() = 0;
virtual QList<Core::Id> actionIds() const = 0;
virtual QString displayNameForActionId(Core::Id actionId) const = 0;
virtual QDialog *createAction(Core::Id actionId, QWidget *parent = 0) const = 0;
virtual void executeAction(Core::Id actionId, QWidget *parent = 0) = 0;
enum AvailabilityState { DeviceAvailable, DeviceUnavailable, DeviceAvailabilityUnknown };
AvailabilityState availability() const;

View File

@@ -207,11 +207,10 @@ QString SymbianIDevice::displayNameForActionId(Core::Id actionId) const
return QString();
}
QDialog *SymbianIDevice::createAction(Core::Id actionId, QWidget *parent) const
void SymbianIDevice::executeAction(Core::Id actionId, QWidget *parent)
{
Q_UNUSED(actionId);
Q_UNUSED(parent);
return 0;
}
QVariantMap SymbianIDevice::toMap() const

View File

@@ -78,7 +78,7 @@ public:
ProjectExplorer::IDeviceWidget* createWidget();
QList<Core::Id> actionIds() const;
QString displayNameForActionId(Core::Id actionId) const;
QDialog* createAction(Core::Id actionId, QWidget*parent) const;
void executeAction(Core::Id actionId, QWidget*parent);
protected:
SymbianIDevice(const SymbianIDevice &other);

View File

@@ -120,19 +120,21 @@ QString LinuxDeviceConfiguration::displayNameForActionId(Core::Id actionId) cons
return QString(); // Can't happen.
}
QDialog *LinuxDeviceConfiguration::createAction(Core::Id actionId, QWidget *parent) const
void LinuxDeviceConfiguration::executeAction(Core::Id actionId, QWidget *parent)
{
QTC_ASSERT(actionIds().contains(actionId), return 0);
QTC_ASSERT(actionIds().contains(actionId), return);
QDialog *d;
const LinuxDeviceConfiguration::ConstPtr device
= sharedFromThis().staticCast<const LinuxDeviceConfiguration>();
if (actionId == Core::Id(Constants::GenericTestDeviceActionId))
return new LinuxDeviceTestDialog(device, new GenericLinuxDeviceTester, parent);
if (actionId == Core::Id(Constants::GenericRemoteProcessesActionId))
return new RemoteLinuxProcessesDialog(new GenericRemoteLinuxProcessList(device, parent));
if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId))
return PublicKeyDeploymentDialog::createDialog(device, parent);
return 0; // Can't happen.
d = new LinuxDeviceTestDialog(device, new GenericLinuxDeviceTester, parent);
else if (actionId == Core::Id(Constants::GenericRemoteProcessesActionId))
d = new RemoteLinuxProcessesDialog(new GenericRemoteLinuxProcessList(device, parent));
else if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId))
d = PublicKeyDeploymentDialog::createDialog(device, parent);
if (d)
d->exec();
}
LinuxDeviceConfiguration::LinuxDeviceConfiguration() : d(new LinuxDeviceConfigurationPrivate)

View File

@@ -77,7 +77,7 @@ public:
ProjectExplorer::IDeviceWidget *createWidget();
QList<Core::Id> actionIds() const;
QString displayNameForActionId(Core::Id actionId) const;
QDialog *createAction(Core::Id actionId, QWidget *parent) const;
void executeAction(Core::Id actionId, QWidget *parent);
void fromMap(const QVariantMap &map);
ProjectExplorer::IDevice::Ptr clone() const;