]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnview.h
Move the Ctrl-wheel zoom handling to dolphinview.
[dolphin.git] / src / dolphincolumnview.h
index 59bb805fe13f74e16b44c83b6f25e9d6c68a7174..6ac4fdb3f177986e1b8014109bf898397919e970 100644 (file)
 #ifndef DOLPHINCOLUMNVIEW_H
 #define DOLPHINCOLUMNVIEW_H
 
-#include <QColumnView>
+#include "dolphinview.h"
+
+#include <kurl.h>
+
+#include <QAbstractItemView>
+#include <QList>
+#include <QString>
 #include <QStyleOption>
 
+class DolphinColumnWidget;
 class DolphinController;
-class KDirLister;
-class KUrl;
+class DolphinModel;
+class QAbstractProxyModel;
+class QFrame;
+class QTimeLine;
 
 /**
  * @brief Represents the view, where each directory is show as separate column.
@@ -33,7 +42,7 @@ class KUrl;
  * @see DolphinIconsView
  * @see DolphinDetailsView
  */
-class DolphinColumnView : public QColumnView
+class DolphinColumnView : public QAbstractItemView
 {
     Q_OBJECT
 
@@ -41,24 +50,72 @@ public:
     explicit DolphinColumnView(QWidget* parent, DolphinController* controller);
     virtual ~DolphinColumnView();
 
+    virtual QModelIndex indexAt(const QPoint& point) const;
+    virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible);
+    virtual QRect visualRect(const QModelIndex& index) const;
+
+    /** Inverts the selection of the currently active column. */
+    void invertSelection();
+
+    /**
+     * Reloads the content of all columns. In opposite to non-hierarchical views
+     * it is not enough to reload the KDirLister, instead this method must be explicitly
+     * invoked.
+     */
+    void reload();
+
+    /**
+     * Adjusts the root URL of the first column and removes all
+     * other columns.
+     */
+    void setRootUrl(const KUrl& url);
+
+    /** Returns the URL of the first column. */
+    KUrl rootUrl() const;
+
+    /**
+     * Filters the currently shown items by \a nameFilter. All items
+     * which contain the given filter string will be shown.
+     */
+    void setNameFilter(const QString& nameFilter);
+
+    /**
+     * Returns the currently used name filter. All items
+     * which contain the name filter will be shown.
+     */
+    QString nameFilter() const;
+
+    /**
+     * Shows the column which represents the URL \a url. If the column
+     * is already shown, it gets activated, otherwise it will be created.
+     */
+    void showColumn(const KUrl& url);
+
+public slots:
+    /** @see QAbstractItemView::selectAll() */
+    virtual void selectAll();
+
 protected:
-    virtual QAbstractItemView* createColumn(const QModelIndex& index);
+    virtual bool isIndexHidden(const QModelIndex& index) const;
+    virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+    virtual void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags);
+    virtual QRegion visualRegionForSelection(const QItemSelection& selection) const;
+    virtual int horizontalOffset() const;
+    virtual int verticalOffset() const;
+
     virtual void mousePressEvent(QMouseEvent* event);
-    virtual void dragEnterEvent(QDragEnterEvent* event);
-    virtual void dropEvent(QDropEvent* event);
-    virtual void showEvent(QShowEvent* event);
+    virtual void resizeEvent(QResizeEvent* event);
+    virtual void wheelEvent(QWheelEvent* event);
 
 private slots:
     void zoomIn();
     void zoomOut();
-    void triggerItem(const QModelIndex& index);
 
     /**
-     * Updates the activation state of all columns, where \a url
-     * represents the URL of the active column. All operations
-     * are applied only to the column which is marked as active.
+     * Moves the content of the columns view to represent
+     * the scrollbar position \a x.
      */
-    void updateColumnsState(const KUrl& url);
+    void moveContentHorizontally(int x);
 
     /**
      * Updates the size of the decoration dependent on the
@@ -69,26 +126,65 @@ private slots:
     void updateDecorationSize();
 
     /**
-     * Updates the selections of all columns to assure that
-     * folder which is shown in the next column is always selected
-     * (this behavior is not given inside QColumnView).
+     * Updates the background color of the columns to respect
+     * the current activation state \a active.
      */
-    void updateSelections();
+    void updateColumnsBackground(bool active);
+
+    void slotSortingChanged(DolphinView::Sorting sorting);
+    void slotSortOrderChanged(Qt::SortOrder order);
+    void slotShowHiddenFilesChanged();
+    void slotShowPreviewChanged();
 
 private:
     bool isZoomInPossible() const;
     bool isZoomOutPossible() const;
 
+    DolphinColumnWidget* activeColumn() const;
+
     /**
-     * Requests the activation for the column \a column. The URL
-     * navigator will be changed to represent the column.
+     * Deactivates the currently active column and activates
+     * the new column indicated by \a index. m_index represents
+     * the active column afterwards. Also the URL of the navigator
+     * will be adjusted to reflect the column URL.
      */
-    void requestActivation(QWidget* column);
+    void setActiveColumnIndex(int index);
+
+    void layoutColumns();
+    void updateScrollBar();
+
+    /**
+     * Assures that the currently active column is fully visible
+     * by adjusting the horizontal position of the content.
+     */
+    void assureVisibleActiveColumn();
+
+    /**
+     * Request the activation for the column \a column. It is assured
+     * that the columns gets fully visible by adjusting the horizontal
+     * position of the content.
+     */
+    void requestActivation(DolphinColumnWidget* column);
+
+    /** Removes all columns except of the root column. */
+    void removeAllColumns();
 
 private:
     DolphinController* m_controller;
+    bool m_active;
+    int m_index;
+    int m_contentX;
+    QList<DolphinColumnWidget*> m_columns;
+    QFrame* m_emptyViewport;
+    QTimeLine* m_animation;
+    QString m_nameFilter;
 
-    friend class ColumnWidget;
+    friend class DolphinColumnWidget;
 };
 
+inline DolphinColumnWidget* DolphinColumnView::activeColumn() const
+{
+    return m_columns[m_index];
+}
+
 #endif