X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c8a4f1fd8d3c9b50e51b7234123b3fbe0b979552..2060fa8d4676fb2d5116830c304db8fdb556d959:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 45717afc1..5dc0c0e16 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -51,6 +51,7 @@ #include "dolphindetailsview.h" #include "dolphiniconsview.h" #include "dolphincontextmenu.h" +#include "dolphinitemcategorizer.h" #include "filterbar.h" #include "renamedialog.h" #include "kurlnavigator.h" @@ -63,26 +64,26 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, const KUrl& url, Mode mode, bool showHiddenFiles) : - QWidget(parent), - m_showProgress(false), - m_blockContentsMovedSignal(false), - m_mode(mode), - m_iconSize(0), - m_folderCount(0), - m_fileCount(0), - m_mainWindow(mainWindow), - m_topLayout(0), - m_urlNavigator(0), - m_controller(0), - m_iconsView(0), - m_detailsView(0), - m_columnView(0), - m_fileItemDelegate(0), - m_filterBar(0), - m_statusBar(0), - m_dirModel(0), - m_dirLister(0), - m_proxyModel(0) + QWidget(parent), + m_showProgress(false), + m_blockContentsMovedSignal(false), + m_mode(mode), + m_iconSize(0), + m_folderCount(0), + m_fileCount(0), + m_mainWindow(mainWindow), + m_topLayout(0), + m_urlNavigator(0), + m_controller(0), + m_iconsView(0), + m_detailsView(0), + m_columnView(0), + m_fileItemDelegate(0), + m_filterBar(0), + m_statusBar(0), + m_dirModel(0), + m_dirLister(0), + m_proxyModel(0) { hide(); setFocusPolicy(Qt::StrongFocus); @@ -101,7 +102,7 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, m_urlNavigator->setUrlEditable(DolphinSettings::instance().generalSettings()->editableUrl()); m_urlNavigator->setHomeUrl(DolphinSettings::instance().generalSettings()->homeUrl()); connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)), - this, SLOT(loadDirectory(const KUrl&))); + this, SLOT(changeDirectory(const KUrl&))); connect(m_urlNavigator, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&)), this, SLOT(dropUrls(const KUrl::List&, const KUrl&))); connect(m_urlNavigator, SIGNAL(activated()), @@ -224,9 +225,9 @@ void DolphinView::setShowPreview(bool show) props.setShowPreview(show); m_controller->setShowPreview(show); - emit showPreviewChanged(); - reload(); + + startDirLister(m_urlNavigator->url(), true); } bool DolphinView::showPreview() const @@ -242,12 +243,11 @@ void DolphinView::setShowHiddenFiles(bool show) ViewProperties props(m_urlNavigator->url()); props.setShowHiddenFiles(show); - props.save(); m_dirLister->setShowingDotFiles(show); emit showHiddenFilesChanged(); - reload(); + startDirLister(m_urlNavigator->url(), true); } bool DolphinView::showHiddenFiles() const @@ -255,6 +255,44 @@ bool DolphinView::showHiddenFiles() const return m_dirLister->showingDotFiles(); } +void DolphinView::setCategorizedSorting(bool categorized) +{ + if (!supportsCategorizedSorting() || (categorized == categorizedSorting())) { + return; + } + + Q_ASSERT(m_iconsView != 0); + if (categorized) { + Q_ASSERT(m_iconsView->itemCategorizer() == 0); + m_iconsView->setItemCategorizer(new DolphinItemCategorizer()); + } else { + KItemCategorizer* categorizer = m_iconsView->itemCategorizer(); + m_iconsView->setItemCategorizer(0); + delete categorizer; + } + + ViewProperties props(m_urlNavigator->url()); + props.setCategorizedSorting(categorized); + props.save(); + + emit categorizedSortingChanged(); +} + +bool DolphinView::categorizedSorting() const +{ + if (!supportsCategorizedSorting()) { + return false; + } + + Q_ASSERT(m_iconsView != 0); + return m_iconsView->itemCategorizer() != 0; +} + +bool DolphinView::supportsCategorizedSorting() const +{ + return m_iconsView != 0; +} + void DolphinView::renameSelectedItems() { DolphinView* view = mainWindow()->activeView(); @@ -417,7 +455,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::AdditionalInformation inf m_fileItemDelegate->setAdditionalInformation(info); emit additionalInfoChanged(info); - reload(); + startDirLister(m_urlNavigator->url(), true); } KFileItemDelegate::AdditionalInformation DolphinView::additionalInfo() const @@ -544,7 +582,6 @@ void DolphinView::rename(const KUrl& source, const QString& newName) default: // the renaming operation has been canceled - reload(); return; } } else { @@ -562,13 +599,14 @@ void DolphinView::rename(const KUrl& source, const QString& newName) } else { m_statusBar->setMessage(i18n("Renaming of file '%1' to '%2' failed.", source.fileName(), destFileName), DolphinStatusBar::Error); - reload(); } } void DolphinView::reload() { - startDirLister(m_urlNavigator->url(), true); + const KUrl& url = m_urlNavigator->url(); + changeDirectory(url); + startDirLister(url, true); } void DolphinView::mouseReleaseEvent(QMouseEvent* event) @@ -582,7 +620,7 @@ DolphinMainWindow* DolphinView::mainWindow() const return m_mainWindow; } -void DolphinView::loadDirectory(const KUrl& url) +void DolphinView::changeDirectory(const KUrl& url) { if (!isActive()) { requestActivation(); @@ -612,6 +650,22 @@ void DolphinView::loadDirectory(const KUrl& url) emit showHiddenFilesChanged(); } + const bool categorized = props.categorizedSorting(); + if (categorized != categorizedSorting()) { + if (supportsCategorizedSorting()) { + Q_ASSERT(m_iconsView != 0); + if (categorized) { + Q_ASSERT(m_iconsView->itemCategorizer() == 0); + m_iconsView->setItemCategorizer(new DolphinItemCategorizer()); + } else { + KItemCategorizer* categorizer = m_iconsView->itemCategorizer(); + m_iconsView->setItemCategorizer(0); + delete categorizer; + } + } + emit categorizedSortingChanged(); + } + const DolphinView::Sorting sorting = props.sorting(); if (sorting != m_proxyModel->sorting()) { m_proxyModel->setSorting(sorting); @@ -747,6 +801,12 @@ void DolphinView::generatePreviews(const KFileItemList& items) void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) { Q_ASSERT(item != 0); + if (item->url().directory() != m_dirLister->url().path()) { + // the preview job is still working on items of an older URL, hence + // the item is not part of the directory model anymore + return; + } + const QModelIndex idx = m_dirModel->indexForItem(*item); if (idx.isValid() && (idx.column() == 0)) { const QMimeData* mimeData = QApplication::clipboard()->mimeData(); @@ -811,9 +871,9 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) // the directory loading progress information has the lowest priority. const QString progressText(m_statusBar->progressText()); m_showProgress = progressText.isEmpty() || - (progressText == i18n("Loading directory...")); + (progressText == i18n("Loading folder...")); if (m_showProgress) { - m_statusBar->setProgressText(i18n("Loading directory...")); + m_statusBar->setProgressText(i18n("Loading folder...")); m_statusBar->setProgress(0); } @@ -1096,6 +1156,11 @@ void DolphinView::createView() if (view != 0) { m_topLayout->removeWidget(view); view->close(); + if (view == m_iconsView) { + KItemCategorizer* categorizer = m_iconsView->itemCategorizer(); + m_iconsView->setItemCategorizer(0); + delete categorizer; + } view->deleteLater(); view = 0; m_iconsView = 0;