X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/7b8fbf737496e44e7676a437f000377d737dfd9c..ea2ed61cd12eec48b66811df0e43dd40e546374a:/src/views/dolphinview.cpp diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 857aae395..d50a7dd09 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -154,6 +154,12 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : connect(model, SIGNAL(loadingCompleted()), this, SLOT(slotLoadingCompleted())); } + KItemListView* view = controller->view(); + connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)), + this, SLOT(slotSortOrderChangedByHeader(Qt::SortOrder,Qt::SortOrder))); + connect(view, SIGNAL(sortRoleChanged(QByteArray,QByteArray)), + this, SLOT(slotSortRoleChangedByHeader(QByteArray,QByteArray))); + KItemListSelectionManager* selectionManager = controller->selectionManager(); connect(selectionManager, SIGNAL(selectionChanged(QSet,QSet)), this, SLOT(slotSelectionChanged(QSet,QSet))); @@ -262,8 +268,7 @@ void DolphinView::setHiddenFilesShown(bool show) ViewProperties props(url()); props.setHiddenFilesShown(show); - m_dirLister->setShowingDotFiles(show); - m_dirLister->emitChanges(); + fileItemModel()->setShowHiddenFiles(show); emit hiddenFilesShownChanged(show); } @@ -446,15 +451,9 @@ void DolphinView::stopLoading() void DolphinView::refresh() { - const bool oldActivationState = m_active; - const int oldZoomLevel = zoomLevel(); - m_active = true; - + GeneralSettings::self()->readConfig(); + m_container->refresh(); applyViewProperties(); - reload(); - - setActive(oldActivationState); - updateZoomLevel(oldZoomLevel); } void DolphinView::setNameFilter(const QString& nameFilter) @@ -802,7 +801,7 @@ void DolphinView::slotItemHovered(int index) const KFileItem item = fileItemModel()->fileItem(index); if (GeneralSettings::showToolTips()) { - QRectF itemRect = m_container->controller()->view()->itemRect(index); + QRectF itemRect = m_container->controller()->view()->itemContextRect(index); const QPoint pos = m_container->mapToGlobal(itemRect.topLeft().toPoint()); itemRect.moveTo(pos); @@ -831,7 +830,10 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even event->buttons(), event->modifiers()); - DragAndDropHelper::dropUrls(destItem, url(), &dropEvent, this); + const QString error = DragAndDropHelper::dropUrls(destItem, url(), &dropEvent); + if (!error.isEmpty()) { + emit errorMessage(error); + } } void DolphinView::slotModelChanged(KItemModelBase* current, KItemModelBase* previous) @@ -950,6 +952,7 @@ void DolphinView::saveState(QDataStream& stream) const int currentIndex = m_container->controller()->selectionManager()->currentItem(); if (currentIndex != -1) { KFileItem item = fileItemModel()->fileItem(currentIndex); + Q_ASSERT(!item.isNull()); // If the current index is valid a item must exist KUrl currentItemUrl = item.url(); stream << currentItemUrl; } else { @@ -1100,6 +1103,29 @@ void DolphinView::slotRefreshItems() } } +void DolphinView::slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOrder previous) +{ + Q_UNUSED(previous); + Q_ASSERT(fileItemModel()->sortOrder() == current); + + ViewProperties props(url()); + props.setSortOrder(current); + + emit sortOrderChanged(current); +} + +void DolphinView::slotSortRoleChangedByHeader(const QByteArray& current, const QByteArray& previous) +{ + Q_UNUSED(previous); + Q_ASSERT(fileItemModel()->sortRole() == current); + + ViewProperties props(url()); + const Sorting sorting = sortingForSortRole(current); + props.setSorting(sorting); + + emit sortingChanged(sorting); +} + KFileItemModel* DolphinView::fileItemModel() const { return static_cast(m_container->controller()->model()); @@ -1125,9 +1151,23 @@ void DolphinView::applyViewProperties() m_container->beginTransaction(); const ViewProperties props(url()); + KFileItemModel* model = fileItemModel(); const Mode mode = props.viewMode(); if (m_mode != mode) { + // Prevent an animated transition of the position and size of the items when switching + // the view-mode by temporary clearing the model and updating it again after the view mode + // has been modified. + const bool restoreModel = (model->count() > 0); + if (restoreModel) { + const int currentItemIndex = m_container->controller()->selectionManager()->currentItem(); + if (currentItemIndex >= 0) { + m_currentItemUrl = model->fileItem(currentItemIndex).url(); + } + m_selectedUrls = selectedItems().urlList(); + model->clear(); + } + const Mode previousMode = m_mode; m_mode = mode; @@ -1148,17 +1188,18 @@ void DolphinView::applyViewProperties() if (m_container->zoomLevel() != oldZoomLevel) { emit zoomLevelChanged(m_container->zoomLevel(), oldZoomLevel); } + + if (restoreModel) { + loadDirectory(url()); + } } const bool hiddenFilesShown = props.hiddenFilesShown(); - if (hiddenFilesShown != m_dirLister->showingDotFiles()) { - m_dirLister->setShowingDotFiles(hiddenFilesShown); - m_dirLister->emitChanges(); + if (hiddenFilesShown != model->showHiddenFiles()) { + model->setShowHiddenFiles(hiddenFilesShown); emit hiddenFilesShownChanged(hiddenFilesShown); } - KFileItemModel* model = fileItemModel(); - const bool groupedSorting = props.groupedSorting(); if (groupedSorting != model->groupedSorting()) { model->setGroupedSorting(groupedSorting); @@ -1229,16 +1270,6 @@ void DolphinView::pasteToUrl(const KUrl& url) KonqOperations::doPaste(this, url); } -void DolphinView::updateZoomLevel(int oldZoomLevel) -{ - Q_UNUSED(oldZoomLevel); - /* const int newZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(m_viewAccessor.itemView()->iconSize()); - if (oldZoomLevel != newZoomLevel) { - m_viewModeController->setZoomLevel(newZoomLevel); - emit zoomLevelChanged(newZoomLevel); - }*/ -} - KUrl::List DolphinView::simplifiedSelectedUrls() const { KUrl::List urls;