[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdelibs] kdeui/itemviews: 1) Make the delegate work always on the model's index, do not go back to
From: Andras Mantia <amantia () kde ! org>
Date: 2013-08-22 15:08:00
Message-ID: E1VCWUS-0007iJ-TL () scm ! kde ! org
[Download RAW message or body]
Git commit 7e60cb9c4887888f8676a1a7a10f3d911f369ae3 by Andras Mantia.
Committed on 22/08/2013 at 14:54.
Pushed by amantia into branch 'master'.
1) Make the delegate work always on the model's index, do not go back to the source index, if the model \
is a proxy (that idea fails anyway with a proxy chain) 2) If the option.rect is empty, don't create or \
update widgets 3) If the option.rect is not in the view's rectangle, do not create the widgets. This \
makes sure that only visible widgets are created.
M +12 -12 kdeui/itemviews/kwidgetitemdelegatepool.cpp
M +1 -1 kdeui/itemviews/kwidgetitemdelegatepool_p.h
http://commits.kde.org/kdelibs/7e60cb9c4887888f8676a1a7a10f3d911f369ae3
diff --git a/kdeui/itemviews/kwidgetitemdelegatepool.cpp b/kdeui/itemviews/kwidgetitemdelegatepool.cpp
index 2ca52a0..8121c9c 100644
--- a/kdeui/itemviews/kwidgetitemdelegatepool.cpp
+++ b/kdeui/itemviews/kwidgetitemdelegatepool.cpp
@@ -86,7 +86,9 @@ KWidgetItemDelegatePool::~KWidgetItemDelegatePool()
QList<QWidget*> KWidgetItemDelegatePool::findWidgets(const QPersistentModelIndex &idx,
const QStyleOptionViewItem &option,
- UpdateWidgetsEnum updateWidgets) const
+ UpdateWidgetsEnum updateWidgets,
+ bool includeNotVisible
+ ) const
{
QList<QWidget*> result;
@@ -94,13 +96,13 @@ QList<QWidget*> KWidgetItemDelegatePool::findWidgets(const QPersistentModelIndex
return result;
}
- QModelIndex index;
- if (const QAbstractProxyModel *proxyModel = qobject_cast<const QAbstractProxyModel*>(idx.model())) {
- index = proxyModel->mapToSource(idx);
- } else {
- index = idx;
+ if (!includeNotVisible && option.rect.isEmpty()) {
+ return result;
}
+ QModelIndex index = idx;
+
+
if (!index.isValid()) {
return result;
}
@@ -108,6 +110,9 @@ QList<QWidget*> KWidgetItemDelegatePool::findWidgets(const QPersistentModelIndex
if (d->usedWidgets.contains(index)) {
result = d->usedWidgets[index];
} else {
+ if (!d->delegate->itemView()->rect().contains(option.rect))
+ return result;
+
// ### KDE5 This sets a property on the delegate because we can't add an argument to \
createItemWidgets
d->delegate->setProperty("goya:creatingWidgetForIndex", QVariant::fromValue(index));
result = d->delegate->createItemWidgets();
@@ -142,12 +147,7 @@ QList<QWidget*> KWidgetItemDelegatePool::invalidIndexesWidgets() const
QList<QWidget*> result;
foreach (QWidget *widget, d->widgetInIndex.keys()) {
const QAbstractProxyModel *proxyModel = qobject_cast<const \
QAbstractProxyModel*>(d->delegate->d->model);
- QModelIndex index;
- if (proxyModel) {
- index = proxyModel->mapFromSource(d->widgetInIndex[widget]);
- } else {
- index = d->widgetInIndex[widget];
- }
+ QModelIndex index = d->widgetInIndex[widget];
if (!index.isValid()) {
result << widget;
}
diff --git a/kdeui/itemviews/kwidgetitemdelegatepool_p.h b/kdeui/itemviews/kwidgetitemdelegatepool_p.h
index 46bd38b..f632d40 100644
--- a/kdeui/itemviews/kwidgetitemdelegatepool_p.h
+++ b/kdeui/itemviews/kwidgetitemdelegatepool_p.h
@@ -64,7 +64,7 @@ public:
* @internal
*/
QList<QWidget*> findWidgets(const QPersistentModelIndex &index, const QStyleOptionViewItem &option,
- UpdateWidgetsEnum updateWidgets = UpdateWidgets) const;
+ UpdateWidgetsEnum updateWidgets = UpdateWidgets, bool includeNotVisible \
= false) const;
/**
* @internal
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic