* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-
#ifndef DOLPHINVIEW_H
#define DOLPHINVIEW_H
class KAction;
class KActionCollection;
class KFileItemModel;
+class KItemModelBase;
class KUrl;
class ToolTipManager;
+class VersionControlObserver;
class ViewProperties;
+class QGraphicsSceneDragDropEvent;
class QRegExp;
/**
enum AdditionalInfo
{
NoInfo = 0,
- NameInfo,
SizeInfo,
DateInfo,
PermissionsInfo,
void setMode(Mode mode);
Mode mode() const;
- /** See setPreviewsShown */
+ /**
+ * 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 setPreviewsShown(bool show);
bool previewsShown() const;
- /** See setShowHiddenFiles */
+ /**
+ * 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 setHiddenFilesShown(bool show);
bool hiddenFilesShown() const;
- /** See setCategorizedSorting */
- bool categorizedSorting() const;
+ /**
+ * Turns on sorting by groups if \a enable is true.
+ */
+ void setGroupedSorting(bool grouped);
+ bool groupedSorting() const;
/**
* Returns the items of the view.
*/
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.
+ */
+ void markUrlAsCurrent(const KUrl& 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.
void stopLoading();
/**
- * 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.
+ * Refreshes the view to get synchronized with the settings (e.g. icons size,
+ * font, ...).
*/
- void refresh();
+ void readSettings();
+
+ /**
+ * Saves the current settings (e.g. icons size, font, ..).
+ */
+ void writeSettings();
/**
* Filters the currently shown items by \a nameFilter. All items
bool hasSelection() const;
/**
- * Returns the root item which represents the current URL. Note that the returned
- * item can be null (KFileItem::isNull() will return true) in case that the directory
- * has not been loaded.
+ * Returns the root item which represents the current URL.
*/
KFileItem rootItem() const;
*/
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 setPreviewsShown(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 setHiddenFilesShown(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);
+ /** Activates the view if the item list container gets focus. */
+ virtual bool eventFilter(QObject* watched, QEvent* event);
signals:
/**
/** Is emitted if the 'show hidden files' property has been changed. */
void hiddenFilesShownChanged(bool shown);
- /** Is emitted if the 'categorized sorting' property has been changed. */
- void categorizedSortingChanged(bool sortCategorized);
+ /** Is emitted if the 'grouped sorting' property has been changed. */
+ void groupedSortingChanged(bool groupedSorting);
/** Is emitted if the sorting by name, size or date has been changed. */
void sortingChanged(DolphinView::Sorting sorting);
* for the URL should be shown and the custom actions \a customActions
* will be added.
*/
- void requestContextMenu(const KFileItem& item,
+ void requestContextMenu(const QPoint& pos,
+ const KFileItem& item,
const KUrl& url,
const QList<QAction*>& customActions);
void writeStateChanged(bool isFolderWritable);
protected:
- virtual void mouseReleaseEvent(QMouseEvent* event);
- virtual void contextMenuEvent(QContextMenuEvent* event);
+ /** Changes the zoom level if Control is pressed during a wheel event. */
virtual void wheelEvent(QWheelEvent* event);
+ /** @reimp */
+ virtual void hideEvent(QHideEvent* event);
+
private slots:
/**
* Marks the view as active (DolphinView:isActive() will return true)
void activate();
void slotItemActivated(int index);
+ void slotItemsActivated(const QSet<int>& indexes);
void slotItemMiddleClicked(int index);
- void slotContextMenuRequested(int index, const QPointF& pos);
- void slotItemExpansionToggleClicked(int index);
+ void slotItemContextMenuRequested(int index, const QPointF& pos);
+ void slotViewContextMenuRequested(const QPointF& pos);
+ void slotHeaderContextMenuRequested(const QPointF& pos);
void slotItemHovered(int index);
void slotItemUnhovered(int index);
+ void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
+ void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
/**
* Emits the signal \a selectionChanged() with a small delay. This is
*/
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 slotDirListerStarted(const KUrl& url);
/**
- * Invoked when the directory lister has completed the loading of
- * items. Assures that pasted items and renamed items get seleced.
+ * 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.
*/
- void slotDirListerCompleted();
+ void slotLoadingCompleted();
/**
* Is invoked when the KDirLister indicates refreshed items.
*/
void slotRefreshItems();
+ /**
+ * Is invoked when the sort order has been changed by the user by clicking
+ * on a header item. The view properties of the directory will get updated.
+ */
+ void slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOrder previous);
+
+ /**
+ * Is invoked when the sort role has been changed by the user by clicking
+ * on a header item. The view properties of the directory will get updated.
+ */
+ void slotSortRoleChangedByHeader(const QByteArray& current, const QByteArray& previous);
+
+ /**
+ * Is invoked when the visible roles have been changed by the user by dragging
+ * a header item. The view properties of the directory will get updated.
+ */
+ void slotVisibleRolesChangedByHeader(const QList<QByteArray>& current,
+ const QList<QByteArray>& previous);
+
/**
* Observes the item with the URL \a url. As soon as the directory
* model indicates that the item is available, the item will
*/
void updateViewState();
+ void hideToolTip();
+
//void slotUrlChangeRequested(const KUrl& url);
private:
*/
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
void updateWritableState();
QByteArray sortRoleForSorting(Sorting sorting) const;
+ Sorting sortingForSortRole(const QByteArray& sortRole) const;
+
+ /**
+ * Returns the text for the filesize by converting it to the best fitting
+ * unit.
+ */
+ static QString fileSizeText(KIO::filesize_t fileSize);
private:
- bool m_active : 1;
- bool m_tabsForFiles : 1;
- bool m_assureVisibleCurrentIndex : 1;
- bool m_isFolderWritable : 1;
+ bool m_active;
+ bool m_tabsForFiles;
+ bool m_assureVisibleCurrentIndex;
+ 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.
KUrl m_url;
Mode m_mode;
QTimer* m_selectionChangedTimer;
- int m_currentItemIndex;
+ KUrl m_currentItemUrl; // Used for making the view to remember the current URL after F5
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
+
+ QList<KUrl> m_selectedUrls; // Used for making the view to remember selections after F5
+
+ VersionControlObserver* m_versionControlObserver;
// For unit tests
friend class TestBase;