X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/de8ea90ca78ccfb26dd501dc3bc089fb24ad9094..37a98417cd64008b63b95b80ecbedc84d487bd25:/src/dolphintabwidget.h diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h index fbfe28302..24d9e228b 100644 --- a/src/dolphintabwidget.h +++ b/src/dolphintabwidget.h @@ -13,6 +13,8 @@ #include #include +#include + class DolphinViewContainer; class KConfigGroup; @@ -28,6 +30,15 @@ public: */ explicit DolphinTabWidget(DolphinNavigatorsWidgetAction *navigatorsWidget, QWidget *parent); + /** + * Where a newly opened tab should be placed. + */ + enum class NewTabPosition { + FollowSetting, ///< Honor openNewTabAfterLastTab setting + AfterCurrent, ///< After the current tab + AtEnd, ///< At the end of the tab bar + }; + /** * @return Tab page at the current index (can be 0 if tabs count is smaller than 1) */ @@ -60,12 +71,18 @@ public: void refreshViews(); /** - * @return Whether any of the tab pages contains @p url in their primary - * or secondary view. + * @return Whether any of the tab pages has @p url opened + * in their primary or secondary view. */ bool isUrlOpen(const QUrl& url) const; -signals: + /** + * @return Whether the item with @p url can be found in any view only by switching + * between already open tabs and scrolling in their primary or secondary view. + */ + bool isItemVisibleInAnyView(const QUrl& urlOfItem) const; + +Q_SIGNALS: /** * Is emitted when the active view has been changed, by changing the current * tab or by activating another view when split view is enabled in the current @@ -90,7 +107,7 @@ signals: */ void currentUrlChanged(const QUrl& url); -public slots: +public Q_SLOTS: /** * Opens a new view with the current URL that is part of a tab and activates * the tab. @@ -107,11 +124,11 @@ public slots: * Opens a new tab in the background showing the URL \a primaryUrl and the * optional URL \a secondaryUrl. */ - void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl()); + void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl(), NewTabPosition position = NewTabPosition::FollowSetting); /** - * Opens each directory in \p dirs in a separate tab. If \a splitView is set, - * 2 directories are collected within one tab. + * Opens each directory in \p dirs in a separate tab unless it is already open. + * If \a splitView is set, 2 directories are collected within one tab. * \pre \a dirs must contain at least one url. */ void openDirectories(const QList& dirs, bool splitView); @@ -167,7 +184,7 @@ public slots: /** Moves all selected items to the inactive view. */ void moveToInactiveSplitView(); -private slots: +private Q_SLOTS: /** * Opens the tab with the index \a index in a new Dolphin instance and closes * this tab. @@ -205,15 +222,42 @@ private: */ QString tabName(DolphinTabPage* tabPage) const; + struct ViewIndex { + const int tabIndex; + const bool isInPrimaryView; + }; + + /** + * Getter for a view container. + * @param viewIndex specifies the tab and the view within that tab. + * @return the view container specified in @p viewIndex or nullptr if it doesn't exist. + */ + DolphinViewContainer *viewContainerAt(ViewIndex viewIndex) const; + + /** + * Makes the view container specified in @p viewIndex become the active view container within this tab widget. + * @param viewIndex Specifies the tab to activate and the view container within the tab to activate. + * @return the freshly activated view container or nullptr if there is no view container at @p viewIndex. + */ + DolphinViewContainer *activateViewContainerAt(ViewIndex viewIndex); + + /** + * Get the position of the view within this widget that is open at @p directory. + * @param directory The URL of the directory we want to find. + * @return a small struct containing the tab index of the view and whether it is + * in the primary view. A std::nullopt is returned if there is no view open for @p directory. + */ + const std::optional viewOpenAtDirectory(const QUrl& directory) const; + /** - * @param url The URL that we would like - * @return a QPair with first containing the index of the tab with the - * desired URL or -1 if not found. Second says true if URL is in primary - * view container, false otherwise. False means the URL is in the secondary - * view container, unless first == -1. In that case the value of second - * is meaningless. + * Get the position of the view within this widget that has @p item in the view. + * This means that the item can be seen by the user in that view when scrolled to the right position. + * If the view has folders expanded and @p item is one of them, the view will also be returned. + * @param item The URL of the item we want to find. + * @return a small struct containing the tab index of the view and whether it is + * in the primary view. A std::nullopt is returned if there is no view open that has @p item visible anywhere. */ - QPair indexByUrl(const QUrl& url) const; + const std::optional viewShowingItem(const QUrl& item) const; private: QPointer m_lastViewedTab;