┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2008-08-08 06:31:58 +0000
committerPeter Penz <[email protected]>2008-08-08 06:31:58 +0000
commite1d76541ba62e2eec5874ace02049be96bf3378e (patch)
tree83ed14977e40c141d8f6fcf3bd3798383a4d4ee9 /src
parent17dca27e615fa63ac6b8d7bf3aabfdbd9d71e0f5 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/dolphincontroller.cpp43
-rw-r--r--src/dolphincontroller.h9
-rw-r--r--src/dolphinview.cpp42
-rw-r--r--src/dolphinview.h8
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