• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.10.5 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 
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
This file is part of the KDE documentation.
Documentation copyright © 1996-2013 The KDE developers.
Generated on Tue Jul 16 2013 17:51:51 by doxygen 1.8.1.1 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.10.5 API Reference

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