-/***************************************************************************
- * Copyright (C) 2006-2009 by Peter Penz <peter.penz19@gmail.com> *
- * Copyright (C) 2006 by Gregor Kališnik <gregor@podnapisi.net> *
- * *
- * 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: 2006-2009 Peter Penz <peter.penz19@gmail.com>
+ * SPDX-FileCopyrightText: 2006 Gregor Kališnik <gregor@podnapisi.net>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
#ifndef DOLPHINVIEW_H
#define DOLPHINVIEW_H
#include <kparts/part.h>
#include <QMimeData>
+#include <QPointer>
#include <QUrl>
#include <QWidget>
class ToolTipManager;
class VersionControlObserver;
class ViewProperties;
+class QLabel;
class QGraphicsSceneDragDropEvent;
class QRegularExpression;
QStringList mimeTypeFilters() const;
/**
- * Returns a textual representation of the state of the current
+ * Tells the view to generate an updated status bar text. The result
+ * is returned through the statusBarTextChanged(QString statusBarText) signal.
+ * It will carry a textual representation of the state of the current
* folder or selected items, suitable for use in the status bar.
+ * Any pending requests of status bar text are killed.
*/
- QString statusBarText() const;
+ void requestStatusBarText();
/**
* Returns the version control actions that are provided for the items \p items.
*/
void hideToolTip(const ToolTipManager::HideBehavior behavior = ToolTipManager::HideBehavior::Later);
-public slots:
+public Q_SLOTS:
/**
* Changes the directory to \a url. If the current directory is equal to
* \a url, nothing will be done (use DolphinView::reload() instead).
* Copies all selected items to the clipboard and marks
* the items as cut.
*/
- void cutSelectedItems();
+ void cutSelectedItemsToClipboard();
/** Copies all selected items to the clipboard. */
- void copySelectedItems();
+ void copySelectedItemsToClipboard();
+
+ /**
+ * Copies all selected items to @p destinationUrl.
+ */
+ void copySelectedItems(const KFileItemList &selection, const QUrl &destinationUrl);
+
+ /**
+ * Moves all selected items to @p destinationUrl.
+ */
+ void moveSelectedItems(const KFileItemList &selection, const QUrl &destinationUrl);
/** Pastes the clipboard data to this view. */
void paste();
*/
void pasteIntoFolder();
+ /**
+ * Copies the path of the first selected KFileItem into Clipboard.
+ */
+ void copyPathToClipboard();
+
/**
* Creates duplicates of selected items, appending "copy"
* to the end.
/** Activates the view if the item list container gets focus. */
bool eventFilter(QObject* watched, QEvent* event) override;
-signals:
+Q_SIGNALS:
/**
* Is emitted if the view has been activated by e. g. a mouse click.
*/
/**
* Is emitted if a new tab should be opened for the URL \a url.
*/
- void tabRequested(const QUrl& url, DolphinTabWidget::TabPlacement tabPlacement);
+ void tabRequested(const QUrl& url);
/**
* Is emitted if the view mode (IconsView, DetailsView,
/** Is emitted if the 'grouped sorting' property has been changed. */
void groupedSortingChanged(bool groupedSorting);
+ /** Is emmited in reaction to a requestStatusBarText() call.
+ * @see requestStatusBarText() */
+ void statusBarTextChanged(QString statusBarText);
+
/** Is emitted if the sorting by name, size or date has been changed. */
void sortRoleChanged(const QByteArray& role);
*/
void urlActivated(const QUrl& url);
+ void goUpRequested();
+
protected:
/** Changes the zoom level if Control is pressed during a wheel event. */
void wheelEvent(QWheelEvent* event) override;
void hideEvent(QHideEvent* event) override;
bool event(QEvent* event) override;
-private slots:
+private Q_SLOTS:
/**
* Marks the view as active (DolphinView:isActive() will return true)
* and emits the 'activated' signal if it is not already active.
void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons);
void slotRenameDialogRenamingFinished(const QList<QUrl>& urls);
void slotSelectedItemTextPressed(int index);
+ void slotCopyingDone(KIO::Job *, const QUrl &, const QUrl &to);
+ void slotIncreaseZoom();
+ void slotDecreaseZoom();
+ void slotSwipeUp();
/*
* Is called when new items get pasted or dropped.
/*
* Is called after all pasted or dropped items have been copied to destination.
*/
- void slotPasteJobResult(KJob *job);
+ void slotJobResult(KJob *job);
/**
* Emits the signal \a selectionChanged() with a small delay. This is
*/
void emitSelectionChangedSignal();
+ /**
+ * Helper method for DolphinView::requestStatusBarText().
+ * Calculates the amount of folders and files and their total size in
+ * response to a KStatJob::result(), then calls emitStatusBarText().
+ * @see requestStatusBarText()
+ * @see emitStatusBarText()
+ */
+ void slotStatJobResult(KJob *job);
+
/**
* Updates the view properties of the current URL to the
* sorting given by \a role.
*/
void slotDirectoryLoadingCompleted();
+ /**
+ * Invoked when the file item model indicates that the loading of a directory has
+ * been canceled.
+ */
+ void slotDirectoryLoadingCanceled();
+
/**
* Is invoked when items of KFileItemModel have been changed.
*/
*/
void slotDirectoryRedirection(const QUrl& oldUrl, const QUrl& newUrl);
- /**
- * Calculates the number of currently shown files into
- * \a fileCount and the number of folders into \a folderCount.
- * The size of all files is written into \a totalFileSize.
- * It is recommend using this method instead of asking the
- * directory lister or the model directly, as it takes
- * filtering and hierarchical previews into account.
- */
- void calculateItemCount(int& fileCount, int& folderCount, KIO::filesize_t& totalFileSize) const;
-
void slotTwoClicksRenamingTimerTimeout();
private:
*/
void applyModeToView();
+ enum Selection {
+ HasSelection,
+ NoSelection
+ };
+ /**
+ * Helper method for DolphinView::requestStatusBarText().
+ * Generates the status bar text from the parameters and
+ * then emits statusBarTextChanged().
+ * @param totalFileSize the sum of the sizes of the files
+ * @param selection if HasSelection is passed, the emitted status bar text will say
+ * that the folders and files which are counted here are selected.
+ */
+ void emitStatusBarText(const int folderCount, const int fileCount,
+ KIO::filesize_t totalFileSize, const Selection selection);
+
/**
* Helper method for DolphinView::paste() and DolphinView::pasteIntoFolder().
* Pastes the clipboard data into the URL \a url.
void abortTwoClicksRenaming();
+ void updatePlaceholderLabel();
+
private:
void updatePalette();
bool m_isFolderWritable;
bool m_dragging; // True if a dragging is done. Required to be able to decide whether a
// tooltip may be shown when hovering an item.
+ bool m_loading;
QUrl m_url;
QString m_viewPropertiesContext;
Mode m_mode;
QList<QByteArray> m_visibleRoles;
+ QPointer<KIO::StatJob> m_statJobForStatusBarText;
+
QVBoxLayout* m_topLayout;
KFileItemModel* m_model;
QTimer* m_twoClicksRenamingTimer;
QUrl m_twoClicksRenamingItemUrl;
+ QLabel* m_placeholderLabel;
// For unit tests
friend class TestBase;