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

KNewStuff

itemsmodel.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2008 Jeremy Whiting <jeremy@scitools.com>               *
00003  *                                                                         *
00004  *   This library is free software; you can redistribute it and/or         *
00005  *   modify it under the terms of the GNU Lesser General Public            *
00006  *   License as published by the Free Software Foundation; either          *
00007  *   version 2 of the License, or (at your option) any later version.      *
00008  *                                                                         *
00009  *   This library is distributed in the hope that it will be useful,       *
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00012  *   Lesser General Public License for more details.                       *
00013  *                                                                         *
00014  *   You should have received a copy of the GNU Lesser General Public      *
00015  *   License along with this library; if not, write to the                 *
00016  *   Free Software Foundation, Inc.,                                       *
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     int start = m_entries.count();
00119     int end = start + 1;
00120     beginInsertRows(QModelIndex(), start, end);
00121     m_entries.append(entry);
00122     endInsertRows();
00123 
00124     QString preview = entry->preview().representation();
00125     if (!preview.isEmpty()) {
00126         m_hasPreviewImages = true;
00127         m_imageIndexes.insert(preview, index(m_entries.count() - 1, 0));
00128         QAsyncPixmap *pix = new QAsyncPixmap(preview, this);
00129         connect(pix, SIGNAL(signalLoaded(const QString &, const QPixmap&)),
00130                 this, SLOT(slotEntryPreviewLoaded(const QString &, const QPixmap&)));
00131     }
00132 }
00133 
00134 void ItemsModel::removeEntry(Entry * entry)
00135 {
00136     kDebug(551) << "removing entry " << entry->name().representation() << " from the model";
00137     int index = m_entries.indexOf(entry);
00138     if (index > -1) {
00139         m_entries.removeAt(index);
00140     }
00141 }
00142 
00143 void ItemsModel::slotEntryPreviewLoaded(const QString &url, const QPixmap & pix)
00144 {
00145     QImage image = pix.toImage();
00146     m_largePreviewImages.insert(url, image);
00147     m_previewImages.insert(url, image.scaled(64, 64, Qt::KeepAspectRatio));
00148 
00149     QModelIndex thisIndex = m_imageIndexes[url];
00150 
00151     emit dataChanged(thisIndex, thisIndex);
00152 }
00153 
00154 bool ItemsModel::hasPreviewImages() const
00155 {
00156     return m_hasPreviewImages;
00157 }
00158 
00159 bool ItemsModel::hasWebService() const
00160 {
00161     return m_hasWebService;
00162 }
00163 
00164 } // 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
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.4
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