┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2010-03-30 20:19:32 +0000
committerPeter Penz <[email protected]>2010-03-30 20:19:32 +0000
commit47d31139224f9bfded4626803626a58afe3eb748 (patch)
treed07122b133b9865bb982177706376478651d1ea7
parent25ffe18e65543cacd07be2628a60f10316375dd3 (diff)
Split the class DolphinController into the two classes DolphinViewController and ViewModeController.
The ViewModeController offers a defined interface to control view mode implementations like icons view, details view and column view. The DolphinViewController allows those view mode implementations to control the parent DolphinView in a limited way. svn path=/trunk/KDE/kdebase/apps/; revision=1109228
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/dolphincolumnview.cpp56
-rw-r--r--src/dolphincolumnviewcontainer.cpp30
-rw-r--r--src/dolphincolumnviewcontainer.h17
-rw-r--r--src/dolphindetailsview.cpp84
-rw-r--r--src/dolphindetailsview.h17
-rw-r--r--src/dolphiniconsview.cpp67
-rw-r--r--src/dolphiniconsview.h18
-rw-r--r--src/dolphinview.cpp95
-rw-r--r--src/dolphinview.h13
-rw-r--r--src/dolphinviewcontainer.cpp7
-rw-r--r--src/dolphinviewcontroller.cpp (renamed from src/dolphincontroller.cpp)106
-rw-r--r--src/dolphinviewcontroller.h (renamed from src/dolphincontroller.h)257
-rw-r--r--src/draganddrophelper.cpp8
-rw-r--r--src/draganddrophelper.h4
-rw-r--r--src/panels/folders/paneltreeview.cpp3
-rw-r--r--src/viewextensionsfactory.cpp36
-rw-r--r--src/viewextensionsfactory.h7
-rw-r--r--src/viewmodecontroller.cpp88
-rw-r--r--src/viewmodecontroller.h124
20 files changed, 582 insertions, 458 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 582ab2aa9..3ab04f5c3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -16,7 +16,6 @@ endif (Nepomuk_FOUND)
########### next target ###############
set(dolphinprivate_LIB_SRCS
- dolphincontroller.cpp
dolphindetailsview.cpp
dolphiniconsview.cpp
dolphincolumnview.cpp
@@ -30,6 +29,7 @@ set(dolphinprivate_LIB_SRCS
dolphinview.cpp
dolphinviewactionhandler.cpp
dolphinviewautoscroller.cpp
+ dolphinviewcontroller.cpp
dolphinremoteencoding.cpp
dolphindetailsviewexpander.cpp
draganddrophelper.cpp
@@ -49,6 +49,7 @@ set(dolphinprivate_LIB_SRCS
versioncontrol/updateitemstatesthread.cpp
versioncontrol/versioncontrolobserver.cpp
viewextensionsfactory.cpp
+ viewmodecontroller.cpp
viewproperties.cpp
zoomlevelinfo.cpp
)
diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp
index 11ecf8aa7..f5bcd79ee 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 <kcolorscheme.h>
@@ -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)),
+ DolphinViewController* dolphinViewController = m_container->m_dolphinViewController;
+ connect(dolphinViewController, SIGNAL(zoomLevelChanged(int)),
this, SLOT(setZoomLevel(int)));
- const QString nameFilter = controller->nameFilter();
+ const ViewModeController* viewModeController = m_container->m_viewModeController;
+ const QString nameFilter = viewModeController->nameFilter();
if (!nameFilter.isEmpty()) {
m_proxyModel->setFilterFixedString(nameFilter);
}
updateDecorationSize(dolphinView->showPreview());
updateBackground();
- m_extensionsFactory = new ViewExtensionsFactory(this, controller);
+ m_extensionsFactory = new ViewExtensionsFactory(this, dolphinViewController, viewModeController);
m_dirLister->openUrl(url, KDirLister::NoFlags);
}
@@ -222,7 +224,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 +251,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 +268,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 +299,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()
@@ -311,7 +313,7 @@ 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 +342,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 +358,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 +372,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 +384,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 +409,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 +419,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,10 +437,10 @@ 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&)));
}
const QModelIndex current = selectionModel()->currentIndex();
diff --git a/src/dolphincolumnviewcontainer.cpp b/src/dolphincolumnviewcontainer.cpp
index 6f1418436..421f195d5 100644
--- a/src/dolphincolumnviewcontainer.cpp
+++ b/src/dolphincolumnviewcontainer.cpp
@@ -19,13 +19,14 @@
#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>
@@ -33,9 +34,11 @@
#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,7 +71,7 @@ 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);
@@ -181,7 +185,7 @@ void DolphinColumnViewContainer::showColumn(const KUrl& url)
void DolphinColumnViewContainer::mousePressEvent(QMouseEvent* event)
{
- m_controller->requestActivation();
+ m_dolphinViewController->requestActivation();
QScrollArea::mousePressEvent(event);
}
@@ -243,7 +247,7 @@ void DolphinColumnViewContainer::updateColumnsBackground(bool active)
void DolphinColumnViewContainer::updateActiveUrl()
{
const KUrl activeUrl = m_columns[m_index]->url();
- m_controller->setUrl(activeUrl);
+ m_dolphinViewController->requestUrlChange(activeUrl);
}
void DolphinColumnViewContainer::setActiveColumnIndex(int index)
@@ -338,7 +342,7 @@ void DolphinColumnViewContainer::assureVisibleActiveColumn()
void DolphinColumnViewContainer::requestActivation(DolphinColumnView* column)
{
- m_controller->setItemView(column);
+ m_dolphinViewController->setItemView(column);
if (column->isActive()) {
assureVisibleActiveColumn();
} else {
@@ -378,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.
diff --git a/src/dolphincolumnviewcontainer.h b/src/dolphincolumnviewcontainer.h
index c1975ac08..41a1d167a 100644
--- a/src/dolphincolumnviewcontainer.h
+++ b/src/dolphincolumnviewcontainer.h
@@ -29,7 +29,7 @@
#include <QString>
class DolphinColumnView;
-class DolphinController;
+class DolphinViewController;
class QFrame;
class QTimeLine;
class QTimer;
@@ -45,8 +45,18 @@ class DolphinColumnViewContainer : public QScrollArea
Q_OBJECT
public:
+ /**
+ * @param parent Parent widget.
+ * @param dolphinViewController Allows the DolphinColumnView to control the
+ * DolphinView in a limited way.
+ * @param viewModeController Controller that is used by the DolphinView
+ * to control the DolphinColumnView. The DolphinColumnView
+ * only has read access to the controller.
+ * @param model Directory that is shown.
+ */
explicit DolphinColumnViewContainer(QWidget* parent,
- DolphinController* controller);
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController);
virtual ~DolphinColumnViewContainer();
KUrl rootUrl() const;
@@ -127,7 +137,8 @@ private:
void deleteColumn(DolphinColumnView* column);
private:
- DolphinController* m_controller;
+ DolphinViewController* m_dolphinViewController;
+ const ViewModeController* m_viewModeController;
bool m_active;
int m_index;
int m_contentX;
diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp
index 80e90d670..8ea5e93e6 100644
--- a/src/dolphindetailsview.cpp
+++ b/src/dolphindetailsview.cpp
@@ -21,13 +21,14 @@
#include "dolphindetailsview.h"
#include "dolphinmodel.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
#include "dolphinfileitemdelegate.h"
#include "settings/dolphinsettings.h"
#include "dolphinsortfilterproxymodel.h"
#include "dolphinviewautoscroller.h"
#include "draganddrophelper.h"
#include "viewextensionsfactory.h"
+#include "viewmodecontroller.h"
#include "viewproperties.h"
#include "zoomlevelinfo.h"
@@ -46,7 +47,8 @@
#include <QScrollBar>
DolphinDetailsView::DolphinDetailsView(QWidget* parent,
- DolphinController* controller,
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController,
DolphinSortFilterProxyModel* proxyModel) :
QTreeView(parent),
m_autoResize(true),
@@ -54,7 +56,8 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
m_keyPressed(false),
m_useDefaultIndexAt(true),
m_ignoreScrollTo(false),
- m_controller(controller),
+ m_dolphinViewController(dolphinViewController),
+ m_viewModeController(viewModeController),
m_extensionsFactory(0),
m_expandableFoldersAction(0),
m_expandedUrls(),
@@ -64,7 +67,8 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
{
const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
Q_ASSERT(settings != 0);
- Q_ASSERT(controller != 0);
+ Q_ASSERT(dolphinViewController != 0);
+ Q_ASSERT(viewModeController != 0);
setLayoutDirection(Qt::LeftToRight);
setAcceptDrops(true);
@@ -81,7 +85,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
setMouseTracking(true);
- const ViewProperties props(controller->url());
+ const ViewProperties props(viewModeController->url());
setSortIndicatorSection(props.sorting());
setSortIndicatorOrder(props.sortOrder());
@@ -102,24 +106,24 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
this, SLOT(setSortIndicatorOrder(Qt::SortOrder)));
connect(this, SIGNAL(clicked(const QModelIndex&)),
- controller, SLOT(requestTab(const QModelIndex&)));
+ dolphinViewController, SLOT(requestTab(const QModelIndex&)));
if (KGlobalSettings::singleClick()) {
connect(this, SIGNAL(clicked(const QModelIndex&)),
- controller, SLOT(triggerItem(const QModelIndex&)));
+ dolphinViewController, SLOT(triggerItem(const QModelIndex&)));
} else {
connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
- controller, SLOT(triggerItem(const QModelIndex&)));
+ dolphinViewController, SLOT(triggerItem(const QModelIndex&)));
}
connect(this, SIGNAL(entered(const QModelIndex&)),
this, SLOT(slotEntered(const QModelIndex&)));
connect(this, SIGNAL(viewportEntered()),
- controller, SLOT(emitViewportEntered()));
- connect(controller, SIGNAL(zoomLevelChanged(int)),
+ dolphinViewController, SLOT(emitViewportEntered()));
+ connect(viewModeController, SIGNAL(zoomLevelChanged(int)),
this, SLOT(setZoomLevel(int)));
- connect(controller->dolphinView(), SIGNAL(additionalInfoChanged()),
+ connect(dolphinViewController->view(), SIGNAL(additionalInfoChanged()),
this, SLOT(updateColumnVisibility()));
- connect(controller, SIGNAL(activationChanged(bool)),
+ connect(viewModeController, SIGNAL(activationChanged(bool)),
this, SLOT(slotActivationChanged(bool)));
if (settings->useSystemFont()) {
@@ -135,7 +139,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
setVerticalScrollMode(QTreeView::ScrollPerPixel);
setHorizontalScrollMode(QTreeView::ScrollPerPixel);
- const DolphinView* view = controller->dolphinView();
+ const DolphinView* view = dolphinViewController->view();
connect(view, SIGNAL(showPreviewChanged()),
this, SLOT(slotShowPreviewChanged()));
@@ -158,7 +162,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent,
updateDecorationSize(view->showPreview());
- m_extensionsFactory = new ViewExtensionsFactory(this, controller);
+ m_extensionsFactory = new ViewExtensionsFactory(this, dolphinViewController, viewModeController);
m_extensionsFactory->fileItemDelegate()->setMinimizedNameColumn(true);
m_extensionsFactory->setAutoFolderExpandingEnabled(settings->expandableFolders());
}
@@ -225,13 +229,13 @@ void DolphinDetailsView::contextMenuEvent(QContextMenuEvent* event)
DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
m_expandableFoldersAction->setChecked(settings->expandableFolders());
- m_controller->triggerContextMenuRequest(event->pos(),
+ m_dolphinViewController->triggerContextMenuRequest(event->pos(),
QList<QAction*>() << m_expandableFoldersAction);
}
void DolphinDetailsView::mousePressEvent(QMouseEvent* event)
{
- m_controller->requestActivation();
+ m_dolphinViewController->requestActivation();
const QModelIndex current = currentIndex();
QTreeView::mousePressEvent(event);
@@ -249,7 +253,7 @@ void DolphinDetailsView::mousePressEvent(QMouseEvent* event)
if (!index.isValid() || (index.column() != DolphinModel::Name)) {
// the mouse press is done somewhere outside the filename column
if (QApplication::mouseButtons() & Qt::MidButton) {
- m_controller->replaceUrlByClipboard();
+ m_dolphinViewController->replaceUrlByClipboard();
}
const Qt::KeyboardModifiers mod = QApplication::keyboardModifiers();
@@ -336,7 +340,7 @@ void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event)
void DolphinDetailsView::startDrag(Qt::DropActions supportedActions)
{
- DragAndDropHelper::instance().startDrag(this, supportedActions, m_controller);
+ DragAndDropHelper::instance().startDrag(this, supportedActions, m_dolphinViewController);
m_band.show = false;
}
@@ -366,7 +370,7 @@ void DolphinDetailsView::dragMoveEvent(QDragMoveEvent* event)
setDirtyRegion(m_dropRect);
const QModelIndex index = indexAt(event->pos());
if (index.isValid() && (index.column() == DolphinModel::Name)) {
- const KFileItem item = m_controller->itemForIndex(index);
+ const KFileItem item = m_dolphinViewController->itemForIndex(index);
if (!item.isNull() && item.isDir()) {
m_dropRect = visualRect(index);
} else {
@@ -386,9 +390,9 @@ void DolphinDetailsView::dropEvent(QDropEvent* event)
const QModelIndex index = indexAt(event->pos());
KFileItem item;
if (index.isValid() && (index.column() == DolphinModel::Name)) {
- item = m_controller->itemForIndex(index);
+ item = m_dolphinViewController->itemForIndex(index);
}
- m_controller->indicateDroppedUrls(item, m_controller->url(), event);
+ m_dolphinViewController->indicateDroppedUrls(item, m_viewModeController->url(), event);
QTreeView::dropEvent(event);
}
@@ -420,7 +424,7 @@ void DolphinDetailsView::keyPressEvent(QKeyEvent* event)
m_keyPressed = !(event->modifiers() & Qt::ControlModifier);
QTreeView::keyPressEvent(event);
- m_controller->handleKeyPressEvent(event);
+ m_dolphinViewController->handleKeyPressEvent(event);
}
void DolphinDetailsView::keyReleaseEvent(QKeyEvent* event)
@@ -466,7 +470,7 @@ bool DolphinDetailsView::eventFilter(QObject* watched, 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_controller->emitViewportEntered();
+ m_dolphinViewController->emitViewportEntered();
}
return QTreeView::eventFilter(watched, event);
@@ -484,7 +488,7 @@ QModelIndex DolphinDetailsView::indexAt(const QPoint& point) const
QRect DolphinDetailsView::visualRect(const QModelIndex& index) const
{
QRect rect = QTreeView::visualRect(index);
- const KFileItem item = m_controller->itemForIndex(index);
+ const KFileItem item = m_dolphinViewController->itemForIndex(index);
if (!item.isNull()) {
const int width = DolphinFileItemDelegate::nameColumnWidth(item.text(), viewOptions());
rect.setWidth(width);
@@ -530,16 +534,16 @@ void DolphinDetailsView::synchronizeSortingState(int column)
// invoked, but Dolphin is not informed about this.
DolphinView::Sorting sorting = DolphinSortFilterProxyModel::sortingForColumn(column);
const Qt::SortOrder sortOrder = header()->sortIndicatorOrder();
- m_controller->indicateSortingChange(sorting);
- m_controller->indicateSortOrderChange(sortOrder);
+ m_dolphinViewController->indicateSortingChange(sorting);
+ m_dolphinViewController->indicateSortOrderChange(sortOrder);
}
void DolphinDetailsView::slotEntered(const QModelIndex& index)
{
if (index.column() == DolphinModel::Name) {
- m_controller->emitItemEntered(index);
+ m_dolphinViewController->emitItemEntered(index);
} else {
- m_controller->emitViewportEntered();
+ m_dolphinViewController->emitViewportEntered();
}
}
@@ -576,7 +580,7 @@ void DolphinDetailsView::setZoomLevel(int level)
const int size = ZoomLevelInfo::iconSizeForZoomLevel(level);
DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
- const bool showPreview = m_controller->dolphinView()->showPreview();
+ const bool showPreview = m_dolphinViewController->view()->showPreview();
if (showPreview) {
settings->setPreviewSize(size);
} else {
@@ -588,7 +592,7 @@ void DolphinDetailsView::setZoomLevel(int level)
void DolphinDetailsView::slotShowPreviewChanged()
{
- const DolphinView* view = m_controller->dolphinView();
+ const DolphinView* view = m_dolphinViewController->view();
updateDecorationSize(view->showPreview());
}
@@ -616,7 +620,7 @@ void DolphinDetailsView::configureSettings(const QPoint& pos)
const bool show = activatedAction->isChecked();
const int columnIndex = activatedAction->data().toInt();
- KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
+ KFileItemDelegate::InformationList list = m_dolphinViewController->view()->additionalInfo();
const KFileItemDelegate::Information info = infoForColumn(columnIndex);
if (show) {
Q_ASSERT(!list.contains(info));
@@ -627,7 +631,7 @@ void DolphinDetailsView::configureSettings(const QPoint& pos)
list.removeAt(index);
}
- m_controller->indicateAdditionalInfoChange(list);
+ m_dolphinViewController->indicateAdditionalInfoChange(list);
setColumnHidden(columnIndex, !show);
resizeColumns();
}
@@ -642,7 +646,7 @@ void DolphinDetailsView::updateColumnVisibility()
const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
const QList<int> columnPositions = settings->columnPositions();
- const KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
+ const KFileItemDelegate::InformationList list = m_dolphinViewController->view()->additionalInfo();
for (int i = DolphinModel::Name; i <= DolphinModel::Version; ++i) {
const KFileItemDelegate::Information info = infoForColumn(i);
const bool hide = !list.contains(info) && (i != DolphinModel::Name);
@@ -701,7 +705,7 @@ void DolphinDetailsView::disableAutoResizing()
void DolphinDetailsView::requestActivation()
{
- m_controller->requestActivation();
+ m_dolphinViewController->requestActivation();
}
void DolphinDetailsView::slotGlobalSettingsChanged(int category)
@@ -714,12 +718,12 @@ void DolphinDetailsView::slotGlobalSettingsChanged(int category)
m_font = KGlobalSettings::generalFont();
}
//Disconnect then reconnect, since the settings have been changed, the connection requirements may have also.
- disconnect(this, SIGNAL(clicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
- disconnect(this, SIGNAL(doubleClicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
+ disconnect(this, SIGNAL(clicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
+ disconnect(this, SIGNAL(doubleClicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
if (KGlobalSettings::singleClick()) {
- connect(this, SIGNAL(clicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
+ connect(this, SIGNAL(clicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
} else {
- connect(this, SIGNAL(doubleClicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
+ connect(this, SIGNAL(doubleClicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
}
}
@@ -928,7 +932,7 @@ void DolphinDetailsView::setFoldersExpandable(bool expandable)
void DolphinDetailsView::slotExpanded(const QModelIndex& index)
{
- KFileItem item = m_controller->itemForIndex(index);
+ KFileItem item = m_dolphinViewController->itemForIndex(index);
if (!item.isNull()) {
m_expandedUrls.insert(item.url());
}
@@ -936,7 +940,7 @@ void DolphinDetailsView::slotExpanded(const QModelIndex& index)
void DolphinDetailsView::slotCollapsed(const QModelIndex& index)
{
- KFileItem item = m_controller->itemForIndex(index);
+ KFileItem item = m_dolphinViewController->itemForIndex(index);
if (!item.isNull()) {
m_expandedUrls.remove(item.url());
}
diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h
index 47af2f55d..1dff8fe59 100644
--- a/src/dolphindetailsview.h
+++ b/src/dolphindetailsview.h
@@ -25,7 +25,7 @@
#include <QTreeView>
#include <libdolphin_export.h>
-class DolphinController;
+class DolphinViewController;
class DolphinSortFilterProxyModel;
class ViewExtensionsFactory;
@@ -42,8 +42,18 @@ class LIBDOLPHINPRIVATE_EXPORT DolphinDetailsView : public QTreeView
Q_OBJECT
public:
+ /**
+ * @param parent Parent widget.
+ * @param dolphinViewController Allows the DolphinDetailsView to control the
+ * DolphinView in a limited way.
+ * @param viewModeController Controller that is used by the DolphinView
+ * to control the DolphinDetailsView. The DolphinDetailsView
+ * only has read access to the controller.
+ * @param model Directory that is shown.
+ */
explicit DolphinDetailsView(QWidget* parent,
- DolphinController* controller,
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController,
DolphinSortFilterProxyModel* model);
virtual ~DolphinDetailsView();
@@ -226,7 +236,8 @@ private:
bool m_useDefaultIndexAt : 1; // true, if QTreeView::indexAt() should be used
bool m_ignoreScrollTo : 1; // true if calls to scrollTo(...) should do nothing.
- DolphinController* m_controller;
+ DolphinViewController* m_dolphinViewController;
+ const ViewModeController* m_viewModeController;
ViewExtensionsFactory* m_extensionsFactory;
QAction* m_expandableFoldersAction;
diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp
index 46c27cd28..636bdd66c 100644
--- a/src/dolphiniconsview.cpp
+++ b/src/dolphiniconsview.cpp
@@ -20,7 +20,7 @@
#include "dolphiniconsview.h"
#include "dolphincategorydrawer.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
#include "settings/dolphinsettings.h"
#include "dolphinsortfilterproxymodel.h"
#include "dolphin_iconsmodesettings.h"
@@ -28,6 +28,7 @@
#include "draganddrophelper.h"
#include "selectionmanager.h"
#include "viewextensionsfactory.h"
+#include "viewmodecontroller.h"
#include "zoomlevelinfo.h"
#include <kcategorizedsortfilterproxymodel.h>
@@ -39,10 +40,12 @@
#include <QScrollBar>
DolphinIconsView::DolphinIconsView(QWidget* parent,
- DolphinController* controller,
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController,
DolphinSortFilterProxyModel* proxyModel) :
KCategorizedView(parent),
- m_controller(controller),
+ m_dolphinViewController(dolphinViewController),
+ m_viewModeController(viewModeController),
m_categoryDrawer(new DolphinCategoryDrawer(this)),
m_extensionsFactory(0),
m_font(),
@@ -52,7 +55,9 @@ DolphinIconsView::DolphinIconsView(QWidget* parent,
m_itemSize(),
m_dropRect()
{
- Q_ASSERT(controller != 0);
+ Q_ASSERT(dolphinViewController != 0);
+ Q_ASSERT(viewModeController != 0);
+
setModel(proxyModel);
setLayoutDirection(Qt::LeftToRight);
setViewMode(QListView::IconMode);
@@ -65,23 +70,23 @@ DolphinIconsView::DolphinIconsView(QWidget* parent,
setMouseTracking(true);
connect(this, SIGNAL(clicked(const QModelIndex&)),
- controller, SLOT(requestTab(const QModelIndex&)));
+ dolphinViewController, SLOT(requestTab(const QModelIndex&)));
if (KGlobalSettings::singleClick()) {
connect(this, SIGNAL(clicked(const QModelIndex&)),
- controller, SLOT(triggerItem(const QModelIndex&)));
+ dolphinViewController, SLOT(triggerItem(const QModelIndex&)));
} else {
connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
- controller, SLOT(triggerItem(const QModelIndex&)));
+ dolphinViewController, SLOT(triggerItem(const QModelIndex&)));
}
connect(this, SIGNAL(entered(const QModelIndex&)),
- controller, SLOT(emitItemEntered(const QModelIndex&)));
+ dolphinViewController, SLOT(emitItemEntered(const QModelIndex&)));
connect(this, SIGNAL(viewportEntered()),
- controller, SLOT(emitViewportEntered()));
- connect(controller, SIGNAL(zoomLevelChanged(int)),
+ dolphinViewController, SLOT(emitViewportEntered()));
+ connect(viewModeController, SIGNAL(zoomLevelChanged(int)),
this, SLOT(setZoomLevel(int)));
- const DolphinView* view = controller->dolphinView();
+ const DolphinView* view = dolphinViewController->view();
connect(view, SIGNAL(showPreviewChanged()),
this, SLOT(slotShowPreviewChanged()));
connect(view, SIGNAL(additionalInfoChanged()),
@@ -122,7 +127,7 @@ DolphinIconsView::DolphinIconsView(QWidget* parent,
this, SLOT(slotGlobalSettingsChanged(int)));
updateGridSize(view->showPreview(), 0);
- m_extensionsFactory = new ViewExtensionsFactory(this, controller);
+ m_extensionsFactory = new ViewExtensionsFactory(this, dolphinViewController, viewModeController);
}
DolphinIconsView::~DolphinIconsView()
@@ -156,12 +161,12 @@ QStyleOptionViewItem DolphinIconsView::viewOptions() const
void DolphinIconsView::contextMenuEvent(QContextMenuEvent* event)
{
KCategorizedView::contextMenuEvent(event);
- m_controller->triggerContextMenuRequest(event->pos());
+ m_dolphinViewController->triggerContextMenuRequest(event->pos());
}
void DolphinIconsView::mousePressEvent(QMouseEvent* event)
{
- m_controller->requestActivation();
+ m_dolphinViewController->requestActivation();
const QModelIndex index = indexAt(event->pos());
if (index.isValid() && (event->button() == Qt::LeftButton)) {
// TODO: It should not be necessary to manually set the dragging state, but I could
@@ -173,7 +178,7 @@ void DolphinIconsView::mousePressEvent(QMouseEvent* event)
}
if (!index.isValid() && (QApplication::mouseButtons() & Qt::MidButton)) {
- m_controller->replaceUrlByClipboard();
+ m_dolphinViewController->replaceUrlByClipboard();
}
KCategorizedView::mousePressEvent(event);
@@ -181,7 +186,7 @@ void DolphinIconsView::mousePressEvent(QMouseEvent* event)
void DolphinIconsView::startDrag(Qt::DropActions supportedActions)
{
- DragAndDropHelper::instance().startDrag(this, supportedActions, m_controller);
+ DragAndDropHelper::instance().startDrag(this, supportedActions, m_dolphinViewController);
}
void DolphinIconsView::dragEnterEvent(QDragEnterEvent* event)
@@ -207,7 +212,7 @@ void DolphinIconsView::dragMoveEvent(QDragMoveEvent* event)
m_dropRect.setSize(QSize()); // set as invalid
if (index.isValid()) {
- const KFileItem item = m_controller->itemForIndex(index);
+ const KFileItem item = m_dolphinViewController->itemForIndex(index);
if (!item.isNull() && item.isDir()) {
m_dropRect = visualRect(index);
} else {
@@ -225,8 +230,8 @@ void DolphinIconsView::dragMoveEvent(QDragMoveEvent* event)
void DolphinIconsView::dropEvent(QDropEvent* event)
{
const QModelIndex index = indexAt(event->pos());
- const KFileItem item = m_controller->itemForIndex(index);
- m_controller->indicateDroppedUrls(item, m_controller->url(), event);
+ const KFileItem item = m_dolphinViewController->itemForIndex(index);
+ m_dolphinViewController->indicateDroppedUrls(item, m_viewModeController->url(), event);
// don't call KCategorizedView::dropEvent(event), as it moves
// the items which is not wanted
}
@@ -307,7 +312,7 @@ QModelIndex DolphinIconsView::moveCursor(CursorAction cursorAction, Qt::Keyboard
void DolphinIconsView::keyPressEvent(QKeyEvent* event)
{
KCategorizedView::keyPressEvent(event);
- m_controller->handleKeyPressEvent(event);
+ m_dolphinViewController->handleKeyPressEvent(event);
}
void DolphinIconsView::wheelEvent(QWheelEvent* event)
@@ -345,7 +350,7 @@ void DolphinIconsView::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_controller->emitViewportEntered();
+ m_dolphinViewController->emitViewportEntered();
}
void DolphinIconsView::currentChanged(const QModelIndex& current, const QModelIndex& previous)
@@ -357,19 +362,19 @@ void DolphinIconsView::currentChanged(const QModelIndex& current, const QModelIn
void DolphinIconsView::resizeEvent(QResizeEvent* event)
{
KCategorizedView::resizeEvent(event);
- const DolphinView* view = m_controller->dolphinView();
+ const DolphinView* view = m_dolphinViewController->view();
updateGridSize(view->showPreview(), view->additionalInfo().count());
}
void DolphinIconsView::slotShowPreviewChanged()
{
- const DolphinView* view = m_controller->dolphinView();
+ const DolphinView* view = m_dolphinViewController->view();
updateGridSize(view->showPreview(), additionalInfoCount());
}
void DolphinIconsView::slotAdditionalInfoChanged()
{
- const DolphinView* view = m_controller->dolphinView();
+ const DolphinView* view = m_dolphinViewController->view();
const bool showPreview = view->showPreview();
updateGridSize(showPreview, view->additionalInfo().count());
}
@@ -381,7 +386,7 @@ void DolphinIconsView::setZoomLevel(int level)
const int oldIconSize = settings->iconSize();
int newIconSize = oldIconSize;
- const bool showPreview = m_controller->dolphinView()->showPreview();
+ const bool showPreview = m_dolphinViewController->view()->showPreview();
if (showPreview) {
const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(level);
settings->setPreviewSize(previewSize);
@@ -400,7 +405,7 @@ void DolphinIconsView::setZoomLevel(int level)
void DolphinIconsView::requestActivation()
{
- m_controller->requestActivation();
+ m_dolphinViewController->requestActivation();
}
void DolphinIconsView::slotGlobalSettingsChanged(int category)
@@ -413,12 +418,12 @@ void DolphinIconsView::slotGlobalSettingsChanged(int category)
m_font = KGlobalSettings::generalFont();
}
- disconnect(this, SIGNAL(clicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
- disconnect(this, SIGNAL(doubleClicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
+ disconnect(this, SIGNAL(clicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
+ disconnect(this, SIGNAL(doubleClicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
if (KGlobalSettings::singleClick()) {
- connect(this, SIGNAL(clicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
+ connect(this, SIGNAL(clicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
} else {
- connect(this, SIGNAL(doubleClicked(QModelIndex)), m_controller, SLOT(triggerItem(QModelIndex)));
+ connect(this, SIGNAL(doubleClicked(QModelIndex)), m_dolphinViewController, SLOT(triggerItem(QModelIndex)));
}
}
@@ -520,7 +525,7 @@ void DolphinIconsView::updateGridSize(bool showPreview, int additionalInfoCount)
int DolphinIconsView::additionalInfoCount() const
{
- const DolphinView* view = m_controller->dolphinView();
+ const DolphinView* view = m_dolphinViewController->view();
return view->additionalInfo().count();
}
diff --git a/src/dolphiniconsview.h b/src/dolphiniconsview.h
index d49c5d75f..21e37ba02 100644
--- a/src/dolphiniconsview.h
+++ b/src/dolphiniconsview.h
@@ -31,10 +31,11 @@
#include <libdolphin_export.h>
-class DolphinController;
+class DolphinViewController;
class DolphinCategoryDrawer;
class DolphinSortFilterProxyModel;
class ViewExtensionsFactory;
+class ViewModeController;
/**
* @brief Represents the view, where each item is shown as an icon.
@@ -47,8 +48,18 @@ class LIBDOLPHINPRIVATE_EXPORT DolphinIconsView : public KCategorizedView
Q_OBJECT
public:
+ /**
+ * @param parent Parent widget.
+ * @param dolphinViewController Allows the DolphinIconsView to control the
+ * DolphinView in a limited way.
+ * @param viewModeController Controller that is used by the DolphinView
+ * to control the DolphinIconsView. The DolphinIconsView
+ * only has read access to the controller.
+ * @param model Directory that is shown.
+ */
explicit DolphinIconsView(QWidget* parent,
- DolphinController* controller,
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController,
DolphinSortFilterProxyModel* proxyModel);
virtual ~DolphinIconsView();
@@ -94,7 +105,8 @@ private:
int additionalInfoCount() const;
private:
- DolphinController* m_controller;
+ DolphinViewController* m_dolphinViewController;
+ const ViewModeController* m_viewModeController;
DolphinCategoryDrawer* m_categoryDrawer;
ViewExtensionsFactory* m_extensionsFactory;
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp
index c5f6c91d3..79191c52c 100644
--- a/src/dolphinview.cpp
+++ b/src/dolphinview.cpp
@@ -51,7 +51,7 @@
#include "dolphinmodel.h"
#include "dolphincolumnviewcontainer.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
#include "dolphindetailsview.h"
#include "dolphinfileitemdelegate.h"
#include "dolphinnewmenuobserver.h"
@@ -62,6 +62,7 @@
#include "draganddrophelper.h"
#include "renamedialog.h"
#include "settings/dolphinsettings.h"
+#include "viewmodecontroller.h"
#include "viewproperties.h"
#include "zoomlevelinfo.h"
#include "dolphindetailsviewexpander.h"
@@ -88,7 +89,8 @@ DolphinView::DolphinView(QWidget* parent,
m_assureVisibleCurrentIndex(false),
m_mode(DolphinView::IconsView),
m_topLayout(0),
- m_controller(0),
+ m_dolphinViewController(0),
+ m_viewModeController(0),
m_viewAccessor(proxyModel),
m_selectionModel(0),
m_selectionChangedTimer(0),
@@ -103,34 +105,38 @@ DolphinView::DolphinView(QWidget* parent,
m_topLayout->setSpacing(0);
m_topLayout->setMargin(0);
- m_controller = new DolphinController(this);
- m_controller->setUrl(url);
+ m_dolphinViewController = new DolphinViewController(this);
- connect(m_controller, SIGNAL(urlChanged(const KUrl&)),
+ m_viewModeController = new ViewModeController(this);
+ m_viewModeController->setUrl(url);
+
+ connect(m_viewModeController, SIGNAL(urlChanged(const KUrl&)),
this, SIGNAL(urlChanged(const KUrl&)));
- connect(m_controller, SIGNAL(requestContextMenu(const QPoint&, const QList<QAction*>&)),
+ connect(m_dolphinViewController, SIGNAL(requestContextMenu(const QPoint&, const QList<QAction*>&)),
this, SLOT(openContextMenu(const QPoint&, const QList<QAction*>&)));
- connect(m_controller, SIGNAL(urlsDropped(const KFileItem&, const KUrl&, QDropEvent*)),
+ connect(m_dolphinViewController, SIGNAL(urlsDropped(const KFileItem&, const KUrl&, QDropEvent*)),
this, SLOT(dropUrls(const KFileItem&, const KUrl&, QDropEvent*)));
- connect(m_controller, SIGNAL(sortingChanged(DolphinView::Sorting)),
+ connect(m_dolphinViewController, SIGNAL(sortingChanged(DolphinView::Sorting)),
this, SLOT(updateSorting(DolphinView::Sorting)));
- connect(m_controller, SIGNAL(sortOrderChanged(Qt::SortOrder)),
+ connect(m_dolphinViewController, SIGNAL(sortOrderChanged(Qt::SortOrder)),
this, SLOT(updateSortOrder(Qt::SortOrder)));
- connect(m_controller, SIGNAL(sortFoldersFirstChanged(bool)),
+ connect(m_dolphinViewController, SIGNAL(sortFoldersFirstChanged(bool)),
this, SLOT(updateSortFoldersFirst(bool)));
- connect(m_controller, SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)),
+ connect(m_dolphinViewController, SIGNAL(additionalInfoChanged(const KFileItemDelegate::InformationList&)),
this, SLOT(updateAdditionalInfo(const KFileItemDelegate::InformationList&)));
- connect(m_controller, SIGNAL(itemTriggered(const KFileItem&)),
+ connect(m_dolphinViewController, SIGNAL(itemTriggered(const KFileItem&)),
this, SLOT(triggerItem(const KFileItem&)));
- connect(m_controller, SIGNAL(tabRequested(const KUrl&)),
+ connect(m_dolphinViewController, SIGNAL(tabRequested(const KUrl&)),
this, SIGNAL(tabRequested(const KUrl&)));
- connect(m_controller, SIGNAL(activated()),
+ connect(m_dolphinViewController, SIGNAL(activated()),
this, SLOT(activate()));
- connect(m_controller, SIGNAL(itemEntered(const KFileItem&)),
+ connect(m_dolphinViewController, SIGNAL(itemEntered(const KFileItem&)),
this, SLOT(showHoverInformation(const KFileItem&)));
- connect(m_controller, SIGNAL(viewportEntered()),
+ connect(m_dolphinViewController, SIGNAL(viewportEntered()),
this, SLOT(clearHoverInformation()));
+ connect(m_dolphinViewController, SIGNAL(urlChangeRequested(KUrl)),
+ m_viewModeController, SLOT(setUrl(KUrl)));
KDirLister* dirLister = m_viewAccessor.dirLister();
connect(dirLister, SIGNAL(redirection(KUrl,KUrl)),
@@ -160,9 +166,9 @@ DolphinView::~DolphinView()
{
}
-const KUrl& DolphinView::url() const
+KUrl DolphinView::url() const
{
- return m_controller->url();
+ return m_viewModeController->url();
}
KUrl DolphinView::rootUrl() const
@@ -202,7 +208,7 @@ void DolphinView::setActive(bool active)
emit activated();
}
- m_controller->indicateActivationChange(active);
+ m_viewModeController->indicateActivationChange(active);
}
bool DolphinView::isActive() const
@@ -216,7 +222,7 @@ void DolphinView::setMode(Mode mode)
return; // the wished mode is already set
}
- const int oldZoomLevel = m_controller->zoomLevel();
+ const int oldZoomLevel = m_viewModeController->zoomLevel();
m_mode = mode;
// remember the currently selected items, so that they will
@@ -353,14 +359,14 @@ void DolphinView::setZoomLevel(int level)
}
if (level != zoomLevel()) {
- m_controller->setZoomLevel(level);
+ m_viewModeController->setZoomLevel(level);
emit zoomLevelChanged(level);
}
}
int DolphinView::zoomLevel() const
{
- return m_controller->zoomLevel();
+ return m_viewModeController->zoomLevel();
}
void DolphinView::setSorting(Sorting sorting)
@@ -437,7 +443,7 @@ void DolphinView::refresh()
m_ignoreViewProperties = false;
const bool oldActivationState = m_active;
- const int oldZoomLevel = m_controller->zoomLevel();
+ const int oldZoomLevel = m_viewModeController->zoomLevel();
m_active = true;
createView();
@@ -450,7 +456,7 @@ void DolphinView::refresh()
void DolphinView::setNameFilter(const QString& nameFilter)
{
- m_controller->setNameFilter(nameFilter);
+ m_viewModeController->setNameFilter(nameFilter);
}
void DolphinView::calculateItemCount(int& fileCount,
@@ -528,15 +534,15 @@ QString DolphinView::statusBarText() const
QList<QAction*> DolphinView::versionControlActions(const KFileItemList& items) const
{
- return m_controller->versionControlActions(items);
+ return m_dolphinViewController->versionControlActions(items);
}
void DolphinView::setUrl(const KUrl& url)
{
- if (m_controller->url() != url) {
+ if (m_viewModeController->url() != url) {
m_newFileNames.clear();
- m_controller->setUrl(url); // emits urlChanged, which we forward
+ m_viewModeController->setUrl(url); // emits urlChanged, which we forward
m_viewAccessor.prepareUrlChange(url);
applyViewProperties();
loadDirectory(url);
@@ -726,7 +732,7 @@ void DolphinView::setShowPreview(bool show)
props.setShowPreview(show);
m_showPreview = show;
- const int oldZoomLevel = m_controller->zoomLevel();
+ const int oldZoomLevel = m_viewModeController->zoomLevel();
emit showPreviewChanged();
// Enabling or disabling the preview might change the icon size of the view.
@@ -814,7 +820,7 @@ bool DolphinView::eventFilter(QObject* watched, QEvent* event)
switch (event->type()) {
case QEvent::FocusIn:
if (watched == m_viewAccessor.itemView()) {
- m_controller->requestActivation();
+ m_dolphinViewController->requestActivation();
}
break;
@@ -1223,7 +1229,7 @@ void DolphinView::applyViewProperties()
const Mode mode = props.viewMode();
if (m_mode != mode) {
- const int oldZoomLevel = m_controller->zoomLevel();
+ const int oldZoomLevel = m_viewModeController->zoomLevel();
m_mode = mode;
createView();
@@ -1277,7 +1283,7 @@ void DolphinView::applyViewProperties()
const bool showPreview = props.showPreview();
if (showPreview != m_showPreview) {
m_showPreview = showPreview;
- const int oldZoomLevel = m_controller->zoomLevel();
+ const int oldZoomLevel = m_viewModeController->zoomLevel();
emit showPreviewChanged();
// Enabling or disabling the preview might change the icon size of the view.
@@ -1299,14 +1305,14 @@ void DolphinView::createView()
deleteView();
Q_ASSERT(m_viewAccessor.itemView() == 0);
- m_viewAccessor.createView(this, m_controller, m_mode);
+ m_viewAccessor.createView(this, m_dolphinViewController, m_viewModeController, m_mode);
QAbstractItemView* view = m_viewAccessor.itemView();
Q_ASSERT(view != 0);
view->installEventFilter(this);
view->viewport()->installEventFilter(this);
- m_controller->setItemView(view);
+ m_dolphinViewController->setItemView(view);
// When changing the view mode, the selection is lost due to reinstantiating
// a new item view with a custom selection model. Pass the ownership of the
@@ -1340,7 +1346,7 @@ void DolphinView::deleteView()
// disconnect all signal/slots
disconnect(view);
- m_controller->disconnect(view);
+ m_viewModeController->disconnect(view);
view->disconnect();
m_viewAccessor.deleteView();
@@ -1357,7 +1363,7 @@ void DolphinView::updateZoomLevel(int oldZoomLevel)
{
const int newZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(m_viewAccessor.itemView()->iconSize());
if (oldZoomLevel != newZoomLevel) {
- m_controller->setZoomLevel(newZoomLevel);
+ m_viewModeController->setZoomLevel(newZoomLevel);
emit zoomLevelChanged(newZoomLevel);
}
}
@@ -1403,22 +1409,31 @@ DolphinView::ViewAccessor::~ViewAccessor()
}
void DolphinView::ViewAccessor::createView(QWidget* parent,
- DolphinController* controller,
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController,
Mode mode)
{
Q_ASSERT(itemView() == 0);
switch (mode) {
case IconsView:
- m_iconsView = new DolphinIconsView(parent, controller, m_proxyModel);
+ m_iconsView = new DolphinIconsView(parent,
+ dolphinViewController,
+ viewModeController,
+ m_proxyModel);
break;
case DetailsView:
- m_detailsView = new DolphinDetailsView(parent, controller, m_proxyModel);
+ m_detailsView = new DolphinDetailsView(parent,
+ dolphinViewController,
+ viewModeController,
+ m_proxyModel);
break;
case ColumnView:
- m_columnsContainer = new DolphinColumnViewContainer(parent, controller);
+ m_columnsContainer = new DolphinColumnViewContainer(parent,
+ dolphinViewController,
+ viewModeController);
break;
default:
@@ -1563,7 +1578,7 @@ KDirLister* DolphinView::ViewAccessor::dirLister() const
void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl)
{
emit redirection(oldUrl, newUrl);
- m_controller->redirectToUrl(newUrl); // #186947
+ m_viewModeController->redirectToUrl(newUrl); // #186947
}
void DolphinView::restoreContentsPosition()
diff --git a/src/dolphinview.h b/src/dolphinview.h
index cab9fa560..07c6e32c4 100644
--- a/src/dolphinview.h
+++ b/src/dolphinview.h
@@ -41,17 +41,18 @@
typedef KIO::FileUndoManager::CommandType CommandType;
-class DolphinController;
class DolphinColumnViewContainer;
class DolphinDetailsView;
class DolphinIconsView;
class DolphinModel;
class DolphinSortFilterProxyModel;
+class DolphinViewController;
class KFilePreviewGenerator;
class KAction;
class KActionCollection;
class KDirLister;
class KUrl;
+class ViewModeController;
class ViewProperties;
class DolphinDetailsViewExpander;
@@ -132,7 +133,7 @@ public:
* Returns the current active URL, where all actions are applied.
* The URL navigator is synchronized with this URL.
*/
- const KUrl& url() const;
+ KUrl url() const;
/**
* Returns the root URL of the view, which is defined as the first
@@ -727,7 +728,10 @@ private:
ViewAccessor(DolphinSortFilterProxyModel* proxyModel);
~ViewAccessor();
- void createView(QWidget* parent, DolphinController* controller, Mode mode);
+ void createView(QWidget* parent,
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController,
+ Mode mode);
void deleteView();
/**
@@ -786,7 +790,8 @@ private:
QVBoxLayout* m_topLayout;
- DolphinController* m_controller;
+ DolphinViewController* m_dolphinViewController;
+ ViewModeController* m_viewModeController;
ViewAccessor m_viewAccessor;
QItemSelectionModel* m_selectionModel; // allow to switch views without losing the selection
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp
index 184dd2bee..b9134d91c 100644
--- a/src/dolphinviewcontainer.cpp
+++ b/src/dolphinviewcontainer.cpp
@@ -48,9 +48,10 @@
#include <kurlnavigator.h>
#include <krun.h>
+#include "dolphin_generalsettings.h"
#include "dolphinmodel.h"
#include "dolphincolumnview.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
#include "dolphinmainwindow.h"
#include "dolphindirlister.h"
#include "dolphinsortfilterproxymodel.h"
@@ -58,10 +59,10 @@
#include "dolphiniconsview.h"
#include "draganddrophelper.h"
#include "filterbar.h"
+#include "settings/dolphinsettings.h"
#include "statusbar/dolphinstatusbar.h"
+#include "viewmodecontroller.h"
#include "viewproperties.h"
-#include "settings/dolphinsettings.h"
-#include "dolphin_generalsettings.h"
DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) :
QWidget(parent),
diff --git a/src/dolphincontroller.cpp b/src/dolphinviewcontroller.cpp
index b61c126b5..4ce83f968 100644
--- a/src/dolphincontroller.cpp
+++ b/src/dolphinviewcontroller.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006 by Peter Penz ([email protected]) *
+ * Copyright (C) 2010 by Peter Penz <[email protected]> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
@@ -14,10 +14,10 @@
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
#include "zoomlevelinfo.h"
#include <kdirmodel.h>
@@ -26,38 +26,31 @@
#include <QClipboard>
#include <QDir>
-Qt::MouseButtons DolphinController::m_mouseButtons = Qt::NoButton;
+Qt::MouseButtons DolphinViewController::m_mouseButtons = Qt::NoButton;
-DolphinController::DolphinController(DolphinView* dolphinView) :
+DolphinViewController::DolphinViewController(DolphinView* dolphinView) :
QObject(dolphinView),
- m_zoomLevel(0),
- m_nameFilter(),
- m_url(),
m_dolphinView(dolphinView),
m_itemView(0),
m_versionControlActions()
{
}
-DolphinController::~DolphinController()
+DolphinViewController::~DolphinViewController()
{
}
-void DolphinController::setUrl(const KUrl& url)
+const DolphinView* DolphinViewController::view() const
{
- if (m_url != url) {
- m_url = url;
- emit cancelPreviews();
- emit urlChanged(url);
- }
+ return m_dolphinView;
}
-void DolphinController::redirectToUrl(const KUrl& url)
+void DolphinViewController::requestUrlChange(const KUrl& url)
{
- m_url = url;
+ emit urlChangeRequested(url);
}
-void DolphinController::setItemView(QAbstractItemView* view)
+void DolphinViewController::setItemView(QAbstractItemView* view)
{
if (m_itemView != 0) {
disconnect(m_itemView, SIGNAL(pressed(const QModelIndex&)),
@@ -67,27 +60,30 @@ void DolphinController::setItemView(QAbstractItemView* view)
m_itemView = view;
if (m_itemView != 0) {
- m_zoomLevel = ZoomLevelInfo::zoomLevelForIconSize(m_itemView->iconSize());
-
// TODO: this is a workaround until Qt-issue 176832 has been fixed
connect(m_itemView, SIGNAL(pressed(const QModelIndex&)),
this, SLOT(updateMouseButtonState()));
}
}
-void DolphinController::triggerContextMenuRequest(const QPoint& pos,
+QAbstractItemView* DolphinViewController::itemView() const
+{
+ return m_itemView;
+}
+
+void DolphinViewController::triggerContextMenuRequest(const QPoint& pos,
const QList<QAction*>& customActions)
{
emit activated();
emit requestContextMenu(pos, customActions);
}
-void DolphinController::requestActivation()
+void DolphinViewController::requestActivation()
{
emit activated();
}
-void DolphinController::indicateDroppedUrls(const KFileItem& destItem,
+void DolphinViewController::indicateDroppedUrls(const KFileItem& destItem,
const KUrl& destPath,
QDropEvent* event)
{
@@ -95,69 +91,41 @@ void DolphinController::indicateDroppedUrls(const KFileItem& destItem,
}
-void DolphinController::indicateSortingChange(DolphinView::Sorting sorting)
+void DolphinViewController::indicateSortingChange(DolphinView::Sorting sorting)
{
emit sortingChanged(sorting);
}
-void DolphinController::indicateSortOrderChange(Qt::SortOrder order)
+void DolphinViewController::indicateSortOrderChange(Qt::SortOrder order)
{
emit sortOrderChanged(order);
}
-void DolphinController::indicateSortFoldersFirstChange(bool foldersFirst)
+void DolphinViewController::indicateSortFoldersFirstChange(bool foldersFirst)
{
emit sortFoldersFirstChanged(foldersFirst);
}
-void DolphinController::indicateAdditionalInfoChange(const KFileItemDelegate::InformationList& info)
+void DolphinViewController::indicateAdditionalInfoChange(const KFileItemDelegate::InformationList& info)
{
emit additionalInfoChanged(info);
}
-void DolphinController::indicateActivationChange(bool active)
-{
- emit activationChanged(active);
-}
-
-void DolphinController::setNameFilter(const QString& nameFilter)
-{
- if (nameFilter != m_nameFilter) {
- m_nameFilter = nameFilter;
- emit nameFilterChanged(nameFilter);
- }
-}
-
-QString DolphinController::nameFilter() const
-{
- return m_nameFilter;
-}
-
-void DolphinController::setZoomLevel(int level)
-{
- Q_ASSERT(level >= ZoomLevelInfo::minimumLevel());
- Q_ASSERT(level <= ZoomLevelInfo::maximumLevel());
- if (level != m_zoomLevel) {
- m_zoomLevel = level;
- emit zoomLevelChanged(m_zoomLevel);
- }
-}
-
-void DolphinController::setVersionControlActions(QList<QAction*> actions)
+void DolphinViewController::setVersionControlActions(QList<QAction*> actions)
{
m_versionControlActions = actions;
}
-QList<QAction*> DolphinController::versionControlActions(const KFileItemList& items)
+QList<QAction*> DolphinViewController::versionControlActions(const KFileItemList& items)
{
emit requestVersionControlActions(items);
// All view implementations are connected with the signal requestVersionControlActions()
- // (see ViewExtensionFactory) and will invoke DolphinController::setVersionControlActions(),
+ // (see ViewExtensionFactory) and will invoke DolphinViewController::setVersionControlActions(),
// so that the context dependent actions can be returned.
return m_versionControlActions;
}
-void DolphinController::handleKeyPressEvent(QKeyEvent* event)
+void DolphinViewController::handleKeyPressEvent(QKeyEvent* event)
{
Q_ASSERT(m_itemView != 0);
@@ -194,7 +162,7 @@ void DolphinController::handleKeyPressEvent(QKeyEvent* event)
}
}
-void DolphinController::replaceUrlByClipboard()
+void DolphinViewController::replaceUrlByClipboard()
{
const QClipboard* clipboard = QApplication::clipboard();
QString text;
@@ -208,17 +176,17 @@ void DolphinController::replaceUrlByClipboard()
}
}
-void DolphinController::emitHideToolTip()
+void DolphinViewController::requestToolTipHiding()
{
emit hideToolTip();
}
-void DolphinController::emitItemTriggered(const KFileItem& item)
+void DolphinViewController::emitItemTriggered(const KFileItem& item)
{
emit itemTriggered(item);
}
-KFileItem DolphinController::itemForIndex(const QModelIndex& index) const
+KFileItem DolphinViewController::itemForIndex(const QModelIndex& index) const
{
Q_ASSERT(m_itemView != 0);
@@ -228,7 +196,7 @@ KFileItem DolphinController::itemForIndex(const QModelIndex& index) const
return dirModel->itemForIndex(dirIndex);
}
-void DolphinController::triggerItem(const QModelIndex& index)
+void DolphinViewController::triggerItem(const QModelIndex& index)
{
if (m_mouseButtons & Qt::LeftButton) {
const KFileItem item = itemForIndex(index);
@@ -241,7 +209,7 @@ void DolphinController::triggerItem(const QModelIndex& index)
}
}
-void DolphinController::requestTab(const QModelIndex& index)
+void DolphinViewController::requestTab(const QModelIndex& index)
{
if (m_mouseButtons & Qt::MidButton) {
const KFileItem item = itemForIndex(index);
@@ -254,7 +222,7 @@ void DolphinController::requestTab(const QModelIndex& index)
}
}
-void DolphinController::emitItemEntered(const QModelIndex& index)
+void DolphinViewController::emitItemEntered(const QModelIndex& index)
{
KFileItem item = itemForIndex(index);
if (!item.isNull()) {
@@ -262,14 +230,14 @@ void DolphinController::emitItemEntered(const QModelIndex& index)
}
}
-void DolphinController::emitViewportEntered()
+void DolphinViewController::emitViewportEntered()
{
emit viewportEntered();
}
-void DolphinController::updateMouseButtonState()
+void DolphinViewController::updateMouseButtonState()
{
m_mouseButtons = QApplication::mouseButtons();
}
-#include "dolphincontroller.moc"
+#include "dolphinviewcontroller.moc"
diff --git a/src/dolphincontroller.h b/src/dolphinviewcontroller.h
index 397215bfb..848110770 100644
--- a/src/dolphincontroller.h
+++ b/src/dolphinviewcontroller.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006 by Peter Penz ([email protected]) *
+ * Copyright (C) 2010 by Peter Penz <[email protected]> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
@@ -14,11 +14,11 @@
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-#ifndef DOLPHINCONTROLLER_H
-#define DOLPHINCONTROLLER_H
+#ifndef DOLPHINVIEWCONTROLLER_H
+#define DOLPHINVIEWCONTROLLER_H
#include <dolphinview.h>
#include <kurl.h>
@@ -31,86 +31,44 @@ class KUrl;
class QPoint;
/**
- * @brief Acts as mediator between the abstract Dolphin view and the view
- * implementations.
+ * @brief Allows the view mode implementations (DolphinIconsView, DolphinDetailsView, DolphinColumnView)
+ * to do a limited control of the DolphinView.
*
- * The abstract Dolphin view (see DolphinView) represents the parent of the controller.
- * The lifetime of the controller is equal to the lifetime of the Dolphin view.
- * The controller is passed to the current view implementation
- * (see DolphinIconsView, DolphinDetailsView and DolphinColumnView)
- * by passing it in the constructor and informing the controller about the change
- * of the view implementation:
- *
- * \code
- * QAbstractItemView* view = new DolphinIconsView(parent, controller);
- * controller->setItemView(view);
- * \endcode
- *
- * The communication of the view implementations to the abstract view is done by:
- * - triggerContextMenuRequest()
- * - requestActivation()
- * - indicateDroppedUrls()
- * - indicateSortingChange()
- * - indicateSortOrderChanged()
- * - indicateSortFoldersFirstChanged()
- * - triggerItem()
- * - requestTab()
- * - handleKeyPressEvent()
- * - emitItemEntered()
- * - emitViewportEntered()
- * - replaceUrlByClipboard()
- * - hideToolTip()
- * - setVersionControlActions()
- *
- * The communication of the abstract view to the view implementations is done by:
- * - setUrl()
- * - indicateActivationChange()
- * - setNameFilter()
- * - setZoomLevel()
- * - versionControlActions()
+ * The DolphinView connects to the signals of DolphinViewController to react on changes
+ * that have been triggered by the view mode implementations. The view mode implementations
+ * have read access to the whole DolphinView by DolphinViewController::view(). Limited control of the
+ * DolphinView by the view mode implementations are defined by the public DolphinController methods.
*/
-class LIBDOLPHINPRIVATE_EXPORT DolphinController : public QObject
+class LIBDOLPHINPRIVATE_EXPORT DolphinViewController : public QObject
{
Q_OBJECT
public:
- explicit DolphinController(DolphinView* dolphinView);
- virtual ~DolphinController();
-
- /**
- * Allows read access for the view implementation to the abstract
- * Dolphin view.
- */
- const DolphinView* dolphinView() const;
+ explicit DolphinViewController(DolphinView* dolphinView);
+ virtual ~DolphinViewController();
/**
- * Sets the URL to \a url and emits the signal urlChanged() if
- * \a url is different for the current URL. This method should
- * be invoked by the abstract Dolphin view whenever the current
- * URL has been changed.
+ * Allows read access for the view mode implementation
+ * to the DolphinView.
*/
- void setUrl(const KUrl& url);
- const KUrl& url() const;
+ const DolphinView* view() const;
/**
- * Sets the URL to \a url and does nothing else. Called when
- * a redirection happens.
+ * Requests the DolphinView to change the URL to \p url. The signal
+ * urlChangeRequested will be emitted.
*/
- void redirectToUrl(const KUrl& url);
+ void requestUrlChange(const KUrl& url);
/**
- * Changes the current item view where the controller is working. This
- * is only necessary for views like the tree view, where internally
+ * Changes the current view mode implementation where the controller is working.
+ * This is only necessary for views like the tree view, where internally
* several QAbstractItemView instances are used.
*/
void setItemView(QAbstractItemView* view);
-
QAbstractItemView* itemView() const;
/**
- * Requests a context menu for the position \a pos. This method
- * should be invoked by the view implementation when a context
- * menu should be opened. The abstract Dolphin view itself
+ * Requests a context menu for the position \a pos. DolphinView
* takes care itself to get the selected items depending from
* \a pos. It is possible to define a custom list of actions for
* the context menu by \a customActions.
@@ -119,17 +77,14 @@ public:
const QList<QAction*>& customActions = QList<QAction*>());
/**
- * Requests an activation of the view and emits the signal
- * activated(). This method should be invoked by the view implementation
+ * Requests an activation of the DolphinView and emits the signal
+ * activated(). This method should be invoked by the view mode implementation
* if e. g. a mouse click on the view has been done.
- * After the activation has been changed, the view implementation
- * might listen to the activationChanged() signal.
*/
void requestActivation();
/**
- * Indicates that URLs are dropped above a destination. This method
- * should be invoked by the view implementation. The abstract Dolphin view
+ * Indicates that URLs are dropped above a destination. The DolphinView
* will start the corresponding action (copy, move, link).
* @param destItem Item of the destination (can be null, see KFileItem::isNull()).
* @param destPath Path of the destination.
@@ -140,110 +95,75 @@ public:
QDropEvent* event);
/**
- * Informs the abstract Dolphin view about a sorting change done inside
- * the view implementation. This method should be invoked by the view
- * implementation (e. g. the details view uses this method in combination
- * with the details header).
+ * Informs the DolphinView about a sorting change done inside
+ * the view mode implementation.
*/
void indicateSortingChange(DolphinView::Sorting sorting);
/**
- * Informs the abstract Dolphin view about a sort order change done inside
- * the view implementation. This method should be invoked by the view
- * implementation (e. g. the details view uses this method in combination
- * with the details header).
+ * Informs the DolphinView about a sort order change done inside
+ * the view mode implementation.
*/
void indicateSortOrderChange(Qt::SortOrder order);
/**
- * Informs the abstract Dolphin view about a change between separate sorting
+ * Informs the DolphinView about a change between separate sorting
* (with folders first) and mixed sorting of files and folders done inside
- * the view implementation. This method should be invoked by the view
- * implementation (e. g. the details view uses this method in combination
- * with the details header).
+ * the view mode implementation.
*/
void indicateSortFoldersFirstChange(bool foldersFirst);
/**
- * Informs the abstract Dolphin view about an additional information change
- * done inside the view implementation. This method should be invoked by the
- * view implementation (e. g. the details view uses this method in combination
- * with the details header).
+ * Informs the DolphinView about an additional information change
+ * done inside the view mode implementation.
*/
void indicateAdditionalInfoChange(const KFileItemDelegate::InformationList& info);
/**
- * Informs the view implementation about a change of the activation
- * state and is invoked by the abstract Dolphin view. The signal
- * activationChanged() is emitted.
- */
- void indicateActivationChange(bool active);
-
- /**
- * Sets the zoom level to \a level and emits the signal zoomLevelChanged().
- * It must be assured that the used level is inside the range
- * DolphinController::zoomLevelMinimum() and
- * DolphinController::zoomLevelMaximum().
- * Is invoked by the abstract Dolphin view.
- */
- void setZoomLevel(int level);
- int zoomLevel() const;
-
- /**
* Sets the available version control actions. Is called by the view
- * implementation as soon as the controller has send the signal
+ * mode implementation as soon as the DolphinView has requested them by the signal
* requestVersionControlActions().
*/
void setVersionControlActions(QList<QAction*> actions);
/**
- * Returns the version control actions that are provided for the items \p items.
- * Is called by the abstract Dolphin view to show the version control actions
- * inside the context menu.
+ * Emits the signal requestVersionControlActions(). The view mode implementation
+ * listens to the signal and will invoke a DolphinViewController::setVersionControlActions()
+ * and the result will be returned.
*/
QList<QAction*> versionControlActions(const KFileItemList& items);
/**
- * Sets the name filter to \a and emits the signal nameFilterChanged().
- */
- void setNameFilter(const QString& nameFilter);
- QString nameFilter() const;
-
- /**
- * Tells the view implementation to zoom out by emitting the signal zoomOut()
- * and is invoked by the abstract Dolphin view.
- */
- void triggerZoomOut();
-
- /**
- * Should be invoked in each view implementation whenever a key has been
+ * Must be be invoked in each view mode implementation whenever a key has been
* pressed. If the selection model of \a view is not empty and
* the return key has been pressed, the selected items will get triggered.
*/
void handleKeyPressEvent(QKeyEvent* event);
/**
- * Replaces the URL of the abstract Dolphin view with the content
+ * Replaces the URL of the DolphinView with the content
* of the clipboard as URL. If the clipboard contains no text,
* nothing will be done.
*/
void replaceUrlByClipboard();
- /** Emits the signal hideToolTip(). */
- void emitHideToolTip();
+ /**
+ * Requests the view mode implementation to hide tooltips.
+ */
+ void requestToolTipHiding();
/**
* Emits the signal itemTriggered() for the item \a item.
- * The method can be used by the view implementations to
+ * The method can be used by the view mode implementations to
* trigger an item directly without mouse interaction.
* If the item triggering is done by the mouse, it is recommended
- * to use QAbstractItemView::triggerItem(), as this will check
+ * to use DolphinViewController::triggerItem(), as this will check
* the used mouse buttons to execute the correct action.
*/
void emitItemTriggered(const KFileItem& item);
/**
- * Returns the file item for the proxy index \a index of the view \a view.
+ * Returns the file item for the proxy index \a index of the DolphinView.
*/
KFileItem itemForIndex(const QModelIndex& index) const;
@@ -252,7 +172,7 @@ public slots:
* Emits the signal itemTriggered() if the file item for the index \a index
* is not null and the left mouse button has been pressed. If the item is
* null, the signal itemEntered() is emitted.
- * The method should be invoked by the view implementations whenever the
+ * The method should be invoked by the view mode implementations whenever the
* user has triggered an item with the mouse (see
* QAbstractItemView::clicked() or QAbstractItemView::doubleClicked()).
*/
@@ -261,33 +181,27 @@ public slots:
/**
* Emits the signal tabRequested(), if the file item for the index \a index
* represents a directory and when the middle mouse button has been pressed.
- * The method should be invoked by the view implementation.
*/
void requestTab(const QModelIndex& index);
/**
* Emits the signal itemEntered() if the file item for the index \a index
- * is not null. The method should be invoked by the view implementation
+ * is not null. The method should be invoked by the view mode implementation
* whenever the mouse cursor is above an item.
*/
void emitItemEntered(const QModelIndex& index);
/**
* Emits the signal viewportEntered(). The method should be invoked by
- * the view implementation whenever the mouse cursor is above the viewport.
+ * the view mode implementation whenever the mouse cursor is above the viewport.
*/
void emitViewportEntered();
signals:
- /**
- * Is emitted if the URL for the Dolphin controller has been changed
- * to \a url.
- */
- void urlChanged(const KUrl& url);
+ void urlChangeRequested(const KUrl& url);
/**
* Is emitted if a context menu should be opened (see triggerContextMenuRequest()).
- * The abstract Dolphin view connects to this signal and will open the context menu.
* @param pos Position relative to the view widget where the
* context menu should be opened. It is recommended
* to get the corresponding model index from
@@ -299,8 +213,6 @@ signals:
/**
* Is emitted if the view has been activated by e. g. a mouse click.
- * The abstract Dolphin view connects to this signal to know the
- * destination view for the menu actions.
*/
void activated();
@@ -316,44 +228,36 @@ signals:
/**
* Is emitted if the sorting has been changed to \a sorting by
- * the view implementation (see indicateSortingChanged().
- * The abstract Dolphin view connects to
+ * the view mode implementation (see indicateSortingChanged().
+ * The DolphinView connects to
* this signal to update its menu action.
*/
void sortingChanged(DolphinView::Sorting sorting);
/**
* Is emitted if the sort order has been changed to \a order
- * by the view implementation (see indicateSortOrderChanged().
- * The abstract Dolphin view connects
+ * by the view mode implementation (see indicateSortOrderChanged().
+ * The DolphinView connects
* to this signal to update its menu actions.
*/
void sortOrderChanged(Qt::SortOrder order);
/**
* Is emitted if 'sort folders first' has been changed to \a foldersFirst
- * by the view implementation (see indicateSortOrderChanged().
- * The abstract Dolphin view connects
+ * by the view mode implementation (see indicateSortOrderChanged().
+ * The DolphinView connects
* to this signal to update its menu actions.
*/
void sortFoldersFirstChanged(bool foldersFirst);
/**
* Is emitted if the additional info has been changed to \a info
- * by the view implementation. The abstract Dolphin view connects
+ * by the view mode implementation. The DolphinView connects
* to this signal to update its menu actions.
*/
void additionalInfoChanged(const KFileItemDelegate::InformationList& info);
/**
- * Is emitted if the activation state has been changed to \a active
- * by the abstract Dolphin view.
- * The view implementation might connect to this signal if custom
- * updates are required in this case.
- */
- void activationChanged(bool active);
-
- /**
* Is emitted if the item \a item should be triggered. The abstract
* Dolphin view connects to this signal. If the item represents a directory,
* the directory is opened. On a file the corresponding application is opened.
@@ -364,7 +268,6 @@ signals:
/**
* Is emitted if the mouse cursor has entered the item
* given by \a index (see emitItemEntered()).
- * The abstract Dolphin view connects to this signal.
*/
void itemEntered(const KFileItem& item);
@@ -376,24 +279,12 @@ signals:
/**
* Is emitted if the mouse cursor has entered
* the viewport (see emitViewportEntered()).
- * The abstract Dolphin view connects to this signal.
*/
void viewportEntered();
/**
- * Is emitted if the view should respect the name filter \a nameFilter. The view
- * implementation must connect to this signal if it supports name filters.
- */
- void nameFilterChanged(const QString& nameFilter);
-
- /**
- * Is emitted if the view should change the zoom to \a level. The view implementation
- * must connect to this signal if it supports zooming.
- */
- void zoomLevelChanged(int level);
-
- /**
- * Is emitted if the abstract view should hide an open tooltip.
+ * Is emitted, if DolphinViewController::requestToolTipHiding() is invoked
+ * and requests to hide all tooltips.
*/
void hideToolTip();
@@ -403,9 +294,9 @@ signals:
void cancelPreviews();
/**
- * Requests the view implementation to invoke DolphinController::setVersionControlActions(),
- * so that they can be returned with DolphinController::versionControlActions() for
- * the abstract Dolphin view.
+ * Requests the view mode implementation to invoke DolphinViewController::setVersionControlActions(),
+ * so that they can be returned with DolphinViewController::versionControlActions() for
+ * the DolphinView.
*/
void requestVersionControlActions(const KFileItemList& items);
@@ -413,33 +304,11 @@ private slots:
void updateMouseButtonState();
private:
- int m_zoomLevel;
- QString m_nameFilter;
static Qt::MouseButtons m_mouseButtons; // TODO: this is a workaround until Qt-issue 176832 has been fixed
- KUrl m_url;
+
DolphinView* m_dolphinView;
QAbstractItemView* m_itemView;
QList<QAction*> m_versionControlActions;
};
-inline const DolphinView* DolphinController::dolphinView() const
-{
- return m_dolphinView;
-}
-
-inline const KUrl& DolphinController::url() const
-{
- return m_url;
-}
-
-inline QAbstractItemView* DolphinController::itemView() const
-{
- return m_itemView;
-}
-
-inline int DolphinController::zoomLevel() const
-{
- return m_zoomLevel;
-}
-
#endif
diff --git a/src/draganddrophelper.cpp b/src/draganddrophelper.cpp
index 637117a2b..a85e3cb6a 100644
--- a/src/draganddrophelper.cpp
+++ b/src/draganddrophelper.cpp
@@ -20,7 +20,7 @@
#include "draganddrophelper.h"
#include "dolphiniconsview.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
#include <kdirmodel.h>
#include <kfileitem.h>
@@ -53,7 +53,7 @@ bool DragAndDropHelper::isMimeDataSupported(const QMimeData* mimeData) const
void DragAndDropHelper::startDrag(QAbstractItemView* itemView,
Qt::DropActions supportedActions,
- DolphinController* controller)
+ DolphinViewController* dolphinViewController)
{
// Do not start a new drag until the previous one has been finished.
// This is a (possibly temporary) fix for bug #187884.
@@ -70,8 +70,8 @@ void DragAndDropHelper::startDrag(QAbstractItemView* itemView,
return;
}
- if (controller != 0) {
- controller->emitHideToolTip();
+ if (dolphinViewController != 0) {
+ dolphinViewController->requestToolTipHiding();
}
QDrag* drag = new QDrag(itemView);
diff --git a/src/draganddrophelper.h b/src/draganddrophelper.h
index d8823d68d..f107350a7 100644
--- a/src/draganddrophelper.h
+++ b/src/draganddrophelper.h
@@ -24,7 +24,7 @@
#include "libdolphin_export.h"
#include <QObject>
-class DolphinController;
+class DolphinViewController;
class KFileItem;
class KUrl;
class QDropEvent;
@@ -57,7 +57,7 @@ public:
*/
void startDrag(QAbstractItemView* itemView,
Qt::DropActions supportedActions,
- DolphinController* controller = 0);
+ DolphinViewController* dolphinViewController = 0);
/**
* Returns true if and only if the view \a itemView was the last view to
diff --git a/src/panels/folders/paneltreeview.cpp b/src/panels/folders/paneltreeview.cpp
index a162d54e3..6eefb6e6e 100644
--- a/src/panels/folders/paneltreeview.cpp
+++ b/src/panels/folders/paneltreeview.cpp
@@ -19,9 +19,10 @@
#include "paneltreeview.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
#include "dolphinmodel.h"
#include "draganddrophelper.h"
+#include "viewmodecontroller.h"
#include <kfileitemdelegate.h>
#include <QKeyEvent>
diff --git a/src/viewextensionsfactory.cpp b/src/viewextensionsfactory.cpp
index 6bcc3a7c8..7e8eb9401 100644
--- a/src/viewextensionsfactory.cpp
+++ b/src/viewextensionsfactory.cpp
@@ -19,16 +19,17 @@
#include "viewextensionsfactory.h"
-#include "dolphincontroller.h"
#include "dolphinfileitemdelegate.h"
#include "dolphinsortfilterproxymodel.h"
#include "dolphinview.h"
+#include "dolphinviewcontroller.h"
#include "dolphinviewautoscroller.h"
#include "folderexpander.h"
#include "selectionmanager.h"
#include "settings/dolphinsettings.h"
#include "tooltips/tooltipmanager.h"
#include "versioncontrol/versioncontrolobserver.h"
+#include "viewmodecontroller.h"
#include "dolphin_generalsettings.h"
@@ -38,10 +39,11 @@
#include <QAbstractItemView>
ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
- DolphinController* controller) :
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController) :
QObject(view),
m_view(view),
- m_controller(controller),
+ m_dolphinViewController(dolphinViewController),
m_toolTipManager(0),
m_previewGenerator(0),
m_selectionManager(0),
@@ -58,19 +60,19 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
DolphinSortFilterProxyModel* proxyModel = static_cast<DolphinSortFilterProxyModel*>(view->model());
m_toolTipManager = new ToolTipManager(view, proxyModel);
- connect(controller, SIGNAL(hideToolTip()),
+ connect(viewModeController, SIGNAL(hideToolTip()),
m_toolTipManager, SLOT(hideTip()));
}
// initialize preview generator
Q_ASSERT(view->iconSize().isValid());
m_previewGenerator = new KFilePreviewGenerator(view);
- m_previewGenerator->setPreviewShown(controller->dolphinView()->showPreview());
- connect(controller, SIGNAL(zoomLevelChanged(int)),
+ m_previewGenerator->setPreviewShown(dolphinViewController->view()->showPreview());
+ connect(viewModeController, SIGNAL(zoomLevelChanged(int)),
this, SLOT(slotZoomLevelChanged()));
- connect(controller, SIGNAL(cancelPreviews()),
+ connect(viewModeController, SIGNAL(cancelPreviews()),
this, SLOT(cancelPreviews()));
- connect(controller->dolphinView(), SIGNAL(showPreviewChanged()),
+ connect(dolphinViewController->view(), SIGNAL(showPreviewChanged()),
this, SLOT(slotShowPreviewChanged()));
// initialize selection manager
@@ -78,7 +80,7 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
m_selectionManager = new SelectionManager(view);
connect(m_selectionManager, SIGNAL(selectionChanged()),
this, SLOT(requestActivation()));
- connect(controller, SIGNAL(urlChanged(const KUrl&)),
+ connect(viewModeController, SIGNAL(urlChanged(const KUrl&)),
m_selectionManager, SLOT(reset()));
}
@@ -91,7 +93,7 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
view->setItemDelegate(m_fileItemDelegate);
// initialize version control observer
- const DolphinView* dolphinView = controller->dolphinView();
+ const DolphinView* dolphinView = dolphinViewController->view();
m_versionControlObserver = new VersionControlObserver(view);
connect(m_versionControlObserver, SIGNAL(infoMessage(const QString&)),
dolphinView, SIGNAL(infoMessage(const QString&)));
@@ -99,7 +101,7 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
dolphinView, SIGNAL(errorMessage(const QString&)));
connect(m_versionControlObserver, SIGNAL(operationCompletedMessage(const QString&)),
dolphinView, SIGNAL(operationCompletedMessage(const QString&)));
- connect(controller, SIGNAL(requestVersionControlActions(const KFileItemList&)),
+ connect(dolphinViewController, SIGNAL(requestVersionControlActions(const KFileItemList&)),
this, SLOT(slotRequestVersionControlActions(const KFileItemList&)));
// react on view property changes
@@ -118,10 +120,10 @@ ViewExtensionsFactory::ViewExtensionsFactory(QAbstractItemView* view,
m_folderExpander = new FolderExpander(view, proxyModel());
m_folderExpander->setEnabled(settings->autoExpandFolders());
connect(m_folderExpander, SIGNAL(enterDir(const QModelIndex&)),
- controller, SLOT(triggerItem(const QModelIndex&)));
+ dolphinViewController, SLOT(triggerItem(const QModelIndex&)));
// react on namefilter changes
- connect(controller, SIGNAL(nameFilterChanged(const QString&)),
+ connect(viewModeController, SIGNAL(nameFilterChanged(const QString&)),
this, SLOT(slotNameFilterChanged(const QString&)));
view->viewport()->installEventFilter(this);
@@ -175,7 +177,7 @@ void ViewExtensionsFactory::cancelPreviews()
void ViewExtensionsFactory::slotShowPreviewChanged()
{
- const bool show = m_controller->dolphinView()->showPreview();
+ const bool show = m_dolphinViewController->view()->showPreview();
m_previewGenerator->setPreviewShown(show);
}
@@ -186,7 +188,7 @@ void ViewExtensionsFactory::slotShowHiddenFilesChanged()
dirLister->stop();
- const bool show = m_controller->dolphinView()->showHiddenFiles();
+ const bool show = m_dolphinViewController->view()->showHiddenFiles();
dirLister->setShowingDotFiles(show);
const KUrl url = dirLister->url();
@@ -225,12 +227,12 @@ void ViewExtensionsFactory::slotRequestVersionControlActions(const KFileItemList
} else {
actions = m_versionControlObserver->contextMenuActions(items);
}
- m_controller->setVersionControlActions(actions);
+ m_dolphinViewController->setVersionControlActions(actions);
}
void ViewExtensionsFactory::requestActivation()
{
- m_controller->requestActivation();
+ m_dolphinViewController->requestActivation();
}
DolphinSortFilterProxyModel* ViewExtensionsFactory::proxyModel() const
diff --git a/src/viewextensionsfactory.h b/src/viewextensionsfactory.h
index 9187c10e3..9324932ac 100644
--- a/src/viewextensionsfactory.h
+++ b/src/viewextensionsfactory.h
@@ -24,7 +24,6 @@
#include "dolphinview.h"
-class DolphinController;
class DolphinFileItemDelegate;
class DolphinSortFilterProxyModel;
class DolphinViewAutoScroller;
@@ -35,6 +34,7 @@ class SelectionManager;
class ToolTipManager;
class QAbstractItemView;
class VersionControlObserver;
+class ViewModeController;
/**
* @brief Responsible for creating extensions like tooltips and previews
@@ -51,7 +51,8 @@ class ViewExtensionsFactory : public QObject
public:
explicit ViewExtensionsFactory(QAbstractItemView* view,
- DolphinController* controller);
+ DolphinViewController* dolphinViewController,
+ const ViewModeController* viewModeController);
virtual ~ViewExtensionsFactory();
/**
@@ -90,7 +91,7 @@ private:
private:
QAbstractItemView* m_view;
- DolphinController* m_controller;
+ DolphinViewController* m_dolphinViewController;
ToolTipManager* m_toolTipManager;
KFilePreviewGenerator* m_previewGenerator;
SelectionManager* m_selectionManager;
diff --git a/src/viewmodecontroller.cpp b/src/viewmodecontroller.cpp
new file mode 100644
index 000000000..17d0ba61f
--- /dev/null
+++ b/src/viewmodecontroller.cpp
@@ -0,0 +1,88 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Peter Penz <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "viewmodecontroller.h"
+
+#include "zoomlevelinfo.h"
+
+ViewModeController::ViewModeController(QObject* parent) :
+ QObject(parent),
+ m_zoomLevel(0),
+ m_nameFilter(),
+ m_url()
+{
+}
+
+ViewModeController::~ViewModeController()
+{
+}
+
+KUrl ViewModeController::url() const
+{
+ return m_url;
+}
+
+void ViewModeController::redirectToUrl(const KUrl& url)
+{
+ m_url = url;
+}
+
+void ViewModeController::indicateActivationChange(bool active)
+{
+ emit activationChanged(active);
+}
+
+void ViewModeController::setNameFilter(const QString& nameFilter)
+{
+ if (nameFilter != m_nameFilter) {
+ m_nameFilter = nameFilter;
+ emit nameFilterChanged(nameFilter);
+ }
+}
+
+QString ViewModeController::nameFilter() const
+{
+ return m_nameFilter;
+}
+
+void ViewModeController::setZoomLevel(int level)
+{
+ Q_ASSERT(level >= ZoomLevelInfo::minimumLevel());
+ Q_ASSERT(level <= ZoomLevelInfo::maximumLevel());
+ if (level != m_zoomLevel) {
+ m_zoomLevel = level;
+ emit zoomLevelChanged(m_zoomLevel);
+ }
+}
+
+int ViewModeController::zoomLevel() const
+{
+ return m_zoomLevel;
+}
+
+void ViewModeController::setUrl(const KUrl& url)
+{
+ if (m_url != url) {
+ m_url = url;
+ emit cancelPreviews();
+ emit urlChanged(url);
+ }
+}
+
+#include "viewmodecontroller.moc"
diff --git a/src/viewmodecontroller.h b/src/viewmodecontroller.h
new file mode 100644
index 000000000..27b8381cf
--- /dev/null
+++ b/src/viewmodecontroller.h
@@ -0,0 +1,124 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Peter Penz <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#ifndef VIEWMODECONTROLLER_H
+#define VIEWMODECONTROLLER_H
+
+#include <dolphinview.h>
+#include <kurl.h>
+#include <QObject>
+#include <libdolphin_export.h>
+
+/**
+ * @brief Allows the DolphinView to control the view implementations for the
+ * different view modes.
+ *
+ * The view implementations (DolphinIconsView, DolphinDetailsView, DolphinColumnView)
+ * connect to signals of the ViewModeController to react on changes. The view
+ * implementations get only read-access to the ViewModeController.
+ */
+class LIBDOLPHINPRIVATE_EXPORT ViewModeController : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit ViewModeController(QObject* parent = 0);
+ virtual ~ViewModeController();
+
+ /**
+ * @return URL that is shown by the view mode implementation.
+ */
+ KUrl url() const;
+
+ /**
+ * Sets the URL to \a url and does nothing else. Called when
+ * a redirection happens. See ViewModeController::setUrl()
+ */
+ void redirectToUrl(const KUrl& url);
+
+ /**
+ * Informs the view mode implementation about a change of the activation
+ * state by emitting the signal activationChanged().
+ */
+ void indicateActivationChange(bool active);
+
+ /**
+ * Sets the zoom level to \a level and emits the signal zoomLevelChanged().
+ * It must be assured that the used level is inside the range
+ * ViewModeController::zoomLevelMinimum() and
+ * ViewModeController::zoomLevelMaximum().
+ */
+ void setZoomLevel(int level);
+ int zoomLevel() const;
+
+ /**
+ * Sets the name filter to \a and emits the signal nameFilterChanged().
+ */
+ void setNameFilter(const QString& nameFilter);
+ QString nameFilter() const;
+
+ /**
+ * Requests the view mode implementation to hide tooltips.
+ */
+ void requestToolTipHiding();
+
+public slots:
+ /**
+ * Sets the URL to \a url and emits the signals cancelPreviews() and
+ * urlChanged() if \a url is different for the current URL.
+ */
+ void setUrl(const KUrl& url);
+
+signals:
+ /**
+ * Is emitted if the URL has been changed by ViewModeController::setUrl().
+ */
+ void urlChanged(const KUrl& url);
+
+ /**
+ * Is emitted, if ViewModeController::indicateActivationChange() has been
+ * invoked. The view mode implementation may update its visual state
+ * to represent the activation state.
+ */
+ void activationChanged(bool active);
+
+ /**
+ * Is emitted if the name filter has been changed by
+ * ViewModeController::setNameFilter().
+ */
+ void nameFilterChanged(const QString& nameFilter);
+
+ /**
+ * Is emitted if the zoom level has been changed by
+ * ViewModeController::setZoomLevel().
+ */
+ void zoomLevelChanged(int level);
+
+ /**
+ * Is emitted if pending previews should be canceled (e. g. because of an URL change).
+ */
+ void cancelPreviews();
+
+private:
+ int m_zoomLevel;
+ QString m_nameFilter;
+ KUrl m_url;
+};
+
+#endif