File indexing completed on 2024-05-26 05:38:23
0001 /* 0002 SPDX-FileCopyrightText: 2012 Aurélien Gâteau <agateau@kde.org> 0003 SPDX-FileCopyrightText: 2013-2015 Eike Hein <hein@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include "abstractmodel.h" 0011 #include "appentry.h" 0012 #include "sectionsmodel.h" 0013 0014 #include <QQmlParserStatus> 0015 0016 #include <KServiceGroup> 0017 0018 class QTimer; 0019 0020 class AppsModel : public AbstractModel, public QQmlParserStatus 0021 { 0022 Q_OBJECT 0023 Q_INTERFACES(QQmlParserStatus) 0024 0025 Q_PROPERTY(bool autoPopulate READ autoPopulate WRITE setAutoPopulate NOTIFY autoPopulateChanged) 0026 0027 Q_PROPERTY(bool paginate READ paginate WRITE setPaginate NOTIFY paginateChanged) 0028 Q_PROPERTY(int pageSize READ pageSize WRITE setPageSize NOTIFY pageSizeChanged) 0029 Q_PROPERTY(bool flat READ flat WRITE setFlat NOTIFY flatChanged) 0030 Q_PROPERTY(bool sorted READ sorted WRITE setSorted NOTIFY sortedChanged) 0031 Q_PROPERTY(bool showSeparators READ showSeparators WRITE setShowSeparators NOTIFY showSeparatorsChanged) 0032 Q_PROPERTY(bool showTopLevelItems READ showTopLevelItems WRITE setShowTopLevelItems NOTIFY showTopLevelItemsChanged) 0033 Q_PROPERTY(int appNameFormat READ appNameFormat WRITE setAppNameFormat NOTIFY appNameFormatChanged) 0034 Q_PROPERTY(QObject *appletInterface READ appletInterface WRITE setAppletInterface NOTIFY appletInterfaceChanged) 0035 0036 public: 0037 explicit AppsModel(const QString &entryPath = QString(), 0038 bool paginate = false, 0039 int pageSize = 24, 0040 bool flat = false, 0041 bool sorted = true, 0042 bool separators = true, 0043 QObject *parent = nullptr); 0044 explicit AppsModel(const QList<AbstractEntry *> &entryList, bool deleteEntriesOnDestruction, QObject *parent = nullptr); 0045 ~AppsModel() override; 0046 0047 QString description() const override; 0048 void setDescription(const QString &text); 0049 0050 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0051 0052 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 0053 0054 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0055 0056 Q_INVOKABLE bool trigger(int row, const QString &actionId, const QVariant &argument) override; 0057 0058 bool autoPopulate() const; 0059 void setAutoPopulate(bool populate); 0060 0061 Q_INVOKABLE AbstractModel *modelForRow(int row) override; 0062 Q_INVOKABLE int rowForModel(AbstractModel *model) override; 0063 0064 int separatorCount() const override; 0065 0066 bool paginate() const; 0067 void setPaginate(bool paginate); 0068 0069 int pageSize() const; 0070 void setPageSize(int size); 0071 0072 bool flat() const; 0073 void setFlat(bool flat); 0074 0075 bool sorted() const; 0076 void setSorted(bool sorted); 0077 0078 bool showSeparators() const; 0079 void setShowSeparators(bool showSeparators); 0080 0081 bool showTopLevelItems() const; 0082 void setShowTopLevelItems(bool showTopLevelItems); 0083 0084 int appNameFormat() const; 0085 void setAppNameFormat(int format); 0086 0087 QObject *appletInterface() const; 0088 void setAppletInterface(QObject *appletInterface); 0089 0090 QStringList hiddenEntries() const; 0091 0092 SectionsModel *sections() const override; 0093 0094 void entryChanged(AbstractEntry *entry) override; 0095 0096 void classBegin() override; 0097 void componentComplete() override; 0098 0099 Q_SIGNALS: 0100 void cleared() const; 0101 void autoPopulateChanged() const; 0102 void paginateChanged() const; 0103 void pageSizeChanged() const; 0104 void flatChanged() const; 0105 void sortedChanged() const; 0106 void showSeparatorsChanged() const; 0107 void showTopLevelItemsChanged() const; 0108 void appNameFormatChanged() const; 0109 void appletInterfaceChanged() const; 0110 void hiddenEntriesChanged() const; 0111 0112 protected Q_SLOTS: 0113 void refresh() override; 0114 0115 protected: 0116 void refreshInternal(); 0117 void sortEntries(QList<AbstractEntry *> &entryList); 0118 0119 bool m_complete; 0120 0121 bool m_paginate; 0122 int m_pageSize; 0123 0124 QList<AbstractEntry *> m_entryList; 0125 bool m_deleteEntriesOnDestruction; 0126 int m_separatorCount; 0127 bool m_showSeparators; 0128 bool m_showTopLevelItems; 0129 0130 QObject *m_appletInterface; 0131 0132 private: 0133 void processServiceGroup(KServiceGroup::Ptr group); 0134 void refreshSectionList(); 0135 0136 bool m_autoPopulate; 0137 0138 SectionsModel *m_sectionList; 0139 0140 QString m_description; 0141 QString m_entryPath; 0142 bool m_staticEntryList; 0143 QTimer *m_changeTimer; 0144 bool m_flat; 0145 bool m_sorted; 0146 AppEntry::NameFormat m_appNameFormat; 0147 QStringList m_hiddenEntries; 0148 static MenuEntryEditor *m_menuEntryEditor; 0149 };