-/***************************************************************************
- * 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
+#include "dolphinnavigatorswidgetaction.h"
+#include "dolphintabpage.h"
+
#include <QTabWidget>
#include <QUrl>
class DolphinViewContainer;
-class DolphinTabPage;
class KConfigGroup;
class DolphinTabWidget : public QTabWidget
Q_OBJECT
public:
- explicit DolphinTabWidget(QWidget* parent);
+
+ /**
+ * @param navigatorsWidget The navigatorsWidget which is always going to be connected
+ * to the active tabPage.
+ */
+ explicit DolphinTabWidget(DolphinNavigatorsWidgetAction *navigatorsWidget, QWidget *parent);
/**
* @return Tab page at the current index (can be 0 if tabs count is smaller than 1)
*/
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)
*/
*/
void refreshViews();
-signals:
+ /**
+ * @return Whether any of the tab pages contains @p url in their primary
+ * or secondary view.
+ */
+ bool isUrlOpen(const QUrl& url) 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
*/
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.
void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl());
/**
- * 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.
*/
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.
*/
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);
-private slots:
+ /** Copies all selected items to the inactive view. */
+ void copyToInactiveSplitView();
+
+ /** Moves all selected items to the inactive view. */
+ void moveToInactiveSplitView();
+
+private Q_SLOTS:
/**
* Opens the tab with the index \a index in a new Dolphin instance and closes
* this tab.
void currentTabChanged(int index);
protected:
- virtual void tabInserted(int index);
- virtual void tabRemoved(int index);
+ 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;
+ QPointer<DolphinTabPage> m_lastViewedTab;
+ QPointer<DolphinNavigatorsWidgetAction> m_navigatorsWidget;
};
#endif