• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KNewStuff

  • knewstuff
  • knewstuff2
  • ui
knewstuff2/ui/itemsmodel.cpp
Go to the documentation of this file.
1/*
2 This file is part of KNewStuff2.
3 Copyright (C) 2008 Jeremy Whiting <jpwhiting@kde.org>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#include "itemsmodel.h"
20
21#include <kdebug.h>
22#include "qasyncimage_p.h"
23
24namespace KNS
25{
26ItemsModel::ItemsModel(QObject * parent, bool hasWebService)
27 : QAbstractListModel(parent), m_hasPreviewImages(false), m_hasWebService(hasWebService)
28{
29}
30
31ItemsModel::~ItemsModel()
32{
33}
34
35int ItemsModel::rowCount(const QModelIndex & /*parent*/) const
36{
37 return m_entries.count();
38}
39
40QVariant ItemsModel::data(const QModelIndex & index, int role) const
41{
42 Entry * entry = m_entries[index.row()];
43 switch (role) {
44 case Qt::DisplayRole:
45 case kNameRole:
46 return entry->name().representation();
47 break;
48 case kCategory:
49 return entry->category();
50 break;
51 case kAuthorName:
52 return entry->author().name();
53 break;
54 case kAuthorEmail:
55 return entry->author().email();
56 break;
57 case kAuthorJabber:
58 return entry->author().jabber();
59 break;
60 case kAuthorHomepage:
61 return entry->author().homepage();
62 break;
63 case kLicense:
64 return entry->license();
65 break;
66 //case Qt::ToolTipRole:
67 case kSummary:
68 return entry->summary().representation();
69 break;
70 case kVersion:
71 return entry->version();
72 break;
73 case kRelease:
74 return entry->release();
75 break;
76 case kReleaseDate:
77 return entry->releaseDate();
78 break;
79 case kPayload:
80 return entry->payload().representation();
81 break;
82 case kPreview:
83 return entry->preview().representation();
84 break;
85 case kPreviewPixmap:
86 if (m_previewImages.contains(entry->preview().representation())) {
87 return m_previewImages[entry->preview().representation()];
88 }
89 break;
90 case kLargePreviewPixmap:
91 if (m_largePreviewImages.contains(entry->preview().representation())) {
92 return m_largePreviewImages[entry->preview().representation()];
93 }
94 break;
95 case kRating:
96 return entry->rating();
97 break;
98 case kDownloads:
99 return entry->downloads();
100 break;
101 case kStatus:
102 return entry->status();
103 break;
104 }
105 return QVariant();
106}
107
108KNS::Entry* ItemsModel::entryForIndex(const QModelIndex & index) const
109{
110 if (index.row() < 0)
111 return 0;
112 else
113 return m_entries[index.row()];
114}
115
116void ItemsModel::addEntry(Entry * entry)
117{
118 QString preview = entry->preview().representation();
119 if (!preview.isEmpty()) {
120 m_hasPreviewImages = true;
121 }
122
123 //kDebug(551) << "adding entry " << entry->name().representation() << " to the model";
124 beginInsertRows(QModelIndex(), m_entries.count(), m_entries.count());
125 m_entries.append(entry);
126 endInsertRows();
127
128 if (!preview.isEmpty()) {
129 m_imageIndexes.insert(preview, index(m_entries.count() - 1, 0));
130 QAsyncImage *pix = new QAsyncImage(preview, this);
131 connect(pix, SIGNAL(signalLoaded(QString,QImage)),
132 this, SLOT(slotEntryPreviewLoaded(QString,QImage)));
133 }
134}
135
136void ItemsModel::removeEntry(Entry * entry)
137{
138 kDebug(551) << "removing entry " << entry->name().representation() << " from the model";
139 int index = m_entries.indexOf(entry);
140 if (index > -1) {
141 beginRemoveRows(QModelIndex(), index, index);
142 m_entries.removeAt(index);
143 endRemoveRows();
144 }
145}
146
147void ItemsModel::slotEntryChanged(Entry * entry)
148{
149 int i = m_entries.indexOf(entry);
150 QModelIndex entryIndex = index(i, 0);
151 emit dataChanged(entryIndex, entryIndex);
152}
153
154void ItemsModel::slotEntryPreviewLoaded(const QString &url, const QImage & pix)
155{
156 if( pix.isNull())
157 return;
158 QImage image = pix;
159 m_largePreviewImages.insert(url, image);
160 if (image.width() > kPreviewWidth || image.height() > kPreviewHeight) {
161 // if the preview is really big, first scale fast to a smaller size, then smooth to desired size
162 if (image.width() > 4 * kPreviewWidth || image.height() > 4 * kPreviewHeight) {
163 image = image.scaled(2 * kPreviewWidth, 2 * kPreviewHeight, Qt::KeepAspectRatio, Qt::FastTransformation);
164 }
165 m_previewImages.insert(url, image.scaled(kPreviewWidth, kPreviewHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation));
166 } else if (image.width() <= kPreviewWidth / 2 && image.height() <= kPreviewHeight / 2) {
167 // upscale tiny previews to double size
168 m_previewImages.insert(url, image.scaled(2 * image.width(), 2 * image.height()));
169 } else {
170 m_previewImages.insert(url, image);
171 }
172
173 QModelIndex thisIndex = m_imageIndexes[url];
174
175 emit dataChanged(thisIndex, thisIndex);
176}
177
178bool ItemsModel::hasPreviewImages() const
179{
180 return m_hasPreviewImages;
181}
182
183bool ItemsModel::hasWebService() const
184{
185 return m_hasWebService;
186}
187
188} // end KNS namespace
KNS::Author::homepage
QString homepage() const
Retrieve the author's homepage.
Definition: knewstuff2/core/author.cpp:88
KNS::Author::jabber
QString jabber() const
Retrieve the author's jabber address.
Definition: knewstuff2/core/author.cpp:78
KNS::Author::name
QString name() const
Retrieve the author's name.
Definition: knewstuff2/core/author.cpp:58
KNS::Author::email
QString email() const
Retrieve the author's email address.
Definition: knewstuff2/core/author.cpp:68
KNS::Entry
KNewStuff data entry container.
Definition: knewstuff2/core/entry.h:47
KNS::Entry::preview
KTranslatable preview() const
Retrieve the file name of an image containing a preview of the object.
Definition: knewstuff2/core/entry.cpp:171
KNS::Entry::releaseDate
QDate releaseDate() const
Retrieve the date of the object's publication.
Definition: knewstuff2/core/entry.cpp:151
KNS::Entry::name
KTranslatable name() const
Retrieve the name of the data object.
Definition: knewstuff2/core/entry.cpp:81
KNS::Entry::downloads
int downloads() const
Retrieve the download count for the object, which has been determined by its hosting sites and thus m...
Definition: knewstuff2/core/entry.cpp:191
KNS::Entry::payload
KTranslatable payload() const
Retrieve the file name of the object.
Definition: knewstuff2/core/entry.cpp:161
KNS::Entry::category
QString category() const
Retrieve the category of the data object.
Definition: knewstuff2/core/entry.cpp:91
KNS::Entry::status
Status status()
Retrieves the entry's status.
Definition: knewstuff2/core/entry.cpp:216
KNS::Entry::release
int release() const
Retrieve the release number of the object.
Definition: knewstuff2/core/entry.cpp:141
KNS::Entry::version
QString version() const
Retrieve the version string of the object.
Definition: knewstuff2/core/entry.cpp:131
KNS::Entry::summary
KTranslatable summary() const
Retrieve a short description about the object.
Definition: knewstuff2/core/entry.cpp:121
KNS::Entry::rating
int rating() const
Retrieve the rating for the object, which has been determined by its users and thus might change over...
Definition: knewstuff2/core/entry.cpp:181
KNS::Entry::author
Author author() const
Retrieve the author of the object.
Definition: knewstuff2/core/entry.cpp:101
KNS::Entry::license
QString license() const
Retrieve the license name of the object.
Definition: knewstuff2/core/entry.cpp:111
KNS::ItemsModel::removeEntry
void removeEntry(Entry *entry)
Definition: knewstuff2/ui/itemsmodel.cpp:136
KNS::ItemsModel::entryForIndex
KNS::Entry * entryForIndex(const QModelIndex &index) const
Definition: knewstuff2/ui/itemsmodel.cpp:108
KNS::ItemsModel::kStatus
@ kStatus
the status of this entry
Definition: knewstuff2/ui/itemsmodel.h:76
KNS::ItemsModel::kDownloads
@ kDownloads
the number of downloads for the entry
Definition: knewstuff2/ui/itemsmodel.h:74
KNS::ItemsModel::kReleaseDate
@ kReleaseDate
the release date
Definition: knewstuff2/ui/itemsmodel.h:62
KNS::ItemsModel::kAuthorJabber
@ kAuthorJabber
the jabber of the author
Definition: knewstuff2/ui/itemsmodel.h:50
KNS::ItemsModel::kNameRole
@ kNameRole
the name of the entry
Definition: knewstuff2/ui/itemsmodel.h:42
KNS::ItemsModel::kRating
@ kRating
the rating of the entry
Definition: knewstuff2/ui/itemsmodel.h:72
KNS::ItemsModel::kLargePreviewPixmap
@ kLargePreviewPixmap
the unscaled preview image
Definition: knewstuff2/ui/itemsmodel.h:70
KNS::ItemsModel::kRelease
@ kRelease
the release number
Definition: knewstuff2/ui/itemsmodel.h:60
KNS::ItemsModel::kAuthorEmail
@ kAuthorEmail
the e-mail address of the author
Definition: knewstuff2/ui/itemsmodel.h:48
KNS::ItemsModel::kPreview
@ kPreview
the preview url
Definition: knewstuff2/ui/itemsmodel.h:66
KNS::ItemsModel::kPreviewPixmap
@ kPreviewPixmap
the preview image
Definition: knewstuff2/ui/itemsmodel.h:68
KNS::ItemsModel::kPayload
@ kPayload
the payload
Definition: knewstuff2/ui/itemsmodel.h:64
KNS::ItemsModel::kAuthorHomepage
@ kAuthorHomepage
the authors homepage
Definition: knewstuff2/ui/itemsmodel.h:52
KNS::ItemsModel::kVersion
@ kVersion
a string of the version e.g.
Definition: knewstuff2/ui/itemsmodel.h:58
KNS::ItemsModel::kCategory
@ kCategory
the category of the entry
Definition: knewstuff2/ui/itemsmodel.h:44
KNS::ItemsModel::kLicense
@ kLicense
the license of the entry
Definition: knewstuff2/ui/itemsmodel.h:54
KNS::ItemsModel::kSummary
@ kSummary
a summary of the entry
Definition: knewstuff2/ui/itemsmodel.h:56
KNS::ItemsModel::kAuthorName
@ kAuthorName
the name of the author of the entry
Definition: knewstuff2/ui/itemsmodel.h:46
KNS::ItemsModel::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: knewstuff2/ui/itemsmodel.cpp:35
KNS::ItemsModel::hasWebService
bool hasWebService() const
Definition: knewstuff2/ui/itemsmodel.cpp:183
KNS::ItemsModel::ItemsModel
ItemsModel(QObject *parent=NULL, bool hasWebService=false)
Definition: knewstuff2/ui/itemsmodel.cpp:26
KNS::ItemsModel::hasPreviewImages
bool hasPreviewImages() const
Definition: knewstuff2/ui/itemsmodel.cpp:178
KNS::ItemsModel::addEntry
void addEntry(Entry *entry)
Definition: knewstuff2/ui/itemsmodel.cpp:116
KNS::ItemsModel::data
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Definition: knewstuff2/ui/itemsmodel.cpp:40
KNS::ItemsModel::~ItemsModel
~ItemsModel()
Definition: knewstuff2/ui/itemsmodel.cpp:31
KNS::ItemsModel::slotEntryChanged
void slotEntryChanged(KNS::Entry *entry)
Definition: knewstuff2/ui/itemsmodel.cpp:147
KNS::KTranslatable::representation
QString representation() const
Returns the string which matches most closely the current language.
Definition: ktranslatable.cpp:64
QAbstractListModel
QAsyncImage
Convenience class for images with remote sources.
Definition: qasyncimage_p.h:45
QObject
kDebug
#define kDebug
kdebug.h
itemsmodel.h
KNS
Definition: knewstuff2/core/author.h:27
KNS::kPreviewWidth
static const int kPreviewWidth
Definition: knewstuff2/ui/itemsmodel.h:29
KNS::kPreviewHeight
static const int kPreviewHeight
Definition: knewstuff2/ui/itemsmodel.h:30
qasyncimage_p.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KNewStuff

Skip menu "KNewStuff"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal