]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnviewcontainer.cpp
Increase version number to 1.5
[dolphin.git] / src / dolphincolumnviewcontainer.cpp
index 83940711758ab976876c02dd10e8f7b66635831f..344d38d8a343b186bbe2aebf7e1ba73781fd6140 100644 (file)
 
 #include "dolphincolumnviewcontainer.h"
 
+#include "dolphin_columnmodesettings.h"
+
 #include "dolphincolumnview.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
 #include "dolphinsortfilterproxymodel.h"
 #include "draganddrophelper.h"
 #include "settings/dolphinsettings.h"
-
-#include "dolphin_columnmodesettings.h"
+#include "viewmodecontroller.h"
 
 #include <QPoint>
 #include <QScrollBar>
 #include <QTimer>
 
 DolphinColumnViewContainer::DolphinColumnViewContainer(QWidget* parent,
-                                                       DolphinController* controller) :
+                                                       DolphinViewController* dolphinViewController,
+                                                       const ViewModeController* viewModeController) :
     QScrollArea(parent),
-    m_controller(controller),
+    m_dolphinViewController(dolphinViewController),
+    m_viewModeController(viewModeController),
     m_active(false),
     m_index(-1),
     m_contentX(0),
@@ -45,14 +48,15 @@ DolphinColumnViewContainer::DolphinColumnViewContainer(QWidget* parent,
     m_dragSource(0),
     m_activeUrlTimer(0)
 {
-    Q_ASSERT(controller != 0);
+    Q_ASSERT(dolphinViewController != 0);
+    Q_ASSERT(viewModeController != 0);
 
     setAcceptDrops(true);
     setFocusPolicy(Qt::NoFocus);
     setFrameShape(QFrame::NoFrame);
     setLayoutDirection(Qt::LeftToRight);
 
-    connect(controller, SIGNAL(activationChanged(bool)),
+    connect(viewModeController, SIGNAL(activationChanged(bool)),
             this, SLOT(updateColumnsBackground(bool)));
 
     connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
@@ -67,9 +71,9 @@ DolphinColumnViewContainer::DolphinColumnViewContainer(QWidget* parent,
     connect(m_activeUrlTimer, SIGNAL(timeout()),
             this, SLOT(updateActiveUrl()));
 
-    DolphinColumnView* column = new DolphinColumnView(viewport(), this, m_controller->url());
+    DolphinColumnView* column = new DolphinColumnView(viewport(), this, viewModeController->url());
     m_columns.append(column);
-    setActiveColumnIndex(0);
+    requestActivation(column);
 
     m_emptyViewport = new QFrame(viewport());
     m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
@@ -160,8 +164,6 @@ void DolphinColumnViewContainer::showColumn(const KUrl& url)
             columnIndex++;
 
             DolphinColumnView* column = new DolphinColumnView(viewport(), this, childUrl);
-            column->setActive(false);
-
             m_columns.append(column);
 
             // Before invoking layoutColumns() the column must be set visible temporary.
@@ -173,24 +175,21 @@ void DolphinColumnViewContainer::showColumn(const KUrl& url)
         }
     }
 
-    // set the last column as active column without modifying the controller
-    // and hence the history
-    m_columns[m_index]->setActive(false);
-    m_index = columnIndex;
-    m_columns[m_index]->setActive(true);
-    assureVisibleActiveColumn();
+    requestActivation(m_columns[columnIndex]);
 }
 
 void DolphinColumnViewContainer::mousePressEvent(QMouseEvent* event)
 {
-    m_controller->requestActivation();
+    m_dolphinViewController->requestActivation();
     QScrollArea::mousePressEvent(event);
 }
 
 void DolphinColumnViewContainer::keyPressEvent(QKeyEvent* event)
 {
     if (event->key() == Qt::Key_Left) {
-        setActiveColumnIndex(m_index - 1);
+        if (m_index > 0) {
+            requestActivation(m_columns[m_index - 1]);
+        }
     } else {
         QScrollArea::keyPressEvent(event);
     }
@@ -245,25 +244,7 @@ void DolphinColumnViewContainer::updateColumnsBackground(bool active)
 void DolphinColumnViewContainer::updateActiveUrl()
 {
     const KUrl activeUrl = m_columns[m_index]->url();
-    m_controller->setUrl(activeUrl);
-}
-
-void DolphinColumnViewContainer::setActiveColumnIndex(int index)
-{
-    if ((m_index == index) || (index < 0) || (index >= m_columns.count())) {
-        return;
-    }
-
-    const bool hasActiveColumn = (m_index >= 0);
-    if (hasActiveColumn) {
-        m_columns[m_index]->setActive(false);
-    }
-
-    m_index = index;
-    m_columns[m_index]->setActive(true);
-
-    assureVisibleActiveColumn();
-    m_activeUrlTimer->start(); // calls slot updateActiveUrl()
+    m_dolphinViewController->requestUrlChange(activeUrl);
 }
 
 void DolphinColumnViewContainer::layoutColumns()
@@ -340,18 +321,39 @@ void DolphinColumnViewContainer::assureVisibleActiveColumn()
 
 void DolphinColumnViewContainer::requestActivation(DolphinColumnView* column)
 {
-    m_controller->setItemView(column);
+    if (m_dolphinViewController->itemView() != column) {
+        m_dolphinViewController->setItemView(column);
+    }
+    if (focusProxy() != column) {
+        setFocusProxy(column);
+    }
+    
     if (column->isActive()) {
         assureVisibleActiveColumn();
     } else {
+        // Deactivate the currently active column
+        if (m_index >= 0) {
+            m_columns[m_index]->setActive(false);
+        }
+        
+        // Get the index of the column that should get activated
         int index = 0;
         foreach (DolphinColumnView* currColumn, m_columns) {
             if (currColumn == column) {
-                setActiveColumnIndex(index);
-                return;
+                break;
             }
             ++index;
         }
+
+        Q_ASSERT(index != m_index);
+        Q_ASSERT(index < m_columns.count());
+
+        // Activate the requested column
+        m_index = index;
+        m_columns[m_index]->setActive(true);
+
+        assureVisibleActiveColumn();
+        m_activeUrlTimer->start(); // calls slot updateActiveUrl()
     }
 }
 
@@ -380,8 +382,8 @@ void DolphinColumnViewContainer::deleteColumn(DolphinColumnView* column)
         return;
     }
 
-    if (m_controller->itemView() == column) {
-        m_controller->setItemView(0);
+    if (m_dolphinViewController->itemView() == column) {
+        m_dolphinViewController->setItemView(0);
     }
     // deleteWhenNotDragSource(column) does not necessarily delete column,
     // and we want its preview generator destroyed immediately.