]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincolumnview.h
Fix temporary regression of sorting introduced by SVN commit 1126410
[dolphin.git] / src / dolphincolumnview.h
index 0030c69ce01ba4c6ed8436de7dd785cf60d38c6a..d4da8665711442dc93d61669070aa0b347e2ffe9 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2007 by Peter Penz <peter.penz@gmx.at>                  *
+ *   Copyright (C) 2007-2009 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 <kurl.h>
+#include "dolphinview.h"
 
-#include <QAbstractItemView>
-#include <QList>
-#include <QString>
+#include <QFont>
+#include <QListView>
+#include <QSize>
 #include <QStyleOption>
 
-class DolphinColumnWidget;
-class DolphinController;
+#include <kurl.h>
+
+class DolphinColumnViewContainer;
 class DolphinModel;
-class QAbstractProxyModel;
-class QFrame;
-class QTimeLine;
+class DolphinSortFilterProxyModel;
+class DolphinDirLister;
+class KFileItem;
+class KFileItemList;
+class SelectionManager;
+class ViewExtensionsFactory;
 
 /**
- * @brief Represents the view, where each directory is show as separate column.
- *
- * @see DolphinIconsView
- * @see DolphinDetailsView
+ * Represents one column inside the DolphinColumnViewContainer.
  */
-class DolphinColumnView : public QAbstractItemView
+class DolphinColumnView : public QListView
 {
     Q_OBJECT
 
 public:
-    explicit DolphinColumnView(QWidget* parent, DolphinController* controller);
+    DolphinColumnView(QWidget* parent,
+                      DolphinColumnViewContainer* container,
+                      const KUrl& url);
     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.
+     * An active column is defined as column, which shows the same URL
+     * as indicated by the URL navigator. The active column is usually
+     * drawn in a lighter color. All operations are applied to this column.
      */
-    void reload();
+    void setActive(bool active);
+    bool isActive() const;
 
     /**
-     * Adjusts the root URL of the first column and removes all
-     * other columns.
+     * Sets the directory URL of the child column that is shown next to
+     * this column. This property is only used for a visual indication
+     * of the shown directory, it does not trigger a loading of the model.
      */
-    void setRootUrl(const KUrl& url);
+    void setChildUrl(const KUrl& url);
+    KUrl childUrl() const;
 
-    /** Returns the URL of the first column. */
-    KUrl rootUrl() const;
+    /** Sets the directory URL that is shown inside the column widget. */
+    void setUrl(const KUrl& url);
 
-    /**
-     * 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 directory URL that is shown inside the column widget. */
+    KUrl url() const;
 
     /**
-     * Returns the currently used name filter. All items
-     * which contain the name filter will be shown.
+     * Updates the background color dependent from the activation state
+     * \a isViewActive of the column view.
      */
-    QString nameFilter() const;
+    void updateBackground();
 
     /**
-     * Shows the column which represents the URL \a url. If the column
-     * is already shown, it gets activated, otherwise it will be created.
+     * Returns the item on the position \a pos. The KFileItem instance
+     * is null if no item is below the position.
      */
-    void showColumn(const KUrl& url);
+    KFileItem itemAt(const QPoint& pos) const;
 
-public slots:
-    /** @see QAbstractItemView::selectAll() */
-    virtual void selectAll();
+    virtual void setSelectionModel(QItemSelectionModel* model);
 
 protected:
-    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 QStyleOptionViewItem viewOptions() const;
+    virtual void startDrag(Qt::DropActions supportedActions);
+    virtual void dragEnterEvent(QDragEnterEvent* event);
+    virtual void dragLeaveEvent(QDragLeaveEvent* event);
+    virtual void dragMoveEvent(QDragMoveEvent* event);
+    virtual void dropEvent(QDropEvent* event);
+    virtual void paintEvent(QPaintEvent* event);
     virtual void mousePressEvent(QMouseEvent* event);
-    virtual void resizeEvent(QResizeEvent* event);
-    virtual void setSelectionModel ( QItemSelectionModel * selectionModel );
-    virtual void setModel ( QAbstractItemModel * model );
+    virtual void keyPressEvent(QKeyEvent* event);
+    virtual void contextMenuEvent(QContextMenuEvent* event);
+    virtual void wheelEvent(QWheelEvent* event);
+    virtual void leaveEvent(QEvent* event);
+    virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous);
 
 private slots:
-    void zoomIn();
-    void zoomOut();
+    void setZoomLevel(int level);
 
-    /**
-     * Moves the content of the columns view to represent
-     * the scrollbar position \a x.
-     */
-    void moveContentHorizontally(int x);
+    void slotEntered(const QModelIndex& index);
+    void requestActivation();
+    void updateFont();
 
-    /**
-     * Updates the size of the decoration dependent on the
-     * icon size of the ColumnModeSettings. The controller
-     * will get informed about possible zoom in/zoom out
-     * operations.
-     */
-    void updateDecorationSize();
-
-    /**
-     * Updates the background color of the columns to respect
-     * the current activation state \a active.
-     */
-    void updateColumnsBackground(bool active);
-
-    void slotShowHiddenFilesChanged();
     void slotShowPreviewChanged();
 
 private:
-    bool isZoomInPossible() const;
-    bool isZoomOutPossible() const;
+    /** Used by DolphinColumnView::setActive(). */
+    void activate();
 
-    DolphinColumnWidget* activeColumn() const;
+    /** Used by DolphinColumnView::setActive(). */
+    void deactivate();
 
-    /**
-     * 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 updateDecorationSize(bool showPreview);
 
-    void layoutColumns();
-    void updateScrollBar();
+private:
+    bool m_active;
+    DolphinColumnViewContainer* m_container;
+    SelectionManager* m_selectionManager;
+    ViewExtensionsFactory* m_extensionsFactory;
+    KUrl m_url;      // URL of the directory that is shown
+    KUrl m_childUrl; // URL of the next column that is shown
 
-    /**
-     * Assures that the currently active column is fully visible
-     * by adjusting the horizontal position of the content.
-     */
-    void assureVisibleActiveColumn();
+    QFont m_font;
+    QSize m_decorationSize;
 
-    /**
-     * 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);
+    DolphinDirLister* m_dirLister;
+    DolphinModel* m_dolphinModel;
+    DolphinSortFilterProxyModel* m_proxyModel;
 
-    /** Removes all columns except of the root column. */
-    void removeAllColumns();
+    QRect m_dropRect;
 
-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 DolphinColumnWidget;
+    friend class DolphinColumnViewContainer;
 };
 
-inline DolphinColumnWidget* DolphinColumnView::activeColumn() const
+inline bool DolphinColumnView::isActive() const
+{
+    return m_active;
+}
+
+inline void DolphinColumnView::setChildUrl(const KUrl& url)
+{
+    m_childUrl = url;
+}
+
+inline KUrl DolphinColumnView::childUrl() const
+{
+    return m_childUrl;
+}
+
+inline void DolphinColumnView::setUrl(const KUrl& url)
+{
+    if (url != m_url) {
+        m_url = url;
+        //reload();
+    }
+}
+
+inline KUrl DolphinColumnView::url() const
 {
-    return m_columns[m_index];
+    return m_url;
 }
 
 #endif