diff options
| author | Peter Penz <[email protected]> | 2010-07-24 21:45:49 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2010-07-24 21:45:49 +0000 |
| commit | 652d08c9242ed51d86dba3b2afda9d3b2e9a9cd7 (patch) | |
| tree | f65face40917d355fa74f593e04df9865f5a1552 /src/dolphinview.h | |
| parent | 935cc8a03bcb6088ff520d7161db14b9b6a29044 (diff) | |
Sourcecode hierarchy cleanup: Create folder "views" and move view related sources to it
svn path=/trunk/KDE/kdebase/apps/; revision=1154146
Diffstat (limited to 'src/dolphinview.h')
| -rw-r--r-- | src/dolphinview.h | 818 |
1 files changed, 0 insertions, 818 deletions
diff --git a/src/dolphinview.h b/src/dolphinview.h deleted file mode 100644 index dbef511bf..000000000 --- a/src/dolphinview.h +++ /dev/null @@ -1,818 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2006-2009 by Peter Penz <[email protected]> * - * Copyright (C) 2006 by Gregor Kališnik <[email protected]> * - * * - * 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 * - ***************************************************************************/ - - -#ifndef DOLPHINVIEW_H -#define DOLPHINVIEW_H - -#include <config-nepomuk.h> - -#include "libdolphin_export.h" - -#include <kparts/part.h> -#include <kfileitem.h> -#include <kfileitemdelegate.h> -#include <kio/fileundomanager.h> -#include <kio/job.h> - -#include <QBoxLayout> -#include <QKeyEvent> -#include <QLinkedList> -#include <QListView> -#include <QSet> -#include <QWidget> - -typedef KIO::FileUndoManager::CommandType CommandType; - -class DolphinColumnViewContainer; -class DolphinDetailsView; -class DolphinIconsView; -class DolphinModel; -class DolphinSortFilterProxyModel; -class DolphinViewController; -class KAction; -class KActionCollection; -class KDirLister; -class KUrl; -class ViewModeController; -class ViewProperties; -class DolphinDetailsViewExpander; - -/** - * @short Represents a view for the directory content. - * - * View modes for icons, details and columns are supported. It's - * possible to adjust: - * - sort order - * - sort type - * - show hidden files - * - show previews - * - * @see DolphinIconsView - * @see DolphinDetailsView - * @see DolphinColumnView - */ -class LIBDOLPHINPRIVATE_EXPORT DolphinView : public QWidget -{ - Q_OBJECT - -public: - /** - * Defines the view mode for a directory. The view mode - * can be defined when constructing a DolphinView. The - * view mode is automatically updated if the directory itself - * defines a view mode (see class ViewProperties for details). - */ - enum Mode - { - /** - * The directory items are shown as icons including an - * icon name. - */ - IconsView = 0, - - /** - * The icon, the name and at least the size of the directory - * items are shown in a table. It is possible to add columns - * for date, group and permissions. - */ - DetailsView = 1, - - /** - * Each folder is shown in a separate column. - */ - ColumnView = 2, - MaxModeEnum = ColumnView - }; - - /** Defines the sort order for the items of a directory. */ - enum Sorting - { - SortByName = 0, - SortBySize, - SortByDate, - SortByPermissions, - SortByOwner, - SortByGroup, - SortByType, - SortByDestination, - SortByPath, - MaxSortingEnum = SortByPath - }; - - /** - * @param parent Parent widget of the view. - * @param url Specifies the content which should be shown. - * @param proxyModel Used proxy model which specifies the sorting. The - * model is not owned by the view and won't get - * deleted. - */ - DolphinView(QWidget* parent, - const KUrl& url, - DolphinSortFilterProxyModel* proxyModel); - - virtual ~DolphinView(); - - /** - * Returns the current active URL, where all actions are applied. - * The URL navigator is synchronized with this URL. - */ - KUrl url() const; - - /** - * Returns the root URL of the view, which is defined as the first - * visible path of DolphinView::url(). Usually the root URL is - * equal to DolphinView::url(), but in the case of the column view - * when 2 columns are shown, the root URL might be: - * /home/peter/Documents - * and DolphinView::url() might return - * /home/peter/Documents/Music/ - */ - KUrl rootUrl() const; - - /** - * If \a active is true, the view will marked as active. The active - * view is defined as view where all actions are applied to. - */ - void setActive(bool active); - bool isActive() const; - - /** - * Changes the view mode for the current directory to \a mode. - * If the view properties should be remembered for each directory - * (GeneralSettings::globalViewProps() returns false), then the - * changed view mode will be stored automatically. - */ - void setMode(Mode mode); - Mode mode() const; - - /** See setShowPreview */ - bool showPreview() const; - - /** See setShowHiddenFiles */ - bool showHiddenFiles() const; - - /** See setCategorizedSorting */ - bool categorizedSorting() const; - - /** - * Returns true, if the categorized sorting is supported by the current - * used mode (see DolphinView::setMode()). Currently only DolphinView::IconsView - * supports categorizations. To check whether the categorized - * sorting is set, use DolphinView::categorizedSorting(). - */ - bool supportsCategorizedSorting() const; - - /** - * Marks the items indicated by \p urls to get selected after the - * directory DolphinView::url() has been loaded. Note that nothing - * gets selected if no loading of a directory has been triggered - * by DolphinView::setUrl() or DolphinView::reload(). - */ - void markUrlsAsSelected(const QList<KUrl>& urls); - - /** - * Returns the selected items. The list is empty if no item has been - * selected. - * @see DolphinView::selectedUrls() - */ - KFileItemList selectedItems() const; - - /** - * Returns a list of URLs for all selected items. An empty list - * is returned, if no item is selected. - * @see DolphinView::selectedItems() - */ - KUrl::List selectedUrls() const; - - /** - * Returns the number of selected items (this is faster than - * invoking selectedItems().count()). - */ - int selectedItemsCount() const; - - QItemSelectionModel* selectionModel() const; - - /** - * Sets the zoom level to \a level. It is assured that the used - * level is adjusted to be inside the range ZoomLevelInfo::minimumLevel() and - * ZoomLevelInfo::maximumLevel(). - */ - 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; - - /** Sets the sort order of the items inside a directory (see DolphinView::Sorting). */ - void setSorting(Sorting sorting); - - /** Returns the sort order of the items inside a directory (see DolphinView::Sorting). */ - Sorting sorting() const; - - /** Sets the sort order (Qt::Ascending or Qt::Descending) for the items. */ - void setSortOrder(Qt::SortOrder order); - - /** Returns the current used sort order (Qt::Ascending or Qt::Descending). */ - Qt::SortOrder sortOrder() const; - - /** Sets a separate sorting with folders first (true) or a mixed sorting of files and folders (false). */ - void setSortFoldersFirst(bool foldersFirst); - - /** Returns if files and folders are sorted separately or not. */ - bool sortFoldersFirst() const; - - /** Sets the additional information which should be shown for the items. */ - void setAdditionalInfo(KFileItemDelegate::InformationList info); - - /** Returns the additional information which should be shown for the items. */ - KFileItemDelegate::InformationList additionalInfo() const; - - /** Reloads the current directory. */ - void reload(); - - /** - * Refreshes the view to get synchronized with the (updated) Dolphin settings. - * This method only needs to get invoked if the view settings for the Icons View, - * Details View or Columns View have been changed. - */ - void refresh(); - - /** - * Filters the currently shown items by \a nameFilter. All items - * which contain the given filter string will be shown. - */ - void setNameFilter(const QString& nameFilter); - - /** - * 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; - - /** - * Returns a textual representation of the state of the current - * folder or selected items, suitable for use in the status bar. - */ - QString statusBarText() const; - - /** - * Returns the version control actions that are provided for the items \p items. - * Usually the actions are presented in the context menu. - */ - QList<QAction*> versionControlActions(const KFileItemList& items) const; - - /** - * Updates the state of the 'Additional Information' actions in \a collection. - */ - void updateAdditionalInfoActions(KActionCollection* collection); - - /** - * Returns the state of the paste action: - * first is whether the action should be enabled - * second is the text for the action - */ - QPair<bool, QString> pasteInfo() const; - - /** - * If \a tabsForFiles is true, the signal tabRequested() will also - * emitted also for files. Per default tabs for files is disabled - * and hence the signal tabRequested() will only be emitted for - * directories. - */ - void setTabsForFilesEnabled(bool tabsForFiles); - bool isTabsForFilesEnabled() const; - - /** - * Returns true if the current view allows folders to be expanded, - * i.e. presents a hierarchical view to the user. - */ - bool itemsExpandable() const; - - /** - * Restores the view state (current item, contents position, details view expansion state) - */ - void restoreState(QDataStream& stream); - - /** - * Saves the view state (current item, contents position, details view expansion state) - */ - void saveState(QDataStream& stream); - -public slots: - /** - * Changes the directory to \a url. If the current directory is equal to - * \a url, nothing will be done (use DolphinView::reload() instead). - */ - void setUrl(const KUrl& url); - - /** - * Selects all items. - * @see DolphinView::selectedItems() - */ - void selectAll(); - - /** - * Inverts the current selection: selected items get unselected, - * unselected items get selected. - * @see DolphinView::selectedItems() - */ - void invertSelection(); - - /** Returns true, if at least one item is selected. */ - bool hasSelection() const; - - void clearSelection(); - - /** - * Triggers the renaming of the currently selected items, where - * the user must input a new name for the items. - */ - void renameSelectedItems(); - - /** - * Moves all selected items to the trash. - */ - void trashSelectedItems(); - - /** - * Deletes all selected items. - */ - void deleteSelectedItems(); - - /** - * Copies all selected items to the clipboard and marks - * the items as cut. - */ - void cutSelectedItems(); - - /** Copies all selected items to the clipboard. */ - void copySelectedItems(); - - /** Pastes the clipboard data to this view. */ - void paste(); - - /** - * Pastes the clipboard data into the currently selected - * folder. If the current selection is not exactly one folder, no - * paste operation is done. - */ - void pasteIntoFolder(); - - /** - * Turns on the file preview for the all files of the current directory, - * if \a show is true. - * If the view properties should be remembered for each directory - * (GeneralSettings::globalViewProps() returns false), then the - * preview setting will be stored automatically. - */ - void setShowPreview(bool show); - - /** - * Shows all hidden files of the current directory, - * if \a show is true. - * If the view properties should be remembered for each directory - * (GeneralSettings::globalViewProps() returns false), then the - * show hidden file setting will be stored automatically. - */ - void setShowHiddenFiles(bool show); - - /** - * Summarizes all sorted items by their category \a categorized - * is true. - * If the view properties should be remembered for each directory - * (GeneralSettings::globalViewProps() returns false), then the - * categorized sorting setting will be stored automatically. - */ - void setCategorizedSorting(bool categorized); - - /** Switches between an ascending and descending sorting order. */ - void toggleSortOrder(); - - /** Switches between a separate sorting (with folders first) and a mixed sorting of files and folders. */ - void toggleSortFoldersFirst(); - - /** - * Switches on or off the displaying of additional information - * as specified by \a action. - */ - void toggleAdditionalInfo(QAction* action); - -signals: - /** - * Is emitted if the view has been activated by e. g. a mouse click. - */ - void activated(); - - /** Is emitted if URL of the view has been changed to \a url. */ - void urlChanged(const KUrl& url); - - /** - * Is emitted when clicking on an item with the left mouse button. - */ - void itemTriggered(const KFileItem& item); - - /** - * Is emitted if a new tab should be opened for the URL \a url. - */ - void tabRequested(const KUrl& url); - - /** - * Is emitted if the view mode (IconsView, DetailsView, - * PreviewsView) has been changed. - */ - void modeChanged(); - - /** Is emitted if the 'show preview' property has been changed. */ - void showPreviewChanged(); - - /** Is emitted if the 'show hidden files' property has been changed. */ - void showHiddenFilesChanged(); - - /** Is emitted if the 'categorized sorting' property has been changed. */ - void categorizedSortingChanged(); - - /** Is emitted if the sorting by name, size or date has been changed. */ - void sortingChanged(DolphinView::Sorting sorting); - - /** Is emitted if the sort order (ascending or descending) has been changed. */ - void sortOrderChanged(Qt::SortOrder order); - - /** Is emitted if the sorting of files and folders (separate with folders first or mixed) has been changed. */ - void sortFoldersFirstChanged(bool foldersFirst); - - /** Is emitted if the additional information shown for this view has been changed. */ - void additionalInfoChanged(); - - /** Is emitted if the zoom level has been changed by zooming in or out. */ - void zoomLevelChanged(int level); - - /** - * Is emitted if information of an item is requested to be shown e. g. in the panel. - * If item is null, no item information request is pending. - */ - void requestItemInfo(const KFileItem& item); - - /** - * Is emitted whenever the selection has been changed. - */ - void selectionChanged(const KFileItemList& selection); - - /** - * 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. - */ - void requestContextMenu(const KFileItem& item, - const KUrl& url, - const QList<QAction*>& customActions); - - /** - * Is emitted if an information message with the content \a msg - * should be shown. - */ - void infoMessage(const QString& msg); - - /** - * Is emitted if an error message with the content \a msg - * should be shown. - */ - void errorMessage(const QString& msg); - - /** - * Is emitted if an "operation completed" message with the content \a msg - * should be shown. - */ - void operationCompletedMessage(const QString& msg); - - /** - * Is emitted after DolphinView::setUrl() has been invoked and - * the path \a url is currently 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); - - /** - * Emitted when KDirLister emits redirection. - * Testcase: fish://localhost - */ - void redirection(const KUrl& oldUrl, const KUrl& newUrl); - -protected: - /** @see QWidget::mouseReleaseEvent */ - virtual void mouseReleaseEvent(QMouseEvent* event); - virtual bool eventFilter(QObject* watched, QEvent* event); - -private slots: - /** - * Marks the view as active (DolphinView:isActive() will return true) - * and emits the 'activated' signal if it is not already active. - */ - void activate(); - - /** - * If the item \a item is a directory, then this - * directory will be loaded. If the item is a file, the corresponding - * application will get started. - */ - void triggerItem(const KFileItem& index); - - /** - * Emits the signal \a selectionChanged() with a small delay. This is - * because getting all file items for the signal can be an expensive - * operation. Fast selection changes are collected in this case and - * the signal is emitted only after no selection change has been done - * within a small delay. - */ - void slotSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected); - - /** - * Is called by emitDelayedSelectionChangedSignal() and emits the - * signal \a selectionChanged() with all selected file items as parameter. - */ - void emitSelectionChangedSignal(); - - /** - * Opens the context menu on position \a pos. The position - * is used to check whether the context menu is related to an - * item or to the viewport. - */ - void openContextMenu(const QPoint& pos, const QList<QAction*>& customActions); - - /** - * Drops dragged URLs to the destination path \a destPath. If - * the URLs are dropped above an item inside the destination path, - * the item is indicated by \a destItem. - */ - void dropUrls(const KFileItem& destItem, - const KUrl& destPath, - QDropEvent* event); - - /** - * Updates the view properties of the current URL to the - * sorting given by \a sorting. - */ - void updateSorting(DolphinView::Sorting sorting); - - /** - * Updates the view properties of the current URL to the - * sort order given by \a order. - */ - void updateSortOrder(Qt::SortOrder order); - - /** - * Updates the view properties of the current URL to the - * sorting of files and folders (separate with folders first or mixed) given by \a foldersFirst. - */ - void updateSortFoldersFirst(bool foldersFirst); - - /** - * Updates the view properties of the current URL to the - * additional information given by \a info. - */ - void updateAdditionalInfo(const KFileItemDelegate::InformationList& info); - - /** - * 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); - - /** - * Invoked when the directory lister has completed the loading of - * items. Assures that pasted items and renamed items get seleced. - */ - void slotDirListerCompleted(); - - /** - * Invoked when the loading of the directory is finished. - * Restores the active item and the scroll position if possible. - */ - void slotLoadingCompleted(); - - /** - * Is invoked when the KDirLister indicates refreshed items. - */ - void slotRefreshItems(); - - /** - * 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 assure 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); - - /** - * Restores the contents position, if history information about the old position is available. - */ - void restoreContentsPosition(); - -private: - void loadDirectory(const KUrl& url, bool reload = false); - - /** - * Applies the view properties which are defined by the current URL - * to the DolphinView properties. - */ - void applyViewProperties(); - - /** - * Creates a new view representing the given view mode (DolphinView::mode()). - * The current view will get deleted. - */ - void createView(); - - void deleteView(); - - /** - * Helper method for DolphinView::paste() and DolphinView::pasteIntoFolder(). - * Pastes the clipboard data into the URL \a url. - */ - void pasteToUrl(const KUrl& url); - - /** - * Checks whether the current item view has the same zoom level - * as \a oldZoomLevel. If this is not the case, the zoom level - * of the controller is updated and a zoomLevelChanged() signal - * is emitted. - */ - void updateZoomLevel(int oldZoomLevel); - - /** - * Returns a list of URLs for all selected items. The list is - * simplified, so that when the URLs are part of different tree - * levels, only the parent is returned. - */ - KUrl::List simplifiedSelectedUrls() const; - - /** - * Returns the MIME data for all selected items. - */ - QMimeData* selectionMimeData() const; - - /** - * Is invoked after a paste operation or a drag & drop - * operation and adds the filenames of all URLs from \a mimeData to - * m_newFileNames. This allows to select all newly added - * items in slotDirListerCompleted(). - */ - void addNewFileNames(const QMimeData* mimeData); - -private: - /** - * Abstracts the access to the different view implementations - * for icons-, details- and column-view. - */ - class ViewAccessor - { - public: - ViewAccessor(DolphinSortFilterProxyModel* proxyModel); - ~ViewAccessor(); - - void createView(QWidget* parent, - DolphinViewController* dolphinViewController, - const ViewModeController* viewModeController, - Mode mode); - void deleteView(); - - /** - * Must be invoked before the URL has been changed and allows view implementations - * like the column view to create a new column. - */ - void prepareUrlChange(const KUrl& url); - - QAbstractItemView* itemView() const; - KFileItemDelegate* itemDelegate() const; - - /** - * Returns the widget that should be added to the layout as target. Usually - * the item view itself is returned, but in the case of the column view - * a container widget is returned. - */ - QWidget* layoutTarget() const; - - KUrl rootUrl() const; - - bool supportsCategorizedSorting() const; - bool itemsExpandable() const; - QSet<KUrl> expandedUrls() const; - const DolphinDetailsViewExpander* setExpandedUrls(const QSet<KUrl>& urlsToExpand); - - /** - * Returns true, if a reloading of the items is required - * when the additional information properties have been changed - * by the user. - */ - bool reloadOnAdditionalInfoChange() const; - - DolphinModel* dirModel() const; - DolphinSortFilterProxyModel* proxyModel() const; - KDirLister* dirLister() const; - - private: - DolphinIconsView* m_iconsView; - DolphinDetailsView* m_detailsView; - DolphinColumnViewContainer* m_columnsContainer; - DolphinSortFilterProxyModel* m_proxyModel; - QAbstractItemView* m_dragSource; - QPointer<DolphinDetailsViewExpander> m_detailsViewExpander; - }; - - bool m_active : 1; - bool m_showPreview : 1; - bool m_storedCategorizedSorting : 1; - bool m_tabsForFiles : 1; - bool m_isContextMenuOpen : 1; // TODO: workaround for Qt-issue 207192 - bool m_ignoreViewProperties : 1; - bool m_assureVisibleCurrentIndex : 1; - bool m_expanderActive : 1; - - Mode m_mode; - - QVBoxLayout* m_topLayout; - - DolphinViewController* m_dolphinViewController; - ViewModeController* m_viewModeController; - ViewAccessor m_viewAccessor; - - QItemSelectionModel* m_selectionModel; // allow to switch views without losing the selection - QTimer* m_selectionChangedTimer; - - KUrl m_rootUrl; - KUrl m_activeItemUrl; - QPoint m_restoredContentsPosition; - KUrl m_createdItemUrl; // URL for a new item that got created by the "Create New..." menu - KFileItemList m_selectedItems; // this is used for making the View to remember selections after F5 - - /** - * Remembers the filenames that have been added by a paste operation - * or a drag & drop operation. Allows to select the items in - * slotDirListerCompleted(). - */ - QSet<QString> m_newFileNames; -}; - -/// Allow using DolphinView::Mode in QVariant -Q_DECLARE_METATYPE(DolphinView::Mode) - -#endif // DOLPHINVIEW_H |
