X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/d84909dc36acbd91c37de76e793f81dca9b2ace9..c05395ef9a6f449bd96b4323d308b53d70cede99:/src/dolphindetailsview.cpp diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 8c1e6bf3b..2769064e4 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -28,6 +28,7 @@ #include "dolphinviewautoscroller.h" #include "draganddrophelper.h" #include "selectionmanager.h" +#include "viewextensionsfactory.h" #include "viewproperties.h" #include "zoomlevelinfo.h" @@ -38,7 +39,6 @@ #include #include -#include #include #include #include @@ -46,7 +46,9 @@ #include #include -DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) : +DolphinDetailsView::DolphinDetailsView(QWidget* parent, + DolphinController* controller, + DolphinSortFilterProxyModel* proxyModel) : QTreeView(parent), m_autoResize(true), m_expandingTogglePressed(false), @@ -56,6 +58,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr m_controller(controller), m_selectionManager(0), m_autoScroller(0), + m_extensionsFactory(0), m_expandableFoldersAction(0), m_font(), m_decorationSize(), @@ -76,6 +79,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr setRootIsDecorated(settings->expandableFolders()); setItemsExpandable(settings->expandableFolders()); setEditTriggers(QAbstractItemView::NoEditTriggers); + setModel(proxyModel); setMouseTracking(true); m_autoScroller = new DolphinViewAutoScroller(this); @@ -122,6 +126,8 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr this, SLOT(slotEntered(const QModelIndex&))); connect(this, SIGNAL(viewportEntered()), controller, SLOT(emitViewportEntered())); + connect(controller, SIGNAL(nameFilterChanged(const QString&)), + this, SLOT(setNameFilter(const QString&))); connect(controller, SIGNAL(zoomLevelChanged(int)), this, SLOT(setZoomLevel(int))); connect(controller->dolphinView(), SIGNAL(additionalInfoChanged()), @@ -159,6 +165,8 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr m_expandableFoldersAction->setCheckable(true); connect(m_expandableFoldersAction, SIGNAL(toggled(bool)), this, SLOT(setFoldersExpandable(bool))); + + m_extensionsFactory = new ViewExtensionsFactory(this, controller); } DolphinDetailsView::~DolphinDetailsView() @@ -168,10 +176,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(); } @@ -534,6 +539,12 @@ QRect DolphinDetailsView::elasticBandRect() const return QRect(topLeft, bottomRight).normalized(); } +void DolphinDetailsView::setNameFilter(const QString& nameFilter) +{ + DolphinSortFilterProxyModel* proxyModel = static_cast(model()); + proxyModel->setFilterRegExp(nameFilter); +} + void DolphinDetailsView::setZoomLevel(int level) { const int size = ZoomLevelInfo::iconSizeForZoomLevel(level); @@ -549,7 +560,6 @@ void DolphinDetailsView::setZoomLevel(int level) updateDecorationSize(showPreview); } - void DolphinDetailsView::slotShowPreviewChanged() { const DolphinView* view = m_controller->dolphinView(); @@ -563,13 +573,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 +609,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)