]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.h
Revert "Revert "Configurable Show hidden files and folders last toggle""
[dolphin.git] / src / views / dolphinview.h
index d0285da85255a37cbf6c3be2591da599f7bd0c00..75c9dd9856a382b9f9e2126b1ad2b66d4218424e 100644 (file)
@@ -19,6 +19,7 @@
 #include <kparts/part.h>
 
 #include <QMimeData>
+#include <QPointer>
 #include <QUrl>
 #include <QWidget>
 
@@ -205,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<QByteArray>& roles);
 
@@ -240,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.
@@ -311,7 +319,7 @@ public:
      */
     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).
@@ -405,7 +413,7 @@ public slots:
     /** 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.
      */
@@ -450,6 +458,10 @@ signals:
     /** 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);
 
@@ -462,6 +474,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<QByteArray>& current,
                              const QList<QByteArray>& previous);
@@ -585,6 +602,8 @@ signals:
 
     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;
@@ -592,7 +611,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.
@@ -642,6 +661,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.
@@ -660,6 +688,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.
@@ -735,16 +769,6 @@ private slots:
      */
     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:
@@ -769,6 +793,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.
@@ -815,6 +854,7 @@ private:
 
 private:
     void updatePalette();
+    void showLoadingPlaceholder();
 
     bool m_active;
     bool m_tabsForFiles;
@@ -829,6 +869,8 @@ private:
     Mode m_mode;
     QList<QByteArray> m_visibleRoles;
 
+    QPointer<KIO::StatJob> m_statJobForStatusBarText;
+
     QVBoxLayout* m_topLayout;
 
     KFileItemModel* m_model;
@@ -852,6 +894,7 @@ private:
     QTimer* m_twoClicksRenamingTimer;
     QUrl m_twoClicksRenamingItemUrl;
     QLabel* m_placeholderLabel;
+    QTimer* m_showLoadingPlaceholderTimer;
 
     // For unit tests
     friend class TestBase;