]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.h
Merge remote-tracking branch 'origin/KDE/4.13'
[dolphin.git] / src / views / dolphinview.h
index 71128569af8bda1c4952752d189bba4775235a43..06c09edc32583123bcfa1ec93d607b118408215b 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef DOLPHINVIEW_H
 #define DOLPHINVIEW_H
 
-#include <config-nepomuk.h>
+#include <config-baloo.h>
 
 #include "libdolphin_export.h"
 
 #include <QBoxLayout>
 #include <QKeyEvent>
 #include <QLinkedList>
-#include <QSet>
 #include <QWidget>
 
 typedef KIO::FileUndoManager::CommandType CommandType;
 
-class DolphinDirLister;
-class DolphinItemListContainer;
+class DolphinItemListView;
 class KAction;
 class KActionCollection;
 class KFileItemModel;
+class KItemListContainer;
 class KItemModelBase;
+class KItemSet;
 class KUrl;
 class ToolTipManager;
 class VersionControlObserver;
@@ -154,6 +154,12 @@ public:
      */
     KFileItemList items() const;
 
+    /**
+     * @return The number of items. itemsCount() is faster in comparison
+     *         to items().count().
+     */
+    int itemsCount() const;
+
     /**
      * Returns the selected items. The list is empty if no item has been
      * selected.
@@ -175,8 +181,8 @@ public:
     void markUrlsAsSelected(const QList<KUrl>& urls);
 
     /**
-     * Marks the item indicated by \p url as the current item after the
-     * directory DolphinView::url() has been loaded.
+     * Marks the item indicated by \p url to be scrolled to and as the
+     * current item after directory DolphinView::url() has been loaded.
      */
     void markUrlAsCurrent(const KUrl& url);
 
@@ -184,7 +190,7 @@ public:
      * All items that match to the pattern \a pattern will get selected
      * if \a enabled is true and deselected if  \a enabled is false.
      */
-    void setItemSelectionEnabled(const QRegExp& pattern, bool enabled);
+    void selectItems(const QRegExp& pattern, bool enabled);
 
     /**
      * Sets the zoom level to \a level. It is assured that the used
@@ -194,18 +200,6 @@ public:
     void setZoomLevel(int level);
     int zoomLevel() const;
 
-    /**
-     * Returns true, if zooming in is possible. If false is returned,
-     * the maximum zooming level has been reached.
-     */
-    bool isZoomInPossible() const;
-
-    /**
-     * Returns true, if zooming out is possible. If false is returned,
-     * the minimum zooming level has been reached.
-     */
-    bool isZoomOutPossible() const;
-
     void setSortRole(const QByteArray& role);
     QByteArray sortRole() const;
 
@@ -222,11 +216,8 @@ public:
     /** Returns the additional information which should be shown for the items. */
     QList<QByteArray> visibleRoles() const;
 
-    /** Reloads the current directory. */
     void reload();
 
-    void stopLoading();
-
     /**
      * Refreshes the view to get synchronized with the settings (e.g. icons size,
      * font, ...).
@@ -246,14 +237,12 @@ public:
     QString nameFilter() const;
 
     /**
-     * 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.
+     * Filters the currently shown items by \a filters. All items
+     * whose content-type matches those given by the list of filters
+     * will be shown.
      */
-    void calculateItemCount(int& fileCount, int& folderCount, KIO::filesize_t& totalFileSize) const;
+    void setMimeTypeFilters(const QStringList& filters);
+    QStringList mimeTypeFilters() const;
 
     /**
      * Returns a textual representation of the state of the current
@@ -299,14 +288,29 @@ public:
      */
     void saveState(QDataStream& stream);
 
-    /** Returns true, if at least one item is selected. */
-    bool hasSelection() const;
-
     /**
      * Returns the root item which represents the current URL.
      */
     KFileItem rootItem() const;
 
+    /**
+     * Sets a context that is used for remembering the view-properties.
+     * Per default the context is empty and the path of the currently set URL
+     * is used for remembering the view-properties. Setting a custom context
+     * makes sense if specific types of URLs (e.g. search-URLs) should
+     * share common view-properties.
+     */
+    void setViewPropertiesContext(const QString& context);
+    QString viewPropertiesContext() const;
+
+    /**
+     * Checks if the given \a item can be opened as folder (e.g. archives).
+     * This function will also adjust the \a url (e.g. change the protocol).
+     * @return a valid and adjusted url if the item can be opened as folder,
+     * otherwise return an empty url.
+     */
+    static KUrl openItemAsFolderUrl(const KFileItem& item, const bool browseThroughArchives = true);
+
 public slots:
     /**
      * Changes the directory to \a url. If the current directory is equal to
@@ -364,6 +368,8 @@ public slots:
      */
     void pasteIntoFolder();
 
+    void stopLoading();
+
     /** Activates the view if the item list container gets focus. */
     virtual bool eventFilter(QObject* watched, QEvent* event);
 
@@ -388,6 +394,12 @@ signals:
      */
     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);
+
     /**
      * Is emitted if items have been added or deleted.
      */
@@ -474,36 +486,48 @@ signals:
 
     /**
      * Is emitted after DolphinView::setUrl() has been invoked and
-     * the path \a url is currently loaded. If this signal is emitted,
+     * the current directory is loaded. If this signal is emitted,
      * it is assured that the view contains already the correct root
      * URL and property settings.
      */
-    void startedPathLoading(const KUrl& url);
+    void directoryLoadingStarted();
 
     /**
-     * Is emitted after the path triggered by DolphinView::setUrl()
+     * Is emitted after the directory triggered by DolphinView::setUrl()
      * has been loaded.
      */
-    void finishedPathLoading(const KUrl& url);
+    void directoryLoadingCompleted();
+
+    /**
+     * Is emitted after the directory loading triggered by DolphinView::setUrl()
+     * has been canceled.
+     */
+    void directoryLoadingCanceled();
 
     /**
      * Is emitted after DolphinView::setUrl() has been invoked and provides
-     * the information how much percent of the current path have been loaded.
+     * the information how much percent of the current directory have been loaded.
      */
-    void pathLoadingProgress(int percent);
+    void directoryLoadingProgress(int percent);
 
     /**
-     * Is emitted if the DolphinView::setUrl() is invoked but the URL is not
-     * a directory.
+     * Is emitted if the sorting is done asynchronously and provides the
+     * progress information of the sorting.
      */
-    void urlIsFileError(const KUrl& file);
+    void directorySortingProgress(int percent);
 
     /**
-     * Emitted when KDirLister emits redirection.
+     * Emitted when the file-item-model emits redirection.
      * Testcase: fish://localhost
      */
     void redirection(const KUrl& oldUrl, const KUrl& newUrl);
 
+    /**
+     * Is emitted when the URL set by DolphinView::setUrl() represents a file.
+     * In this case no signal errorMessage() will be emitted.
+     */
+    void urlIsFileError(const KUrl& url);
+
     /**
      * Is emitted when the write state of the folder has been changed. The application
      * should disable all actions like "Create New..." that depend on the write
@@ -529,6 +553,7 @@ protected:
 
     /** @reimp */
     virtual void hideEvent(QHideEvent* event);
+    virtual bool event(QEvent* event);
 
 private slots:
     /**
@@ -538,7 +563,7 @@ private slots:
     void activate();
 
     void slotItemActivated(int index);
-    void slotItemsActivated(const QSet<int>& indexes);
+    void slotItemsActivated(const KItemSet& indexes);
     void slotItemMiddleClicked(int index);
     void slotItemContextMenuRequested(int index, const QPointF& pos);
     void slotViewContextMenuRequested(const QPointF& pos);
@@ -550,6 +575,11 @@ private slots:
     void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
     void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons);
 
+    /*
+     * Is called when new items get pasted or dropped.
+     */
+    void slotAboutToCreate(const KUrl::List& urls);
+
     /**
      * Emits the signal \a selectionChanged() with a small delay. This is
      * because getting all file items for the selection can be an expensive
@@ -557,7 +587,7 @@ private slots:
      * the signal is emitted only after no selection change has been done
      * within a small delay.
      */
-    void slotSelectionChanged(const QSet<int>& current, const QSet<int>& previous);
+    void slotSelectionChanged(const KItemSet& current, const KItemSet& previous);
 
     /**
      * Is called by emitDelayedSelectionChangedSignal() and emits the
@@ -583,44 +613,30 @@ private slots:
      */
     void updateSortFoldersFirst(bool foldersFirst);
 
-    /**
-     * Updates the status bar to show hover information for the
-     * item \a item. If currently other items are selected,
-     * no hover information is shown.
-     * @see DolphinView::clearHoverInformation()
-     */
-    void showHoverInformation(const KFileItem& item);
-
-    /**
-     * Clears the hover information shown in the status bar.
-     * @see DolphinView::showHoverInformation().
-     */
-    void clearHoverInformation();
-
     /**
      * Indicates in the status bar that the delete operation
      * of the job \a job has been finished.
      */
     void slotDeleteFileFinished(KJob* job);
 
+    void slotRenamingFailed(const KUrl& oldUrl, const KUrl& newUrl);
+
     /**
-     * Invoked when the directory lister has been started the
-     * loading of \a url.
+     * Invoked when the file item model has started the loading
+     * of the directory specified by DolphinView::url().
      */
-    void slotDirListerStarted(const KUrl& url);
+    void slotDirectoryLoadingStarted();
 
     /**
-     * Invoked when the file item model indicates that the directory lister has completed the loading
-     * of items, and that expanded folders have been restored (if the view mode is 'Details', and the
-     * view state is restored after navigating back or forward in history). Assures that pasted items
-     * and renamed items get seleced.
+     * 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.
      */
-    void slotLoadingCompleted();
+    void slotDirectoryLoadingCompleted();
 
     /**
-     * Is invoked when the KDirLister indicates refreshed items.
+     * Is invoked when items of KFileItemModel have been changed.
      */
-    void slotRefreshItems();
+    void slotItemsChanged();
 
     /**
      * Is invoked when the sort order has been changed by the user by clicking
@@ -641,26 +657,21 @@ private slots:
     void slotVisibleRolesChangedByHeader(const QList<QByteArray>& current,
                                          const QList<QByteArray>& previous);
 
+    void slotRoleEditingCanceled();
+    void slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value);
+
     /**
      * Observes the item with the URL \a url. As soon as the directory
      * model indicates that the item is available, the item will
      * get selected and it is assured that the item stays visible.
-     *
-     * @see selectAndScrollToCreatedItem()
      */
     void observeCreatedItem(const KUrl& url);
 
-    /**
-     * Selects and scrolls to the item that got observed
-     * by observeCreatedItem().
-     */
-    void selectAndScrollToCreatedItem();
-
     /**
      * Called when a redirection happens.
      * Testcase: fish://localhost
      */
-    void slotRedirection(const KUrl& oldUrl, const KUrl& newUrl);
+    void slotDirectoryRedirection(const KUrl& oldUrl, const KUrl& newUrl);
 
     /**
      * Applies the state that has been restored by restoreViewState()
@@ -670,19 +681,38 @@ private slots:
 
     void hideToolTip();
 
-    //void slotUrlChangeRequested(const KUrl& url);
+    /**
+     * 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;
 
 private:
-    KFileItemModel* fileItemModel() const;
-
     void loadDirectory(const KUrl& url, bool reload = false);
 
     /**
      * Applies the view properties which are defined by the current URL
-     * to the DolphinView properties.
+     * to the DolphinView properties. The view properties are read from a
+     * .directory file either in the current directory, or in the
+     * share/apps/dolphin/view_properties/ subfolder of the user's .kde folder.
      */
     void applyViewProperties();
 
+    /**
+     * Applies the given view properties to the DolphinView.
+     */
+    void applyViewProperties(const ViewProperties& props);
+
+    /**
+     * Applies the m_mode property to the corresponding
+     * itemlayout-property of the KItemListView.
+     */
+    void applyModeToView();
+
     /**
      * Helper method for DolphinView::paste() and DolphinView::pasteIntoFolder().
      * Pastes the clipboard data into the URL \a url.
@@ -701,14 +731,6 @@ private:
      */
     QMimeData* selectionMimeData() const;
 
-    /**
-     * Is invoked after a paste operation or a drag & drop
-     * operation and URLs from \a mimeData as selected.
-     * This allows to select all newly pasted
-     * items in restoreViewState().
-     */
-    void markPastedUrlsAsSelected(const QMimeData* mimeData);
-
     /**
      * Updates m_isFolderWritable dependent on whether the folder represented by
      * the current URL is writable. If the state has changed, the signal
@@ -717,10 +739,11 @@ private:
     void updateWritableState();
 
     /**
-     * Returns the text for the filesize by converting it to the best fitting
-     * unit.
+     * @return The current URL if no viewproperties-context is given (see
+     *         DolphinView::viewPropertiesContext(), otherwise the context
+     *         is returned.
      */
-    static QString fileSizeText(KIO::filesize_t fileSize);
+    KUrl viewPropertiesUrl() const;
 
 private:
     bool m_active;
@@ -731,29 +754,34 @@ private:
                      // tooltip may be shown when hovering an item.
 
     KUrl m_url;
+    QString m_viewPropertiesContext;
     Mode m_mode;
     QList<QByteArray> m_visibleRoles;
 
     QVBoxLayout* m_topLayout;
 
-    DolphinDirLister* m_dirLister;
-    DolphinItemListContainer* m_container;
+    KFileItemModel* m_model;
+    DolphinItemListView* m_view;
+    KItemListContainer* m_container;
 
     ToolTipManager* m_toolTipManager;
 
     QTimer* m_selectionChangedTimer;
 
     KUrl m_currentItemUrl; // Used for making the view to remember the current URL after F5
+    bool m_scrollToCurrentItem; // Used for marking we need to scroll to current item or not
     QPoint m_restoredContentsPosition;
-    KUrl m_createdItemUrl; // URL for a new item that got created by the "Create New..." menu
 
     QList<KUrl> m_selectedUrls; // Used for making the view to remember selections after F5
+    bool m_clearSelectionBeforeSelectingNewItems;
+    bool m_markFirstNewlySelectedItemAsCurrent;
 
     VersionControlObserver* m_versionControlObserver;
 
     // For unit tests
     friend class TestBase;
     friend class DolphinDetailsViewTest;
+    friend class DolphinPart;                   // Accesses m_model
 };
 
 /// Allow using DolphinView::Mode in QVariant