]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnview.cpp
simplified code for assuring that Open Office files won't get browsed + added comment...
[dolphin.git] / src / dolphincolumnview.cpp
index 79270d184f82fc480267876d23edce8aac575632..f119f9d92a2c087a0ef42bfea4948e004a103598 100644 (file)
 
 #include "dolphincolumnview.h"
 
-#include "dolphinmodel.h"
 #include "dolphincolumnwidget.h"
 #include "dolphincontroller.h"
-#include "dolphindirlister.h"
-#include "dolphinmodel.h"
-#include "dolphinsortfilterproxymodel.h"
 #include "dolphinsettings.h"
 
 #include "dolphin_columnmodesettings.h"
 
-#include <kcolorutils.h>
-#include <kcolorscheme.h>
-#include <kdirlister.h>
-
-#include <QAbstractProxyModel>
-#include <QApplication>
 #include <QPoint>
 #include <QScrollBar>
-#include <QTimer>
 #include <QTimeLine>
 
 DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* controller) :
     QAbstractItemView(parent),
     m_controller(controller),
-    m_restoreActiveColumnFocus(false),
+    m_active(false),
     m_index(-1),
     m_contentX(0),
     m_columns(),
-    m_animation(0)
+    m_emptyViewport(0),
+    m_animation(0),
+    m_nameFilter()
 {
     Q_ASSERT(controller != 0);
 
@@ -55,19 +46,23 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control
     setDragDropMode(QAbstractItemView::DragDrop);
     setDropIndicatorShown(false);
     setSelectionMode(ExtendedSelection);
+    setFocusPolicy(Qt::NoFocus);
+    setFrameShape(QFrame::NoFrame);
 
-    connect(this, SIGNAL(entered(const QModelIndex&)),
-            controller, SLOT(emitItemEntered(const QModelIndex&)));
     connect(this, SIGNAL(viewportEntered()),
             controller, SLOT(emitViewportEntered()));
     connect(controller, SIGNAL(zoomIn()),
             this, SLOT(zoomIn()));
     connect(controller, SIGNAL(zoomOut()),
             this, SLOT(zoomOut()));
-    connect(controller, SIGNAL(showHiddenFilesChanged(bool)),
-            this, SLOT(slotShowHiddenFilesChanged(bool)));
-    connect(controller, SIGNAL(showPreviewChanged(bool)),
-            this, SLOT(slotShowPreviewChanged(bool)));
+    connect(controller, SIGNAL(activationChanged(bool)),
+            this, SLOT(updateColumnsBackground(bool)));
+
+    const DolphinView* view = controller->dolphinView();
+    connect(view, SIGNAL(showHiddenFilesChanged()),
+            this, SLOT(slotShowHiddenFilesChanged()));
+    connect(view, SIGNAL(showPreviewChanged()),
+            this, SLOT(slotShowPreviewChanged()));
 
     connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
             this, SLOT(moveContentHorizontally(int)));
@@ -79,16 +74,11 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control
     m_columns.append(column);
     setActiveColumnIndex(0);
 
-    updateDecorationSize();
-
-    // dim the background of the viewport
-    QColor bgColor = KColorScheme(QPalette::Active, KColorScheme::View).background().color();
-    const QColor fgColor = KColorScheme(QPalette::Active, KColorScheme::View).foreground().color();
-    bgColor = KColorUtils::mix(bgColor, fgColor, 0.04);
+    m_emptyViewport = new QFrame(viewport());
+    m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
 
-    QPalette palette = viewport()->palette();
-    palette.setColor(viewport()->backgroundRole(), bgColor);
-    viewport()->setPalette(palette);
+    updateDecorationSize();
+    updateColumnsBackground(true);
 }
 
 DolphinColumnView::~DolphinColumnView()
@@ -145,6 +135,21 @@ void DolphinColumnView::setRootUrl(const KUrl& url)
     m_columns[0]->setUrl(url);
 }
 
+void DolphinColumnView::setNameFilter(const QString& nameFilter)
+{
+    if (nameFilter != m_nameFilter) {
+        m_nameFilter = nameFilter;
+        foreach (DolphinColumnWidget* column, m_columns) {
+            column->setNameFilter(nameFilter);
+        }
+    }
+}
+
+QString DolphinColumnView::nameFilter() const
+{
+    return m_nameFilter;
+}
+
 KUrl DolphinColumnView::rootUrl() const
 {
     return m_columns[0]->url();
@@ -162,6 +167,7 @@ void DolphinColumnView::showColumn(const KUrl& url)
         if (column->url() == url) {
             // the column represents already the requested URL, hence activate it
             requestActivation(column);
+            layoutColumns();
             return;
         } else if (!column->url().isParentOf(url)) {
             // the column is no parent of the requested URL, hence
@@ -214,6 +220,10 @@ void DolphinColumnView::showColumn(const KUrl& url)
             columnIndex++;
 
             DolphinColumnWidget* column = new DolphinColumnWidget(viewport(), this, childUrl);
+            const QString filter = nameFilter();
+            if (!filter.isEmpty()) {
+                column->setNameFilter(filter);
+            }
             column->setActive(false);
 
             m_columns.append(column);
@@ -269,12 +279,14 @@ QModelIndex DolphinColumnView::moveCursor(CursorAction cursorAction, Qt::Keyboar
     case MoveLeft:
         if (m_index > 0) {
             setActiveColumnIndex(m_index - 1);
+            m_controller->triggerUrlChangeRequest(activeColumn()->url());
         }
         break;
 
     case MoveRight:
         if (m_index < m_columns.count() - 1) {
             setActiveColumnIndex(m_index + 1);
+            m_controller->triggerUrlChangeRequest(m_columns[m_index]->url());
         }
         break;
 
@@ -310,7 +322,7 @@ int DolphinColumnView::verticalOffset() const
 
 void DolphinColumnView::mousePressEvent(QMouseEvent* event)
 {
-    m_controller->triggerActivation();
+    m_controller->requestActivation();
     QAbstractItemView::mousePressEvent(event);
 }
 
@@ -319,6 +331,7 @@ void DolphinColumnView::resizeEvent(QResizeEvent* event)
     QAbstractItemView::resizeEvent(event);
     layoutColumns();
     updateScrollBar();
+    assureVisibleActiveColumn();
 }
 
 void DolphinColumnView::zoomIn()
@@ -371,15 +384,35 @@ void DolphinColumnView::updateDecorationSize()
     doItemsLayout();
 }
 
-void DolphinColumnView::slotShowHiddenFilesChanged(bool show)
+void DolphinColumnView::updateColumnsBackground(bool active)
 {
+    if (active == m_active) {
+        return;
+    }
+
+    m_active = active;
+
+    // dim the background of the viewport
+    QPalette palette;
+    palette.setColor(viewport()->backgroundRole(), QColor(0, 0, 0, 0));
+    viewport()->setPalette(palette);
+
+    foreach (DolphinColumnWidget* column, m_columns) {
+        column->updateBackground();
+    }
+}
+
+void DolphinColumnView::slotShowHiddenFilesChanged()
+{
+    const bool show = m_controller->dolphinView()->showHiddenFiles();
     foreach (DolphinColumnWidget* column, m_columns) {
         column->setShowHiddenFiles(show);
     }
 }
 
-void DolphinColumnView::slotShowPreviewChanged(bool show)
+void DolphinColumnView::slotShowPreviewChanged()
 {
+    const bool show = m_controller->dolphinView()->showPreview();
     foreach (DolphinColumnWidget* column, m_columns) {
         column->setShowPreview(show);
     }
@@ -411,36 +444,45 @@ void DolphinColumnView::setActiveColumnIndex(int index)
     m_index = index;
     m_columns[m_index]->setActive(true);
 
-    m_controller->setUrl(m_columns[m_index]->url());
-
     assureVisibleActiveColumn();
 }
 
 void DolphinColumnView::layoutColumns()
 {
+    const int gap = 4;
+
     ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
     const int columnWidth = settings->columnWidth();
+
+    QRect emptyViewportRect;
     if (isRightToLeft()) {
         int x = viewport()->width() - columnWidth + m_contentX;
         foreach (DolphinColumnWidget* column, m_columns) {
-            column->setGeometry(QRect(x, 0, columnWidth, viewport()->height()));
+            column->setGeometry(QRect(x, 0, columnWidth - gap, viewport()->height()));
             x -= columnWidth;
         }
+        emptyViewportRect = QRect(0, 0, x + columnWidth - gap, viewport()->height());
     } else {
         int x = m_contentX;
         foreach (DolphinColumnWidget* column, m_columns) {
-            column->setGeometry(QRect(x, 0, columnWidth, viewport()->height()));
+            column->setGeometry(QRect(x, 0, columnWidth - gap, viewport()->height()));
             x += columnWidth;
         }
+        emptyViewportRect = QRect(x, 0, viewport()->width() - x - gap, viewport()->height());
+    }
+
+    if (emptyViewportRect.isValid()) {
+        m_emptyViewport->show();
+        m_emptyViewport->setGeometry(emptyViewportRect);
+    } else {
+        m_emptyViewport->hide();
     }
 }
 
 void DolphinColumnView::updateScrollBar()
 {
-    int contentWidth = 0;
-    foreach (DolphinColumnWidget* column, m_columns) {
-        contentWidth += column->width();
-    }
+    ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
+    const int contentWidth = m_columns.count() * settings->columnWidth();
 
     horizontalScrollBar()->setPageStep(contentWidth);
     horizontalScrollBar()->setRange(0, contentWidth - viewport()->width());
@@ -450,7 +492,10 @@ void DolphinColumnView::assureVisibleActiveColumn()
 {
     const int viewportWidth = viewport()->width();
     const int x = activeColumn()->x();
-    const int width = activeColumn()->width();
+
+    ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
+    const int width = settings->columnWidth();
+
     if (x + width > viewportWidth) {
         const int newContentX = m_contentX - x - width + viewportWidth;
         if (isRightToLeft()) {