#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),
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)),
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);
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.
}
}
- // 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);
}
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()
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()
}
}
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.