// for a lot of items within a quite small timeslot. To prevent expensive resortings the
// resorting is postponed until the timer has been exceeded.
m_resortAllItemsTimer = new QTimer(this);
- m_resortAllItemsTimer->setInterval(1000);
+ m_resortAllItemsTimer->setInterval(500);
m_resortAllItemsTimer->setSingleShot(true);
connect(m_resortAllItemsTimer, SIGNAL(timeout()), this, SLOT(resortAllItems()));
class KItemListView;
+/**
+ * @brief Calculates and caches the sizehints of items in KItemListView.
+ */
class LIBDOLPHINPRIVATE_EXPORT KItemListSizeHintResolver
{
public:
void itemsInserted(int index, int count);
void itemsRemoved(int index, int count);
- void itemsMoved(int from, int to, int count);
+ void itemsMoved(int index, int count);
void itemsChanged(int index, int count, const QSet<QByteArray>& roles);
void clearCache();
if (!hasMultipleRanges) {
doLayout(Animation, index, count);
- update();
}
}
m_layouter->markAsDirty();
if (!hasMultipleRanges) {
doLayout(Animation, index, -count);
- update();
}
}
void KItemListView::slotItemsMoved(const KItemRange& itemRange, const QList<int>& movedToIndexes)
{
+ m_sizeHintResolver->itemsMoved(itemRange.index, itemRange.count);
+ m_layouter->markAsDirty();
+
+ if (m_controller) {
+ m_controller->selectionManager()->itemsMoved(itemRange, movedToIndexes);
+ }
+
const int firstVisibleMovedIndex = qMax(firstVisibleIndex(), itemRange.index);
const int lastVisibleMovedIndex = qMin(lastVisibleIndex(), itemRange.index + itemRange.count - 1);
KItemListWidget* widget = m_visibleItems.value(index);
if (widget) {
updateWidgetProperties(widget, index);
+ if (m_grouped) {
+ updateGroupHeaderForWidget(widget);
+ }
+ initializeItemListWidget(widget);
}
}
- if (m_controller) {
- m_controller->selectionManager()->itemsMoved(itemRange, movedToIndexes);
- }
+ doLayout(NoAnimation, 0, 0);
}
void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges,
// in modified group headers
updateVisibleGroupHeaders();
doLayout(NoAnimation, 0, 0);
- if (!m_layoutTimer->isActive()) {
- m_layoutTimer->start();
- }
}
}
}
widget->setVisible(true);
if (widget->size() != itemBounds.size()) {
- m_animation->start(widget, KItemListViewAnimation::ResizeAnimation, itemBounds.size());
+ if (animate) {
+ m_animation->start(widget, KItemListViewAnimation::ResizeAnimation, itemBounds.size());
+ } else {
+ widget->resize(itemBounds.size());
+ }
}
}
void KItemListView::updateGroupHeaderForWidget(KItemListWidget* widget)
{
+ Q_ASSERT(m_grouped);
+
const int index = widget->index();
if (!m_layouter->isFirstGroupItem(index)) {
// The widget does not represent the first item of a group