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

KNewStuff

itemsmodel.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of KNewStuff2.
00003     Copyright (C) 2008 Jeremy Whiting <jeremy@scitools.com>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Lesser General Public
00007     License as published by the Free Software Foundation; either
00008     version 2.1 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Lesser General Public License for more details.
00014 
00015     You should have received a copy of the GNU Lesser General Public
00016     License along with this library.  If not, see <http://www.gnu.org/licenses/>.
00017 */
00018 
00019 #include "itemsmodel.h"
00020 
00021 #include <kdebug.h>
00022 
00023 namespace KNS
00024 {
00025 ItemsModel::ItemsModel(QObject * parent, bool hasWebService)
00026         : QAbstractListModel(parent), m_hasPreviewImages(false), m_hasWebService(hasWebService)
00027 {
00028 }
00029 
00030 ItemsModel::~ItemsModel()
00031 {
00032 }
00033 
00034 int ItemsModel::rowCount(const QModelIndex & /*parent*/) const
00035 {
00036     return m_entries.count();
00037 }
00038 
00039 QVariant ItemsModel::data(const QModelIndex & index, int role) const
00040 {
00041     Entry * entry = m_entries[index.row()];
00042     switch (role) {
00043     case Qt::DisplayRole:
00044     case kNameRole:
00045         return entry->name().representation();
00046         break;
00047     case kCategory:
00048         return entry->category();
00049         break;
00050     case kAuthorName:
00051         return entry->author().name();
00052         break;
00053     case kAuthorEmail:
00054         return entry->author().email();
00055         break;
00056     case kAuthorJabber:
00057         return entry->author().jabber();
00058         break;
00059     case kAuthorHomepage:
00060         return entry->author().homepage();
00061         break;
00062     case kLicense:
00063         return entry->license();
00064         break;
00065         //case Qt::ToolTipRole:
00066     case kSummary:
00067         return entry->summary().representation();
00068         break;
00069     case kVersion:
00070         return entry->version();
00071         break;
00072     case kRelease:
00073         return entry->release();
00074         break;
00075     case kReleaseDate:
00076         return entry->releaseDate();
00077         break;
00078     case kPayload:
00079         return entry->payload().representation();
00080         break;
00081     case kPreview:
00082         return entry->preview().representation();
00083         break;
00084     case kPreviewPixmap:
00085         if (m_previewImages.contains(entry->preview().representation())) {
00086             return m_previewImages[entry->preview().representation()];
00087         }
00088         break;
00089     case kLargePreviewPixmap:
00090         if (m_largePreviewImages.contains(entry->preview().representation())) {
00091             return m_largePreviewImages[entry->preview().representation()];
00092         }
00093         break;
00094     case kRating:
00095         return entry->rating();
00096         break;
00097     case kDownloads:
00098         return entry->downloads();
00099         break;
00100     case kStatus:
00101         return entry->status();
00102         break;
00103     }
00104     return QVariant();
00105 }
00106 
00107 KNS::Entry* ItemsModel::entryForIndex(const QModelIndex & index) const
00108 {
00109     if (index.row() < 0)
00110         return 0;
00111     else
00112         return m_entries[index.row()];
00113 }
00114 
00115 void ItemsModel::addEntry(Entry * entry)
00116 {
00117     //kDebug(551) << "adding entry " << entry->name().representation() << " to the model";
00118     beginInsertRows(QModelIndex(), m_entries.count(), m_entries.count());
00119     m_entries.append(entry);
00120     endInsertRows();
00121 
00122     QString preview = entry->preview().representation();
00123     if (!preview.isEmpty()) {
00124         m_hasPreviewImages = true;
00125         m_imageIndexes.insert(preview, index(m_entries.count() - 1, 0));
00126         QAsyncPixmap *pix = new QAsyncPixmap(preview, this);
00127         connect(pix, SIGNAL(signalLoaded(const QString &, const QPixmap&)),
00128                 this, SLOT(slotEntryPreviewLoaded(const QString &, const QPixmap&)));
00129     }
00130 }
00131 
00132 void ItemsModel::removeEntry(Entry * entry)
00133 {
00134     kDebug(551) << "removing entry " << entry->name().representation() << " from the model";
00135     int index = m_entries.indexOf(entry);
00136     if (index > -1) {
00137         beginRemoveRows(QModelIndex(), index, index);
00138         m_entries.removeAt(index);
00139         endRemoveRows();
00140     }
00141 }
00142 
00143 void ItemsModel::slotEntryChanged(Entry * entry)
00144 {
00145     int i = m_entries.indexOf(entry);
00146     QModelIndex entryIndex = index(i, 0);
00147     emit dataChanged(entryIndex, entryIndex);
00148 }
00149 
00150 void ItemsModel::slotEntryPreviewLoaded(const QString &url, const QPixmap & pix)
00151 {
00152     if( pix.isNull())
00153         return;
00154     QImage image = pix.toImage();
00155     m_largePreviewImages.insert(url, image);
00156     m_previewImages.insert(url, image.scaled(64, 64, Qt::KeepAspectRatio));
00157 
00158     QModelIndex thisIndex = m_imageIndexes[url];
00159 
00160     emit dataChanged(thisIndex, thisIndex);
00161 }
00162 
00163 bool ItemsModel::hasPreviewImages() const
00164 {
00165     return m_hasPreviewImages;
00166 }
00167 
00168 bool ItemsModel::hasWebService() const
00169 {
00170     return m_hasWebService;
00171 }
00172 
00173 } // end KNS namespace

KNewStuff

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

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal