]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.h
Fix temporary regression of sorting introduced by SVN commit 1126410
[dolphin.git] / src / dolphinview.h
index b0d78482a2b28aa8087c4cd98a2cee8dd10f0552..352841f4a0a28746bf8e36dee3153e1f40790405 100644 (file)
 
 typedef KIO::FileUndoManager::CommandType CommandType;
 
-class DolphinController;
 class DolphinColumnViewContainer;
 class DolphinDetailsView;
 class DolphinIconsView;
-class DolphinMainWindow;
 class DolphinModel;
 class DolphinSortFilterProxyModel;
+class DolphinViewController;
 class KFilePreviewGenerator;
 class KAction;
 class KActionCollection;
 class KDirLister;
 class KUrl;
+class ViewModeController;
 class ViewProperties;
+class DolphinDetailsViewExpander;
 
 /**
  * @short Represents a view for the directory content.
@@ -112,9 +113,9 @@ public:
         SortByOwner,
         SortByGroup,
         SortByType,
-        SortByRating,
-        SortByTags,
-        MaxSortEnum = SortByTags
+        SortByDestination,
+        SortByPath,
+        MaxSortingEnum = SortByPath
     };
 
     /**
@@ -134,7 +135,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
@@ -181,22 +182,12 @@ public:
     bool supportsCategorizedSorting() const;
 
     /**
-     * Selects all items.
-     * @see DolphinView::selectedItems()
-     */
-    void selectAll();
-
-    /**
-     * Inverts the current selection: selected items get unselected,
-     * unselected items get selected.
-     * @see DolphinView::selectedItems()
+     * Marks the items indicated by \p urls to get selected after the
+     * directory DolphinView::url() has been loaded. Note that nothing
+     * gets selected if no loading of a directory has been triggered
+     * by DolphinView::setUrl() or DolphinView::reload().
      */
-    void invertSelection();
-
-    /** Returns true, if at least one item is selected. */
-    bool hasSelection() const;
-
-    void clearSelection();
+    void markUrlsAsSelected(const QList<KUrl>& urls);
 
     /**
      * Returns the selected items. The list is empty if no item has been
@@ -218,15 +209,7 @@ public:
      */
     int selectedItemsCount() const;
 
-    /**
-     * Sets the upper left position of the view content
-     * to (x,y). The content of the view might be larger than the visible area
-     * and hence a scrolling must be done.
-     */
-    void setContentsPosition(int x, int y);
-
-    /** Returns the upper left position of the view content. */
-    QPoint contentsPosition() const;
+    QItemSelectionModel* selectionModel() const;
 
     /**
      * Sets the zoom level to \a level. It is assured that the used
@@ -282,16 +265,6 @@ public:
      */
     void refresh();
 
-    /**
-     * Changes the directory of the view to \a url. If \a rootUrl is empty, the view
-     * properties from \a url are used for adjusting the view mode and the other properties.
-     * If \a rootUrl is not empty, the view properties from the root URL are considered
-     * instead. Specifying a root URL is only required if a view having a different root URL
-     * (e. g. the column view) should be restored. Usually using DolphinView::setUrl()
-     * is enough for changing the current URL.
-     */
-    void updateView(const KUrl& url, const KUrl& rootUrl);
-
     /**
      * Filters the currently shown items by \a nameFilter. All items
      * which contain the given filter string will be shown.
@@ -341,21 +314,22 @@ public:
     void setTabsForFilesEnabled(bool tabsForFiles);
     bool isTabsForFilesEnabled() const;
 
-    /**
-     * Marks the item \a url as active item as soon as it has
-     * been loaded by the directory lister. This is useful mark
-     * the previously visited directory as active when going
-     * back in history (the URL is known, but the item is not
-     * loaded yet).
-     */
-    void activateItem(const KUrl& url);
-
     /**
      * Returns true if the current view allows folders to be expanded,
      * i.e. presents a hierarchical view to the user.
      */
     bool itemsExpandable() const;
 
+    /**
+     * Restores the view state (current item, contents position, details view expansion state)
+     */
+    void restoreState(QDataStream& stream);
+
+    /**
+     * Saves the view state (current item, contents position, details view expansion state)
+     */
+    void saveState(QDataStream& stream);
+
 public slots:
     /**
      * Changes the directory to \a url. If the current directory is equal to
@@ -364,12 +338,22 @@ public slots:
     void setUrl(const KUrl& url);
 
     /**
-     * Request of a selection change. The view will do its best to accommodate
-     * the request, but it is not guaranteed that all items in \a selection
-     * will actually get selected. The view will e.g. not select items which
-     * are not in the currently displayed folder.
+     * Selects all items.
+     * @see DolphinView::selectedItems()
+     */
+    void selectAll();
+
+    /**
+     * Inverts the current selection: selected items get unselected,
+     * unselected items get selected.
+     * @see DolphinView::selectedItems()
      */
-    void changeSelection(const KFileItemList& selection);
+    void invertSelection();
+
+    /** Returns true, if at least one item is selected. */
+    bool hasSelection() const;
+
+    void clearSelection();
 
     /**
      * Triggers the renaming of the currently selected items, where
@@ -389,7 +373,7 @@ public slots:
 
     /**
      * Copies all selected items to the clipboard and marks
-     * the items as cutted.
+     * the items as cut.
      */
     void cutSelectedItems();
 
@@ -454,12 +438,6 @@ signals:
     /** Is emitted if URL of the view has been changed to \a url. */
     void urlChanged(const KUrl& url);
 
-    /**
-     * Is emitted if the view requests a changing of the current
-     * URL to \a url (see DolphinController::triggerUrlChangeRequest()).
-     */
-    void requestUrlChange(const KUrl& url);
-
     /**
      * Is emitted when clicking on an item with the left mouse button.
      */
@@ -506,9 +484,6 @@ signals:
      */
     void requestItemInfo(const KFileItem& item);
 
-    /** Is emitted if the contents has been moved to \a x, \a y. */
-    void contentsMoved(int x, int y);
-
     /**
      * Is emitted whenever the selection has been changed.
      */
@@ -559,7 +534,6 @@ signals:
 protected:
     /** @see QWidget::mouseReleaseEvent */
     virtual void mouseReleaseEvent(QMouseEvent* event);
-    virtual void wheelEvent(QWheelEvent* event);
     virtual bool eventFilter(QObject* watched, QEvent* event);
 
 private slots:
@@ -583,7 +557,7 @@ private slots:
      * the signal is emitted only after no selection change has been done
      * within a small delay.
      */
-    void emitDelayedSelectionChangedSignal();
+    void slotSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
 
     /**
      * Is called by emitDelayedSelectionChangedSignal() and emits the
@@ -631,12 +605,6 @@ private slots:
      */
     void updateAdditionalInfo(const KFileItemDelegate::InformationList& info);
 
-    /**
-     * Emits the signal contentsMoved with the current coordinates
-     * of the viewport as parameters.
-     */
-    void emitContentsMoved();
-
     /**
      * Updates the status bar to show hover information for the
      * item \a item. If currently other items are selected,
@@ -657,18 +625,18 @@ private slots:
      */
     void slotDeleteFileFinished(KJob* job);
 
-    /**
-     * Is emitted if the controller requests a changing of the current
-     * URL to \a url
-     */
-    void slotRequestUrlChange(const KUrl& url);
-
     /**
      * Invoked when the directory lister has completed the loading of
      * items. Assures that pasted items and renamed items get seleced.
      */
     void slotDirListerCompleted();
 
+    /**
+     * Invoked when the loading of the directory is finished.
+     * Restores the active item and the scroll position if possible.
+     */
+    void slotLoadingCompleted();
+
     /**
      * Is invoked when the KDirLister indicates refreshed items.
      */
@@ -689,17 +657,17 @@ private slots:
      */
     void selectAndScrollToCreatedItem();
 
-    /**
-     * Restore selection after view refresh.
-     */
-    void restoreSelection();
-
     /**
      * Called when a redirection happens.
      * Testcase: fish://localhost
      */
     void slotRedirection(const KUrl& oldUrl, const KUrl& newUrl);
 
+    /**
+     * Restores the contents position, if history information about the old position is available.
+     */
+    void restoreContentsPosition();
+
 private:
     void loadDirectory(const KUrl& url, bool reload = false);
 
@@ -762,7 +730,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();
 
         /**
@@ -785,6 +756,8 @@ private:
 
         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
@@ -803,23 +776,24 @@ private:
         DolphinColumnViewContainer* m_columnsContainer;
         DolphinSortFilterProxyModel* m_proxyModel;
         QAbstractItemView* m_dragSource;
+        QPointer<DolphinDetailsViewExpander> m_detailsViewExpander;
     };
 
     bool m_active : 1;
     bool m_showPreview : 1;
-    bool m_loadingDirectory : 1;
     bool m_storedCategorizedSorting : 1;
     bool m_tabsForFiles : 1;
     bool m_isContextMenuOpen : 1;   // TODO: workaround for Qt-issue 207192
     bool m_ignoreViewProperties : 1;
     bool m_assureVisibleCurrentIndex : 1;
+    bool m_expanderActive : 1;
 
     Mode m_mode;
 
-    DolphinMainWindow* m_mainWindow;
     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
@@ -827,6 +801,7 @@ private:
 
     KUrl m_rootUrl;
     KUrl m_activeItemUrl;
+    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