X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e1b94daa88441ece7844a5fde1af411ebd6d281f..b5432d60372e2dad6d31cd4e6d28e4da5d47a7e4:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index e1cbaee8c..42136f445 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -53,13 +53,16 @@ #include "dolphincontroller.h" #include "dolphinsortfilterproxymodel.h" #include "dolphindetailsview.h" +#include "dolphin_detailsmodesettings.h" #include "dolphiniconsview.h" #include "dolphinsettings.h" #include "dolphin_generalsettings.h" -#include "iconmanager.h" +#include "folderexpander.h" +#include "kfilepreviewgenerator.h" #include "renamedialog.h" #include "tooltipmanager.h" #include "viewproperties.h" +#include "zoomlevelinfo.h" DolphinView::DolphinView(QWidget* parent, const KUrl& url, @@ -84,7 +87,7 @@ DolphinView::DolphinView(QWidget* parent, m_dolphinModel(dolphinModel), m_dirLister(dirLister), m_proxyModel(proxyModel), - m_iconManager(0), + m_previewGenerator(0), m_toolTipManager(0), m_rootUrl(), m_currentItemUrl() @@ -360,26 +363,24 @@ QPoint DolphinView::contentsPosition() const return QPoint(x, y); } -void DolphinView::zoomIn() +void DolphinView::setZoomLevel(int level) { - m_controller->triggerZoomIn(); - m_iconManager->updatePreviews(); -} - -void DolphinView::zoomOut() -{ - m_controller->triggerZoomOut(); - m_iconManager->updatePreviews(); -} - -bool DolphinView::isZoomInPossible() const -{ - return m_controller->isZoomInPossible(); + if (level < ZoomLevelInfo::minimumLevel()) { + level = ZoomLevelInfo::minimumLevel(); + } else if (level > ZoomLevelInfo::maximumLevel()) { + level = ZoomLevelInfo::maximumLevel(); + } + + if (level != zoomLevel()) { + m_controller->setZoomLevel(level); + m_previewGenerator->updatePreviews(); + emit zoomLevelChanged(level); + } } -bool DolphinView::isZoomOutPossible() const +int DolphinView::zoomLevel() const { - return m_controller->isZoomOutPossible(); + return m_controller->zoomLevel(); } void DolphinView::setSorting(Sorting sorting) @@ -451,7 +452,7 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) return; } - m_iconManager->cancelPreviews(); + m_previewGenerator->cancelPreviews(); m_controller->setUrl(url); // emits urlChanged, which we forward if (!rootUrl.isEmpty() && rootUrl.isParentOf(url)) { @@ -595,12 +596,13 @@ void DolphinView::renameSelectedItems() void DolphinView::trashSelectedItems() { emit doingOperation(KIO::FileUndoManager::Trash); - KonqOperations::del(this, KonqOperations::TRASH, selectedUrls()); + const KUrl::List list = simplifiedSelectedUrls(); + KonqOperations::del(this, KonqOperations::TRASH, list); } void DolphinView::deleteSelectedItems() { - const KUrl::List list = selectedUrls(); + const KUrl::List list = simplifiedSelectedUrls(); const bool del = KonqOperations::askDeleteConfirmation(list, KonqOperations::DEL, KonqOperations::DEFAULT_CONFIRMATION, @@ -616,7 +618,7 @@ void DolphinView::deleteSelectedItems() void DolphinView::cutSelectedItems() { QMimeData* mimeData = new QMimeData(); - const KUrl::List kdeUrls = selectedUrls(); + const KUrl::List kdeUrls = simplifiedSelectedUrls(); const KUrl::List mostLocalUrls; KonqMimeData::populateMimeData(mimeData, kdeUrls, mostLocalUrls, true); QApplication::clipboard()->setMimeData(mimeData); @@ -655,8 +657,15 @@ void DolphinView::setShowPreview(bool show) props.setShowPreview(show); m_showPreview = show; - m_iconManager->setShowPreview(show); + m_previewGenerator->setShowPreview(show); + + const int oldZoomLevel = m_controller->zoomLevel(); emit showPreviewChanged(); + + // Enabling or disabling the preview might change the icon size of the view. + // As the view does not emit a signal when the icon size has been changed, + // the used zoom level of the controller must be adjusted manually: + updateZoomLevel(oldZoomLevel); loadDirectory(viewPropsUrl); } @@ -726,7 +735,6 @@ void DolphinView::toggleAdditionalInfo(QAction* action) } } - void DolphinView::mouseReleaseEvent(QMouseEvent* event) { QWidget::mouseReleaseEvent(event); @@ -737,10 +745,11 @@ void DolphinView::wheelEvent(QWheelEvent* event) { if (event->modifiers() & Qt::ControlModifier) { const int delta = event->delta(); - if ((delta > 0) && isZoomInPossible()) { - zoomIn(); - } else if ((delta < 0) && isZoomOutPossible()) { - zoomOut(); + const int level = zoomLevel(); + if (delta > 0) { + setZoomLevel(level + 1); + } else if (delta < 0) { + setZoomLevel(level - 1); } event->accept(); } @@ -977,6 +986,18 @@ void DolphinView::slotDeleteFileFinished(KJob* job) } } +void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl) +{ + if (oldUrl == m_controller->url()) { + m_controller->setUrl(newUrl); + } +} + +void DolphinView::slotRequestUrlChange(const KUrl& url) +{ + emit requestUrlChange(url); + m_controller->setUrl(url); +} void DolphinView::restoreCurrentItem() { @@ -1086,8 +1107,15 @@ void DolphinView::applyViewProperties(const KUrl& url) const bool showPreview = props.showPreview(); if (showPreview != m_showPreview) { m_showPreview = showPreview; - m_iconManager->setShowPreview(showPreview); + m_previewGenerator->setShowPreview(showPreview); + + const int oldZoomLevel = m_controller->zoomLevel(); emit showPreviewChanged(); + + // Enabling or disabling the preview might change the icon size of the view. + // As the view does not emit a signal when the icon size has been changed, + // the used zoom level of the controller must be adjusted manually: + updateZoomLevel(oldZoomLevel); } } @@ -1120,6 +1148,20 @@ void DolphinView::createView() Q_ASSERT(view != 0); view->installEventFilter(this); + if (m_mode != ColumnView) { + // Give the view the ability to auto-expand its directories on hovering + // (the column view takes care about this itself). If the details view + // uses expandable folders, the auto-expanding should be used always. + DolphinSettings& settings = DolphinSettings::instance(); + const bool enabled = settings.generalSettings()->autoExpandFolders() || + ((m_detailsView != 0) && settings.detailsModeSettings()->expandableFolders()); + + FolderExpander* folderExpander = new FolderExpander(view, m_proxyModel); + folderExpander->setEnabled(enabled); + connect(folderExpander, SIGNAL(enterDir(const QModelIndex&)), + m_controller, SLOT(triggerItem(const QModelIndex&))); + } + m_controller->setItemView(view); m_fileItemDelegate = new KFileItemDelegate(view); @@ -1138,8 +1180,8 @@ void DolphinView::createView() view->setSelectionMode(QAbstractItemView::ExtendedSelection); - m_iconManager = new IconManager(view, m_proxyModel); - m_iconManager->setShowPreview(m_showPreview); + m_previewGenerator = new KFilePreviewGenerator(view, m_proxyModel); + m_previewGenerator->setShowPreview(m_showPreview); if (DolphinSettings::instance().generalSettings()->showToolTips()) { m_toolTipManager = new ToolTipManager(view, m_proxyModel); @@ -1173,7 +1215,7 @@ void DolphinView::deleteView() m_detailsView = 0; m_columnView = 0; m_fileItemDelegate = 0; - m_iconManager = 0; + m_previewGenerator = 0; m_toolTipManager = 0; } } @@ -1223,17 +1265,22 @@ void DolphinView::pasteToUrl(const KUrl& url) } } -void DolphinView::slotRequestUrlChange(const KUrl& url) -{ - emit requestUrlChange(url); - m_controller->setUrl(url); +void DolphinView::updateZoomLevel(int oldZoomLevel) +{ + const int newZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(itemView()->iconSize()); + if (oldZoomLevel != newZoomLevel) { + m_controller->setZoomLevel(newZoomLevel); + emit zoomLevelChanged(newZoomLevel); + } } -void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl) +KUrl::List DolphinView::simplifiedSelectedUrls() const { - if (oldUrl == m_controller->url()) { - m_controller->setUrl(newUrl); + KUrl::List list = selectedUrls(); + if ((m_detailsView != 0) && m_detailsView->itemsExpandable()) { + list = KonqOperations::simplifiedUrlList(list); } + return list; } #include "dolphinview.moc"