const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
const QList<int> columnPositions = settings->columnPositions();
-
+
const KFileItemDelegate::InformationList list = m_dolphinViewController->view()->additionalInfo();
- for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
+ for (int i = DolphinModel::Name; i < DolphinModel::ExtraColumnCount; ++i) {
const KFileItemDelegate::Information info = infoForColumn(i);
const bool hide = !list.contains(info) && (i != DolphinModel::Name);
if (isColumnHidden(i) != hide) {
setColumnHidden(i, hide);
}
-
- const int from = headerView->visualIndex(i);
- headerView->moveSection(from, columnPositions[i]);
+
+ // If the list columnPositions has been written by an older Dolphin version,
+ // its length might be smaller than DolphinModel::ExtraColumnCount. Therefore,
+ // we have to check if item number i exists before accessing it.
+ if (i < columnPositions.length()) {
+ const int position = columnPositions[i];
+
+ // The position might be outside the correct range if the list columnPositions
+ // has been written by a newer Dolphin version with more columns.
+ if (position < DolphinModel::ExtraColumnCount) {
+ const int from = headerView->visualIndex(i);
+ headerView->moveSection(from, position);
+ }
+ }
}
-
+
resizeColumns();
connect(headerView, SIGNAL(sectionMoved(int, int, int)),
this, SLOT(saveColumnPositions()));
-
}
void DolphinDetailsView::saveColumnPositions()
{
QList<int> columnPositions;
- for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
+ for (int i = DolphinModel::Name; i < DolphinModel::ExtraColumnCount; ++i) {
columnPositions.append(header()->visualIndex(i));
}
case DolphinModel::Owner: info = KFileItemDelegate::Owner; break;
case DolphinModel::Group: info = KFileItemDelegate::OwnerAndGroup; break;
case DolphinModel::Type: info = KFileItemDelegate::FriendlyMimeType; break;
+ case DolphinModel::LinkDestination: info = KFileItemDelegate::LinkDest; break;
default: break;
}
QHeaderView* headerView = header();
QFontMetrics fontMetrics(viewport()->font());
- int columnWidth[DolphinModel::Version + 1];
+ int columnWidth[DolphinModel::ExtraColumnCount];
columnWidth[DolphinModel::Size] = fontMetrics.width("00000 Items");
columnWidth[DolphinModel::ModifiedTime] = fontMetrics.width("0000-00-00 00:00");
columnWidth[DolphinModel::Permissions] = fontMetrics.width("xxxxxxxxxx");
columnWidth[DolphinModel::Group] = fontMetrics.width("xxxxxxxxxx");
columnWidth[DolphinModel::Type] = fontMetrics.width("XXXX Xxxxxxx");
columnWidth[DolphinModel::Version] = fontMetrics.width("xxxxxxxx");
+ columnWidth[DolphinModel::LinkDestination] = fontMetrics.width("xxxxxxxx");
int requiredWidth = 0;
for (int i = KDirModel::Size; i <= KDirModel::Type; ++i) {
return i18nc("@item::intable", "Unversioned");
}
}
+ else if (index.column() == DolphinModel::LinkDestination) {
+ const KDirModel *dirModel = qobject_cast<const KDirModel*>(index.model());
+ KFileItem item = dirModel->itemForIndex(index);
+ return item.linkDest();
+ }
+
break;
default:
QVariant DolphinModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)) {
- if (section < KDirModel::ColumnCount) {
+ switch (section) {
+ case DolphinModel::Version:
+ return i18nc("@title::column", "Version");
+ case DolphinModel::LinkDestination:
+ return i18nc("@title::column", "Link Destination");
+ default:
return KDirModel::headerData(section, orientation, role);
}
-
- Q_ASSERT(section == DolphinModel::Version);
- return i18nc("@title::column", "Version");
}
return QVariant();
}