diff --git a/src/plugins/debugger/gdb/startgdbserverdialog.cpp b/src/plugins/debugger/gdb/startgdbserverdialog.cpp index a35ed5d2ac2..aaf20651617 100644 --- a/src/plugins/debugger/gdb/startgdbserverdialog.cpp +++ b/src/plugins/debugger/gdb/startgdbserverdialog.cpp @@ -207,7 +207,7 @@ void StartGdbServerDialog::attachToDevice() { IDevice::ConstPtr device = d->currentDevice(); // TODO: display error on non-matching device. - if (!device) + if (!device || !device->canCreateProcessModel()) return; delete d->processList; d->processList = device->createProcessListModel(); diff --git a/src/plugins/madde/maddedevice.cpp b/src/plugins/madde/maddedevice.cpp index c88ee1a5fe1..e4dfe6524dc 100644 --- a/src/plugins/madde/maddedevice.cpp +++ b/src/plugins/madde/maddedevice.cpp @@ -32,8 +32,6 @@ #include "maddedevicetester.h" #include "maemoconstants.h" -#include -#include #include #include #include @@ -45,7 +43,6 @@ using namespace RemoteLinux; namespace Madde { namespace Internal { const char MaddeDeviceTestActionId[] = "Madde.DeviceTestAction"; -const char MaddeRemoteProcessesActionId[] = "Madde.RemoteProcessesAction"; MaddeDevice::Ptr MaddeDevice::create() { @@ -85,8 +82,7 @@ QString MaddeDevice::displayType() const QList MaddeDevice::actionIds() const { return QList() << Core::Id(MaddeDeviceTestActionId) - << Core::Id(Constants::GenericDeployKeyToDeviceActionId) - << Core::Id(MaddeRemoteProcessesActionId); + << Core::Id(Constants::GenericDeployKeyToDeviceActionId); } QString MaddeDevice::displayNameForActionId(Core::Id actionId) const @@ -95,8 +91,6 @@ QString MaddeDevice::displayNameForActionId(Core::Id actionId) const if (actionId == Core::Id(MaddeDeviceTestActionId)) return tr("Test"); - if (actionId == Core::Id(MaddeRemoteProcessesActionId)) - return tr("Remote Processes..."); if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId)) return tr("Deploy Public Key..."); return QString(); // Can't happen. @@ -110,8 +104,6 @@ void MaddeDevice::executeAction(Core::Id actionId, QWidget *parent) const const IDevice::ConstPtr device = sharedFromThis(); if (actionId == Core::Id(MaddeDeviceTestActionId)) d = new LinuxDeviceTestDialog(device, new MaddeDeviceTester, parent); - else if (actionId == Core::Id(MaddeRemoteProcessesActionId)) - d = new DeviceProcessesDialog(createProcessListModel(parent)); else if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId)) d = PublicKeyDeploymentDialog::createDialog(device, parent); if (d) diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h b/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h index 9977d839cfb..5eff8a17d40 100644 --- a/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h +++ b/src/plugins/projectexplorer/devicesupport/deviceprocessesdialog.h @@ -40,7 +40,7 @@ class DeviceProcessList; namespace Internal { class DeviceProcessesDialogPrivate; } -class PROJECTEXPLORER_EXPORT DeviceProcessesDialog : public QDialog +class DeviceProcessesDialog : public QDialog { Q_OBJECT diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp index cf196610b6a..df3f49dcc37 100644 --- a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp +++ b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.cpp @@ -77,11 +77,6 @@ void DeviceProcessList::update() doUpdate(); } -void DeviceProcessList::doUpdate() -{ - reportProcessListUpdated(QList()); -} - void DeviceProcessList::reportProcessListUpdated(const QList &processes) { QTC_ASSERT(d->state == Listing, return); @@ -104,11 +99,6 @@ void DeviceProcessList::killProcess(int row) doKillProcess(d->remoteProcesses.at(row)); } -void DeviceProcessList::doKillProcess(const DeviceProcess &) -{ - QTC_ASSERT(false, qDebug("Process list should be empty"); return); -} - void DeviceProcessList::reportProcessKilled() { QTC_ASSERT(d->state == Killing, return); diff --git a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h index fcbf8bacc23..a763544ce4b 100644 --- a/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h +++ b/src/plugins/projectexplorer/devicesupport/deviceprocesslist.h @@ -82,9 +82,8 @@ private: int role = Qt::DisplayRole) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; - // No-op implementations for devices without process listing abilities. - virtual void doUpdate(); - virtual void doKillProcess(const DeviceProcess &process); + virtual void doUpdate() = 0; + virtual void doKillProcess(const DeviceProcess &process) = 0; void setFinished(); diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp index 7f0bc1aa521..be079bf2acf 100644 --- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.cpp @@ -33,6 +33,8 @@ #include "devicefactoryselectiondialog.h" #include "devicemanager.h" #include "devicemanagermodel.h" +#include "deviceprocessesdialog.h" +#include "deviceprocesslist.h" #include "idevice.h" #include "idevicefactory.h" #include "idevicewidget.h" @@ -288,23 +290,32 @@ void DeviceSettingsWidget::currentDeviceChanged(int index) m_ui->removeConfigButton->setEnabled(false); clearDetails(); m_ui->defaultDeviceButton->setEnabled(false); - } else { - setDeviceInfoWidgetsEnabled(true); - m_ui->removeConfigButton->setEnabled(true); - foreach (const Core::Id actionId, device->actionIds()) { - QPushButton * const button = new QPushButton(device->displayNameForActionId(actionId)); - m_additionalActionButtons << button; - connect(button, SIGNAL(clicked()), m_additionalActionsMapper, SLOT(map())); - m_additionalActionsMapper->setMapping(button, actionId.uniqueIdentifier()); - m_ui->buttonsLayout->insertWidget(m_ui->buttonsLayout->count() - 1, button); - } - if (!m_ui->osSpecificGroupBox->layout()) - new QVBoxLayout(m_ui->osSpecificGroupBox); - m_configWidget = m_deviceManager->mutableDevice(device->id())->createWidget(); - if (m_configWidget) - m_ui->osSpecificGroupBox->layout()->addWidget(m_configWidget); - displayCurrent(); + return; } + setDeviceInfoWidgetsEnabled(true); + m_ui->removeConfigButton->setEnabled(true); + + if (device->canCreateProcessModel()) { + QPushButton * const button = new QPushButton(tr("Remote Processes")); + m_additionalActionButtons << button; + connect(button, SIGNAL(clicked()), SLOT(handleProcessListRequested())); + m_ui->buttonsLayout->insertWidget(m_ui->buttonsLayout->count() - 1, button); + } + + foreach (const Core::Id actionId, device->actionIds()) { + QPushButton * const button = new QPushButton(device->displayNameForActionId(actionId)); + m_additionalActionButtons << button; + connect(button, SIGNAL(clicked()), m_additionalActionsMapper, SLOT(map())); + m_additionalActionsMapper->setMapping(button, actionId.uniqueIdentifier()); + m_ui->buttonsLayout->insertWidget(m_ui->buttonsLayout->count() - 1, button); + } + + if (!m_ui->osSpecificGroupBox->layout()) + new QVBoxLayout(m_ui->osSpecificGroupBox); + m_configWidget = m_deviceManager->mutableDevice(device->id())->createWidget(); + if (m_configWidget) + m_ui->osSpecificGroupBox->layout()->addWidget(m_configWidget); + displayCurrent(); } void DeviceSettingsWidget::clearDetails() @@ -321,5 +332,12 @@ void DeviceSettingsWidget::handleAdditionalActionRequest(int actionId) device->executeAction(Core::Id::fromUniqueIdentifier(actionId), this); } +void DeviceSettingsWidget::handleProcessListRequested() +{ + QTC_ASSERT(currentDevice()->canCreateProcessModel(), return); + DeviceProcessesDialog d(currentDevice()->createProcessListModel()); + d.exec(); +} + } // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h index 3b2b1fb42a3..ed8768e3509 100644 --- a/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h +++ b/src/plugins/projectexplorer/devicesupport/devicesettingswidget.h @@ -69,6 +69,7 @@ private slots: void deviceNameEditingFinished(); void setDefaultDevice(); void handleAdditionalActionRequest(int actionId); + void handleProcessListRequested(); private: void initGui(); diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 724cac12f17..068cbb58f1b 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -262,7 +262,9 @@ PortsGatheringMethod::Ptr IDevice::portsGatheringMethod() const DeviceProcessList *IDevice::createProcessListModel(QObject *parent) const { - return new DeviceProcessList(sharedFromThis(), parent); + Q_UNUSED(parent); + QTC_ASSERT(false, qDebug("This should not have been called..."); return 0); + return 0; } IDevice::DeviceState IDevice::deviceState() const diff --git a/src/plugins/projectexplorer/devicesupport/idevice.h b/src/plugins/projectexplorer/devicesupport/idevice.h index b7e91b65356..81625942195 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.h +++ b/src/plugins/projectexplorer/devicesupport/idevice.h @@ -114,6 +114,7 @@ public: virtual DeviceProcessSupport::Ptr processSupport() const; virtual PortsGatheringMethod::Ptr portsGatheringMethod() const; + virtual bool canCreateProcessModel() const { return false; } virtual DeviceProcessList *createProcessListModel(QObject *parent = 0) const; enum DeviceState { DeviceReadyToUse, DeviceConnected, DeviceDisconnected, DeviceStateUnknown }; diff --git a/src/plugins/qnx/qnxdeviceconfiguration.h b/src/plugins/qnx/qnxdeviceconfiguration.h index fe5bc58b8b9..948b7895404 100644 --- a/src/plugins/qnx/qnxdeviceconfiguration.h +++ b/src/plugins/qnx/qnxdeviceconfiguration.h @@ -54,6 +54,7 @@ public: ProjectExplorer::DeviceProcessSupport::Ptr processSupport() const; ProjectExplorer::PortsGatheringMethod::Ptr portsGatheringMethod() const; + bool canCreateProcessModel() const { return false; } // Override LinuxDevice implementation. QString displayType() const; diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 7715e9f3fde..9296d91bce7 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -37,7 +37,6 @@ #include #include -#include #include #include #include @@ -197,8 +196,7 @@ ProjectExplorer::IDeviceWidget *LinuxDevice::createWidget() QList LinuxDevice::actionIds() const { return QList() << Core::Id(Constants::GenericTestDeviceActionId) - << Core::Id(Constants::GenericDeployKeyToDeviceActionId) - << Core::Id(Constants::GenericRemoteProcessesActionId); + << Core::Id(Constants::GenericDeployKeyToDeviceActionId); } QString LinuxDevice::displayNameForActionId(Core::Id actionId) const @@ -207,8 +205,6 @@ QString LinuxDevice::displayNameForActionId(Core::Id actionId) const if (actionId == Core::Id(Constants::GenericTestDeviceActionId)) return tr("Test"); - if (actionId == Core::Id(Constants::GenericRemoteProcessesActionId)) - return tr("Remote Processes..."); if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId)) return tr("Deploy Public Key..."); return QString(); // Can't happen. @@ -222,8 +218,6 @@ void LinuxDevice::executeAction(Core::Id actionId, QWidget *parent) const const LinuxDevice::ConstPtr device = sharedFromThis().staticCast(); if (actionId == Core::Id(Constants::GenericTestDeviceActionId)) d = new LinuxDeviceTestDialog(device, new GenericLinuxDeviceTester, parent); - else if (actionId == Core::Id(Constants::GenericRemoteProcessesActionId)) - d = new DeviceProcessesDialog(createProcessListModel(parent)); else if (actionId == Core::Id(Constants::GenericDeployKeyToDeviceActionId)) d = PublicKeyDeploymentDialog::createDialog(device, parent); if (d) diff --git a/src/plugins/remotelinux/linuxdevice.h b/src/plugins/remotelinux/linuxdevice.h index 498a79f1ea2..565224c6014 100644 --- a/src/plugins/remotelinux/linuxdevice.h +++ b/src/plugins/remotelinux/linuxdevice.h @@ -71,6 +71,7 @@ public: ProjectExplorer::DeviceProcessSupport::Ptr processSupport() const; ProjectExplorer::PortsGatheringMethod::Ptr portsGatheringMethod() const; + bool canCreateProcessModel() const { return true; } ProjectExplorer::DeviceProcessList *createProcessListModel(QObject *parent) const; protected: diff --git a/src/plugins/remotelinux/remotelinux_constants.h b/src/plugins/remotelinux/remotelinux_constants.h index 6b5a8d49312..583d8cb7979 100644 --- a/src/plugins/remotelinux/remotelinux_constants.h +++ b/src/plugins/remotelinux/remotelinux_constants.h @@ -37,7 +37,6 @@ const char GenericLinuxOsType[] = "GenericLinuxOsType"; const char GenericTestDeviceActionId[] = "RemoteLinux.GenericTestDeviceAction"; const char GenericDeployKeyToDeviceActionId[] = "RemoteLinux.GenericDeployKeyToDeviceAction"; -const char GenericRemoteProcessesActionId[] = "RemoteLinux.GenericRemoteProcessesAction"; const char EMBEDDED_LINUX_QT[] = "RemoteLinux.EmbeddedLinuxQt";