]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Provide the destination of a symbolic link as a column in Dolphin's
authorFrank Reininghaus <frank78ac@googlemail.com>
Mon, 10 May 2010 12:49:41 +0000 (12:49 +0000)
committerFrank Reininghaus <frank78ac@googlemail.com>
Mon, 10 May 2010 12:49:41 +0000 (12:49 +0000)
(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

src/dolphindetailsview.cpp
src/dolphinmodel.cpp
src/dolphinmodel.h
src/panels/folders/paneltreeview.cpp
src/settings/dolphin_detailsmodesettings.kcfg

index 8ea5e93e6da17baa394e429397080433fdf109a2..5545a6ede7b0bb4ef60772d745bd047bfa085054 100644 (file)
@@ -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) {
index 35a5fb8f1700b960d033b4f6489444f84623e349..d81e0c38b9fc0608fe5d952d42ea1afa92ae9377 100644 (file)
@@ -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();
 }
index adb59a39f0f95590da032725119433cff295e171..5c43028c8ba25b2be50fba4d97183c855dfe901a 100644 (file)
@@ -35,6 +35,7 @@ class LIBDOLPHINPRIVATE_EXPORT DolphinModel : public KDirModel
 public:
     enum AdditionalColumns {
         Version = KDirModel::ColumnCount,
+        LinkDestination,
         ExtraColumnCount
     };
 
index 6eefb6e6e3be756ef2598e7caeb7b0f9bbd02efa..64611503789d219a19ae93c926cbf0f8e5486a3f 100644 (file)
@@ -77,6 +77,7 @@ bool PanelTreeView::event(QEvent* event)
         hideColumn(DolphinModel::Group);
         hideColumn(DolphinModel::Type);
         hideColumn(DolphinModel::Version);
+        hideColumn(DolphinModel::LinkDestination);
         header()->hide();
         break;
 
index 49eced3e6f0ac23b9464fa51025dda152428e5c7..6c5674785064402293652f15b65d3a4a274855f6 100644 (file)
@@ -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>