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);
return m_controller->url();
}
-void DolphinView::setRootUrl(const KUrl& url)
-{
- m_rootUrl = url;
-}
-
KUrl DolphinView::rootUrl() const
{
return isColumnViewActive() ? m_dirLister->url() : url();
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;
}
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
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);
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)
// ... 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;
}