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"