]> cloud.milkyroute.net Git - dolphin.git/commitdiff
allow to change the order of columns in the details view
authorPeter Penz <peter.penz19@gmail.com>
Wed, 26 Aug 2009 18:23:31 +0000 (18:23 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Wed, 26 Aug 2009 18:23:31 +0000 (18:23 +0000)
BUG: 164696

svn path=/trunk/KDE/kdebase/apps/; revision=1015987

src/dolphindetailsview.cpp
src/dolphindetailsview.h
src/settings/dolphin_detailsmodesettings.kcfg

index 8c1e6bf3b08c5927814f58069b8155c4dfe17499..69fe5760f0ea5e376d44666b80bc6b5585b4d3a7 100644 (file)
@@ -168,10 +168,7 @@ DolphinDetailsView::~DolphinDetailsView()
 bool DolphinDetailsView::event(QEvent* event)
 {
     if (event->type() == QEvent::Polish) {
-        QHeaderView* headerView = header();
-        headerView->setResizeMode(QHeaderView::Interactive);
-        headerView->setMovable(false);
-
+        header()->setResizeMode(QHeaderView::Interactive);
         updateColumnVisibility();
     }
 
@@ -563,13 +560,15 @@ void DolphinDetailsView::configureSettings(const QPoint& pos)
 
     // add checkbox items for each column
     QHeaderView* headerView = header();
-    for (int i = DolphinModel::Size; i <= DolphinModel::Version; ++i) {
+    const int columns = model()->columnCount();
+    for (int i = 0; i < columns; ++i) {
         const int logicalIndex = headerView->logicalIndex(i);
-        const QString text = model()->headerData(i, Qt::Horizontal).toString();
+        const QString text = model()->headerData(logicalIndex, Qt::Horizontal).toString();
         QAction* action = popup.addAction(text);
         action->setCheckable(true);
         action->setChecked(!headerView->isSectionHidden(logicalIndex));
-        action->setData(i);
+        action->setData(logicalIndex);
+        action->setEnabled(logicalIndex != DolphinModel::Name);
     }
     popup.addSeparator();
 
@@ -597,16 +596,41 @@ void DolphinDetailsView::configureSettings(const QPoint& pos)
 
 void DolphinDetailsView::updateColumnVisibility()
 {
+    QHeaderView* headerView = header();
+    disconnect(headerView, SIGNAL(sectionMoved(int, int, int)),
+               this, SLOT(saveColumnPositions()));
+
+    const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+    const QList<int> columnPositions = settings->columnPositions();
+    
     const KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
-    for (int i = DolphinModel::Size; i <= DolphinModel::Version; ++i) {
+    for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
         const KFileItemDelegate::Information info = infoForColumn(i);
-        const bool hide = !list.contains(info);
+        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]);
     }
-
+    
     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) {
+        columnPositions.append(header()->visualIndex(i));
+    }
+
+    DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+    settings->setColumnPositions(columnPositions);
 }
 
 void DolphinDetailsView::slotHeaderSectionResized(int logicalIndex, int oldSize, int newSize)
index a66f79714055fcc6b606fd521cec64a8fc32c008..25a60911e4795cd3281c645bfafcd6c82e2b0f0a 100644 (file)
@@ -122,8 +122,16 @@ private slots:
      */
     void configureSettings(const QPoint& pos);
 
+    /**
+     * Updates the visibilty state of columns and their order.
+     */
     void updateColumnVisibility();
 
+    /**
+     * Saves order of the columns as global setting.
+     */
+    void saveColumnPositions();
+
     /**
      * Disables the automatical resizing of columns, if the user has resized the columns
      * with the mouse.
index 590623185045e1ce7d33974bf20c228bad31c0c0..74f05edb64aeebc8f2f62a4b13d0496f39d1519f 100644 (file)
@@ -37,5 +37,9 @@
             <label>Expandable folders</label>
             <default>false</default>
         </entry>
+        <entry name="ColumnPositions" type="IntList">
+            <label>Position of columns</label>
+            <default>0,1,2,3,4,5,6,7</default>
+        </entry>
     </group>
 </kcfg>