From dcf397ae512850805dbe37fc03ece82be2660bd0 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Wed, 26 Aug 2009 18:23:31 +0000 Subject: [PATCH] allow to change the order of columns in the details view BUG: 164696 svn path=/trunk/KDE/kdebase/apps/; revision=1015987 --- src/dolphindetailsview.cpp | 44 ++++++++++++++----- src/dolphindetailsview.h | 8 ++++ src/settings/dolphin_detailsmodesettings.kcfg | 4 ++ 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 8c1e6bf3b..69fe5760f 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -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 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 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) diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index a66f79714..25a60911e 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -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. diff --git a/src/settings/dolphin_detailsmodesettings.kcfg b/src/settings/dolphin_detailsmodesettings.kcfg index 590623185..74f05edb6 100644 --- a/src/settings/dolphin_detailsmodesettings.kcfg +++ b/src/settings/dolphin_detailsmodesettings.kcfg @@ -37,5 +37,9 @@ false + + + 0,1,2,3,4,5,6,7 + -- 2.47.3