From e1d76541ba62e2eec5874ace02049be96bf3378e Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Fri, 8 Aug 2008 06:31:58 +0000 Subject: [PATCH] assure correct update of the enabled/disabled state of the zoom actions (no backport required, as a new zooming approach is used on trunk) svn path=/trunk/KDE/kdebase/apps/; revision=843849 --- src/dolphincontroller.cpp | 43 +++++++++++++++++++++++---------------- src/dolphincontroller.h | 9 +++++++- src/dolphinview.cpp | 42 +++++++++++++++++++++++++++++--------- src/dolphinview.h | 8 ++++++++ 4 files changed, 74 insertions(+), 28 deletions(-) diff --git a/src/dolphincontroller.cpp b/src/dolphincontroller.cpp index edc5dad98..a23ecbe4a 100644 --- a/src/dolphincontroller.cpp +++ b/src/dolphincontroller.cpp @@ -57,16 +57,7 @@ void DolphinController::setItemView(QAbstractItemView* view) m_itemView = view; if (m_itemView != 0) { - switch (m_itemView->iconSize().height()) { - case KIconLoader::SizeSmallMedium: m_zoomLevel = 0; break; - case KIconLoader::SizeMedium: m_zoomLevel = 1; break; - case KIconLoader::SizeLarge: m_zoomLevel = 2; break; - case KIconLoader::SizeHuge: m_zoomLevel = 3; break; - case KIconLoader::SizeEnormous: m_zoomLevel = 4; break; - case KIconLoader::SizeEnormous * 3 / 2: m_zoomLevel = 5; break; - case KIconLoader::SizeEnormous * 2: m_zoomLevel = 6; break; - default: Q_ASSERT(false); m_zoomLevel = 2; break; - } + m_zoomLevel = zoomLevelForIconSize(m_itemView->iconSize()); // TODO: this is a workaround until Qt-issue 176832 has been fixed connect(m_itemView, SIGNAL(pressed(const QModelIndex&)), @@ -134,18 +125,36 @@ int DolphinController::iconSizeForZoomLevel(int level) { int size = KIconLoader::SizeMedium; switch (level) { - case 0: size = KIconLoader::SizeSmallMedium; break; - case 1: size = KIconLoader::SizeMedium; break; - case 2: size = KIconLoader::SizeLarge; break; - case 3: size = KIconLoader::SizeHuge; break; - case 4: size = KIconLoader::SizeEnormous; break; - case 5: size = KIconLoader::SizeEnormous * 3 / 2; break; - case 6: size = KIconLoader::SizeEnormous * 2; break; + case 0: size = KIconLoader::SizeSmall; break; + case 1: size = KIconLoader::SizeSmallMedium; break; + case 2: size = KIconLoader::SizeMedium; break; + case 3: size = KIconLoader::SizeLarge; break; + case 4: size = KIconLoader::SizeHuge; break; + case 5: size = KIconLoader::SizeEnormous; break; + case 6: size = KIconLoader::SizeEnormous * 3 / 2; break; + case 7: size = KIconLoader::SizeEnormous * 2; break; default: Q_ASSERT(false); break; } return size; } +int DolphinController::zoomLevelForIconSize(const QSize& size) +{ + int level = 0; + switch (size.height()) { + case KIconLoader::SizeSmall: level = 0; break; + case KIconLoader::SizeSmallMedium: level = 1; break; + case KIconLoader::SizeMedium: level = 2; break; + case KIconLoader::SizeLarge: level = 3; break; + case KIconLoader::SizeHuge: level = 4; break; + case KIconLoader::SizeEnormous: level = 5; break; + case KIconLoader::SizeEnormous * 3 / 2: level = 6; break; + case KIconLoader::SizeEnormous * 2: level = 7; break; + default: Q_ASSERT(false); level = 3; break; + } + return level; +} + void DolphinController::handleKeyPressEvent(QKeyEvent* event) { Q_ASSERT(m_itemView != 0); diff --git a/src/dolphincontroller.h b/src/dolphincontroller.h index 4e8885ef9..e8ca55e19 100644 --- a/src/dolphincontroller.h +++ b/src/dolphincontroller.h @@ -194,6 +194,13 @@ public: * (see DolphinController::zoomLevel()). */ static int iconSizeForZoomLevel(int level); + + /** + * Helper method for the view implementation to get + * the zoom level for the icon size \a size + * (see DolphinController::zoomLevel()). + */ + static int zoomLevelForIconSize(const QSize& size); /** * Tells the view implementation to zoom out by emitting the signal zoomOut() @@ -383,7 +390,7 @@ inline int DolphinController::zoomLevelMinimum() const inline int DolphinController::zoomLevelMaximum() const { - return 6; + return 7; } #endif diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index d02059059..24b331d84 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -664,7 +664,14 @@ void DolphinView::setShowPreview(bool show) m_showPreview = show; m_iconManager->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); } @@ -986,6 +993,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() { @@ -1096,7 +1115,14 @@ void DolphinView::applyViewProperties(const KUrl& url) if (showPreview != m_showPreview) { m_showPreview = showPreview; m_iconManager->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); } } @@ -1232,16 +1258,12 @@ void DolphinView::pasteToUrl(const KUrl& url) } } -void DolphinView::slotRequestUrlChange(const KUrl& url) -{ - emit requestUrlChange(url); - m_controller->setUrl(url); -} - -void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl) -{ - if (oldUrl == m_controller->url()) { - m_controller->setUrl(newUrl); +void DolphinView::updateZoomLevel(int oldZoomLevel) +{ + const int newZoomLevel = DolphinController::zoomLevelForIconSize(itemView()->iconSize()); + if (oldZoomLevel != newZoomLevel) { + m_controller->setZoomLevel(newZoomLevel); + emit zoomLevelChanged(newZoomLevel); } } diff --git a/src/dolphinview.h b/src/dolphinview.h index 8060ebd4e..63afaba58 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -665,6 +665,14 @@ private: * Pastes the clipboard data into the URL \a url. */ void pasteToUrl(const KUrl& url); + + /** + * Checks whether the current item view has the same zoom level + * as \a oldZoomLevel. If this is not the case, the zoom level + * of the controller is updated and a zoomLevelChanged() signal + * is emitted. + */ + void updateZoomLevel(int oldZoomLevel); /** * Returns true, if the ColumnView is activated. As the column view -- 2.47.3