From 73c30c7ea25891d3579277734393b70d9d1e2ab3 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Thu, 10 May 2012 23:26:29 +0200 Subject: [PATCH] Allow to remember view-properties for the search-mode Per default Dolphin remembers the view-properties for each search-URL individually. However when being in the search-mode, where the search-URL is different each time by definition, it should also be possible for the user to adjust the view-properties. The DolphinView is not aware about any "search-mode", so an interface has been added to provide a "context" for storing the view-properties. The context will be adjusted by the DolphinViewContainer in case if the search-mode is active. --- src/dolphinviewcontainer.cpp | 3 +++ src/views/dolphinview.cpp | 51 ++++++++++++++++++++++++++---------- src/views/dolphinview.h | 18 +++++++++++++ 3 files changed, 58 insertions(+), 14 deletions(-) diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 51f2b4218..9e297364b 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -297,6 +297,8 @@ void DolphinViewContainer::setSearchModeEnabled(bool enabled) m_searchBox->setSearchPath(url); } } else { + m_view->setViewPropertiesContext(QString()); + // Restore the URL for the URL navigator. If Dolphin has been // started with a search-URL, the home URL is used as fallback. const KUrl url = m_searchBox->searchPath(); @@ -589,6 +591,7 @@ void DolphinViewContainer::startSearching() { const KUrl url = m_searchBox->urlForSearching(); if (url.isValid() && !url.isEmpty()) { + m_view->setViewPropertiesContext("search"); m_urlNavigator->setLocationUrl(url); } } diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index f738dc078..6a21885e6 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -88,6 +88,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : m_isFolderWritable(true), m_dragging(false), m_url(url), + m_viewPropertiesContext(), m_mode(DolphinView::IconsView), m_visibleRoles(), m_topLayout(0), @@ -236,7 +237,7 @@ bool DolphinView::isActive() const void DolphinView::setMode(Mode mode) { if (mode != m_mode) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setViewMode(mode); props.save(); @@ -255,7 +256,7 @@ void DolphinView::setPreviewsShown(bool show) return; } - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setPreviewsShown(show); m_view->setPreviewsShown(show); @@ -277,7 +278,7 @@ void DolphinView::setHiddenFilesShown(bool show) m_selectedUrls.clear(); m_selectedUrls = itemList.urlList(); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setHiddenFilesShown(show); m_model->setShowHiddenFiles(show); @@ -295,7 +296,7 @@ void DolphinView::setGroupedSorting(bool grouped) return; } - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setGroupedSorting(grouped); props.save(); @@ -431,7 +432,7 @@ void DolphinView::setVisibleRoles(const QList& roles) { const QList previousRoles = roles; - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setVisibleRoles(roles); m_visibleRoles = roles; @@ -788,7 +789,7 @@ void DolphinView::slotViewContextMenuRequested(const QPointF& pos) void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); QPointer menu = new KMenu(QApplication::activeWindow()); @@ -905,7 +906,7 @@ void DolphinView::slotHeaderColumnWidthChanged(const QByteArray& role, qreal cur const QList visibleRoles = m_view->visibleRoles(); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); QList columnWidths = props.headerColumnWidths(); if (columnWidths.count() != visibleRoles.count()) { columnWidths.clear(); @@ -1031,7 +1032,7 @@ void DolphinView::emitSelectionChangedSignal() void DolphinView::updateSortRole(const QByteArray& role) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortRole(role); KItemModelBase* model = m_container->controller()->model(); @@ -1042,7 +1043,7 @@ void DolphinView::updateSortRole(const QByteArray& role) void DolphinView::updateSortOrder(Qt::SortOrder order) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortOrder(order); m_model->setSortOrder(order); @@ -1052,7 +1053,7 @@ void DolphinView::updateSortOrder(Qt::SortOrder order) void DolphinView::updateSortFoldersFirst(bool foldersFirst) { - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortFoldersFirst(foldersFirst); m_model->setSortDirectoriesFirst(foldersFirst); @@ -1121,6 +1122,16 @@ KFileItem DolphinView::rootItem() const return m_model->rootItem(); } +void DolphinView::setViewPropertiesContext(const QString& context) +{ + m_viewPropertiesContext = context; +} + +QString DolphinView::viewPropertiesContext() const +{ + return m_viewPropertiesContext; +} + void DolphinView::observeCreatedItem(const KUrl& url) { m_createdItemUrl = url; @@ -1267,7 +1278,7 @@ void DolphinView::slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOr Q_UNUSED(previous); Q_ASSERT(m_model->sortOrder() == current); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortOrder(current); emit sortOrderChanged(current); @@ -1278,7 +1289,7 @@ void DolphinView::slotSortRoleChangedByHeader(const QByteArray& current, const Q Q_UNUSED(previous); Q_ASSERT(m_model->sortRole() == current); - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setSortRole(current); emit sortRoleChanged(current); @@ -1294,7 +1305,7 @@ void DolphinView::slotVisibleRolesChangedByHeader(const QList& curre m_visibleRoles = current; - ViewProperties props(url()); + ViewProperties props(viewPropertiesUrl()); props.setVisibleRoles(m_visibleRoles); emit visibleRolesChanged(m_visibleRoles, previousVisibleRoles); @@ -1334,7 +1345,7 @@ void DolphinView::applyViewProperties() { m_view->beginTransaction(); - const ViewProperties props(url()); + const ViewProperties props(viewPropertiesUrl()); const Mode mode = props.viewMode(); if (m_mode != mode) { @@ -1493,4 +1504,16 @@ void DolphinView::updateWritableState() } } +KUrl DolphinView::viewPropertiesUrl() const +{ + if (m_viewPropertiesContext.isEmpty()) { + return m_url; + } + + KUrl url; + url.setProtocol(m_url.protocol()); + url.setPath(m_viewPropertiesContext); + return url; +} + #include "dolphinview.moc" diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index bfac88502..b2c4121a0 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -286,6 +286,16 @@ public: */ KFileItem rootItem() const; + /** + * Sets a context that is used for remembering the view-properties. + * Per default the context is empty and the path of the currently set URL + * is used for remembering the view-properties. Setting a custom context + * makes sense if specific types of URLs (e.g. search-URLs) should + * share common view-properties. + */ + void setViewPropertiesContext(const QString& context); + QString viewPropertiesContext() const; + public slots: /** * Changes the directory to \a url. If the current directory is equal to @@ -707,6 +717,13 @@ private: */ void updateWritableState(); + /** + * @return The current URL if no viewproperties-context is given (see + * DolphinView::viewPropertiesContext(), otherwise the context + * is returned. + */ + KUrl viewPropertiesUrl() const; + private: bool m_active; bool m_tabsForFiles; @@ -716,6 +733,7 @@ private: // tooltip may be shown when hovering an item. KUrl m_url; + QString m_viewPropertiesContext; Mode m_mode; QList m_visibleRoles; -- 2.47.3