From d9b36a1b5071a92f442ca9facfef8e41769f8805 Mon Sep 17 00:00:00 2001 From: Christian Kandeler <christian.kandeler@nokia.com> Date: Wed, 2 May 2012 16:03:26 +0200 Subject: [PATCH] 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> --- src/plugins/madde/maddedevice.cpp | 18 ++++++++++-------- src/plugins/madde/maddedevice.h | 2 +- .../devicesupport/devicesettingswidget.cpp | 7 ++----- .../projectexplorer/devicesupport/idevice.cpp | 7 +++---- .../projectexplorer/devicesupport/idevice.h | 3 +-- .../qt-s60/symbianidevice.cpp | 3 +-- .../qt4projectmanager/qt-s60/symbianidevice.h | 2 +- .../remotelinux/linuxdeviceconfiguration.cpp | 18 ++++++++++-------- .../remotelinux/linuxdeviceconfiguration.h | 2 +- 9 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/plugins/madde/maddedevice.cpp b/src/plugins/madde/maddedevice.cpp index eee242e29e6..702713d46b8 100644 --- a/src/plugins/madde/maddedevice.cpp +++ b/src/plugins/madde/maddedevice.cpp @@ -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) diff --git a/src/plugins/madde/maddedevice.h b/src/plugins/madde/maddedevice.h index 4c83589302a..385fb012e7b 100644 --- a/src/plugins/madde/maddedevice.h +++ b/src/plugins/madde/maddedevice.h @@ -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); diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp index e496a41f883..cc11299b09f 100644 --- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp @@ -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 diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 1f31a20ec38..5f2a4da4b34 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -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. */ /*! diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index ad6aaba7409..905b0c6d7bf 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -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; diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp b/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp index d4f3fa39899..292e008b548 100644 --- a/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/symbianidevice.cpp @@ -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 diff --git a/src/plugins/qt4projectmanager/qt-s60/symbianidevice.h b/src/plugins/qt4projectmanager/qt-s60/symbianidevice.h index e3ee1943c25..8400b5336c1 100644 --- a/src/plugins/qt4projectmanager/qt-s60/symbianidevice.h +++ b/src/plugins/qt4projectmanager/qt-s60/symbianidevice.h @@ -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); diff --git a/src/plugins/remotelinux/linuxdeviceconfiguration.cpp b/src/plugins/remotelinux/linuxdeviceconfiguration.cpp index 43764956bb1..e96b76da6b3 100644 --- a/src/plugins/remotelinux/linuxdeviceconfiguration.cpp +++ b/src/plugins/remotelinux/linuxdeviceconfiguration.cpp @@ -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) diff --git a/src/plugins/remotelinux/linuxdeviceconfiguration.h b/src/plugins/remotelinux/linuxdeviceconfiguration.h index 44da35a0d42..60c4746dbb2 100644 --- a/src/plugins/remotelinux/linuxdeviceconfiguration.h +++ b/src/plugins/remotelinux/linuxdeviceconfiguration.h @@ -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; -- GitLab