]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.h
Prepare view-engine for non-KFileItem usecase
[dolphin.git] / src / views / dolphinview.h
index 04b821e716fcc1cb702cb4ba750ea7ce51fac3a0..bfac885025eca30e737dfd38e5f8444ed920afba 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2006-2009 by Peter Penz <peter.penz@gmx.at>             *
+ *   Copyright (C) 2006-2009 by Peter Penz <peter.penz19@gmail.com>        *
  *   Copyright (C) 2006 by Gregor Kališnik <gregor@podnapisi.net>          *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -18,7 +18,6 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
  ***************************************************************************/
 
-
 #ifndef DOLPHINVIEW_H
 #define DOLPHINVIEW_H
 
 #include "libdolphin_export.h"
 
 #include <kparts/part.h>
-#include <kfileitem.h>
-#include <kfileitemdelegate.h>
+#include <KFileItem>
+#include <KFileItemDelegate>
 #include <kio/fileundomanager.h>
-#include <kio/job.h>
+#include <KIO/Job>
 
 #include <QBoxLayout>
 #include <QKeyEvent>
 #include <QLinkedList>
-#include <QListView>
 #include <QSet>
 #include <QWidget>
 
 typedef KIO::FileUndoManager::CommandType CommandType;
 
-class DolphinColumnViewContainer;
-class DolphinDetailsView;
-class DolphinDetailsViewExpander;
-class DolphinIconsView;
-class DolphinModel;
-class DolphinSortFilterProxyModel;
-class DolphinViewController;
+class DolphinItemListView;
 class KAction;
 class KActionCollection;
-class KDirLister;
+class KFileItemModel;
+class KItemListContainer;
+class KItemModelBase;
 class KUrl;
-class ViewModeController;
+class ToolTipManager;
+class VersionControlObserver;
 class ViewProperties;
+class QGraphicsSceneDragDropEvent;
 class QRegExp;
 
 /**
  * @short Represents a view for the directory content.
  *
- * View modes for icons, details and columns are supported. It's
+ * View modes for icons, compact and details are supported. It's
  * possible to adjust:
  * - sort order
  * - sort type
  * - show hidden files
  * - show previews
- *
- * @see DolphinIconsView
- * @see DolphinDetailsView
- * @see DolphinColumnView
+ * - enable grouping
  */
 class LIBDOLPHINPRIVATE_EXPORT DolphinView : public QWidget
 {
@@ -76,53 +69,35 @@ class LIBDOLPHINPRIVATE_EXPORT DolphinView : public QWidget
 
 public:
     /**
-     * Defines the view mode for a directory. The view mode
-     * can be defined when constructing a DolphinView. The
+     * Defines the view mode for a directory. The
      * view mode is automatically updated if the directory itself
      * defines a view mode (see class ViewProperties for details).
      */
     enum Mode
     {
         /**
-         * The directory items are shown as icons including an
-         * icon name.
+         * The items are shown as icons with a name-label below.
          */
         IconsView = 0,
 
         /**
-         * The icon, the name and at least the size of the directory
-         * items are shown in a table. It is possible to add columns
-         * for date, group and permissions.
+         * The icon, the name and the size of the items are
+         * shown per default as a table.
          */
-        DetailsView = 1,
+        DetailsView,
 
         /**
-         * Each folder is shown in a separate column.
+         * The items are shown as icons with the name-label aligned
+         * to the right side.
          */
-        ColumnView = 2,
-        MaxModeEnum = ColumnView
-    };
-
-    /** Defines the sort order for the items of a directory. */
-    enum Sorting
-    {
-        SortByName = 0,
-        SortBySize,
-        SortByDate,
-        SortByPermissions,
-        SortByOwner,
-        SortByGroup,
-        SortByType,
-        SortByDestination,
-        SortByPath,
-        MaxSortingEnum = SortByPath
+        CompactView
     };
 
     /**
      * @param url              Specifies the content which should be shown.
      * @param parent           Parent widget of the view.
      */
-    DolphinView( const KUrl& url, QWidget* parent);
+    DolphinView(const KUrl& url, QWidget* parent);
 
     virtual ~DolphinView();
 
@@ -132,17 +107,6 @@ public:
      */
     KUrl url() const;
 
-    /**
-     * Returns the root URL of the view, which is defined as the first
-     * visible path of DolphinView::url(). Usually the root URL is
-     * equal to DolphinView::url(), but in the case of the column view
-     * when 2 columns are shown, the root URL might be:
-     * /home/peter/Documents
-     * and DolphinView::url() might return
-     * /home/peter/Documents/Music/
-     */
-    KUrl rootUrl() const;
-
     /**
      * If \a active is true, the view will marked as active. The active
      * view is defined as view where all actions are applied to.
@@ -159,35 +123,43 @@ public:
     void setMode(Mode mode);
     Mode mode() const;
 
-    /** See setShowPreview */
-    bool showPreview() const;
-
-    /** See setShowHiddenFiles */
-    bool showHiddenFiles() const;
-
-    /** See setCategorizedSorting */
-    bool categorizedSorting() const;
+    /**
+     * Turns on the file preview for the all files of the current directory,
+     * if \a show is true.
+     * If the view properties should be remembered for each directory
+     * (GeneralSettings::globalViewProps() returns false), then the
+     * preview setting will be stored automatically.
+     */
+    void setPreviewsShown(bool show);
+    bool previewsShown() const;
 
     /**
-     * Returns true, if the categorized sorting is supported by the current
-     * used mode (see DolphinView::setMode()). Currently only DolphinView::IconsView
-     * supports categorizations. To check whether the categorized
-     * sorting is set, use DolphinView::categorizedSorting().
+     * Shows all hidden files of the current directory,
+     * if \a show is true.
+     * If the view properties should be remembered for each directory
+     * (GeneralSettings::globalViewProps() returns false), then the
+     * show hidden file setting will be stored automatically.
      */
-    bool supportsCategorizedSorting() const;
+    void setHiddenFilesShown(bool show);
+    bool hiddenFilesShown() const;
 
     /**
-     * Returns the root item which represents the current URL. Note that the returned
-     * item can be null (KFileItem::isNull() will return true) in case that the directory
-     * has not been loaded.
+     * Turns on sorting by groups if \a enable is true.
      */
-    KFileItem rootItem() const;
+    void setGroupedSorting(bool grouped);
+    bool groupedSorting() const;
 
     /**
      * Returns the items of the view.
      */
     KFileItemList items() const;
 
+    /**
+     * @return The number of items. itemsCount() is faster in comparison
+     *         to items().count().
+     */
+    int itemsCount() const;
+
     /**
      * Returns the selected items. The list is empty if no item has been
      * selected.
@@ -208,11 +180,17 @@ public:
      */
     void markUrlsAsSelected(const QList<KUrl>& urls);
 
+    /**
+     * Marks the item indicated by \p url as the current item after the
+     * directory DolphinView::url() has been loaded.
+     */
+    void markUrlAsCurrent(const KUrl& url);
+
     /**
      * All items that match to the pattern \a pattern will get selected
      * if \a enabled is true and deselected if  \a enabled is false.
      */
-    void setItemSelectionEnabled(const QRegExp& pattern, bool enabled);
+    void selectItems(const QRegExp& pattern, bool enabled);
 
     /**
      * Sets the zoom level to \a level. It is assured that the used
@@ -222,53 +200,35 @@ public:
     void setZoomLevel(int level);
     int zoomLevel() const;
 
-    /**
-     * Returns true, if zooming in is possible. If false is returned,
-     * the maximum zooming level has been reached.
-     */
-    bool isZoomInPossible() const;
-
-    /**
-     * Returns true, if zooming out is possible. If false is returned,
-     * the minimum zooming level has been reached.
-     */
-    bool isZoomOutPossible() const;
+    void setSortRole(const QByteArray& role);
+    QByteArray sortRole() const;
 
-    /** Sets the sort order of the items inside a directory (see DolphinView::Sorting). */
-    void setSorting(Sorting sorting);
-
-    /** Returns the sort order of the items inside a directory (see DolphinView::Sorting). */
-    Sorting sorting() const;
-
-    /** Sets the sort order (Qt::Ascending or Qt::Descending) for the items. */
     void setSortOrder(Qt::SortOrder order);
-
-    /** Returns the current used sort order (Qt::Ascending or Qt::Descending). */
     Qt::SortOrder sortOrder() const;
 
     /** Sets a separate sorting with folders first (true) or a mixed sorting of files and folders (false). */
     void setSortFoldersFirst(bool foldersFirst);
-
-    /** Returns if files and folders are sorted separately or not. */
     bool sortFoldersFirst() const;
 
     /** Sets the additional information which should be shown for the items. */
-    void setAdditionalInfo(KFileItemDelegate::InformationList info);
+    void setVisibleRoles(const QList<QByteArray>& roles);
 
     /** Returns the additional information which should be shown for the items. */
-    KFileItemDelegate::InformationList additionalInfo() const;
+    QList<QByteArray> visibleRoles() const;
 
-    /** Reloads the current directory. */
     void reload();
-
     void stopLoading();
 
     /**
-     * Refreshes the view to get synchronized with the (updated) Dolphin settings.
-     * This method only needs to get invoked if the view settings for the Icons View,
-     * Details View or Columns View have been changed.
+     * Refreshes the view to get synchronized with the settings (e.g. icons size,
+     * font, ...).
      */
-    void refresh();
+    void readSettings();
+
+    /**
+     * Saves the current settings (e.g. icons size, font, ..).
+     */
+    void writeSettings();
 
     /**
      * Filters the currently shown items by \a nameFilter. All items
@@ -277,16 +237,6 @@ public:
     void setNameFilter(const QString& nameFilter);
     QString nameFilter() const;
 
-    /**
-     * Calculates the number of currently shown files into
-     * \a fileCount and the number of folders into \a folderCount.
-     * The size of all files is written into \a totalFileSize.
-     * It is recommend using this method instead of asking the
-     * directory lister or the model directly, as it takes
-     * filtering and hierarchical previews into account.
-     */
-    void calculateItemCount(int& fileCount, int& folderCount, KIO::filesize_t& totalFileSize) const;
-
     /**
      * Returns a textual representation of the state of the current
      * folder or selected items, suitable for use in the status bar.
@@ -299,11 +249,6 @@ public:
      */
     QList<QAction*> versionControlActions(const KFileItemList& items) const;
 
-    /**
-     * Updates the state of the 'Additional Information' actions in \a collection.
-     */
-    void updateAdditionalInfoActions(KActionCollection* collection);
-
     /**
      * Returns the state of the paste action:
      * first is whether the action should be enabled
@@ -336,8 +281,10 @@ public:
      */
     void saveState(QDataStream& stream);
 
-    /** Returns true, if at least one item is selected. */
-    bool hasSelection() const;
+    /**
+     * Returns the root item which represents the current URL.
+     */
+    KFileItem rootItem() const;
 
 public slots:
     /**
@@ -396,32 +343,8 @@ public slots:
      */
     void pasteIntoFolder();
 
-    /**
-     * Turns on the file preview for the all files of the current directory,
-     * if \a show is true.
-     * If the view properties should be remembered for each directory
-     * (GeneralSettings::globalViewProps() returns false), then the
-     * preview setting will be stored automatically.
-     */
-    void setShowPreview(bool show);
-
-    /**
-     * Shows all hidden files of the current directory,
-     * if \a show is true.
-     * If the view properties should be remembered for each directory
-     * (GeneralSettings::globalViewProps() returns false), then the
-     * show hidden file setting will be stored automatically.
-     */
-    void setShowHiddenFiles(bool show);
-
-    /**
-     * Summarizes all sorted items by their category \a categorized
-     * is true.
-     * If the view properties should be remembered for each directory
-     * (GeneralSettings::globalViewProps() returns false), then the
-     * categorized sorting setting will be stored automatically.
-     */
-    void setCategorizedSorting(bool categorized);
+    /** Activates the view if the item list container gets focus. */
+    virtual bool eventFilter(QObject* watched, QEvent* event);
 
 signals:
     /**
@@ -429,13 +352,20 @@ signals:
      */
     void activated();
 
-    /** Is emitted if URL of the view has been changed to \a url. */
+    /**
+     * Is emitted if the URL of the view will be changed to \a url.
+     * After the URL has been changed the signal urlChanged() will
+     * be emitted.
+     */
+    void urlAboutToBeChanged(const KUrl& url);
+
+    /** Is emitted if the URL of the view has been changed to \a url. */
     void urlChanged(const KUrl& url);
 
     /**
      * Is emitted when clicking on an item with the left mouse button.
      */
-    void itemTriggered(const KFileItem& item);
+    void itemActivated(const KFileItem& item);
 
     /**
      * Is emitted if items have been added or deleted.
@@ -451,31 +381,35 @@ signals:
      * Is emitted if the view mode (IconsView, DetailsView,
      * PreviewsView) has been changed.
      */
-    void modeChanged();
+    void modeChanged(DolphinView::Mode current, DolphinView::Mode previous);
 
     /** Is emitted if the 'show preview' property has been changed. */
-    void showPreviewChanged();
+    void previewsShownChanged(bool shown);
 
     /** Is emitted if the 'show hidden files' property has been changed. */
-    void showHiddenFilesChanged();
+    void hiddenFilesShownChanged(bool shown);
 
-    /** Is emitted if the 'categorized sorting' property has been changed. */
-    void categorizedSortingChanged();
+    /** Is emitted if the 'grouped sorting' property has been changed. */
+    void groupedSortingChanged(bool groupedSorting);
 
     /** Is emitted if the sorting by name, size or date has been changed. */
-    void sortingChanged(DolphinView::Sorting sorting);
+    void sortRoleChanged(const QByteArray& role);
 
     /** Is emitted if the sort order (ascending or descending) has been changed. */
     void sortOrderChanged(Qt::SortOrder order);
 
-    /** Is emitted if the sorting of files and folders (separate with folders first or mixed) has been changed. */
+    /**
+     * Is emitted if the sorting of files and folders (separate with folders
+     * first or mixed) has been changed.
+     */
     void sortFoldersFirstChanged(bool foldersFirst);
 
     /** Is emitted if the additional information shown for this view has been changed. */
-    void additionalInfoChanged();
+    void visibleRolesChanged(const QList<QByteArray>& current,
+                             const QList<QByteArray>& previous);
 
     /** Is emitted if the zoom level has been changed by zooming in or out. */
-    void zoomLevelChanged(int level);
+    void zoomLevelChanged(int current, int previous);
 
     /**
      * Is emitted if information of an item is requested to be shown e. g. in the panel.
@@ -494,7 +428,8 @@ signals:
      * for the URL should be shown and the custom actions \a customActions
      * will be added.
      */
-    void requestContextMenu(const KFileItem& item,
+    void requestContextMenu(const QPoint& pos,
+                            const KFileItem& item,
                             const KUrl& url,
                             const QList<QAction*>& customActions);
 
@@ -518,32 +453,32 @@ signals:
 
     /**
      * Is emitted after DolphinView::setUrl() has been invoked and
-     * the path \a url is currently loaded. If this signal is emitted,
+     * the current directory is loaded. If this signal is emitted,
      * it is assured that the view contains already the correct root
      * URL and property settings.
      */
-    void startedPathLoading(const KUrl& url);
+    void directoryLoadingStarted();
 
     /**
-     * Is emitted after the path triggered by DolphinView::setUrl()
+     * Is emitted after the directory triggered by DolphinView::setUrl()
      * has been loaded.
      */
-    void finishedPathLoading(const KUrl& url);
+    void directoryLoadingCompleted();
 
     /**
      * Is emitted after DolphinView::setUrl() has been invoked and provides
-     * the information how much percent of the current path have been loaded.
+     * the information how much percent of the current directory have been loaded.
      */
-    void pathLoadingProgress(int percent);
+    void directoryLoadingProgress(int percent);
 
     /**
-     * Is emitted if the DolphinView::setUrl() is invoked but the URL is not
-     * a directory.
+     * Is emitted if the sorting is done asynchronously and provides the
+     * progress information of the sorting.
      */
-    void urlIsFileError(const KUrl& file);
+    void directorySortingProgress(int percent);
 
     /**
-     * Emitted when KDirLister emits redirection.
+     * Emitted when the file-item-model emits redirection.
      * Testcase: fish://localhost
      */
     void redirection(const KUrl& oldUrl, const KUrl& newUrl);
@@ -555,10 +490,24 @@ signals:
      */
     void writeStateChanged(bool isFolderWritable);
 
+    /**
+     * Is emitted if the URL should be changed to the previous URL of the
+     * history (e.g. because the "back"-mousebutton has been pressed).
+     */
+    void goBackRequested();
+
+    /**
+     * Is emitted if the URL should be changed to the next URL of the
+     * history (e.g. because the "next"-mousebutton has been pressed).
+     */
+    void goForwardRequested();
+
 protected:
-    /** @see QWidget::mouseReleaseEvent */
-    virtual void mouseReleaseEvent(QMouseEvent* event);
-    virtual bool eventFilter(QObject* watched, QEvent* event);
+    /** Changes the zoom level if Control is pressed during a wheel event. */
+    virtual void wheelEvent(QWheelEvent* event);
+
+    /** @reimp */
+    virtual void hideEvent(QHideEvent* event);
 
 private slots:
     /**
@@ -567,21 +516,27 @@ private slots:
      */
     void activate();
 
-    /**
-     * If the item \a item is a directory, then this
-     * directory will be loaded. If the  item is a file, the corresponding
-     * application will get started.
-     */
-    void triggerItem(const KFileItem& index);
+    void slotItemActivated(int index);
+    void slotItemsActivated(const QSet<int>& indexes);
+    void slotItemMiddleClicked(int index);
+    void slotItemContextMenuRequested(int index, const QPointF& pos);
+    void slotViewContextMenuRequested(const QPointF& pos);
+    void slotHeaderContextMenuRequested(const QPointF& pos);
+    void slotHeaderColumnWidthChanged(const QByteArray& role, qreal current, qreal previous);
+    void slotItemHovered(int index);
+    void slotItemUnhovered(int index);
+    void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
+    void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
+    void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons);
 
     /**
      * Emits the signal \a selectionChanged() with a small delay. This is
-     * because getting all file items for the signal can be an expensive
+     * because getting all file items for the selection can be an expensive
      * operation. Fast selection changes are collected in this case and
      * the signal is emitted only after no selection change has been done
      * within a small delay.
      */
-    void slotSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
+    void slotSelectionChanged(const QSet<int>& current, const QSet<int>& previous);
 
     /**
      * Is called by emitDelayedSelectionChangedSignal() and emits the
@@ -589,27 +544,11 @@ private slots:
      */
     void emitSelectionChangedSignal();
 
-    /**
-     * Opens the context menu on position \a pos. The position
-     * is used to check whether the context menu is related to an
-     * item or to the viewport.
-     */
-    void openContextMenu(const QPoint& pos, const QList<QAction*>& customActions);
-
-    /**
-     * Drops dragged URLs to the destination path \a destPath. If
-     * the URLs are dropped above an item inside the destination path,
-     * the item is indicated by \a destItem.
-     */
-    void dropUrls(const KFileItem& destItem,
-                  const KUrl& destPath,
-                  QDropEvent* event);
-
     /**
      * Updates the view properties of the current URL to the
-     * sorting given by \a sorting.
+     * sorting given by \a role.
      */
-    void updateSorting(DolphinView::Sorting sorting);
+    void updateSortRole(const QByteArray& role);
 
     /**
      * Updates the view properties of the current URL to the
@@ -623,12 +562,6 @@ private slots:
      */
     void updateSortFoldersFirst(bool foldersFirst);
 
-    /**
-     * Updates the view properties of the current URL to the
-     * additional information given by \a info.
-     */
-    void updateAdditionalInfo(const KFileItemDelegate::InformationList& info);
-
     /**
      * Updates the status bar to show hover information for the
      * item \a item. If currently other items are selected,
@@ -650,32 +583,47 @@ private slots:
     void slotDeleteFileFinished(KJob* job);
 
     /**
-     * Invoked when the directory lister has been started the
-     * loading of \a url.
+     * Invoked when the file item model has started the loading
+     * of the directory specified by DolphinView::url().
      */
-    void slotDirListerStarted(const KUrl& url);
+    void slotDirectoryLoadingStarted();
 
     /**
-     * Invoked when the directory lister has completed the loading of
-     * items. Assures that pasted items and renamed items get seleced.
+     * Invoked when the file item model indicates that the loading of a directory has
+     * been completed. Assures that pasted items and renamed items get seleced.
      */
-    void slotDirListerCompleted();
+    void slotDirectoryLoadingCompleted();
 
     /**
-     * Invoked when the loading of the directory is finished.
-     * Restores the active item and the scroll position if possible.
+     * Is invoked when items of KFileItemModel have been changed.
      */
-    void slotLoadingCompleted();
+    void slotItemsChanged();
 
     /**
-     * Is invoked when the KDirLister indicates refreshed items.
+     * Is invoked when the sort order has been changed by the user by clicking
+     * on a header item. The view properties of the directory will get updated.
      */
-    void slotRefreshItems();
+    void slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOrder previous);
+
+    /**
+     * Is invoked when the sort role has been changed by the user by clicking
+     * on a header item. The view properties of the directory will get updated.
+     */
+    void slotSortRoleChangedByHeader(const QByteArray& current, const QByteArray& previous);
+
+    /**
+     * Is invoked when the visible roles have been changed by the user by dragging
+     * a header item. The view properties of the directory will get updated.
+     */
+    void slotVisibleRolesChangedByHeader(const QList<QByteArray>& current,
+                                         const QList<QByteArray>& previous);
+
+    void slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value);
 
     /**
      * Observes the item with the URL \a url. As soon as the directory
      * model indicates that the item is available, the item will
-     * get selected and it is assure that the item stays visible.
+     * get selected and it is assured that the item stays visible.
      *
      * @see selectAndScrollToCreatedItem()
      */
@@ -691,14 +639,25 @@ private slots:
      * Called when a redirection happens.
      * Testcase: fish://localhost
      */
-    void slotRedirection(const KUrl& oldUrl, const KUrl& newUrl);
+    void slotDirectoryRedirection(const KUrl& oldUrl, const KUrl& newUrl);
 
     /**
-     * Restores the contents position, if history information about the old position is available.
+     * Applies the state that has been restored by restoreViewState()
+     * to the view.
      */
-    void restoreContentsPosition();
+    void updateViewState();
+
+    void hideToolTip();
 
-    void slotUrlChangeRequested(const KUrl& url);
+    /**
+     * Calculates the number of currently shown files into
+     * \a fileCount and the number of folders into \a folderCount.
+     * The size of all files is written into \a totalFileSize.
+     * It is recommend using this method instead of asking the
+     * directory lister or the model directly, as it takes
+     * filtering and hierarchical previews into account.
+     */
+    void calculateItemCount(int& fileCount, int& folderCount, KIO::filesize_t& totalFileSize) const;
 
 private:
     void loadDirectory(const KUrl& url, bool reload = false);
@@ -710,12 +669,10 @@ private:
     void applyViewProperties();
 
     /**
-     * Creates a new view representing the given view mode (DolphinView::mode()).
-     * The current view will get deleted.
+     * Applies the m_mode property to the corresponding
+     * itemlayout-property of the KItemListView.
      */
-    void createView();
-
-    void deleteView();
+    void applyModeToView();
 
     /**
      * Helper method for DolphinView::paste() and DolphinView::pasteIntoFolder().
@@ -723,14 +680,6 @@ private:
      */
     void pasteToUrl(const KUrl& url);
 
-    /**
-     * Checks whether the current item view has the same zoom level
-     * as \a oldZoomLevel. If this is not the case, the zoom level
-     * of the controller is updated and a zoomLevelChanged() signal
-     * is emitted.
-     */
-    void updateZoomLevel(int oldZoomLevel);
-
     /**
      * Returns a list of URLs for all selected items. The list is
      * simplified, so that when the URLs are part of different tree
@@ -745,20 +694,11 @@ private:
 
     /**
      * Is invoked after a paste operation or a drag & drop
-     * operation and adds the filenames of all URLs from \a mimeData to
-     * m_newFileNames. This allows to select all newly added
-     * items in slotDirListerCompleted().
+     * operation and URLs from \a mimeData as selected.
+     * This allows to select all newly pasted
+     * items in restoreViewState().
      */
-    void addNewFileNames(const QMimeData* mimeData);
-
-    /**
-     * Helper method for DolphinView::setItemSelectionEnabled(): Returns the selection for
-     * all items of \p parent that match with the regular expression defined by \p pattern.
-     */
-    QItemSelection childrenMatchingPattern(const QModelIndex& parent, const QRegExp& pattern) const;
-
-    void connectViewAccessor();
-    void disconnectViewAccessor();
+    void markPastedUrlsAsSelected(const QMimeData* mimeData);
 
     /**
      * Updates m_isFolderWritable dependent on whether the folder represented by
@@ -768,101 +708,34 @@ private:
     void updateWritableState();
 
 private:
-    /**
-     * Abstracts the access to the different view implementations
-     * for icons-, details- and column-view.
-     */
-    class ViewAccessor
-    {
-    public:
-        ViewAccessor();
-        ~ViewAccessor();
-
-        void createView(QWidget* parent,
-                        DolphinViewController* dolphinViewController,
-                        const ViewModeController* viewModeController,
-                        Mode mode);
-        void deleteView();
-
-        /**
-         * Must be invoked before the URL has been changed and allows view implementations
-         * like the column view to create a new column.
-         */
-        void prepareUrlChange(const KUrl& url);
-
-        QAbstractItemView* itemView() const;
-        KFileItemDelegate* itemDelegate() const;
-
-        /**
-         * Returns the widget that should be added to the layout as target. Usually
-         * the item view itself is returned, but in the case of the column view
-         * a container widget is returned.
-         */
-        QWidget* layoutTarget() const;
-
-        void setRootUrl(const KUrl& rootUrl);
-        KUrl rootUrl() const;
-
-        bool supportsCategorizedSorting() const;
-        bool itemsExpandable() const;
-        QSet<KUrl> expandedUrls() const;
-        const DolphinDetailsViewExpander* setExpandedUrls(const QSet<KUrl>& urlsToExpand);
-
-        /**
-         * Returns true, if a reloading of the items is required
-         * when the additional information properties have been changed
-         * by the user.
-         */
-        bool reloadOnAdditionalInfoChange() const;
-
-        DolphinModel* dirModel() const;
-        DolphinSortFilterProxyModel* proxyModel() const;
-        KDirLister* dirLister() const;
-
-    private:
-        KUrl m_rootUrl;
-        DolphinIconsView* m_iconsView;
-        DolphinDetailsView* m_detailsView;
-        DolphinColumnViewContainer* m_columnsContainer;
-        DolphinModel* m_dolphinModel;
-        DolphinSortFilterProxyModel* m_proxyModel;
-        QAbstractItemView* m_dragSource;
-        QPointer<DolphinDetailsViewExpander> m_detailsViewExpander;
-
-        // For unit tests
-        friend class DolphinDetailsViewTest;
-    };
-
-    bool m_active : 1;
-    bool m_showPreview : 1;
-    bool m_storedCategorizedSorting : 1;
-    bool m_tabsForFiles : 1;
-    bool m_isContextMenuOpen : 1;   // TODO: workaround for Qt-issue 207192
-    bool m_assureVisibleCurrentIndex : 1;
-    bool m_expanderActive : 1;
-    bool m_isFolderWritable : 1;
-
+    bool m_active;
+    bool m_tabsForFiles;
+    bool m_assureVisibleCurrentIndex;
+    bool m_isFolderWritable;
+    bool m_dragging; // True if a dragging is done. Required to be able to decide whether a
+                     // tooltip may be shown when hovering an item.
+
+    KUrl m_url;
     Mode m_mode;
+    QList<QByteArray> m_visibleRoles;
 
     QVBoxLayout* m_topLayout;
 
-    DolphinViewController* m_dolphinViewController;
-    ViewModeController* m_viewModeController;
-    ViewAccessor m_viewAccessor;
+    KFileItemModel* m_model;
+    DolphinItemListView* m_view;
+    KItemListContainer* m_container;
+
+    ToolTipManager* m_toolTipManager;
 
     QTimer* m_selectionChangedTimer;
 
-    KUrl m_activeItemUrl;
+    KUrl m_currentItemUrl; // Used for making the view to remember the current URL after F5
     QPoint m_restoredContentsPosition;
     KUrl m_createdItemUrl; // URL for a new item that got created by the "Create New..." menu
-    KFileItemList m_selectedItems; // this is used for making the View to remember selections after F5
 
-    /**
-     * Remembers the filenames that have been added by a paste operation
-     * or a drag & drop operation. Allows to select the items in
-     * slotDirListerCompleted().
-     */
-    QSet<QString> m_newFileNames;
+    QList<KUrl> m_selectedUrls; // Used for making the view to remember selections after F5
+
+    VersionControlObserver* m_versionControlObserver;
 
     // For unit tests
     friend class TestBase;