From: Peter Penz Date: Fri, 28 Aug 2009 21:53:18 +0000 (+0000) Subject: Restore filtering of items. The DolphinView just tells the controller about the filte... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/e1c74b05fdae664aa9211cba3afb7993b51ec23b Restore filtering of items. The DolphinView just tells the controller about the filter, the views (1:1 iconView + detailView, 1:n columnView) connect to the filter-changed signal and apply it to their proxy model. svn path=/trunk/KDE/kdebase/apps/; revision=1016782 --- diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index 14ee18bef..5d52a62c4 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -172,6 +172,13 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, connect(controller, SIGNAL(zoomLevelChanged(int)), this, SLOT(setZoomLevel(int))); + const QString nameFilter = controller->nameFilter(); + if (!nameFilter.isEmpty()) { + m_proxyModel->setFilterRegExp(nameFilter); + } + connect(controller, SIGNAL(nameFilterChanged(const QString&)), + this, SLOT(setNameFilter(const QString&))); + updateDecorationSize(dolphinView->showPreview()); } @@ -458,6 +465,10 @@ void DolphinColumnView::currentChanged(const QModelIndex& current, const QModelI m_autoScroller->handleCurrentIndexChange(current, previous); } +void DolphinColumnView::setNameFilter(const QString& nameFilter) +{ + m_proxyModel->setFilterRegExp(nameFilter); +} void DolphinColumnView::setZoomLevel(int level) { diff --git a/src/dolphincolumnview.h b/src/dolphincolumnview.h index 642dfaeaf..0a601b7fa 100644 --- a/src/dolphincolumnview.h +++ b/src/dolphincolumnview.h @@ -104,6 +104,7 @@ protected: virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous); private slots: + void setNameFilter(const QString& nameFilter); void setZoomLevel(int level); void slotEntered(const QModelIndex& index); diff --git a/src/dolphincolumnviewcontainer.cpp b/src/dolphincolumnviewcontainer.cpp index 242821301..80c4ff7a0 100644 --- a/src/dolphincolumnviewcontainer.cpp +++ b/src/dolphincolumnviewcontainer.cpp @@ -40,8 +40,7 @@ DolphinColumnViewContainer::DolphinColumnViewContainer(QWidget* parent, DolphinC m_contentX(0), m_columns(), m_emptyViewport(0), - m_animation(0), - m_nameFilter() + m_animation(0) { Q_ASSERT(controller != 0); @@ -75,22 +74,6 @@ DolphinColumnViewContainer::~DolphinColumnViewContainer() { } -void DolphinColumnViewContainer::setNameFilter(const QString& nameFilter) -{ - if (nameFilter != m_nameFilter) { - m_nameFilter = nameFilter; - foreach (DolphinColumnView* column, m_columns) { - DolphinSortFilterProxyModel* proxyModel = static_cast(column->model()); - proxyModel->setFilterRegExp(nameFilter); - } - } -} - -QString DolphinColumnViewContainer::nameFilter() const -{ - return m_nameFilter; -} - KUrl DolphinColumnViewContainer::rootUrl() const { return m_columns[0]->url(); @@ -167,10 +150,6 @@ bool DolphinColumnViewContainer::showColumn(const KUrl& url) columnIndex++; DolphinColumnView* column = new DolphinColumnView(viewport(), this, childUrl); - if (!m_nameFilter.isEmpty()) { - DolphinSortFilterProxyModel* proxyModel = static_cast(column->model()); - proxyModel->setFilterRegExp(m_nameFilter); - } column->setActive(false); m_columns.append(column); diff --git a/src/dolphincolumnviewcontainer.h b/src/dolphincolumnviewcontainer.h index c4030657a..93a0c30fe 100644 --- a/src/dolphincolumnviewcontainer.h +++ b/src/dolphincolumnviewcontainer.h @@ -47,18 +47,6 @@ public: explicit DolphinColumnViewContainer(QWidget* parent, DolphinController* controller); virtual ~DolphinColumnViewContainer(); - /** - * Filters the currently shown items by \a nameFilter. All items - * which contain the given filter string will be shown. - */ - void setNameFilter(const QString& nameFilter); - - /** - * Returns the currently used name filter. All items - * which contain the name filter will be shown. - */ - QString nameFilter() const; - KUrl rootUrl() const; QAbstractItemView* activeColumn() const; @@ -142,7 +130,6 @@ private: QList m_columns; QFrame* m_emptyViewport; QTimeLine* m_animation; - QString m_nameFilter; friend class DolphinColumnView; }; diff --git a/src/dolphincontroller.cpp b/src/dolphincontroller.cpp index eaa27c0f4..47c661e83 100644 --- a/src/dolphincontroller.cpp +++ b/src/dolphincontroller.cpp @@ -31,6 +31,7 @@ Qt::MouseButtons DolphinController::m_mouseButtons = Qt::NoButton; DolphinController::DolphinController(DolphinView* dolphinView) : QObject(dolphinView), m_zoomLevel(0), + m_nameFilter(), m_url(), m_dolphinView(dolphinView), m_itemView(0) @@ -119,6 +120,19 @@ void DolphinController::indicateActivationChange(bool active) emit activationChanged(active); } +void DolphinController::setNameFilter(const QString& nameFilter) +{ + if (nameFilter != m_nameFilter) { + m_nameFilter = nameFilter; + emit nameFilterChanged(nameFilter); + } +} + +QString DolphinController::nameFilter() const +{ + return m_nameFilter; +} + void DolphinController::setZoomLevel(int level) { Q_ASSERT(level >= ZoomLevelInfo::minimumLevel()); diff --git a/src/dolphincontroller.h b/src/dolphincontroller.h index 71e615910..c87aaa43a 100644 --- a/src/dolphincontroller.h +++ b/src/dolphincontroller.h @@ -70,6 +70,7 @@ class QPoint; * - setShowHiddenFiles() * - setShowPreview() * - indicateActivationChange() + * - setNameFilter() * - setZoomLevel() */ class LIBDOLPHINPRIVATE_EXPORT DolphinController : public QObject @@ -196,6 +197,12 @@ public: void setZoomLevel(int level); int zoomLevel() const; + /** + * Sets the name filter to \a and emits the signal nameFilterChanged(). + */ + void setNameFilter(const QString& nameFilter); + QString nameFilter() const; + /** * Tells the view implementation to zoom out by emitting the signal zoomOut() * and is invoked by the abstract Dolphin view. @@ -373,6 +380,12 @@ signals: */ void viewportEntered(); + /** + * Is emitted if the view should respect the name filter \a nameFilter. The view + * implementation must connect to this signal if it supports name filters. + */ + void nameFilterChanged(const QString& nameFilter); + /** * Is emitted if the view should change the zoom to \a level. The view implementation * must connect to this signal if it supports zooming. @@ -389,6 +402,7 @@ private slots: private: int m_zoomLevel; + QString m_nameFilter; static Qt::MouseButtons m_mouseButtons; // TODO: this is a workaround until Qt-issue 176832 has been fixed KUrl m_url; DolphinView* m_dolphinView; diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 7f75fdda6..92ffd5e1f 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -38,7 +38,6 @@ #include #include -#include #include #include #include @@ -122,6 +121,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()), @@ -531,6 +532,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); diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index 25a60911e..483d57dd8 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -111,6 +111,8 @@ private slots: */ QRect elasticBandRect() const; + void setNameFilter(const QString& nameFilter); + void setZoomLevel(int level); void slotShowPreviewChanged(); diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index c48497e82..81b5c18d9 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at) * + * Copyright (C) 2006-2009 by Peter Penz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -22,6 +22,7 @@ #include "dolphincategorydrawer.h" #include "dolphincontroller.h" #include "settings/dolphinsettings.h" +#include "dolphinsortfilterproxymodel.h" #include "dolphinviewautoscroller.h" #include "dolphin_iconsmodesettings.h" #include "dolphin_generalsettings.h" @@ -85,6 +86,8 @@ DolphinIconsView::DolphinIconsView(QWidget* parent, DolphinController* controlle controller, SLOT(emitItemEntered(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))); @@ -391,6 +394,12 @@ void DolphinIconsView::slotAdditionalInfoChanged() updateGridSize(showPreview, view->additionalInfo().count()); } +void DolphinIconsView::setNameFilter(const QString& nameFilter) +{ + DolphinSortFilterProxyModel* proxyModel = static_cast(model()); + proxyModel->setFilterRegExp(nameFilter); +} + void DolphinIconsView::setZoomLevel(int level) { IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings(); diff --git a/src/dolphiniconsview.h b/src/dolphiniconsview.h index 70552a413..f4eb5e260 100644 --- a/src/dolphiniconsview.h +++ b/src/dolphiniconsview.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at) * + * Copyright (C) 2006-2009 by Peter Penz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -73,6 +73,7 @@ protected: private slots: void slotShowPreviewChanged(); void slotAdditionalInfoChanged(); + void setNameFilter(const QString& nameFilter); void setZoomLevel(int level); void requestActivation(); void slotGlobalSettingsChanged(int category); diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index e9b33e9a1..2e41b4aa4 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -500,7 +500,7 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) void DolphinView::setNameFilter(const QString& nameFilter) { - m_viewAccessor.setNameFilter(nameFilter); + m_controller->setNameFilter(nameFilter); } void DolphinView::calculateItemCount(int& fileCount, @@ -1555,15 +1555,6 @@ QWidget* DolphinView::ViewAccessor::layoutTarget() const return itemView(); } -void DolphinView::ViewAccessor::setNameFilter(const QString& nameFilter) -{ - if (m_columnsContainer == 0) { - m_columnsContainer->setNameFilter(nameFilter); - } else { - proxyModel()->setFilterRegExp(nameFilter); - } -} - KUrl DolphinView::ViewAccessor::rootUrl() const { return (m_columnsContainer != 0) ? m_columnsContainer->rootUrl() : KUrl(); diff --git a/src/dolphinview.h b/src/dolphinview.h index 93299b430..b9a7ff9ce 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -779,8 +779,6 @@ private: */ QWidget* layoutTarget() const; - void setNameFilter(const QString& nameFilter); - KUrl rootUrl() const; bool supportsCategorizedSorting() const;