]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnview.h
Move the Ctrl-wheel zoom handling to dolphinview.
[dolphin.git] / src / dolphincolumnview.h
index 06f9b887fc3f8c9650ce76d4e5293e068f44fdef..6ac4fdb3f177986e1b8014109bf898397919e970 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at)                  *
+ *   Copyright (C) 2007 by Peter Penz <peter.penz@gmx.at>                  *
  *                                                                         *
  *   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  *
 #ifndef DOLPHINCOLUMNVIEW_H
 #define DOLPHINCOLUMNVIEW_H
 
-#include <QtGui/QColumnView>
-#include <QtGui/QStyleOption>
+#include "dolphinview.h"
 
+#include <kurl.h>
+
+#include <QAbstractItemView>
+#include <QList>
+#include <QString>
+#include <QStyleOption>
+
+class DolphinColumnWidget;
 class DolphinController;
+class DolphinModel;
+class QAbstractProxyModel;
+class QFrame;
+class QTimeLine;
 
 /**
  * @brief Represents the view, where each directory is show as separate column.
@@ -31,7 +42,7 @@ class DolphinController;
  * @see DolphinIconsView
  * @see DolphinDetailsView
  */
-class DolphinColumnView : public QColumnView
+class DolphinColumnView : public QAbstractItemView
 {
     Q_OBJECT
 
@@ -39,20 +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 resizeEvent(QResizeEvent* event);
+    virtual void wheelEvent(QWheelEvent* event);
 
 private slots:
     void zoomIn();
     void zoomOut();
-    void triggerItem(const QModelIndex& index);
 
-private:
-    bool isZoomInPossible() const;
-    bool isZoomOutPossible() const;
+    /**
+     * Moves the content of the columns view to represent
+     * the scrollbar position \a x.
+     */
+    void moveContentHorizontally(int x);
 
     /**
      * Updates the size of the decoration dependent on the
@@ -62,10 +125,66 @@ private:
      */
     void updateDecorationSize();
 
+    /**
+     * Updates the background color of the columns to respect
+     * the current activation state \a active.
+     */
+    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;
+
+    /**
+     * 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 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