PlasmaActivities

activitymodel.h
1/*
2 SPDX-FileCopyrightText: 2012, 2013, 2014 Ivan Cukic <ivan.cukic(at)kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#ifndef KACTIVITIES_IMPORTS_ACTIVITY_MODEL_H
8#define KACTIVITIES_IMPORTS_ACTIVITY_MODEL_H
9
10// Qt
11#include <QAbstractListModel>
12#include <QCollator>
13#include <QJSValue>
14#include <QObject>
15#include <qqmlregistration.h>
16
17// STL and Boost
18#include <boost/container/flat_set.hpp>
19#include <memory>
20
21// Local
22#include <lib/consumer.h>
23#include <lib/controller.h>
24#include <lib/info.h>
25
26class QModelIndex;
28
29namespace KActivities
30{
31namespace Imports
32{
33/**
34 * ActivityModel
35 */
36
37class ActivityModel : public QAbstractListModel
38{
40 QML_ELEMENT
41
42 Q_PROPERTY(QString shownStates READ shownStates WRITE setShownStates NOTIFY shownStatesChanged)
43
44public:
45 explicit ActivityModel(QObject *parent = nullptr);
46 ~ActivityModel() override;
47
48 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
49
50 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
51
52 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
53
54 QHash<int, QByteArray> roleNames() const override;
55
56 enum Roles {
57 ActivityId = Qt::UserRole,
58 ActivityDescription = Qt::UserRole + 1,
59 ActivityIcon = Qt::UserRole + 2,
60 ActivityState = Qt::UserRole + 3,
61 ActivityBackground = Qt::UserRole + 4,
62 ActivityCurrent = Qt::UserRole + 5,
63 };
64
65 enum State {
66 All = 0,
67 Invalid = 0,
68 Running = 2,
69 Starting = 3,
70 Stopped = 4,
71 Stopping = 5,
72 };
73 Q_ENUM(State)
74
75public Q_SLOTS:
76 // Activity control methods
77 void setActivityName(const QString &id, const QString &name, const QJSValue &callback);
78 void setActivityDescription(const QString &id, const QString &description, const QJSValue &callback);
79 void setActivityIcon(const QString &id, const QString &icon, const QJSValue &callback);
80
81 void setCurrentActivity(const QString &id, const QJSValue &callback);
82
83 void addActivity(const QString &name, const QJSValue &callback);
84 void removeActivity(const QString &id, const QJSValue &callback);
85
86 void stopActivity(const QString &id, const QJSValue &callback);
87 void startActivity(const QString &id, const QJSValue &callback);
88
89 // Model property getters and setters
90 void setShownStates(const QString &states);
91 QString shownStates() const;
92
94 void shownStatesChanged(const QString &state);
95
96private Q_SLOTS:
97 void onActivityNameChanged(const QString &name);
98 void onActivityDescriptionChanged(const QString &description);
99 void onActivityIconChanged(const QString &icon);
100 void onActivityStateChanged(KActivities::Info::State state);
101
102 void replaceActivities(const QStringList &activities);
103 void onActivityAdded(const QString &id, bool notifyClients = true);
104 void onActivityRemoved(const QString &id);
105 void onCurrentActivityChanged(const QString &id);
106
107 void setServiceStatus(KActivities::Consumer::ServiceStatus status);
108
109private:
110 KActivities::Controller m_service;
111 boost::container::flat_set<State> m_shownStates;
112 QString m_shownStatesString;
113
114 typedef std::shared_ptr<Info> InfoPtr;
115
116 struct InfoPtrComparator {
117 bool operator()(const InfoPtr &left, const InfoPtr &right) const
118 {
119 QCollator c;
121 c.setNumericMode(true);
122 int rc = c.compare(left->name(), right->name());
123 if (rc == 0) {
124 return left->id() < right->id();
125 }
126 return rc < 0;
127 }
128 };
129
130 boost::container::flat_set<InfoPtr, InfoPtrComparator> m_knownActivities;
131 boost::container::flat_set<InfoPtr, InfoPtrComparator> m_shownActivities;
132
133 InfoPtr registerActivity(const QString &id);
134 void unregisterActivity(const QString &id);
135 void showActivity(InfoPtr activityInfo, bool notifyClients);
136 void hideActivity(const QString &id);
137 void backgroundsUpdated(const QStringList &activities);
138
139 InfoPtr findActivity(QObject *ptr) const;
140
141 class Private;
142 friend class Private;
143};
144
145} // namespace Imports
146} // namespace KActivities
147
148#endif // KACTIVITIES_IMPORTS_ACTIVITY_MODEL_H
ServiceStatus
Different states of the activities service.
Definition consumer.h:76
This class provides methods for controlling and managing the activities.
Definition controller.h:38
State
State of the activity.
Definition info.h:90
Q_SCRIPTABLE CaptureState status()
Namespace for everything in libkactivities.
virtual QModelIndex parent(const QModelIndex &index) const const=0
QAbstractListModel(QObject *parent)
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const override
int compare(QStringView s1, QStringView s2) const const
void setCaseSensitivity(Qt::CaseSensitivity cs)
void setNumericMode(bool on)
QObject(QObject *parent)
Q_ENUM(...)
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
Q_SIGNALSQ_SIGNALS
Q_SLOTSQ_SLOTS
CaseInsensitive
DisplayRole
Orientation
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 28 2025 12:01:06 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.