KNewStuff

quickitemsmodel.h
1/*
2 SPDX-FileCopyrightText: 2016 Dan Leinir Turthra Jensen <admin@leinir.dk>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6
7#ifndef ITEMSMODEL_H
8#define ITEMSMODEL_H
9
10#include <QAbstractListModel>
11
12#include "entry.h"
13#include "quickengine.h"
14
15#include <memory>
16
17class ItemsModelPrivate;
18
19/**
20 * @short A model which shows the contents found in an Engine
21 *
22 * Use an instance of this model to show the content items represented by the configuration
23 * file passed to an engine. The following sample assumes you are using the Engine component,
24 * however it is also possible to pass a KNSCore::EngineBase instance created from C++ to this
25 * property, if you have specific requirements not covered by the convenience component.
26 *
27 * Most data in the model is simple, but the DownloadLinks role will return a list of
28 * DownloadLinkInfo entries, which you will need to manage in some way.
29 *
30 * You might also look at NewStuffList, NewStuffItem, and the other items, to see some more
31 * detail on what can be done with the data.
32 *
33 * @see NewStuffList
34 * @see NewStuffItem
35 * @see NewStuffPage
36 * @see NewStuffEntryDetails
37 * @see NewStuffEntryComments
38 *
39 * \code
40 import org.kde.newstuff as NewStuff
41 Item {
42 NewStuff.ItemsModel {
43 id: newStuffModel
44 engine: newStuffEngine
45 }
46 NewStuff.Engine {
47 id: newStuffEngine
48 configFile: "/some/filesystem/location/wallpaper.knsrc"
49 onBusyMessageChanged: () => console.log("KNS Message: " + newStuffEngine.busyMessage)
50 onErrorCode: (code, message, metadata) => console.log("KNS Error: " + message)
51 }
52 }
53 \endcode
54 */
56{
58 /**
59 * The NewStuffQuickEngine to show items from
60 */
61 Q_PROPERTY(Engine *engine READ engine WRITE setEngine NOTIFY engineChanged REQUIRED)
62public:
63 explicit ItemsModel(QObject *parent = nullptr);
64 ~ItemsModel() override;
65
66 enum Roles {
67 NameRole = Qt::UserRole + 1,
68 UniqueIdRole,
69 CategoryRole,
70 HomepageRole,
71 AuthorRole,
72 LicenseRole,
73 ShortSummaryRole,
74 SummaryRole,
75 ChangelogRole,
76 VersionRole,
77 ReleaseDateRole,
78 UpdateVersionRole,
79 UpdateReleaseDateRole,
80 PayloadRole,
81 PreviewsSmallRole, ///@< this will return a list here, rather than be tied so tightly to the remote api
82 PreviewsRole, ///@< this will return a list here, rather than be tied so tightly to the remote api
84 UnInstalledFilesRole,
85 RatingRole,
86 NumberOfCommentsRole,
87 DownloadCountRole,
88 NumberFansRole,
89 NumberKnowledgebaseEntriesRole,
90 KnowledgebaseLinkRole,
91 DownloadLinksRole,
92 DonationLinkRole,
93 ProviderIdRole,
94 SourceRole,
95 CommentsModelRole,
96 EntryRole,
97 };
99
100 // The lists in OCS are one-indexed, and that isn't how one usually does things in C++.
101 // Consequently, this enum removes what would seem like magic numbers from the code, and
102 // makes their meaning more explicit.
103 enum LinkId { // TODO KF6 reuse this enum in the transaction, we currently use magic numbers there
104 AutoDetectLinkId = -1,
105 FirstLinkId = 1,
106 };
107 Q_ENUM(LinkId)
108
109 QHash<int, QByteArray> roleNames() const override;
110 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
111 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
112 bool canFetchMore(const QModelIndex &parent) const override;
113 void fetchMore(const QModelIndex &parent) override;
114
115 Engine *engine() const;
116 void setEngine(Engine *newEngine);
117 Q_SIGNAL void engineChanged();
118
119 /**
120 * Get the index of an entry based on that entry's unique ID
121 * @param providerId The provider inside of which you wish to search for an entry
122 * @param entryId The unique ID within the given provider of the entry you want to know the index of
123 * @return The index of the entry. In case the entry is not found, -1 is returned
124 * @see KNSCore::Entry::uniqueId()
125 * @since 5.79
126 */
127 Q_INVOKABLE int indexOfEntryId(const QString &providerId, const QString &entryId);
128 Q_INVOKABLE int indexOfEntry(const KNSCore::Entry &e)
129 {
130 return indexOfEntryId(e.providerId(), e.uniqueId());
131 }
132
133 /**
134 * @brief Fired when an entry's data changes
135 *
136 * @param entry The entry which has changed
137 */
139
140private:
141 const std::unique_ptr<ItemsModelPrivate> d;
142};
143
144#endif // ITEMSMODEL_H
KNSCore::EngineBase for interfacing with QML.
Definition quickengine.h:29
A model which shows the contents found in an Engine.
Q_INVOKABLE int indexOfEntryId(const QString &providerId, const QString &entryId)
Get the index of an entry based on that entry's unique ID.
@ PreviewsRole
< this will return a list here, rather than be tied so tightly to the remote api
@ InstalledFilesRole
< this will return a list here, rather than be tied so tightly to the remote api
Q_SIGNAL void entryChanged(const KNSCore::Entry &entry)
Fired when an entry's data changes.
Engine * engine
The NewStuffQuickEngine to show items from.
KNewStuff data entry container.
Definition entry.h:48
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const override
Q_ENUM(...)
Q_INVOKABLEQ_INVOKABLE
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
Q_SIGNALQ_SIGNAL
QObject * parent() const const
UserRole
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Sat Dec 21 2024 17:02:29 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.