File indexing completed on 2024-05-12 04:39:42

0001 /*
0002     SPDX-FileCopyrightText: 2009 Aleix Pol <aleixpol@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "processselection.h"
0008 
0009 #include <processui/ksysguardprocesslist.h>
0010 #include <processcore/process.h>
0011 
0012 #include <KLocalizedString>
0013 #include <KSharedConfig>
0014 
0015 #include <QAbstractItemView>
0016 #include <QDialogButtonBox>
0017 #include <QLineEdit>
0018 #include <QPushButton>
0019 #include <QTreeView>
0020 #include <QVBoxLayout>
0021 
0022 
0023 using namespace KDevMI;
0024 
0025 ProcessSelectionDialog::ProcessSelectionDialog(QWidget *parent)
0026     : QDialog(parent)
0027 {
0028     setWindowTitle(i18nc("@title:window", "Attach to a Process"));
0029     m_processList = new KSysGuardProcessList(this);
0030     auto* mainLayout = new QVBoxLayout;
0031     setLayout(mainLayout);
0032     mainLayout->addWidget(m_processList);
0033     auto* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
0034     mainLayout->addWidget(buttonBox);
0035 
0036     connect(m_processList->treeView()->selectionModel(), &QItemSelectionModel::selectionChanged,
0037              this, &ProcessSelectionDialog::selectionChanged);
0038     m_processList->treeView()->setSelectionMode(QAbstractItemView::SingleSelection);
0039     m_processList->setState(ProcessFilter::UserProcesses);
0040     m_processList->setKillButtonVisible(false);
0041     m_processList->filterLineEdit()->setFocus();
0042     //m_processList->setPidFilter(qApp->pid());
0043 
0044     connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
0045     connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
0046     m_attachButton = buttonBox->button(QDialogButtonBox::Ok);
0047     m_attachButton->setDefault(true);
0048     m_attachButton->setText(i18nc("@action:button", "Attach"));
0049     m_attachButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0050     m_attachButton->setEnabled(false);
0051 
0052     KConfigGroup config = KSharedConfig::openConfig()->group("GdbProcessSelectionDialog");
0053     m_processList->filterLineEdit()->setText(config.readEntry("filterText", QString()));
0054     m_processList->loadSettings(config);
0055     restoreGeometry(config.readEntry("dialogGeometry", QByteArray()));
0056 }
0057 
0058 ProcessSelectionDialog::~ProcessSelectionDialog()
0059 {
0060     KConfigGroup config = KSharedConfig::openConfig()->group("GdbProcessSelectionDialog");
0061     config.writeEntry("filterText", m_processList->filterLineEdit()->text());
0062     m_processList->saveSettings(config);
0063     config.writeEntry("dialogGeometry", saveGeometry());
0064 }
0065 
0066 long int ProcessSelectionDialog::pidSelected()
0067 {
0068     QList<KSysGuard::Process*> ps=m_processList->selectedProcesses();
0069     Q_ASSERT(ps.count()==1);
0070 
0071     KSysGuard::Process* process=ps.first();
0072 
0073     return process->pid();
0074 }
0075 
0076 QSize ProcessSelectionDialog::sizeHint() const
0077 {
0078     return QSize(740, 720);
0079 }
0080 
0081 void ProcessSelectionDialog::selectionChanged(const QItemSelection &selected)
0082 {
0083     m_attachButton->setEnabled(selected.count());
0084 }
0085 
0086 #include "moc_processselection.cpp"