File indexing completed on 2024-05-12 05:35:38

0001 /*
0002     SPDX-FileCopyrightText: 2022 Méven Car <meven@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef APPLICATION_MODEL_H
0008 #define APPLICATION_MODEL_H
0009 
0010 #include <KService>
0011 #include <QAbstractItemModel>
0012 
0013 #include <optional>
0014 
0015 class ApplicationModel : public QAbstractItemModel
0016 {
0017     Q_OBJECT
0018 
0019 public:
0020     explicit ApplicationModel(QObject *parent = nullptr);
0021 
0022     enum Roles {
0023         Icon = Qt::UserRole + 1,
0024         StorageId = Qt::UserRole + 2,
0025         IsDefault = Qt::UserRole + 3,
0026         Selected = Qt::UserRole + 4,
0027         ExecLine = Qt::UserRole + 5,
0028     };
0029     Q_ENUMS(Roles)
0030 
0031     // Header:
0032     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
0033 
0034     // Basic functionality:
0035     QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
0036     QModelIndex parent(const QModelIndex &index) const override;
0037 
0038     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0039     int columnCount(const QModelIndex &parent = QModelIndex()) const override;
0040 
0041     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0042     QVariant data(const int &row, int role = Qt::DisplayRole) const;
0043 
0044     bool setData(const QModelIndex &index, const QVariant &value, int role) override;
0045 
0046     QModelIndex findByStorageId(const QString &storageId) const;
0047 
0048     QHash<int, QByteArray> roleNames() const override;
0049 
0050     void load(const QString &mimeType, const QString &applicationCategory, const QString &defaultApplication, const KService::Ptr preferredService);
0051     Q_INVOKABLE int currentIndex() const;
0052 
0053     std::optional<int> defaultIndex() const;
0054 
0055     int addApplicationBeforeLast(const KServicePtr service);
0056     void addApplication(const QString &name, const QString &iconName, const QString &storageId, bool isSelected, const QString &execLine);
0057 
0058 private:
0059     bool isValid(const QModelIndex &index) const;
0060 
0061     QList<QVariantMap> m_applications;
0062     int m_defaultIndex = -1;
0063 };
0064 
0065 #endif // APPLICATION_MODEL_H