]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnview.cpp
Let the user choose if folders are always shown first in the views of
[dolphin.git] / src / dolphincolumnview.cpp
index 957b2064f64bd6774c1875ad816dbee01e43ac55..f34be92e9b58e96809a1c3ef9a0eaeb66108cea5 100644 (file)
 
 #include "dolphincolumnwidget.h"
 #include "dolphincontroller.h"
-#include "dolphinsettings.h"
+#include "settings/dolphinsettings.h"
+#include "zoomlevelinfo.h"
 
 #include "dolphin_columnmodesettings.h"
 
+#include <kfilepreviewgenerator.h>
+
 #include <QPoint>
 #include <QScrollBar>
 #include <QTimeLine>
@@ -48,13 +51,12 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control
     setSelectionMode(ExtendedSelection);
     setFocusPolicy(Qt::NoFocus);
     setFrameShape(QFrame::NoFrame);
+    setLayoutDirection(Qt::LeftToRight);
 
     connect(this, SIGNAL(viewportEntered()),
             controller, SLOT(emitViewportEntered()));
-    connect(controller, SIGNAL(zoomIn()),
-            this, SLOT(zoomIn()));
-    connect(controller, SIGNAL(zoomOut()),
-            this, SLOT(zoomOut()));
+    connect(controller, SIGNAL(zoomLevelChanged(int)),
+            this, SLOT(setZoomLevel(int)));
     connect(controller, SIGNAL(activationChanged(bool)),
             this, SLOT(updateColumnsBackground(bool)));
 
@@ -63,6 +65,8 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control
             this, SLOT(slotSortingChanged(DolphinView::Sorting)));
     connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)),
             this, SLOT(slotSortOrderChanged(Qt::SortOrder)));
+    connect(view, SIGNAL(sortFoldersFirstChanged(bool)),
+            this, SLOT(slotSortFoldersFirstChanged(bool)));
     connect(view, SIGNAL(showHiddenFilesChanged()),
             this, SLOT(slotShowHiddenFilesChanged()));
     connect(view, SIGNAL(showPreviewChanged()),
@@ -81,7 +85,7 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control
     m_emptyViewport = new QFrame(viewport());
     m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
 
-    updateDecorationSize();
+    updateDecorationSize(view->showPreview());
     updateColumnsBackground(true);
 }
 
@@ -190,7 +194,7 @@ void DolphinColumnView::showColumn(const KUrl& url)
                 QList<DolphinColumnWidget*>::iterator start = m_columns.begin() + columnIndex;
                 QList<DolphinColumnWidget*>::iterator end = m_columns.end();
                 for (QList<DolphinColumnWidget*>::iterator it = start; it != end; ++it) {
-                    (*it)->deleteLater();
+                    deleteColumn(*it);
                 }
                 m_columns.erase(start, end);
 
@@ -269,6 +273,11 @@ KFileItemList DolphinColumnView::selectedItems() const
     return activeColumn()->selectedItems();
 }
 
+QMimeData* DolphinColumnView::selectionMimeData() const
+{
+    return activeColumn()->selectionMimeData();
+}
+
 void DolphinColumnView::selectAll()
 {
     activeColumn()->selectAll();
@@ -362,35 +371,24 @@ void DolphinColumnView::wheelEvent(QWheelEvent* event)
     // let Ctrl+wheel events propagate to the DolphinView for icon zooming
     if ((event->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) {
         event->ignore();
-       return;
+    } else {
+        QAbstractItemView::wheelEvent(event);
     }
-    QAbstractItemView::wheelEvent(event);
 }
 
-void DolphinColumnView::zoomIn()
+void DolphinColumnView::setZoomLevel(int level)
 {
-    if (isZoomInPossible()) {
-        ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
-        switch (settings->iconSize()) {
-        case KIconLoader::SizeSmall:  settings->setIconSize(KIconLoader::SizeMedium); break;
-        case KIconLoader::SizeMedium: settings->setIconSize(KIconLoader::SizeLarge); break;
-        default: Q_ASSERT(false); break;
-        }
-        updateDecorationSize();
-    }
-}
+    const int size = ZoomLevelInfo::iconSizeForZoomLevel(level);
+    ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
 
-void DolphinColumnView::zoomOut()
-{
-    if (isZoomOutPossible()) {
-        ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
-        switch (settings->iconSize()) {
-        case KIconLoader::SizeLarge:  settings->setIconSize(KIconLoader::SizeMedium); break;
-        case KIconLoader::SizeMedium: settings->setIconSize(KIconLoader::SizeSmall); break;
-        default: Q_ASSERT(false); break;
-        }
-        updateDecorationSize();
+    const bool showPreview = m_controller->dolphinView()->showPreview();
+    if (showPreview) {
+        settings->setPreviewSize(size);
+    } else {
+        settings->setIconSize(size);
     }
+
+    updateDecorationSize(showPreview);
 }
 
 void DolphinColumnView::moveContentHorizontally(int x)
@@ -399,10 +397,10 @@ void DolphinColumnView::moveContentHorizontally(int x)
     layoutColumns();
 }
 
-void DolphinColumnView::updateDecorationSize()
+void DolphinColumnView::updateDecorationSize(bool showPreview)
 {
     ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
-    const int iconSize = settings->iconSize();
+    const int iconSize = showPreview ? settings->previewSize() : settings->iconSize();
     const QSize size(iconSize, iconSize);
     setIconSize(size);
 
@@ -413,9 +411,6 @@ void DolphinColumnView::updateDecorationSize()
         }
     }
 
-    m_controller->setZoomInPossible(isZoomInPossible());
-    m_controller->setZoomOutPossible(isZoomOutPossible());
-
     doItemsLayout();
 }
 
@@ -455,6 +450,13 @@ void DolphinColumnView::slotSortOrderChanged(Qt::SortOrder order)
     }
 }
 
+void DolphinColumnView::slotSortFoldersFirstChanged(bool foldersFirst)
+{
+    foreach (DolphinColumnWidget* column, m_columns) {
+        column->setSortFoldersFirst(foldersFirst);
+    }
+}
+
 void DolphinColumnView::slotShowHiddenFilesChanged()
 {
     const bool show = m_controller->dolphinView()->showHiddenFiles();
@@ -466,23 +468,12 @@ void DolphinColumnView::slotShowHiddenFilesChanged()
 void DolphinColumnView::slotShowPreviewChanged()
 {
     const bool show = m_controller->dolphinView()->showPreview();
+    updateDecorationSize(show);
     foreach (DolphinColumnWidget* column, m_columns) {
         column->setShowPreview(show);
     }
 }
 
-bool DolphinColumnView::isZoomInPossible() const
-{
-    ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
-    return settings->iconSize() < KIconLoader::SizeLarge;
-}
-
-bool DolphinColumnView::isZoomOutPossible() const
-{
-    ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
-    return settings->iconSize() > KIconLoader::SizeSmall;
-}
-
 void DolphinColumnView::setActiveColumnIndex(int index)
 {
     if (m_index == index) {
@@ -594,7 +585,7 @@ void DolphinColumnView::removeAllColumns()
     QList<DolphinColumnWidget*>::iterator start = m_columns.begin() + 1;
     QList<DolphinColumnWidget*>::iterator end = m_columns.end();
     for (QList<DolphinColumnWidget*>::iterator it = start; it != end; ++it) {
-        (*it)->deleteLater();
+        deleteColumn(*it);
     }
     m_columns.erase(start, end);
     m_index = 0;
@@ -608,4 +599,23 @@ QPoint DolphinColumnView::columnPosition(DolphinColumnWidget* column, const QPoi
     return QPoint(point.x() - topLeft.x(), point.y() - topLeft.y());
 }
 
+void DolphinColumnView::deleteColumn(DolphinColumnWidget* column)
+{
+    if (column != 0) {
+        if (m_controller->itemView() == column) {
+            m_controller->setItemView(0);
+        }
+        // deleteWhenNotDragSource(column) does not necessarily delete column,
+        // and we want its preview generator destroyed immediately.
+        column->m_previewGenerator->deleteLater();
+        column->m_previewGenerator = 0;
+        column->hide();
+        // Prevent automatic destruction of column when this DolphinColumnView
+        // is destroyed.
+        column->setParent(0);
+        column->disconnect();
+        emit requestColumnDeletion(column);
+    }
+}
+
 #include "dolphincolumnview.moc"