Warning, file /plasma/plasma-mobile/containments/homescreens/folio/applicationlistmodel.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // SPDX-FileCopyrightText: 2014 Antonis Tsiapaliokas <antonis.tsiapaliokas@kde.org>
0002 // SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #pragma once
0006 
0007 #include <QAbstractListModel>
0008 #include <QList>
0009 #include <QObject>
0010 #include <QQuickItem>
0011 #include <QSet>
0012 
0013 #include <KWayland/Client/connection_thread.h>
0014 #include <KWayland/Client/plasmawindowmanagement.h>
0015 #include <KWayland/Client/registry.h>
0016 #include <KWayland/Client/surface.h>
0017 
0018 /**
0019  * @short The base application list, used directly by the app drawer.
0020  *
0021  * Items that are displayed on the desktop/pinned are done by DesktopModel, which is a subclass.
0022  */
0023 class ApplicationListModel : public QAbstractListModel
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     // this enum is solely used by DesktopModel
0029     enum LauncherLocation { None = 0, Favorites, Desktop };
0030     Q_ENUM(LauncherLocation)
0031 
0032     struct ApplicationData {
0033         QString uniqueId;
0034         QString name;
0035         QString icon;
0036         QString storageId;
0037         QString entryPath;
0038         bool startupNotify = true;
0039         KWayland::Client::PlasmaWindow *window = nullptr;
0040         LauncherLocation location = LauncherLocation::None; // only for DesktopModel
0041     };
0042 
0043     enum Roles {
0044         ApplicationNameRole = Qt::UserRole + 1,
0045         ApplicationIconRole,
0046         ApplicationStorageIdRole,
0047         ApplicationEntryPathRole,
0048         ApplicationStartupNotifyRole,
0049         ApplicationRunningRole,
0050         ApplicationUniqueIdRole,
0051         ApplicationLocationRole // only valid for DesktopModel
0052     };
0053 
0054     ApplicationListModel(QObject *parent = nullptr);
0055     ~ApplicationListModel() override;
0056 
0057     int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
0058     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
0059     QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
0060 
0061     Q_INVOKABLE virtual void load();
0062 
0063     Q_INVOKABLE void setMinimizedDelegate(int row, QQuickItem *delegate);
0064     Q_INVOKABLE void unsetMinimizedDelegate(int row, QQuickItem *delegate);
0065 
0066 public Q_SLOTS:
0067     void sycocaDbChanged();
0068     void windowCreated(KWayland::Client::PlasmaWindow *window);
0069 
0070 Q_SIGNALS:
0071     void launchError(const QString &msg);
0072 
0073 protected:
0074     QList<ApplicationData> m_applicationList;
0075 
0076     KWayland::Client::PlasmaWindowManagement *m_windowManagement = nullptr;
0077 };