X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5f57256a2f293622c7a10844adae29190907b9eb..8a0003bfbcc87068737ab1e2b94ae7b2ba73eca1:/src/views/dolphinview.h diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 61f6af1e2..0a5011d2f 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -1,36 +1,26 @@ -/*************************************************************************** - * Copyright (C) 2006-2009 by Peter Penz * - * Copyright (C) 2006 by Gregor KaliÅ¡nik * - * * - * 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 + * SPDX-FileCopyrightText: 2006 Gregor KaliÅ¡nik + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #ifndef DOLPHINVIEW_H #define DOLPHINVIEW_H -#include - +#include "dolphintabwidget.h" #include "dolphin_export.h" +#include "tooltips/tooltipmanager.h" -#include #include -#include #include -#include +#include +#include +#include + #include +#include +#include #include typedef KIO::FileUndoManager::CommandType CommandType; @@ -43,8 +33,9 @@ class KItemSet; class ToolTipManager; class VersionControlObserver; class ViewProperties; +class QLabel; class QGraphicsSceneDragDropEvent; -class QRegExp; +class QRegularExpression; /** * @short Represents a view for the directory content. @@ -181,10 +172,16 @@ public: void markUrlAsCurrent(const QUrl& url); /** - * All items that match to the pattern \a pattern will get selected - * if \a enabled is true and deselected if \a enabled is false. + * All items that match the regular expression \a regexp will get selected + * if \a enabled is true and deselected if \a enabled is false. + * + * Note that to match the whole string the pattern should be anchored: + * - you can anchor the pattern with QRegularExpression::anchoredPattern() + * - if you use QRegularExpresssion::wildcardToRegularExpression(), don't use + * QRegularExpression::anchoredPattern() as the former already returns an + * anchored pattern */ - void selectItems(const QRegExp& pattern, bool enabled); + void selectItems(const QRegularExpression ®exp, bool enabled); /** * Sets the zoom level to \a level. It is assured that the used @@ -194,6 +191,11 @@ public: void setZoomLevel(int level); int zoomLevel() const; + /** + * Resets the view's icon size to the default value + */ + void resetZoomLevel(); + void setSortRole(const QByteArray& role); QByteArray sortRole() const; @@ -204,6 +206,10 @@ public: void setSortFoldersFirst(bool foldersFirst); bool sortFoldersFirst() const; + /** Sets a separate sorting with hidden files and folders last (true) or not (false). */ + void setSortHiddenLast(bool hiddenLast); + bool sortHiddenLast() const; + /** Sets the additional information which should be shown for the items. */ void setVisibleRoles(const QList& roles); @@ -239,10 +245,13 @@ public: 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. @@ -305,7 +314,12 @@ public: */ static QUrl openItemAsFolderUrl(const KFileItem& item, const bool browseThroughArchives = true); -public slots: + /** + * Hides tooltip displayed over element. + */ + void hideToolTip(const ToolTipManager::HideBehavior behavior = ToolTipManager::HideBehavior::Later); + +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). @@ -347,10 +361,20 @@ public slots: * 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(); @@ -362,6 +386,17 @@ public slots: */ void pasteIntoFolder(); + /** + * Copies the path of the first selected KFileItem into Clipboard. + */ + void copyPathToClipboard(); + + /** + * Creates duplicates of selected items, appending "copy" + * to the end. + */ + void duplicateSelectedItems(); + /** * Handles a drop of @p dropEvent onto widget @p dropWidget and destination @p destUrl */ @@ -369,10 +404,16 @@ public slots: void stopLoading(); + /** + * Applies the state that has been restored by restoreViewState() + * to the view. + */ + void updateViewState(); + /** 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. */ @@ -384,13 +425,13 @@ signals: /** * Is emitted when clicking on an item with the left mouse button. */ - void itemActivated(const KFileItem& item); + void itemActivated(const KFileItem &item); /** * Is emitted when multiple items have been activated by e. g. * context menu open with. */ - void itemsActivated(const KFileItemList& items); + void itemsActivated(const KFileItemList &items); /** * Is emitted if items have been added or deleted. @@ -402,6 +443,16 @@ signals: */ void tabRequested(const QUrl& url); + /** + * Is emitted if a new tab should be opened for the URL \a url and set as active. + */ + void activeTabRequested(const QUrl &url); + + /** + * Is emitted if a new window should be opened for the URL \a url. + */ + void windowRequested(const QUrl &url); + /** * Is emitted if the view mode (IconsView, DetailsView, * PreviewsView) has been changed. @@ -417,6 +468,10 @@ signals: /** Is emitted if the 'grouped sorting' property has been changed. */ void groupedSortingChanged(bool groupedSorting); + /** Is emitted 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); @@ -429,6 +484,11 @@ signals: */ void sortFoldersFirstChanged(bool foldersFirst); + /** + * Is emitted if the sorting of hidden files has been changed. + */ + void sortHiddenLastChanged(bool hiddenLast); + /** Is emitted if the additional information shown for this view has been changed. */ void visibleRolesChanged(const QList& current, const QList& previous); @@ -450,13 +510,12 @@ signals: /** * Is emitted if a context menu is requested for the item \a item, * which is part of \a url. If the item is null, the context menu - * for the URL should be shown and the custom actions \a customActions - * will be added. + * for the URL should be shown. */ void requestContextMenu(const QPoint& pos, const KFileItem& item, - const QUrl& url, - const QList& customActions); + const KFileItemList &selectedItems, + const QUrl& url); /** * Is emitted if an information message with the content \a msg @@ -550,6 +609,10 @@ signals: */ void urlActivated(const QUrl& url); + void goUpRequested(); + + void fileItemsChanged(const KFileItemList &changedFileItems); + protected: /** Changes the zoom level if Control is pressed during a wheel event. */ void wheelEvent(QWheelEvent* event) override; @@ -557,7 +620,7 @@ protected: 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. @@ -565,12 +628,13 @@ private slots: void activate(); void slotItemActivated(int index); - void slotItemsActivated(const KItemSet& indexes); + void slotItemsActivated(const KItemSet &indexes); void slotItemMiddleClicked(int index); void slotItemContextMenuRequested(int index, const QPointF& pos); void slotViewContextMenuRequested(const QPointF& pos); void slotHeaderContextMenuRequested(const QPointF& pos); void slotHeaderColumnWidthChangeFinished(const QByteArray& role, qreal current); + void slotSidePaddingWidthChanged(qreal width); void slotItemHovered(int index); void slotItemUnhovered(int index); void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event); @@ -578,6 +642,10 @@ private slots: void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons); void slotRenameDialogRenamingFinished(const QList& 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. @@ -586,7 +654,7 @@ private slots: /* * 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 @@ -603,6 +671,15 @@ private slots: */ 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. @@ -621,6 +698,12 @@ private slots: */ void updateSortFoldersFirst(bool foldersFirst); + /** + * Updates the view properties of the current URL to the + * sorting of hidden files given by \a hiddenLast. + */ + void updateSortHiddenLast(bool hiddenLast); + /** * Indicates in the status bar that the delete operation * of the job \a job has been finished. @@ -646,10 +729,16 @@ private slots: /** * Invoked when the file item model indicates that the loading of a directory has - * been completed. Assures that pasted items and renamed items get seleced. + * been completed. Assures that pasted items and renamed items get selected. */ 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. */ @@ -690,24 +779,6 @@ private slots: */ void slotDirectoryRedirection(const QUrl& oldUrl, const QUrl& newUrl); - /** - * Applies the state that has been restored by restoreViewState() - * to the view. - */ - void updateViewState(); - - void hideToolTip(); - - /** - * 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: @@ -732,6 +803,21 @@ 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. @@ -774,8 +860,13 @@ private: void abortTwoClicksRenaming(); + void updatePlaceholderLabel(); + + void tryShowNameToolTip(QEvent* event); + private: void updatePalette(); + void showLoadingPlaceholder(); bool m_active; bool m_tabsForFiles; @@ -783,12 +874,15 @@ private: 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 m_visibleRoles; + QPointer m_statJobForStatusBarText; + QVBoxLayout* m_topLayout; KFileItemModel* m_model; @@ -811,6 +905,8 @@ private: QTimer* m_twoClicksRenamingTimer; QUrl m_twoClicksRenamingItemUrl; + QLabel* m_placeholderLabel; + QTimer* m_showLoadingPlaceholderTimer; // For unit tests friend class TestBase;