]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphintabwidget.h
Adress the first round of Angelaccio's review comments
[dolphin.git] / src / dolphintabwidget.h
index a84b7facb4233fbeaf2a15ef6091ecb9a01683e6..9cc03f127659e2a453157c29142f75a721fd84ba 100644 (file)
@@ -1,21 +1,8 @@
-/***************************************************************************
- * Copyright (C) 2014 by Emmanuel Pescosta <emmanuelpescosta099@gmail.com> *
- *                                                                         *
- *   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            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2014 Emmanuel Pescosta <emmanuelpescosta099@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #ifndef DOLPHIN_TAB_WIDGET_H
 #define DOLPHIN_TAB_WIDGET_H
@@ -32,6 +19,19 @@ class DolphinTabWidget : public QTabWidget
     Q_OBJECT
 
 public:
+    /**
+     * @brief Controls where tabs are placed
+     */
+    enum TabPlacement {
+        /**
+          * The new tab is placed after the current tab
+          */
+        AfterCurrentTab,
+        /**
+          * The new tab is placed after the last tab
+          */
+        AfterLastTab
+    };
     explicit DolphinTabWidget(QWidget* parent);
 
     /**
@@ -39,6 +39,18 @@ public:
      */
     DolphinTabPage* currentTabPage() const;
 
+    /**
+     * @return the next tab page. If the current active tab is the last tab,
+     * it returns the first tab. If there is only one tab, returns nullptr
+     */
+    DolphinTabPage* nextTabPage() const;
+
+    /**
+     * @return the previous tab page. If the current active tab is the first tab,
+     * it returns the last tab. If there is only one tab, returns nullptr
+     */
+    DolphinTabPage* prevTabPage() const;
+
     /**
      * @return Tab page at the given \a index (can be 0 if the index is out-of-range)
      */
@@ -53,6 +65,12 @@ public:
      */
     void refreshViews();
 
+    /**
+     * @return Whether any of the tab pages contains @p url in their primary
+     * or secondary view.
+     */
+    bool isUrlOpen(const QUrl& url) const;
+
 signals:
     /**
      * Is emitted when the active view has been changed, by changing the current
@@ -93,22 +111,25 @@ public slots:
 
     /**
      * Opens a new tab in the background showing the URL \a primaryUrl and the
-     * optional URL \a secondaryUrl.
+     * optional URL \a secondaryUrl. \a tabPlacement controls where the new tab
+     * is placed.
      */
-    void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl());
+    void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl(),
+                    DolphinTabWidget::TabPlacement tabPlacement = AfterLastTab);
 
     /**
-     * Opens each directory in \p dirs in a separate tab. If the "split view"
-     * option is enabled, 2 directories are collected within one tab.
+     * Opens each directory in \p dirs in a separate tab. 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<QUrl>& dirs);
+    void openDirectories(const QList<QUrl>& dirs, bool splitView);
 
     /**
-     * Opens the directory which contains the files \p files
-     * and selects all files (implements the --select option
-     * of Dolphin).
+     * Opens the directories which contain the files \p files and selects all files.
+     * If \a splitView is set, 2 directories are collected within one tab.
+     * \pre \a files must contain at least one url.
      */
-    void openFiles(const QList<QUrl> &files);
+    void openFiles(const QList<QUrl> &files, bool splitView);
 
     /**
      * Closes the currently active tab.
@@ -120,6 +141,16 @@ public slots:
      */
     void closeTab(const int index);
 
+    /**
+     * Activates the tab with the index \a index.
+     */
+    void activateTab(const int index);
+
+    /**
+     * Activates the last tab in the tab bar.
+     */
+    void activateLastTab();
+
     /**
      * Activates the next tab in the tab bar.
      * If the current active tab is the last tab, it activates the first tab.
@@ -132,19 +163,18 @@ public slots:
      */
     void activatePrevTab();
 
-    /**
-     * Is invoked if the Places panel got visible/invisible and takes care
-     * that the places-selector of all views is only shown if the Places panel
-     * is invisible.
-     */
-    void slotPlacesPanelVisibilityChanged(bool visible);
-
     /**
      * Is called when the user wants to reopen a previously closed tab from
      * the recent tabs menu.
      */
     void restoreClosedTab(const QByteArray& state);
 
+    /** Copies all selected items to the inactive view. */
+    void copyToInactiveSplitView();
+
+    /** Moves all selected items to the inactive view. */
+    void moveToInactiveSplitView();
+
 private slots:
     /**
      * Opens the tab with the index \a index in a new Dolphin instance and closes
@@ -173,18 +203,28 @@ private slots:
     void currentTabChanged(int index);
 
 protected:
-    virtual void tabInserted(int index) Q_DECL_OVERRIDE;
-    virtual void tabRemoved(int index) Q_DECL_OVERRIDE;
+    void tabInserted(int index) override;
+    void tabRemoved(int index) override;
 
 private:
     /**
-     * Returns the name of the tab for the URL \a url.
+     * @param tabPage The tab page to get the name of
+     * @return The name of the tab page
+     */
+    QString tabName(DolphinTabPage* tabPage) 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.
      */
-    QString tabName(const QUrl& url) const;
+    QPair<int, bool> indexByUrl(const QUrl& url) const;
 
 private:
-    /** Caches the (negated) places panel visibility */
-    bool m_placesSelectorVisible;
+    int m_lastViewedTab;
 };
 
 #endif