]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Split the class DolphinController into the two classes DolphinViewController and...
authorPeter Penz <peter.penz19@gmail.com>
Tue, 30 Mar 2010 20:19:32 +0000 (20:19 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Tue, 30 Mar 2010 20:19:32 +0000 (20:19 +0000)
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

20 files changed:
src/CMakeLists.txt
src/dolphincolumnview.cpp
src/dolphincolumnviewcontainer.cpp
src/dolphincolumnviewcontainer.h
src/dolphindetailsview.cpp
src/dolphindetailsview.h
src/dolphiniconsview.cpp
src/dolphiniconsview.h
src/dolphinview.cpp
src/dolphinview.h
src/dolphinviewcontainer.cpp
src/dolphinviewcontroller.cpp [moved from src/dolphincontroller.cpp with 67% similarity]
src/dolphinviewcontroller.h [moved from src/dolphincontroller.h with 50% similarity]
src/draganddrophelper.cpp
src/draganddrophelper.h
src/panels/folders/paneltreeview.cpp
src/viewextensionsfactory.cpp
src/viewextensionsfactory.h
src/viewmodecontroller.cpp [new file with mode: 0644]
src/viewmodecontroller.h [new file with mode: 0644]

index 582ab2aa98f182ebe1906d89d86003b7cee8fc37..3ab04f5c3dee0adf60a875ae150c33762093505b 100644 (file)
@@ -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
 )
index 11ecf8aa78445d35937019cabc461f104e406be1..f5bcd79eeccee210d61a224027365a3cefcff2eb 100644 (file)
@@ -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();
index 6f1418436590928f9801c9f8a7cba83a3b7692ef..421f195d55f73979235dfd4c28773d365e474525 100644 (file)
 
 #include "dolphincolumnviewcontainer.h"
 
+#include "dolphin_columnmodesettings.h"
+
 #include "dolphincolumnview.h"
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
 #include "dolphinsortfilterproxymodel.h"
 #include "draganddrophelper.h"
 #include "settings/dolphinsettings.h"
-
-#include "dolphin_columnmodesettings.h"
+#include "viewmodecontroller.h"
 
 #include <QPoint>
 #include <QScrollBar>
 #include <QTimer>
 
 DolphinColumnViewContainer::DolphinColumnViewContainer(QWidget* parent,
-                                                       DolphinController* controller) :
+                                                       DolphinViewController* dolphinViewController,
+                                                       const ViewModeController* viewModeController) :
     QScrollArea(parent),
-    m_controller(controller),
+    m_dolphinViewController(dolphinViewController),
+    m_viewModeController(viewModeController),
     m_active(false),
     m_index(-1),
     m_contentX(0),
@@ -45,14 +48,15 @@ DolphinColumnViewContainer::DolphinColumnViewContainer(QWidget* parent,
     m_dragSource(0),
     m_activeUrlTimer(0)
 {
-    Q_ASSERT(controller != 0);
+    Q_ASSERT(dolphinViewController != 0);
+    Q_ASSERT(viewModeController != 0);
 
     setAcceptDrops(true);
     setFocusPolicy(Qt::NoFocus);
     setFrameShape(QFrame::NoFrame);
     setLayoutDirection(Qt::LeftToRight);
 
-    connect(controller, SIGNAL(activationChanged(bool)),
+    connect(viewModeController, SIGNAL(activationChanged(bool)),
             this, SLOT(updateColumnsBackground(bool)));
 
     connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
@@ -67,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.
index c1975ac08773311b474666f90892b820a3fec439..41a1d167a4001af2427dba204cb57b194aad8ddd 100644 (file)
@@ -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;
index 80e90d670dfdb02b6c3d31df882aacebbd1a1fd6..8ea5e93e6da17baa394e429397080433fdf109a2 100644 (file)
 #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());
     }
index 47af2f55d4ab14c357cb9025473d8ee89b6e11ec..1dff8fe59d3708f8b66f1529949f842e1a3cc9b5 100644 (file)
@@ -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;
 
index 46c27cd28f6cb0f78036b2e9fa5e94bf52e6d53d..636bdd66c1ac4d7e9e87b6367a3b15a2f407ebf2 100644 (file)
@@ -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>
 #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();
 }
 
index d49c5d75f6762cac88cd1bb88dac8337d828b20d..21e37ba02c5933eb49c81ada3027993edda3ecb1 100644 (file)
 
 #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;
 
index c5f6c91d391e4dd01f54c30d61bdcf461709b742..79191c52caf32d5b45553b910f9eb2247d09252f 100644 (file)
@@ -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()
index cab9fa56026bda83604ccf83d4a9e6ed8820a3f5..07c6e32c4ea25b701a1cb2f8ef919ed0339aa5e0 100644 (file)
 
 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
index 184dd2bee02539d1420da622c2f1f8f7bbe3ef15..b9134d91c7875befde3c006c1725b4c510f920d6 100644 (file)
 #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"
 #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),
similarity index 67%
rename from src/dolphincontroller.cpp
rename to src/dolphinviewcontroller.cpp
index b61c126b519452b473e9563cd5da6aae0f395c06..4ce83f968636058f48060eb7f02a5e2f31ad5a03 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at)                  *
+ *   Copyright (C) 2010 by Peter Penz <peter.penz@gmx.at>                  *
  *                                                                         *
  *   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  *
  *   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>
 #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"
similarity index 50%
rename from src/dolphincontroller.h
rename to src/dolphinviewcontroller.h
index 397215bfba43413165968802665c90e7f797459f..8481107700803e5604c4327599d204103b87ae20 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at)                  *
+ *   Copyright (C) 2010 by Peter Penz <peter.penz@gmx.at>                  *
  *                                                                         *
  *   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  *
  *   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,43 +228,35 @@ 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,
@@ -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
index 637117a2b72a3af586dcc614173271fbb9969aa1..a85e3cb6acfa9340c47147971b2f16bbb0cae91b 100644 (file)
@@ -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);
index d8823d68d4231b39a3e3455397c235679f799c9a..f107350a711d7069da16fd3a84aaf4e2a26e17f1 100644 (file)
@@ -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 
index a162d54e3d5a98ce21808b3d9c334dc9116f0264..6eefb6e6e3be756ef2598e7caeb7b0f9bbd02efa 100644 (file)
 
 #include "paneltreeview.h"
 
-#include "dolphincontroller.h"
+#include "dolphinviewcontroller.h"
 #include "dolphinmodel.h"
 #include "draganddrophelper.h"
+#include "viewmodecontroller.h"
 
 #include <kfileitemdelegate.h>
 #include <QKeyEvent>
index 6bcc3a7c8e739155d2c56829146f04288cbde4e5..7e8eb940103bcb395bfc4eb4b725bac8467f9159 100644 (file)
 
 #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"
 
 #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
index 9187c10e3aa2c88872bb6d741164d1c8bcf4944e..9324932ac684f6e8a08bd311be2e21d89f5400d7 100644 (file)
@@ -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 (file)
index 0000000..17d0ba6
--- /dev/null
@@ -0,0 +1,88 @@
+/***************************************************************************
+ *   Copyright (C) 2010 by Peter Penz <peter.penz@gmx.at>                  *
+ *                                                                         *
+ *   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 (file)
index 0000000..27b8381
--- /dev/null
@@ -0,0 +1,124 @@
+/***************************************************************************
+ *   Copyright (C) 2010 by Peter Penz <peter.penz@gmx.at>                  *
+ *                                                                         *
+ *   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