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

KDEUI

kwidgetitemdelegatepool.cpp

Go to the documentation of this file.
00001 
00022 #include "kwidgetitemdelegatepool_p.h"
00023 
00024 #include <math.h>
00025 
00026 #include <QtCore/qobjectdefs.h>
00027 #include <QtCore/QMetaObject>
00028 #include <QtCore/QMetaMethod>
00029 #include <QtCore/QMetaProperty>
00030 #include <QtCore/QPair>
00031 #include <QtCore/QHash>
00032 #include <QtCore/QList>
00033 #include <QtGui/QWidget>
00034 #include <QtGui/QAbstractItemView>
00035 
00036 #include "kwidgetitemdelegate.h"
00037 
00038 #define POOL_USAGE 0
00039 
00044 //@cond PRIVATE
00045 class KWidgetItemDelegatePoolPrivate
00046 {
00047 public:
00048     KWidgetItemDelegatePoolPrivate(KWidgetItemDelegate *d)
00049         : delegate(d), fakeParent(new QWidget()) { }
00050 
00051     KWidgetItemDelegate *delegate;
00052     QWidget *fakeParent;
00053 
00054     QList<QList<QWidget*> > allocatedWidgets;
00055     QList<QList<QWidget*> > unusedWidgets;
00056     QHash<QPersistentModelIndex, QList<QWidget*> > usedWidgets;
00057 };
00058 
00059 KWidgetItemDelegatePool::KWidgetItemDelegatePool(KWidgetItemDelegate *delegate)
00060     : d(new KWidgetItemDelegatePoolPrivate(delegate))
00061 {
00062 }
00063 
00064 KWidgetItemDelegatePool::~KWidgetItemDelegatePool()
00065 {
00066     foreach (const QList<QWidget*> &list, d->allocatedWidgets) {
00067         qDeleteAll(list);
00068     }
00069     delete d->fakeParent;
00070     delete d;
00071 }
00072 
00073 QList<QWidget*> KWidgetItemDelegatePool::findWidgets(const QPersistentModelIndex &index,
00074                                                      const QStyleOptionViewItem &option)
00075 {
00076     QList<QWidget*> result;
00077 
00078     if (d->usedWidgets.contains(index)) {
00079         result = d->usedWidgets[index];
00080     } else {
00081         result = d->delegate->createItemWidgets();
00082         d->allocatedWidgets << result;
00083         d->usedWidgets[index] = result;
00084 
00085         foreach (QWidget *widget, result) {
00086             widget->setParent(d->fakeParent);
00087             widget->setVisible(true);
00088         }
00089     }
00090 
00091     d->delegate->updateItemWidgets(result, option, index);
00092 
00093     return result;
00094 }
00095 //@endcond

KDEUI

Skip menu "KDEUI"
  • Main Page
  • Modules
  • 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