]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinview.h
Details view: Optionally remember user changed column-widths
[dolphin.git] / src / views / dolphinview.h
index 9111516b43ebaa8b346e6c8fffeafffd2011e4d6..71128569af8bda1c4952752d189bba4775235a43 100644 (file)
@@ -93,35 +93,6 @@ public:
         CompactView
     };
 
-    /** Defines the sort order for the items of a directory. */
-    enum Sorting
-    {
-        SortByName = 0,
-        SortBySize,
-        SortByDate,
-        SortByPermissions,
-        SortByOwner,
-        SortByGroup,
-        SortByType,
-        SortByDestination,
-        SortByPath
-    };
-
-    /** Defines the additional information shown for the items of a directory. */
-    enum AdditionalInfo
-    {
-        NoInfo = 0,
-        NameInfo,
-        SizeInfo,
-        DateInfo,
-        PermissionsInfo,
-        OwnerInfo,
-        GroupInfo,
-        TypeInfo,
-        DestinationInfo,
-        PathInfo
-    };
-
     /**
      * @param url              Specifies the content which should be shown.
      * @param parent           Parent widget of the view.
@@ -235,29 +206,21 @@ public:
      */
     bool isZoomOutPossible() const;
 
-    /** Sets the sorting criterion (e.g., SortByName, SortBySize,...) of the items inside a directory (see DolphinView::Sorting). */
-    void setSorting(Sorting sorting);
+    void setSortRole(const QByteArray& role);
+    QByteArray sortRole() const;
 
-    /** Returns the sorting criterion (e.g., SortByName, SortBySize,...) 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 currently 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 setAdditionalInfoList(const QList<AdditionalInfo>& info);
+    void setVisibleRoles(const QList<QByteArray>& roles);
 
     /** Returns the additional information which should be shown for the items. */
-    QList<AdditionalInfo> additionalInfoList() const;
+    QList<QByteArray> visibleRoles() const;
 
     /** Reloads the current directory. */
     void reload();
@@ -265,11 +228,15 @@ public:
     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
@@ -336,9 +303,7 @@ public:
     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;
 
@@ -449,17 +414,20 @@ signals:
     void groupedSortingChanged(bool groupedSorting);
 
     /** Is emitted if the sorting by name, size or date has been changed. */
-    void sortingChanged(DolphinView::Sorting sorting);
+    void sortRoleChanged(const QByteArray& role);
 
     /** 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. */
+    /**
+     * 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 additionalInfoListChanged(const QList<DolphinView::AdditionalInfo>& current,
-                                   const QList<DolphinView::AdditionalInfo>& previous);
+    void visibleRolesChanged(const QList<QByteArray>& current,
+                             const QList<QByteArray>& previous);
 
     /** Is emitted if the zoom level has been changed by zooming in or out. */
     void zoomLevelChanged(int current, int previous);
@@ -543,10 +511,25 @@ signals:
      */
     void writeStateChanged(bool isFolderWritable);
 
+    /**
+     * Is emitted if the URL should be changed to the previous URL of the
+     * history (e.g. because the "back"-mousebutton has been pressed).
+     */
+    void goBackRequested();
+
+    /**
+     * Is emitted if the URL should be changed to the next URL of the
+     * history (e.g. because the "next"-mousebutton has been pressed).
+     */
+    void goForwardRequested();
+
 protected:
     /** 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)
@@ -560,10 +543,12 @@ private slots:
     void slotItemContextMenuRequested(int index, const QPointF& pos);
     void slotViewContextMenuRequested(const QPointF& pos);
     void slotHeaderContextMenuRequested(const QPointF& pos);
+    void slotHeaderColumnWidthChanged(const QByteArray& role, qreal current, qreal previous);
     void slotItemHovered(int index);
     void slotItemUnhovered(int index);
     void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
     void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
+    void slotMouseButtonPressed(int itemIndex, Qt::MouseButtons buttons);
 
     /**
      * Emits the signal \a selectionChanged() with a small delay. This is
@@ -580,20 +565,11 @@ private slots:
      */
     void emitSelectionChangedSignal();
 
-    /**
-     * 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.
+     * sorting given by \a role.
      */
-    void updateSorting(DolphinView::Sorting sorting);
+    void updateSortRole(const QByteArray& role);
 
     /**
      * Updates the view properties of the current URL to the
@@ -646,6 +622,25 @@ private slots:
      */
     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
@@ -673,6 +668,8 @@ private slots:
      */
     void updateViewState();
 
+    void hideToolTip();
+
     //void slotUrlChangeRequested(const KUrl& url);
 
 private:
@@ -686,22 +683,12 @@ private:
      */
     void applyViewProperties();
 
-    void applyAdditionalInfoListToView();
-
     /**
      * 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
@@ -729,9 +716,6 @@ private:
      */
     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.
@@ -739,14 +723,16 @@ private:
     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;
-    QList<AdditionalInfo> m_additionalInfoList;
+    QList<QByteArray> m_visibleRoles;
 
     QVBoxLayout* m_topLayout;
 
@@ -757,11 +743,12 @@ private:
 
     QTimer* m_selectionChangedTimer;
 
-    KUrl m_currentItemUrl;
+    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
-    QList<KUrl> m_selectedUrls; // 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