X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4bccabca1bd705f24a35ed1ea31fc6d185c2b442..258bbc01223ce35e6c81733be49eb50b45107b39:/src/dolphinview.h diff --git a/src/dolphinview.h b/src/dolphinview.h index b0d78482a..352841f4a 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -41,19 +41,20 @@ 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& 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 expandedUrls() const; + const DolphinDetailsViewExpander* setExpandedUrls(const QSet& 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 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