forked from qt-creator/qt-creator
DeviceProcessDialog: Introduce methods for modal/non-modal use.
Add methods to be able to use the dialog as a non-modal dialog showing a list of processes or a modal-dialog for selecting a process. Connect double-click to 'Accept' for the modal case (regression from 2.5). Change-Id: If05a1c40ee6a41135d943e9919a1250db03eeffb Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
@@ -1560,6 +1560,7 @@ void DebuggerPluginPrivate::attachToRunningApplication()
|
|||||||
void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
void DebuggerPluginPrivate::attachToProcess(bool startServerOnly)
|
||||||
{
|
{
|
||||||
DeviceProcessesDialog *dlg = new DeviceProcessesDialog(mainWindow());
|
DeviceProcessesDialog *dlg = new DeviceProcessesDialog(mainWindow());
|
||||||
|
dlg->addAcceptButton(DeviceProcessesDialog::tr("&Attach to Process"));
|
||||||
dlg->showAllDevices();
|
dlg->showAllDevices();
|
||||||
if (dlg->exec() == QDialog::Rejected) {
|
if (dlg->exec() == QDialog::Rejected) {
|
||||||
delete dlg;
|
delete dlg;
|
||||||
|
@@ -120,11 +120,12 @@ public:
|
|||||||
FilterLineEdit *processFilterLineEdit;
|
FilterLineEdit *processFilterLineEdit;
|
||||||
QPushButton *updateListButton;
|
QPushButton *updateListButton;
|
||||||
QPushButton *killProcessButton;
|
QPushButton *killProcessButton;
|
||||||
QPushButton *attachProcessButton;
|
QPushButton *acceptButton;
|
||||||
|
QDialogButtonBox *buttonBox;
|
||||||
};
|
};
|
||||||
|
|
||||||
DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(QWidget *parent)
|
DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(QWidget *parent)
|
||||||
: q(parent)
|
: q(parent), acceptButton(0), buttonBox(new QDialogButtonBox(parent))
|
||||||
{
|
{
|
||||||
processList = 0;
|
processList = 0;
|
||||||
|
|
||||||
@@ -150,13 +151,9 @@ DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(QWidget *parent)
|
|||||||
|
|
||||||
updateListButton = new QPushButton(DeviceProcessesDialog::tr("&Update List"), q);
|
updateListButton = new QPushButton(DeviceProcessesDialog::tr("&Update List"), q);
|
||||||
killProcessButton = new QPushButton(DeviceProcessesDialog::tr("&Kill Process"), q);
|
killProcessButton = new QPushButton(DeviceProcessesDialog::tr("&Kill Process"), q);
|
||||||
attachProcessButton = new QPushButton(DeviceProcessesDialog::tr("&Attach to Process"), q);
|
|
||||||
|
|
||||||
QDialogButtonBox *buttonBox = new QDialogButtonBox(q);
|
|
||||||
buttonBox->setStandardButtons(QDialogButtonBox::Close);
|
|
||||||
buttonBox->addButton(updateListButton, QDialogButtonBox::ActionRole);
|
buttonBox->addButton(updateListButton, QDialogButtonBox::ActionRole);
|
||||||
buttonBox->addButton(killProcessButton, QDialogButtonBox::ActionRole);
|
buttonBox->addButton(killProcessButton, QDialogButtonBox::ActionRole);
|
||||||
buttonBox->addButton(attachProcessButton, QDialogButtonBox::AcceptRole);
|
|
||||||
|
|
||||||
QFormLayout *leftColumn = new QFormLayout();
|
QFormLayout *leftColumn = new QFormLayout();
|
||||||
leftColumn->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
|
leftColumn->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
|
||||||
@@ -259,8 +256,9 @@ void DeviceProcessesDialogPrivate::handleProcessKilled()
|
|||||||
|
|
||||||
void DeviceProcessesDialogPrivate::updateButtons()
|
void DeviceProcessesDialogPrivate::updateButtons()
|
||||||
{
|
{
|
||||||
bool hasSelection = procView->selectionModel()->hasSelection();
|
const bool hasSelection = procView->selectionModel()->hasSelection();
|
||||||
attachProcessButton->setEnabled(hasSelection);
|
if (acceptButton)
|
||||||
|
acceptButton->setEnabled(hasSelection);
|
||||||
killProcessButton->setEnabled(hasSelection);
|
killProcessButton->setEnabled(hasSelection);
|
||||||
errorText->setVisible(!errorText->document()->isEmpty());
|
errorText->setVisible(!errorText->document()->isEmpty());
|
||||||
}
|
}
|
||||||
@@ -281,6 +279,21 @@ DeviceProcess DeviceProcessesDialogPrivate::selectedProcess() const
|
|||||||
//
|
//
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class ProjectExplorer::DeviceProcessesDialog
|
||||||
|
|
||||||
|
\brief Shows a list of processes.
|
||||||
|
|
||||||
|
The dialog can be used as a
|
||||||
|
\list
|
||||||
|
\o Non-modal dialog showing a list of processes: Call addCloseButton()
|
||||||
|
to add a 'Close' button.
|
||||||
|
\o Modal dialog with an 'Accept' button to select a process: Call
|
||||||
|
addAcceptButton() passing the label text. This will create a
|
||||||
|
'Cancel' button as well.
|
||||||
|
\endlist
|
||||||
|
*/
|
||||||
|
|
||||||
DeviceProcessesDialog::DeviceProcessesDialog(QWidget *parent)
|
DeviceProcessesDialog::DeviceProcessesDialog(QWidget *parent)
|
||||||
: QDialog(parent), d(new Internal::DeviceProcessesDialogPrivate(this))
|
: QDialog(parent), d(new Internal::DeviceProcessesDialogPrivate(this))
|
||||||
{
|
{
|
||||||
@@ -294,6 +307,20 @@ DeviceProcessesDialog::~DeviceProcessesDialog()
|
|||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeviceProcessesDialog::addAcceptButton(const QString &label)
|
||||||
|
{
|
||||||
|
d->acceptButton = new QPushButton(label);
|
||||||
|
d->buttonBox->addButton(d->acceptButton, QDialogButtonBox::AcceptRole);
|
||||||
|
connect(d->procView, SIGNAL(doubleClicked(QModelIndex)),
|
||||||
|
d->acceptButton, SLOT(animateClick()));
|
||||||
|
d->buttonBox->addButton(QDialogButtonBox::Cancel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceProcessesDialog::addCloseButton()
|
||||||
|
{
|
||||||
|
d->buttonBox->addButton(QDialogButtonBox::Close);
|
||||||
|
}
|
||||||
|
|
||||||
void DeviceProcessesDialog::setDevice(const IDevice::ConstPtr &device)
|
void DeviceProcessesDialog::setDevice(const IDevice::ConstPtr &device)
|
||||||
{
|
{
|
||||||
d->profileChooser->hide();
|
d->profileChooser->hide();
|
||||||
|
@@ -51,6 +51,8 @@ class PROJECTEXPLORER_EXPORT DeviceProcessesDialog : public QDialog
|
|||||||
public:
|
public:
|
||||||
explicit DeviceProcessesDialog(QWidget *parent = 0);
|
explicit DeviceProcessesDialog(QWidget *parent = 0);
|
||||||
~DeviceProcessesDialog();
|
~DeviceProcessesDialog();
|
||||||
|
void addAcceptButton(const QString &label);
|
||||||
|
void addCloseButton();
|
||||||
|
|
||||||
void setDevice(const IDevice::ConstPtr &device);
|
void setDevice(const IDevice::ConstPtr &device);
|
||||||
void showAllDevices();
|
void showAllDevices();
|
||||||
|
@@ -336,6 +336,7 @@ void DeviceSettingsWidget::handleProcessListRequested()
|
|||||||
{
|
{
|
||||||
QTC_ASSERT(currentDevice()->canCreateProcessModel(), return);
|
QTC_ASSERT(currentDevice()->canCreateProcessModel(), return);
|
||||||
DeviceProcessesDialog dlg;
|
DeviceProcessesDialog dlg;
|
||||||
|
dlg.addCloseButton();
|
||||||
dlg.setDevice(currentDevice());
|
dlg.setDevice(currentDevice());
|
||||||
dlg.exec();
|
dlg.exec();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user