X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/6c3d9acbc22ea9463ba40ef84c9e8c8419dfacf3..fa36c3fd1f53a223f43bb57d7c28e431a889a7c2:/src/views/dolphinview.h diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 9c674d03a..4ba10293a 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -21,7 +21,7 @@ #ifndef DOLPHINVIEW_H #define DOLPHINVIEW_H -#include +#include #include "libdolphin_export.h" @@ -30,20 +30,22 @@ #include #include #include +#include #include #include #include -#include #include typedef KIO::FileUndoManager::CommandType CommandType; -class DolphinItemListContainer; +class DolphinItemListView; class KAction; class KActionCollection; class KFileItemModel; +class KItemListContainer; class KItemModelBase; +class KItemSet; class KUrl; class ToolTipManager; class VersionControlObserver; @@ -180,8 +182,8 @@ public: void markUrlsAsSelected(const QList& 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); @@ -189,7 +191,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 @@ -199,18 +201,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; @@ -227,11 +217,8 @@ public: /** Returns the additional information which should be shown for the items. */ QList visibleRoles() const; - /** Reloads the current directory. */ void reload(); - void stopLoading(); - /** * Refreshes the view to get synchronized with the settings (e.g. icons size, * font, ...). @@ -251,14 +238,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 @@ -304,14 +289,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 @@ -369,6 +369,8 @@ public slots: */ void pasteIntoFolder(); + void stopLoading(); + /** Activates the view if the item list container gets focus. */ virtual bool eventFilter(QObject* watched, QEvent* event); @@ -393,6 +395,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. */ @@ -479,35 +487,35 @@ signals: /** * Is emitted after DolphinView::setUrl() has been invoked and - * the directory \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 startedDirLoading(const KUrl& url); + void directoryLoadingStarted(); /** * Is emitted after the directory triggered by DolphinView::setUrl() * has been loaded. */ - void finishedDirLoading(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 directory have been loaded. */ - void dirLoadingProgress(int percent); + void directoryLoadingProgress(int percent); /** * Is emitted if the sorting is done asynchronously and provides the * progress information of the sorting. */ - void dirSortingProgress(int percent); - - /** - * Is emitted if the DolphinView::setUrl() is invoked but the URL is not - * a directory. - */ - void urlIsFileError(const KUrl& file); + void directorySortingProgress(int percent); /** * Emitted when the file-item-model emits redirection. @@ -515,6 +523,12 @@ signals: */ 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 @@ -540,6 +554,7 @@ protected: /** @reimp */ virtual void hideEvent(QHideEvent* event); + virtual bool event(QEvent* event); private slots: /** @@ -549,7 +564,7 @@ private slots: void activate(); void slotItemActivated(int index); - void slotItemsActivated(const QSet& indexes); + void slotItemsActivated(const KItemSet& indexes); void slotItemMiddleClicked(int index); void slotItemContextMenuRequested(int index, const QPointF& pos); void slotViewContextMenuRequested(const QPointF& pos); @@ -561,6 +576,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 @@ -568,7 +588,7 @@ private slots: * the signal is emitted only after no selection change has been done * within a small delay. */ - void slotSelectionChanged(const QSet& current, const QSet& previous); + void slotSelectionChanged(const KItemSet& current, const KItemSet& previous); /** * Is called by emitDelayedSelectionChangedSignal() and emits the @@ -594,37 +614,25 @@ 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 file item model has started the loading * of the directory specified by DolphinView::url(). */ - void slotDirLoadingStarted(); + void slotDirectoryLoadingStarted(); /** * 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 slotDirLoadingCompleted(); + void slotDirectoryLoadingCompleted(); /** * Is invoked when items of KFileItemModel have been changed. @@ -650,26 +658,21 @@ private slots: void slotVisibleRolesChangedByHeader(const QList& current, const QList& 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() @@ -679,17 +682,38 @@ private slots: void hideToolTip(); -private: - KFileItemModel* fileItemModel() 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. + */ + void calculateItemCount(int& fileCount, int& folderCount, KIO::filesize_t& totalFileSize) const; +private: 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. @@ -708,14 +732,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 @@ -723,6 +739,13 @@ private: */ void updateWritableState(); + /** + * @return The current URL if no viewproperties-context is given (see + * DolphinView::viewPropertiesContext(), otherwise the context + * is returned. + */ + KUrl viewPropertiesUrl() const; + private: bool m_active; bool m_tabsForFiles; @@ -732,28 +755,34 @@ private: // tooltip may be shown when hovering an item. KUrl m_url; + QString m_viewPropertiesContext; Mode m_mode; QList m_visibleRoles; QVBoxLayout* m_topLayout; - 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 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