File indexing completed on 2024-05-05 05:38:34
0001 /* 0002 SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "activityinfo.h" 0008 0009 #include <PlasmaActivities/ActivitiesModel> 0010 #include <PlasmaActivities/Consumer> 0011 0012 namespace TaskManager 0013 { 0014 class Q_DECL_HIDDEN ActivityInfo::Private 0015 { 0016 public: 0017 Private(ActivityInfo *q); 0018 ~Private(); 0019 0020 static int instanceCount; 0021 static KActivities::Consumer *activityConsumer; 0022 static KActivities::ActivitiesModel *activitiesModel; 0023 }; 0024 0025 int ActivityInfo::Private::instanceCount = 0; 0026 KActivities::Consumer *ActivityInfo::Private::activityConsumer = nullptr; 0027 KActivities::ActivitiesModel *ActivityInfo::Private::activitiesModel = nullptr; 0028 0029 ActivityInfo::Private::Private(ActivityInfo *) 0030 { 0031 ++instanceCount; 0032 } 0033 0034 ActivityInfo::Private::~Private() 0035 { 0036 --instanceCount; 0037 0038 if (!instanceCount) { 0039 delete activityConsumer; 0040 activityConsumer = nullptr; 0041 delete activitiesModel; 0042 activitiesModel = nullptr; 0043 } 0044 } 0045 0046 ActivityInfo::ActivityInfo(QObject *parent) 0047 : QObject(parent) 0048 , d(new Private(this)) 0049 { 0050 if (!d->activityConsumer) { 0051 d->activityConsumer = new KActivities::Consumer(); 0052 } 0053 0054 connect(d->activityConsumer, &KActivities::Consumer::currentActivityChanged, this, &ActivityInfo::currentActivityChanged); 0055 connect(d->activityConsumer, &KActivities::Consumer::runningActivitiesChanged, this, &ActivityInfo::numberOfRunningActivitiesChanged); 0056 connect(d->activityConsumer, &KActivities::Consumer::runningActivitiesChanged, this, &ActivityInfo::namesOfRunningActivitiesChanged); 0057 0058 if (!d->activitiesModel) { 0059 d->activitiesModel = new KActivities::ActivitiesModel(); 0060 d->activitiesModel->setShownStates(QList<KActivities::Info::State>{KActivities::Info::Running}); 0061 } 0062 0063 connect(d->activitiesModel, &KActivities::ActivitiesModel::modelReset, this, &ActivityInfo::namesOfRunningActivitiesChanged); 0064 0065 connect(d->activitiesModel, 0066 &KActivities::ActivitiesModel::dataChanged, 0067 this, 0068 [this](const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles) { 0069 Q_UNUSED(topLeft) 0070 Q_UNUSED(bottomRight) 0071 0072 if (roles.isEmpty() || roles.contains(Qt::DisplayRole)) { 0073 Q_EMIT namesOfRunningActivitiesChanged(); 0074 } 0075 }); 0076 } 0077 0078 ActivityInfo::~ActivityInfo() 0079 { 0080 } 0081 0082 QString ActivityInfo::currentActivity() const 0083 { 0084 return d->activityConsumer->currentActivity(); 0085 } 0086 0087 int ActivityInfo::numberOfRunningActivities() const 0088 { 0089 return d->activityConsumer->activities(KActivities::Info::State::Running).count(); 0090 } 0091 0092 QStringList ActivityInfo::runningActivities() const 0093 { 0094 return d->activityConsumer->activities(KActivities::Info::State::Running); 0095 } 0096 0097 QString ActivityInfo::activityName(const QString &id) 0098 { 0099 KActivities::Info info(id); 0100 0101 if (info.state() != KActivities::Info::Invalid) { 0102 return info.name(); 0103 } 0104 0105 return QString(); 0106 } 0107 0108 QString ActivityInfo::activityIcon(const QString &id) 0109 { 0110 KActivities::Info info(id); 0111 0112 if (info.state() != KActivities::Info::Invalid) { 0113 return info.icon(); 0114 } 0115 0116 return QString(); 0117 } 0118 }