X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ccea74a99aefcb2c69db4d8307a4bb8b398ed90d..7fd22d39bd2bd3f607ddcd927f894cd9b52e97c7:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index e790a0518..edecf199a 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -51,7 +51,6 @@ #include "viewproperties.h" #include "dolphinsettings.h" #include "dolphin_generalsettings.h" -#include "dolphincategorydrawer.h" DolphinView::DolphinView(QWidget* parent, const KUrl& url, @@ -62,6 +61,7 @@ DolphinView::DolphinView(QWidget* parent, m_active(true), m_loadingDirectory(false), m_initializeColumnView(false), + m_storedCategorizedSorting(false), m_mode(DolphinView::IconsView), m_topLayout(0), m_controller(0), @@ -169,6 +169,18 @@ void DolphinView::setMode(Mode mode) props.setViewMode(m_mode); createView(); + + // Not all view modes support categorized sorting. Adjust the sorting model + // if changing the view mode results in a change of the categorized sorting + // capabilities. + m_storedCategorizedSorting = props.categorizedSorting(); + const bool categorized = m_storedCategorizedSorting && supportsCategorizedSorting(); + if (categorized != m_proxyModel->isCategorizedModel()) { + m_proxyModel->setCategorizedModel(categorized); + m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder()); + emit categorizedSortingChanged(); + } + startDirLister(viewPropsUrl); emit modeChanged(); @@ -223,22 +235,15 @@ void DolphinView::setCategorizedSorting(bool categorized) return; } - if (!categorized && !supportsCategorizedSorting()) - { - m_proxyModel->setCategorizedModel(categorized); - m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder()); - - emit categorizedSortingChanged(); - - return; - } - - Q_ASSERT(m_iconsView != 0); + // setCategorizedSorting(true) may only get invoked + // if the view supports categorized sorting + Q_ASSERT(!categorized || supportsCategorizedSorting()); ViewProperties props(viewPropertiesUrl()); props.setCategorizedSorting(categorized); props.save(); + m_storedCategorizedSorting = categorized; m_proxyModel->setCategorizedModel(categorized); m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder()); @@ -247,7 +252,14 @@ void DolphinView::setCategorizedSorting(bool categorized) bool DolphinView::categorizedSorting() const { - return m_proxyModel->isCategorizedModel(); + // If all view modes would support categorized sorting, returning + // m_proxyModel->isCategorizedModel() would be the way to go. As + // currently only the icons view supports caterized sorting, we remember + // the stored view properties state in m_storedCategorizedSorting and + // return this state. The application takes care to disable the corresponding + // checkbox by checking DolphinView::supportsCategorizedSorting() to indicate + // that this setting is not applied to the current view mode. + return m_storedCategorizedSorting; } bool DolphinView::supportsCategorizedSorting() const @@ -616,9 +628,11 @@ void DolphinView::applyViewProperties(const KUrl& url) emit showHiddenFilesChanged(); } - const bool categorized = props.categorizedSorting(); - if (categorized != categorizedSorting()) { + m_storedCategorizedSorting = props.categorizedSorting(); + const bool categorized = m_storedCategorizedSorting && supportsCategorizedSorting(); + if (categorized != m_proxyModel->isCategorizedModel()) { m_proxyModel->setCategorizedModel(categorized); + m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder()); emit categorizedSortingChanged(); } @@ -804,22 +818,20 @@ void DolphinView::createView() // ... and recreate it representing the current mode switch (m_mode) { - case IconsView: + case IconsView: { m_iconsView = new DolphinIconsView(this, m_controller); - m_iconsView->setCategoryDrawer(new DolphinCategoryDrawer()); view = m_iconsView; break; + } case DetailsView: m_detailsView = new DolphinDetailsView(this, m_controller); view = m_detailsView; - setCategorizedSorting(false); break; case ColumnView: m_columnView = new DolphinColumnView(this, m_controller); view = m_columnView; - setCategorizedSorting(false); break; }