File indexing completed on 2024-04-28 16:49:54
0001 /* 0002 SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "process_data_provider.h" 0008 #include "process_attribute.h" 0009 #include "processes.h" 0010 0011 using namespace KSysGuard; 0012 0013 class Q_DECL_HIDDEN KSysGuard::ProcessDataProvider::Private 0014 { 0015 public: 0016 KSysGuard::Processes *m_processes; 0017 QVector<ProcessAttribute *> m_attributes; 0018 bool m_enabled = false; 0019 }; 0020 0021 ProcessDataProvider::ProcessDataProvider(QObject *parent, const QVariantList &args) 0022 : QObject(parent) 0023 , d(new Private) 0024 { 0025 // cast is needed to allow us to use KPluginFactory, but not have null pointers during subclass construction 0026 auto procList = qobject_cast<KSysGuard::Processes *>(parent); 0027 Q_ASSERT(procList); 0028 d->m_processes = procList; 0029 0030 Q_UNUSED(args) 0031 } 0032 0033 ProcessDataProvider::~ProcessDataProvider() 0034 { 0035 } 0036 0037 KSysGuard::Processes *ProcessDataProvider::processes() const 0038 { 0039 return d->m_processes; 0040 } 0041 0042 KSysGuard::Process *ProcessDataProvider::getProcess(long pid) 0043 { 0044 auto process = d->m_processes->getProcess(pid); 0045 if (!process) { 0046 processes()->updateOrAddProcess(pid); 0047 } 0048 process = processes()->getProcess(pid); 0049 return process; 0050 } 0051 0052 QVector<ProcessAttribute *> ProcessDataProvider::attributes() const 0053 { 0054 return d->m_attributes; 0055 } 0056 0057 bool ProcessDataProvider::enabled() const 0058 { 0059 return d->m_enabled; 0060 } 0061 0062 void ProcessDataProvider::addProcessAttribute(ProcessAttribute *attribute) 0063 { 0064 d->m_attributes << attribute; 0065 connect(attribute, &ProcessAttribute::enabledChanged, this, [this](bool enabled) { 0066 if (enabled == d->m_enabled) { 0067 return; 0068 } 0069 bool wasEnabled = d->m_enabled; 0070 0071 d->m_enabled = std::any_of(d->m_attributes.constBegin(), d->m_attributes.constEnd(), [](ProcessAttribute *p) { 0072 return p->enabled(); 0073 }); 0074 0075 if (d->m_enabled != wasEnabled) { 0076 handleEnabledChanged(d->m_enabled); 0077 } 0078 }); 0079 }