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

KNewStuff

  • sources
  • kde-4.14
  • kdelibs
  • 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 
24 namespace KNS
25 {
26 ItemsModel::ItemsModel(QObject * parent, bool hasWebService)
27  : QAbstractListModel(parent), m_hasPreviewImages(false), m_hasWebService(hasWebService)
28 {
29 }
30 
31 ItemsModel::~ItemsModel()
32 {
33 }
34 
35 int ItemsModel::rowCount(const QModelIndex & /*parent*/) const
36 {
37  return m_entries.count();
38 }
39 
40 QVariant 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 
108 KNS::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 
116 void 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 
136 void 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 
147 void 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 
154 void 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 
178 bool ItemsModel::hasPreviewImages() const
179 {
180  return m_hasPreviewImages;
181 }
182 
183 bool ItemsModel::hasWebService() const
184 {
185  return m_hasWebService;
186 }
187 
188 } // end KNS namespace
KNS::Author::jabber
QString jabber() const
Retrieve the author's jabber address.
Definition: knewstuff2/core/author.cpp:78
KNS::ItemsModel::kRelease
the release number
Definition: knewstuff2/ui/itemsmodel.h:60
QModelIndex
KNS::ItemsModel::~ItemsModel
~ItemsModel()
Definition: knewstuff2/ui/itemsmodel.cpp:31
QMap::contains
bool contains(const Key &key) const
kdebug.h
KNS::ItemsModel::kDownloads
the number of downloads for the entry
Definition: knewstuff2/ui/itemsmodel.h:74
KNS::ItemsModel::kAuthorEmail
the e-mail address of the author
Definition: knewstuff2/ui/itemsmodel.h:48
KNS::ItemsModel::ItemsModel
ItemsModel(QObject *parent=NULL, bool hasWebService=false)
Definition: knewstuff2/ui/itemsmodel.cpp:26
KNS::Entry
KNewStuff data entry container.
Definition: knewstuff2/core/entry.h:46
KNS::ItemsModel::kNameRole
the name of the entry
Definition: knewstuff2/ui/itemsmodel.h:42
KNS::Entry::releaseDate
QDate releaseDate() const
Retrieve the date of the object's publication.
Definition: knewstuff2/core/entry.cpp:151
KNS::Entry::status
Status status()
Retrieves the entry's status.
Definition: knewstuff2/core/entry.cpp:216
QList::removeAt
void removeAt(int i)
KNS::Entry::version
QString version() const
Retrieve the version string of the object.
Definition: knewstuff2/core/entry.cpp:131
KNS::Author::email
QString email() const
Retrieve the author's email address.
Definition: knewstuff2/core/author.cpp:68
KNS::Entry::release
int release() const
Retrieve the release number of the object.
Definition: knewstuff2/core/entry.cpp:141
QImage::isNull
bool isNull() const
KNS::Entry::summary
KTranslatable summary() const
Retrieve a short description about the object.
Definition: knewstuff2/core/entry.cpp:121
KNS::Entry::category
QString category() const
Retrieve the category of the data object.
Definition: knewstuff2/core/entry.cpp:91
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
KNS::kPreviewHeight
static const int kPreviewHeight
Definition: knewstuff2/ui/itemsmodel.h:30
KNS::Entry::name
KTranslatable name() const
Retrieve the name of the data object.
Definition: knewstuff2/core/entry.cpp:81
QAsyncImage
Convenience class for images with remote sources.
Definition: qasyncimage_p.h:44
KNS::ItemsModel::hasPreviewImages
bool hasPreviewImages() const
Definition: knewstuff2/ui/itemsmodel.cpp:178
QList::indexOf
int indexOf(const T &value, int from) const
KNS::ItemsModel::kReleaseDate
the release date
Definition: knewstuff2/ui/itemsmodel.h:62
KNS::ItemsModel::slotEntryChanged
void slotEntryChanged(KNS::Entry *entry)
Definition: knewstuff2/ui/itemsmodel.cpp:147
QList::count
int count(const T &value) const
KNS::Entry::payload
KTranslatable payload() const
Retrieve the file name of the object.
Definition: knewstuff2/core/entry.cpp:161
QList::append
void append(const T &value)
QAbstractItemModel::dataChanged
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
QAbstractItemModel::endInsertRows
void endInsertRows()
KNS::ItemsModel::kAuthorHomepage
the authors homepage
Definition: knewstuff2/ui/itemsmodel.h:52
QObject
QImage::width
int width() const
KNS::Entry::author
Author author() const
Retrieve the author of the object.
Definition: knewstuff2/core/entry.cpp:101
QAbstractListModel::index
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const
QAbstractListModel
KNS::ItemsModel::kPayload
the payload
Definition: knewstuff2/ui/itemsmodel.h:64
KNS::Entry::license
QString license() const
Retrieve the license name of the object.
Definition: knewstuff2/core/entry.cpp:111
QString::isEmpty
bool isEmpty() const
QAbstractItemModel::beginRemoveRows
void beginRemoveRows(const QModelIndex &parent, int first, int last)
QModelIndex::row
int row() const
KNS::ItemsModel::kStatus
the status of this entry
Definition: knewstuff2/ui/itemsmodel.h:76
KNS::Author::name
QString name() const
Retrieve the author's name.
Definition: knewstuff2/core/author.cpp:58
KNS::ItemsModel::addEntry
void addEntry(Entry *entry)
Definition: knewstuff2/ui/itemsmodel.cpp:116
KNS::ItemsModel::removeEntry
void removeEntry(Entry *entry)
Definition: knewstuff2/ui/itemsmodel.cpp:136
QString
KNS::ItemsModel::kLargePreviewPixmap
the unscaled preview image
Definition: knewstuff2/ui/itemsmodel.h:70
KNS::KTranslatable::representation
QString representation() const
Returns the string which matches most closely the current language.
Definition: ktranslatable.cpp:64
itemsmodel.h
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::ItemsModel::hasWebService
bool hasWebService() const
Definition: knewstuff2/ui/itemsmodel.cpp:183
QImage
QAbstractItemModel::beginInsertRows
void beginInsertRows(const QModelIndex &parent, int first, int last)
KNS::ItemsModel::kSummary
a summary of the entry
Definition: knewstuff2/ui/itemsmodel.h:56
KNS::ItemsModel::rowCount
int rowCount(const QModelIndex &parent=QModelIndex()) const
Definition: knewstuff2/ui/itemsmodel.cpp:35
KNS::ItemsModel::kPreview
the preview url
Definition: knewstuff2/ui/itemsmodel.h:66
KNS::ItemsModel::entryForIndex
KNS::Entry * entryForIndex(const QModelIndex &index) const
Definition: knewstuff2/ui/itemsmodel.cpp:108
KNS::ItemsModel::kPreviewPixmap
the preview image
Definition: knewstuff2/ui/itemsmodel.h:68
KNS::ItemsModel::kVersion
a string of the version e.g.
Definition: knewstuff2/ui/itemsmodel.h:58
KNS::ItemsModel::kLicense
the license of the entry
Definition: knewstuff2/ui/itemsmodel.h:54
KNS::kPreviewWidth
static const int kPreviewWidth
Definition: knewstuff2/ui/itemsmodel.h:29
KNS::ItemsModel::data
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Definition: knewstuff2/ui/itemsmodel.cpp:40
KNS::ItemsModel::kRating
the rating of the entry
Definition: knewstuff2/ui/itemsmodel.h:72
QImage::height
int height() const
QMap::insert
iterator insert(const Key &key, const T &value)
qasyncimage_p.h
QAbstractItemModel::endRemoveRows
void endRemoveRows()
KNS::ItemsModel::kAuthorName
the name of the author of the entry
Definition: knewstuff2/ui/itemsmodel.h:46
KNS::Author::homepage
QString homepage() const
Retrieve the author's homepage.
Definition: knewstuff2/core/author.cpp:88
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
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::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
QImage::scaled
QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode) const
KNS::ItemsModel::kAuthorJabber
the jabber of the author
Definition: knewstuff2/ui/itemsmodel.h:50
KNS::ItemsModel::kCategory
the category of the entry
Definition: knewstuff2/ui/itemsmodel.h:44
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:25:43 by doxygen 1.8.7 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 API Reference

Skip menu "kdelibs 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

Search



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