mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-13 09:47:42 +00:00
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.
61 lines
1.4 KiB
C++
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);
|
|
};
|