X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/08f93a673d519de4cb6ecc35b151f674366fbb3d..4ba9eb8ea34baee7e5e100a0d3c33f23f75cf708:/src/dolphincolumnview.cpp diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index 11ecf8aa7..7e2b522b4 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -21,7 +21,7 @@ #include "dolphinmodel.h" #include "dolphincolumnviewcontainer.h" -#include "dolphincontroller.h" +#include "dolphinviewcontroller.h" #include "dolphindirlister.h" #include "dolphinsortfilterproxymodel.h" #include "settings/dolphinsettings.h" @@ -32,6 +32,7 @@ #include "folderexpander.h" #include "tooltips/tooltipmanager.h" #include "viewextensionsfactory.h" +#include "viewmodecontroller.h" #include "zoomlevelinfo.h" #include @@ -92,11 +93,11 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, } connect(this, SIGNAL(viewportEntered()), - m_container->m_controller, SLOT(emitViewportEntered())); + m_container->m_dolphinViewController, SLOT(emitViewportEntered())); connect(this, SIGNAL(entered(const QModelIndex&)), this, SLOT(slotEntered(const QModelIndex&))); - const DolphinView* dolphinView = m_container->m_controller->dolphinView(); + const DolphinView* dolphinView = m_container->m_dolphinViewController->view(); connect(dolphinView, SIGNAL(showPreviewChanged()), this, SLOT(slotShowPreviewChanged())); @@ -104,7 +105,7 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, m_dirLister->setAutoUpdate(true); m_dirLister->setMainWindow(window()); m_dirLister->setDelayedMimeTypes(true); - const bool showHiddenFiles = m_container->m_controller->dolphinView()->showHiddenFiles(); + const bool showHiddenFiles = m_container->m_dolphinViewController->view()->showHiddenFiles(); m_dirLister->setShowingDotFiles(showHiddenFiles); m_dolphinModel = new DolphinModel(this); @@ -124,18 +125,19 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, connect(KGlobalSettings::self(), SIGNAL(kdisplayFontChanged()), this, SLOT(updateFont())); - DolphinController* controller = m_container->m_controller; - connect(controller, SIGNAL(zoomLevelChanged(int)), + const ViewModeController* viewModeController = m_container->m_viewModeController; + connect(viewModeController, SIGNAL(zoomLevelChanged(int)), this, SLOT(setZoomLevel(int))); - - const QString nameFilter = controller->nameFilter(); + const QString nameFilter = viewModeController->nameFilter(); if (!nameFilter.isEmpty()) { m_proxyModel->setFilterFixedString(nameFilter); } updateDecorationSize(dolphinView->showPreview()); updateBackground(); - m_extensionsFactory = new ViewExtensionsFactory(this, controller); + + DolphinViewController* dolphinViewController = m_container->m_dolphinViewController; + m_extensionsFactory = new ViewExtensionsFactory(this, dolphinViewController, viewModeController); m_dirLister->openUrl(url, KDirLister::NoFlags); } @@ -151,10 +153,6 @@ DolphinColumnView::~DolphinColumnView() void DolphinColumnView::setActive(bool active) { - if (active && (m_container->focusProxy() != this)) { - m_container->setFocusProxy(this); - } - if (m_active != active) { m_active = active; @@ -222,7 +220,7 @@ QStyleOptionViewItem DolphinColumnView::viewOptions() const void DolphinColumnView::startDrag(Qt::DropActions supportedActions) { - DragAndDropHelper::instance().startDrag(this, supportedActions, m_container->m_controller); + DragAndDropHelper::instance().startDrag(this, supportedActions, m_container->m_dolphinViewController); } void DolphinColumnView::dragEnterEvent(QDragEnterEvent* event) @@ -249,8 +247,8 @@ void DolphinColumnView::dragMoveEvent(QDragMoveEvent* event) m_dropRect.setSize(QSize()); // set as invalid if (index.isValid()) { - m_container->m_controller->setItemView(this); - const KFileItem item = m_container->m_controller->itemForIndex(index); + m_container->m_dolphinViewController->setItemView(this); + const KFileItem item = m_container->m_dolphinViewController->itemForIndex(index); if (!item.isNull() && item.isDir()) { m_dropRect = visualRect(index); } @@ -266,9 +264,9 @@ void DolphinColumnView::dragMoveEvent(QDragMoveEvent* event) void DolphinColumnView::dropEvent(QDropEvent* event) { const QModelIndex index = indexAt(event->pos()); - m_container->m_controller->setItemView(this); - const KFileItem item = m_container->m_controller->itemForIndex(index); - m_container->m_controller->indicateDroppedUrls(item, url(), event); + m_container->m_dolphinViewController->setItemView(this); + const KFileItem item = m_container->m_dolphinViewController->itemForIndex(index); + m_container->m_dolphinViewController->indicateDroppedUrls(item, url(), event); QListView::dropEvent(event); } @@ -297,7 +295,7 @@ void DolphinColumnView::mousePressEvent(QMouseEvent* event) requestActivation(); if (!indexAt(event->pos()).isValid()) { if (QApplication::mouseButtons() & Qt::MidButton) { - m_container->m_controller->replaceUrlByClipboard(); + m_container->m_dolphinViewController->replaceUrlByClipboard(); } } else if (event->button() == Qt::LeftButton) { // TODO: see comment in DolphinIconsView::mousePressEvent() @@ -307,11 +305,10 @@ void DolphinColumnView::mousePressEvent(QMouseEvent* event) } void DolphinColumnView::keyPressEvent(QKeyEvent* event) -{ +{ QListView::keyPressEvent(event); - requestActivation(); - DolphinController* controller = m_container->m_controller; + DolphinViewController* controller = m_container->m_dolphinViewController; controller->handleKeyPressEvent(event); switch (event->key()) { case Qt::Key_Right: { @@ -340,7 +337,7 @@ void DolphinColumnView::contextMenuEvent(QContextMenuEvent* event) { requestActivation(); QListView::contextMenuEvent(event); - m_container->m_controller->triggerContextMenuRequest(event->pos()); + m_container->m_dolphinViewController->triggerContextMenuRequest(event->pos()); } void DolphinColumnView::wheelEvent(QWheelEvent* event) @@ -356,7 +353,7 @@ void DolphinColumnView::leaveEvent(QEvent* event) // if the mouse is above an item and moved very fast outside the widget, // no viewportEntered() signal might be emitted although the mouse has been moved // above the viewport - m_container->m_controller->emitViewportEntered(); + m_container->m_dolphinViewController->emitViewportEntered(); } void DolphinColumnView::currentChanged(const QModelIndex& current, const QModelIndex& previous) @@ -370,7 +367,7 @@ void DolphinColumnView::setZoomLevel(int level) const int size = ZoomLevelInfo::iconSizeForZoomLevel(level); ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); - const bool showPreview = m_container->m_controller->dolphinView()->showPreview(); + const bool showPreview = m_container->m_dolphinViewController->view()->showPreview(); if (showPreview) { settings->setPreviewSize(size); } else { @@ -382,13 +379,13 @@ void DolphinColumnView::setZoomLevel(int level) void DolphinColumnView::slotEntered(const QModelIndex& index) { - m_container->m_controller->setItemView(this); - m_container->m_controller->emitItemEntered(index); + m_container->m_dolphinViewController->setItemView(this); + m_container->m_dolphinViewController->emitItemEntered(index); } void DolphinColumnView::requestActivation() { - m_container->m_controller->requestActivation(); + m_container->m_dolphinViewController->requestActivation(); if (!m_active) { m_container->requestActivation(this); selectionModel()->clear(); @@ -407,7 +404,7 @@ void DolphinColumnView::updateFont() void DolphinColumnView::slotShowPreviewChanged() { - const DolphinView* view = m_container->m_controller->dolphinView(); + const DolphinView* view = m_container->m_dolphinViewController->view(); updateDecorationSize(view->showPreview()); } @@ -417,10 +414,10 @@ void DolphinColumnView::activate() if (KGlobalSettings::singleClick()) { connect(this, SIGNAL(clicked(const QModelIndex&)), - m_container->m_controller, SLOT(triggerItem(const QModelIndex&))); + m_container->m_dolphinViewController, SLOT(triggerItem(const QModelIndex&))); } else { connect(this, SIGNAL(doubleClicked(const QModelIndex&)), - m_container->m_controller, SLOT(triggerItem(const QModelIndex&))); + m_container->m_dolphinViewController, SLOT(triggerItem(const QModelIndex&))); } if (selectionModel() && selectionModel()->currentIndex().isValid()) { @@ -435,15 +432,22 @@ void DolphinColumnView::deactivate() clearFocus(); if (KGlobalSettings::singleClick()) { disconnect(this, SIGNAL(clicked(const QModelIndex&)), - m_container->m_controller, SLOT(triggerItem(const QModelIndex&))); + m_container->m_dolphinViewController, SLOT(triggerItem(const QModelIndex&))); } else { disconnect(this, SIGNAL(doubleClicked(const QModelIndex&)), - m_container->m_controller, SLOT(triggerItem(const QModelIndex&))); + m_container->m_dolphinViewController, SLOT(triggerItem(const QModelIndex&))); } + // It is important to disconnect the connection to requestActivation() temporary, otherwise the internal + // clearing of the selection would result in activating the column again. + disconnect(selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + this, SLOT(requestActivation())); const QModelIndex current = selectionModel()->currentIndex(); selectionModel()->clear(); selectionModel()->setCurrentIndex(current, QItemSelectionModel::NoUpdate); + connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + this, SLOT(requestActivation())); + updateBackground(); }