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 };