return QSize();
}
-QHash<QByteArray, qreal> KFileItemListView::preferredColumnWidths(const KItemRangeList& itemRanges) const
-{
- QElapsedTimer timer;
- timer.start();
-
- QHash<QByteArray, qreal> widths;
-
- int calculatedItemCount = 0;
- bool maxTimeExceeded = false;
- foreach (const KItemRange& itemRange, itemRanges) {
- const int startIndex = itemRange.index;
- const int endIndex = startIndex + itemRange.count - 1;
-
- for (int i = startIndex; i <= endIndex; ++i) {
- foreach (const QByteArray& visibleRole, visibleRoles()) {
- qreal maxWidth = widths.value(visibleRole, 0);
- const QSizeF itemSize = visibleRoleSizeHint(i, visibleRole);
- maxWidth = qMax(itemSize.width(), maxWidth);
- widths.insert(visibleRole, maxWidth);
- }
-
- if (calculatedItemCount > 100 && timer.elapsed() > 200) {
- // When having several thousands of items calculating the sizes can get
- // very expensive. We accept a possibly too small role-size in favour
- // of having no blocking user interface.
- #ifdef KFILEITEMLISTVIEW_DEBUG
- kDebug() << "Timer exceeded, stopped after" << calculatedItemCount << "items";
- #endif
- maxTimeExceeded = true;
- break;
- }
- ++calculatedItemCount;
- }
- if (maxTimeExceeded) {
- break;
- }
+qreal KFileItemListView::preferredColumnWidth(int index, const QByteArray& role) const
+{
+ const KItemListStyleOption& option = styleOption();
+
+ qreal width = m_minimumRolesWidths.value(role, 0);
+
+ const QHash<QByteArray, QVariant> values = model()->data(index);
+ const QString text = KFileItemListWidget::roleText(role, values);
+ if (!text.isEmpty()) {
+ const qreal columnPadding = option.padding * 3;
+ width = qMax(width, qreal(2 * columnPadding + option.fontMetrics.width(text)));
}
-#ifdef KFILEITEMLISTVIEW_DEBUG
- int rangesItemCount = 0;
- foreach (const KItemRange& itemRange, itemRanges) {
- rangesItemCount += itemRange.count;
+ if (role == "name") {
+ // Increase the width by the expansion-toggle and the current expansion level
+ const int expandedParentsCount = values.value("expandedParentsCount", 0).toInt();
+ width += option.padding + (expandedParentsCount + 1) * itemSize().height() + KIconLoader::SizeSmall;
+
+ // Increase the width by the required space for the icon
+ width += option.padding * 2 + option.iconSize;
}
- kDebug() << "[TIME] Calculated dynamic item size for " << rangesItemCount << "items:" << timer.elapsed();
-#endif
- return widths;
+
+ return width;
}
QPixmap KFileItemListView::createDragPixmap(const QSet<int>& indexes) const
updateTimersInterval();
}
-QSizeF KFileItemListView::visibleRoleSizeHint(int index, const QByteArray& role) const
-{
- const KItemListStyleOption& option = styleOption();
-
- qreal width = m_minimumRolesWidths.value(role, 0);
- const qreal height = option.padding * 2 + option.fontMetrics.height();
-
- const QHash<QByteArray, QVariant> values = model()->data(index);
- const QString text = KFileItemListWidget::roleText(role, values);
- if (!text.isEmpty()) {
- const qreal columnPadding = option.padding * 3;
- width = qMax(width, qreal(2 * columnPadding + option.fontMetrics.width(text)));
- }
-
- if (role == "name") {
- // Increase the width by the expansion-toggle and the current expansion level
- const int expandedParentsCount = values.value("expandedParentsCount", 0).toInt();
- width += option.padding + (expandedParentsCount + 1) * itemSize().height() + KIconLoader::SizeSmall;
-
- // Increase the width by the required space for the icon
- width += option.padding * 2 + option.iconSize;
- }
-
- return QSizeF(width, height);
-}
-
void KFileItemListView::updateLayoutOfVisibleItems()
{
if (!model()) {
return itemSize();
}
-QHash<QByteArray, qreal> KItemListView::preferredColumnWidths(const KItemRangeList& itemRanges) const
+qreal KItemListView::preferredColumnWidth(int index, const QByteArray& role) const
{
- Q_UNUSED(itemRanges);
- return QHash<QByteArray, qreal>();
+ Q_UNUSED(index);
+ Q_UNUSED(role);
+ return 100;
}
void KItemListView::setSupportsItemExpanding(bool supportsExpanding)
return m_itemSize.isEmpty() && m_visibleRoles.count() > 1;
}
+QHash<QByteArray, qreal> KItemListView::preferredColumnWidths(const KItemRangeList& itemRanges) const
+{
+ QElapsedTimer timer;
+ timer.start();
+
+ QHash<QByteArray, qreal> widths;
+
+ int calculatedItemCount = 0;
+ bool maxTimeExceeded = false;
+ foreach (const KItemRange& itemRange, itemRanges) {
+ const int startIndex = itemRange.index;
+ const int endIndex = startIndex + itemRange.count - 1;
+
+ for (int i = startIndex; i <= endIndex; ++i) {
+ foreach (const QByteArray& visibleRole, visibleRoles()) {
+ qreal maxWidth = widths.value(visibleRole, 0);
+ const qreal width = preferredColumnWidth(i, visibleRole);
+ maxWidth = qMax(width, maxWidth);
+ widths.insert(visibleRole, maxWidth);
+ }
+
+ if (calculatedItemCount > 100 && timer.elapsed() > 200) {
+ // When having several thousands of items calculating the sizes can get
+ // very expensive. We accept a possibly too small role-size in favour
+ // of having no blocking user interface.
+ maxTimeExceeded = true;
+ break;
+ }
+ ++calculatedItemCount;
+ }
+ if (maxTimeExceeded) {
+ break;
+ }
+ }
+
+ return widths;
+}
+
void KItemListView::applyColumnWidthsFromHeader()
{
// Apply the new size to the layouter
virtual QSizeF itemSizeHint(int index) const;
/**
- * @param itemRanges Items that must be checked for getting the widths of columns.
- * @return The preferred width of the column of each visible role. The width will
- * be respected if the width of the item size is <= 0 (see
- * KItemListView::setItemSize()). Per default an empty hash
- * is returned.
+ * @return The preferred column-width of the item with the index \a index
+ * for the given \a role that is shown in the column.
*/
- virtual QHash<QByteArray, qreal> preferredColumnWidths(const KItemRangeList& itemRanges) const;
+ virtual qreal preferredColumnWidth(int index, const QByteArray& role) const;
/**
* If set to true, items having child-items can be expanded to show the child-items as
*/
bool useAlternateBackgrounds() const;
+ /**
+ * @param itemRanges Items that must be checked for getting the widths of columns.
+ * @return The preferred width of the column of each visible role. The width will
+ * be respected if the width of the item size is <= 0 (see
+ * KItemListView::setItemSize()). Per default an empty hash
+ * is returned.
+ */
+ QHash<QByteArray, qreal> preferredColumnWidths(const KItemRangeList& itemRanges) const;
+
/**
* Applies the column-widths from m_headerWidget to the layout
* of the view.