┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFrank Reininghaus <[email protected]>2010-05-10 12:49:41 +0000
committerFrank Reininghaus <[email protected]>2010-05-10 12:49:41 +0000
commit7e74c6f23beb06b9541508b91914a4f9b3ee3a62 (patch)
treefa66e579562ffd6e99b8328faf4cc99999c41903 /src
parent717ff023cca4b8fc6c4b2b636004a810af3a4ae8 (diff)
Provide the destination of a symbolic link as a column in Dolphin's
(and Konqueror's) Details View in KDE SC 4.5. This is based on the changes to KFileItemDelegate from commit 1124981. FEATURE: 211690 svn path=/trunk/KDE/kdebase/apps/; revision=1124982
Diffstat (limited to 'src')
-rw-r--r--src/dolphindetailsview.cpp30
-rw-r--r--src/dolphinmodel.cpp16
-rw-r--r--src/dolphinmodel.h1
-rw-r--r--src/panels/folders/paneltreeview.cpp1
-rw-r--r--src/settings/dolphin_detailsmodesettings.kcfg2
5 files changed, 36 insertions, 14 deletions
diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp
index 8ea5e93e6..5545a6ede 100644
--- a/src/dolphindetailsview.cpp
+++ b/src/dolphindetailsview.cpp
@@ -645,30 +645,40 @@ void DolphinDetailsView::updateColumnVisibility()
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));
}
@@ -988,6 +998,7 @@ KFileItemDelegate::Information DolphinDetailsView::infoForColumn(int columnIndex
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;
}
@@ -1005,7 +1016,7 @@ void DolphinDetailsView::resizeColumns()
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");
@@ -1013,6 +1024,7 @@ void DolphinDetailsView::resizeColumns()
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) {
diff --git a/src/dolphinmodel.cpp b/src/dolphinmodel.cpp
index 35a5fb8f1..d81e0c38b 100644
--- a/src/dolphinmodel.cpp
+++ b/src/dolphinmodel.cpp
@@ -113,6 +113,12 @@ QVariant DolphinModel::data(const QModelIndex& index, int role) const
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:
@@ -125,12 +131,14 @@ QVariant DolphinModel::data(const QModelIndex& index, int role) const
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();
}
diff --git a/src/dolphinmodel.h b/src/dolphinmodel.h
index adb59a39f..5c43028c8 100644
--- a/src/dolphinmodel.h
+++ b/src/dolphinmodel.h
@@ -35,6 +35,7 @@ class LIBDOLPHINPRIVATE_EXPORT DolphinModel : public KDirModel
public:
enum AdditionalColumns {
Version = KDirModel::ColumnCount,
+ LinkDestination,
ExtraColumnCount
};
diff --git a/src/panels/folders/paneltreeview.cpp b/src/panels/folders/paneltreeview.cpp
index 6eefb6e6e..646115037 100644
--- a/src/panels/folders/paneltreeview.cpp
+++ b/src/panels/folders/paneltreeview.cpp
@@ -77,6 +77,7 @@ bool PanelTreeView::event(QEvent* event)
hideColumn(DolphinModel::Group);
hideColumn(DolphinModel::Type);
hideColumn(DolphinModel::Version);
+ hideColumn(DolphinModel::LinkDestination);
header()->hide();
break;
diff --git a/src/settings/dolphin_detailsmodesettings.kcfg b/src/settings/dolphin_detailsmodesettings.kcfg
index 49eced3e6..6c5674785 100644
--- a/src/settings/dolphin_detailsmodesettings.kcfg
+++ b/src/settings/dolphin_detailsmodesettings.kcfg
@@ -39,7 +39,7 @@
</entry>
<entry name="ColumnPositions" type="IntList">
<label>Position of columns</label>
- <default>0,1,2,3,4,5,6,7</default>
+ <default>0,1,2,3,4,5,6,7,8</default>
</entry>
</group>
</kcfg>