X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/8d4fb3608927960d9e45e672ce1cbe1fa3a548f9..4c3dbbb628b5eac8530d5c49db4bf98da0444986:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index ecc4dc341..004b158ed 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -61,6 +61,7 @@ DolphinView::DolphinView(QWidget* parent, DolphinSortFilterProxyModel* proxyModel) : QWidget(parent), m_active(true), + m_showPreview(false), m_loadingDirectory(false), m_storedCategorizedSorting(false), m_mode(DolphinView::IconsView), @@ -102,12 +103,14 @@ DolphinView::DolphinView(QWidget* parent, connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)), this, SLOT(openContextMenu(const QPoint&))); - connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&, const QModelIndex&, QWidget*)), - this, SLOT(dropUrls(const KUrl::List&, const KUrl&, const QModelIndex&, QWidget*))); + connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&, const KFileItem&)), + this, SLOT(dropUrls(const KUrl::List&, const KUrl&, const KFileItem&))); connect(m_controller, SIGNAL(sortingChanged(DolphinView::Sorting)), this, SLOT(updateSorting(DolphinView::Sorting))); connect(m_controller, SIGNAL(sortOrderChanged(Qt::SortOrder)), this, SLOT(updateSortOrder(Qt::SortOrder))); + connect(m_controller, SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)), + this, SLOT(updateAdditionalInfo(const KFileItemDelegate::InformationList&))); connect(m_controller, SIGNAL(itemTriggered(const KFileItem&)), this, SLOT(triggerItem(const KFileItem&))); connect(m_controller, SIGNAL(activated()), @@ -197,6 +200,12 @@ void DolphinView::setMode(Mode mode) createView(); + // the file item delegate has been recreated, apply the current + // additional information manually + const KFileItemDelegate::InformationList infoList = props.additionalInfo(); + m_fileItemDelegate->setShowInformation(infoList); + emit additionalInfoChanged(infoList); + // 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. @@ -204,7 +213,6 @@ void DolphinView::setMode(Mode mode) 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(); } @@ -220,11 +228,16 @@ DolphinView::Mode DolphinView::mode() const void DolphinView::setShowPreview(bool show) { + if (m_showPreview == show) { + return; + } + const KUrl viewPropsUrl = viewPropertiesUrl(); ViewProperties props(viewPropsUrl); props.setShowPreview(show); - m_controller->setShowPreview(show); + m_showPreview = show; + emit showPreviewChanged(); loadDirectory(viewPropsUrl, true); @@ -232,7 +245,7 @@ void DolphinView::setShowPreview(bool show) bool DolphinView::showPreview() const { - return m_controller->showPreview(); + return m_showPreview; } void DolphinView::setShowHiddenFiles(bool show) @@ -246,7 +259,6 @@ void DolphinView::setShowHiddenFiles(bool show) props.setShowHiddenFiles(show); m_dirLister->setShowingDotFiles(show); - m_controller->setShowHiddenFiles(show); emit showHiddenFilesChanged(); loadDirectory(viewPropsUrl, true); @@ -273,7 +285,6 @@ void DolphinView::setCategorizedSorting(bool categorized) m_storedCategorizedSorting = categorized; m_proxyModel->setCategorizedModel(categorized); - m_proxyModel->sort(m_proxyModel->sortColumn(), m_proxyModel->sortOrder()); emit categorizedSortingChanged(); } @@ -439,12 +450,15 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::InformationList info) const KUrl viewPropsUrl = viewPropertiesUrl(); ViewProperties props(viewPropsUrl); props.setAdditionalInfo(info); - - m_controller->setAdditionalInfoCount(info.count()); m_fileItemDelegate->setShowInformation(info); emit additionalInfoChanged(info); - loadDirectory(viewPropsUrl, true); + + if (itemView() != m_detailsView) { + // the details view requires no reloading of the directory, as it maps + // the file item delegate info to its columns internally + loadDirectory(viewPropsUrl, true); + } } KFileItemDelegate::InformationList DolphinView::additionalInfo() const @@ -490,24 +504,12 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) loadDirectory(url); } - itemView()->setFocus(); - emit startedPathLoading(url); } void DolphinView::setNameFilter(const QString& nameFilter) { - // The name filter of KDirLister does a 'hard' filtering, which - // means that only the items are shown where the names match - // exactly the filter. This is non-transparent for the user, which - // just wants to have a 'soft' filtering: does the name contain - // the filter string? - QString adjustedFilter(nameFilter); - adjustedFilter.insert(0, '*'); - adjustedFilter.append('*'); - - m_dirLister->setNameFilter(adjustedFilter); - m_dirLister->emitChanges(); + m_proxyModel->setFilterRegExp(nameFilter); if (isColumnViewActive()) { // adjusting the directory lister is not enough in the case of the @@ -560,7 +562,7 @@ void DolphinView::triggerItem(const KFileItem& item) void DolphinView::generatePreviews(const KFileItemList& items) { - if (m_controller->showPreview()) { + if (m_controller->dolphinView()->showPreview()) { KIO::PreviewJob* job = KIO::filePreview(items, 128); connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)), this, SLOT(showPreview(const KFileItem&, const QPixmap&))); @@ -658,7 +660,6 @@ void DolphinView::applyViewProperties(const KUrl& url) const bool showHiddenFiles = props.showHiddenFiles(); if (showHiddenFiles != m_dirLister->showingDotFiles()) { m_dirLister->setShowingDotFiles(showHiddenFiles); - m_controller->setShowHiddenFiles(showHiddenFiles); emit showHiddenFilesChanged(); } @@ -666,7 +667,6 @@ void DolphinView::applyViewProperties(const KUrl& url) 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(); } @@ -684,14 +684,13 @@ void DolphinView::applyViewProperties(const KUrl& url) KFileItemDelegate::InformationList info = props.additionalInfo(); if (info != m_fileItemDelegate->showInformation()) { - m_controller->setAdditionalInfoCount(info.count()); m_fileItemDelegate->setShowInformation(info); emit additionalInfoChanged(info); } const bool showPreview = props.showPreview(); - if (showPreview != m_controller->showPreview()) { - m_controller->setShowPreview(showPreview); + if (showPreview != m_showPreview) { + m_showPreview = showPreview; emit showPreviewChanged(); } } @@ -722,7 +721,7 @@ void DolphinView::openContextMenu(const QPoint& pos) KFileItem item; const QModelIndex index = itemView()->indexAt(pos); - if (isValidNameIndex(index)) { + if (index.isValid() && (index.column() == DolphinModel::Name)) { item = fileItem(index); } @@ -731,28 +730,14 @@ void DolphinView::openContextMenu(const QPoint& pos) void DolphinView::dropUrls(const KUrl::List& urls, const KUrl& destPath, - const QModelIndex& destIndex, - QWidget* source) + const KFileItem& destItem) { - KFileItem directory; - if (isValidNameIndex(destIndex)) { - KFileItem item = fileItem(destIndex); - Q_ASSERT(!item.isNull()); - if (item.isDir()) { - // the URLs are dropped above a directory - directory = item; - } - } - - if ((directory.isNull()) && (source == itemView())) { - // The dropping is done into the same viewport where - // the dragging has been started. Just ignore this... - return; + const KUrl& destination = !destItem.isNull() && destItem.isDir() ? + destItem.url() : destPath; + const KUrl sourceDir = KUrl(urls.first().directory()); + if (sourceDir != destination) { + dropUrls(urls, destination); } - - const KUrl& destination = (directory.isNull()) ? - destPath : directory.url(); - dropUrls(urls, destination); } void DolphinView::dropUrls(const KUrl::List& urls, @@ -781,6 +766,17 @@ void DolphinView::updateSortOrder(Qt::SortOrder order) emit sortOrderChanged(order); } +void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList& info) +{ + ViewProperties props(viewPropertiesUrl()); + props.setAdditionalInfo(info); + + m_fileItemDelegate->setShowInformation(info); + + emit additionalInfoChanged(info); + +} + void DolphinView::emitContentsMoved() { // only emit the contents moved signal if: @@ -830,11 +826,6 @@ void DolphinView::clearHoverInformation() void DolphinView::createView() { - KFileItemDelegate::InformationList infoList; - if (m_fileItemDelegate != 0) { - infoList = m_fileItemDelegate->showInformation(); - } - // delete current view QAbstractItemView* view = itemView(); if (view != 0) { @@ -874,7 +865,6 @@ void DolphinView::createView() Q_ASSERT(view != 0); m_fileItemDelegate = new KFileItemDelegate(view); - m_fileItemDelegate->setShowInformation(infoList); view->setItemDelegate(m_fileItemDelegate); view->setModel(m_proxyModel); @@ -889,7 +879,6 @@ void DolphinView::createView() this, SLOT(emitContentsMoved())); connect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(emitContentsMoved())); - view->setFocus(); } QAbstractItemView* DolphinView::itemView() const @@ -903,11 +892,6 @@ QAbstractItemView* DolphinView::itemView() const return m_iconsView; } -bool DolphinView::isValidNameIndex(const QModelIndex& index) const -{ - return index.isValid() && (index.column() == DolphinModel::Name); -} - bool DolphinView::isCutItem(const KFileItem& item) const { const QMimeData* mimeData = QApplication::clipboard()->mimeData();