X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/772a55aafc2e558302d042eb65026b9b50302ccc..1e1e1b6c8604dfef3acca02badfce62e819c79ee:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index ab413f765..e0a3df51e 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -71,8 +71,7 @@ DolphinView::DolphinView(QWidget* parent, m_fileItemDelegate(0), m_dolphinModel(dolphinModel), m_dirLister(dirLister), - m_proxyModel(proxyModel), - m_rootUrl(url) + m_proxyModel(proxyModel) { setFocusPolicy(Qt::StrongFocus); m_topLayout = new QVBoxLayout(this); @@ -122,11 +121,6 @@ const KUrl& DolphinView::url() const return m_controller->url(); } -void DolphinView::setRootUrl(const KUrl& url) -{ - m_rootUrl = url; -} - KUrl DolphinView::rootUrl() const { return isColumnViewActive() ? m_dirLister->url() : url(); @@ -225,7 +219,17 @@ bool DolphinView::showHiddenFiles() const void DolphinView::setCategorizedSorting(bool categorized) { - if (!supportsCategorizedSorting() || (categorized == categorizedSorting())) { + if (categorized == categorizedSorting()) { + return; + } + + if (!categorized && !supportsCategorizedSorting()) + { + m_proxyModel->setCategorizedModel(categorized); + m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder()); + + emit categorizedSortingChanged(); + return; } @@ -258,15 +262,24 @@ void DolphinView::selectAll() void DolphinView::invertSelection() { - QItemSelectionModel* selectionModel = itemView()->selectionModel(); - const QAbstractItemModel* itemModel = selectionModel->model(); + if (isColumnViewActive()) { + // QAbstractItemView does not offer a virtual method invertSelection() + // as counterpart to QAbstractItemView::selectAll(). This makes it + // necessary to delegate the inverting of the selection to the + // column view, as only the selection of the active column should get + // inverted. + m_columnView->invertSelection(); + } else { + QItemSelectionModel* selectionModel = itemView()->selectionModel(); + const QAbstractItemModel* itemModel = selectionModel->model(); - const QModelIndex topLeft = itemModel->index(0, 0); - const QModelIndex bottomRight = itemModel->index(itemModel->rowCount() - 1, - itemModel->columnCount() - 1); + const QModelIndex topLeft = itemModel->index(0, 0); + const QModelIndex bottomRight = itemModel->index(itemModel->rowCount() - 1, + itemModel->columnCount() - 1); - QItemSelection selection(topLeft, bottomRight); - selectionModel->select(selection, QItemSelectionModel::Toggle); + const QItemSelection selection(topLeft, bottomRight); + selectionModel->select(selection, QItemSelectionModel::Toggle); + } } bool DolphinView::hasSelection() const @@ -414,22 +427,22 @@ void DolphinView::refresh() updateViewportColor(); } -void DolphinView::setUrl(const KUrl& url) +void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) { if (m_controller->url() == url) { return; } - const KUrl oldRootUrl = rootUrl(); + const bool restoreColumnView = !rootUrl.isEmpty() + && !rootUrl.equals(url, KUrl::CompareWithoutTrailingSlash) + && rootUrl.isParentOf(url); + m_controller->setUrl(url); // emits urlChanged, which we forward - const bool restoreColumnView = !isColumnViewActive() - && m_rootUrl.isParentOf(url) - && (m_rootUrl != url); if (restoreColumnView) { - applyViewProperties(m_rootUrl); - startDirLister(m_rootUrl); + applyViewProperties(rootUrl); Q_ASSERT(itemView() == m_columnView); + startDirLister(rootUrl); m_columnView->showColumn(url); } else { applyViewProperties(url); @@ -438,10 +451,12 @@ void DolphinView::setUrl(const KUrl& url) itemView()->setFocus(); - const KUrl newRootUrl = rootUrl(); - if (newRootUrl != oldRootUrl) { - emit rootUrlChanged(newRootUrl); - } + emit startedPathLoading(url); +} + +void DolphinView::setUrl(const KUrl& url) +{ + updateView(url, KUrl()); } void DolphinView::mouseReleaseEvent(QMouseEvent* event) @@ -789,20 +804,27 @@ void DolphinView::createView() // ... and recreate it representing the current mode switch (m_mode) { - case IconsView: + case IconsView: { + const KUrl viewPropsUrl = viewPropertiesUrl(); + const ViewProperties props(viewPropsUrl); + m_iconsView = new DolphinIconsView(this, m_controller); m_iconsView->setCategoryDrawer(new DolphinCategoryDrawer()); view = m_iconsView; + setCategorizedSorting(props.categorizedSorting()); 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; }