shift-shell/containments/homescreens/folio/applicationlistmodel.h
Devin Lin 3afdafd8c2 folio: Use dynamic list insert/delete for changes
Should help reduce the effect of https://invent.kde.org/plasma/plasma-mobile/-/issues/440

Instead of fully resetting the application list when the ksycoca db
changes, calculate which items are removed and added based on the
storageId and emit targeted signals for them.
2025-03-19 21:45:06 +00:00

61 lines
1.4 KiB
C++

// SPDX-FileCopyrightText: 2014 Antonis Tsiapaliokas <antonis.tsiapaliokas@kde.org>
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <QAbstractListModel>
#include <QList>
#include <QObject>
#include <QQuickItem>
#include <QSet>
#include <KService>
#include "foliodelegate.h"
#include "homescreen.h"
class HomeScreen;
class FolioDelegate;
/**
* @short The base application list, used directly by the app drawer.
*/
class ApplicationListModel : public QAbstractListModel
{
Q_OBJECT
public:
enum Roles {
DelegateRole = Qt::UserRole + 1,
NameRole,
};
ApplicationListModel(HomeScreen *parent = nullptr);
~ApplicationListModel() override;
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
QHash<int, QByteArray> roleNames() const Q_DECL_OVERRIDE;
void load();
public Q_SLOTS:
void sycocaDbChanged();
protected:
KService::List queryApplications();
HomeScreen *m_homeScreen{nullptr};
QList<std::shared_ptr<FolioDelegate>> m_delegates;
QTimer *m_reloadAppsTimer{nullptr};
};
class ApplicationListSearchModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
ApplicationListSearchModel(HomeScreen *parent = nullptr, ApplicationListModel *model = nullptr);
};