]> cloud.milkyroute.net Git - dolphin.git/commitdiff
assure correct update of the enabled/disabled state of the zoom actions (no backport...
authorPeter Penz <peter.penz19@gmail.com>
Fri, 8 Aug 2008 06:31:58 +0000 (06:31 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 8 Aug 2008 06:31:58 +0000 (06:31 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=843849

src/dolphincontroller.cpp
src/dolphincontroller.h
src/dolphinview.cpp
src/dolphinview.h

index edc5dad9895eaba161bdba290918f28246947f81..a23ecbe4a583cf2afc7f43db9462acb46cf6a6d6 100644 (file)
@@ -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);
index 4e8885ef920b3d80d1aadf2a11f5a11cb8afd573..e8ca55e19a12c8b93cb59c21230c69d88285891a 100644 (file)
@@ -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
index d02059059a4bd4fe4b9aeefca5e44263fc4c9d06..24b331d84b9607a0940f56b79722131979aaf508 100644 (file)
@@ -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);
     }
 }
 
index 8060ebd4eb3bcba60cd59e405620695853fb09df..63afaba58766b41a5e24fa1ede6ca22c5101bc9a 100644 (file)
@@ -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