+KFileItemDelegate::Information DolphinDetailsView::infoForColumn(int columnIndex) const
+{
+ KFileItemDelegate::Information info = KFileItemDelegate::NoInformation;
+
+ switch (columnIndex) {
+ case DolphinModel::Size: info = KFileItemDelegate::Size; break;
+ case DolphinModel::ModifiedTime: info = KFileItemDelegate::ModificationTime; break;
+ case DolphinModel::Permissions: info = KFileItemDelegate::Permissions; break;
+ case DolphinModel::Owner: info = KFileItemDelegate::Owner; break;
+ case DolphinModel::Group: info = KFileItemDelegate::OwnerAndGroup; break;
+ case DolphinModel::Type: info = KFileItemDelegate::FriendlyMimeType; break;
+ default: break;
+ }
+
+ return info;
+}
+
+void DolphinDetailsView::resizeColumns()
+{
+ // Using the resize mode QHeaderView::ResizeToContents is too slow (it takes
+ // around 3 seconds for each (!) resize operation when having > 10000 items).
+ // This gets a problem especially when opening large directories, where several
+ // resize operations are received for showing the currently available items during
+ // loading (the application hangs around 20 seconds when loading > 10000 items).
+
+ QHeaderView* headerView = header();
+ QFontMetrics fontMetrics(viewport()->font());
+
+ int columnWidth[KDirModel::ColumnCount];
+ columnWidth[KDirModel::Size] = fontMetrics.width("00000 Items");
+ columnWidth[KDirModel::ModifiedTime] = fontMetrics.width("0000-00-00 00:00");
+ columnWidth[KDirModel::Permissions] = fontMetrics.width("xxxxxxxxxx");
+ columnWidth[KDirModel::Owner] = fontMetrics.width("xxxxxxxxxx");
+ columnWidth[KDirModel::Group] = fontMetrics.width("xxxxxxxxxx");
+ columnWidth[KDirModel::Type] = fontMetrics.width("XXXX Xxxxxxx");
+
+ int requiredWidth = 0;
+ for (int i = KDirModel::Size; i <= KDirModel::Type; ++i) {
+ if (!isColumnHidden(i)) {
+ columnWidth[i] += 20; // provide a default gap
+ requiredWidth += columnWidth[i];
+ headerView->resizeSection(i, columnWidth[i]);
+ }
+ }
+
+ // resize the name column in a way that the whole available width is used
+ columnWidth[KDirModel::Name] = viewport()->width() - requiredWidth;
+ if (columnWidth[KDirModel::Name] < 120) {
+ columnWidth[KDirModel::Name] = 120;
+ }
+ headerView->resizeSection(KDirModel::Name, columnWidth[KDirModel::Name]);
+}
+