]> 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 03f210229fed4aceaf380841e79c08595bef0beb..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 <QColumnView>
+#include "dolphinview.h"
+
+#include <QFont>
+#include <QListView>
+#include <QSize>
 #include <QStyleOption>
 
-class DolphinController;
-class KDirLister;
-class KUrl;
+#include <kurl.h>
+
+class DolphinColumnViewContainer;
+class DolphinModel;
+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 QColumnView
+class DolphinColumnView : public QListView
 {
     Q_OBJECT
 
 public:
-    explicit DolphinColumnView(QWidget* parent, DolphinController* controller);
+    DolphinColumnView(QWidget* parent,
+                      DolphinColumnViewContainer* container,
+                      const KUrl& url);
     virtual ~DolphinColumnView();
 
-protected:
-    virtual QAbstractItemView* createColumn(const QModelIndex& index);
-    virtual void mousePressEvent(QMouseEvent* event);
-    virtual void dragEnterEvent(QDragEnterEvent* event);
-    virtual void dropEvent(QDropEvent* 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.
+     * 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 updateColumnsState(const KUrl& url);
+    void setActive(bool active);
+    bool isActive() const;
 
     /**
-     * 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.
+     * 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 updateDecorationSize();
+    void setChildUrl(const KUrl& url);
+    KUrl childUrl() const;
 
-private:
-    bool isZoomInPossible() const;
-    bool isZoomOutPossible() const;
+    /** Sets the directory URL that is shown inside the column widget. */
+    void setUrl(const KUrl& url);
+
+    /** Returns the directory URL that is shown inside the column widget. */
+    KUrl url() const;
 
     /**
-     * Requests the activation for the column \a column. The URL
-     * navigator will be changed to represent the column. It is
-     * assured that the selection model of \a column will be set
-     * to the selection model of the Column View.
+     * Updates the background color dependent from the activation state
+     * \a isViewActive of the column view.
      */
-    void requestActivation(QWidget* column);
+    void updateBackground();
 
     /**
-     * Requests the selection model from the Column View for \a view.
-     * If another column has already obtained the Column View selection
-     * model, it will be replaced by a default selection model.
+     * Returns the item on the position \a pos. The KFileItem instance
+     * is null if no item is below the position.
      */
-    void requestSelectionModel(QAbstractItemView* view);
+    KFileItem itemAt(const QPoint& pos) const;
+
+    virtual void setSelectionModel(QItemSelectionModel* model);
+
+protected:
+    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 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 setZoomLevel(int level);
+
+    void slotEntered(const QModelIndex& index);
+    void requestActivation();
+    void updateFont();
+
+    void slotShowPreviewChanged();
+
+private:
+    /** Used by DolphinColumnView::setActive(). */
+    void activate();
+
+    /** Used by DolphinColumnView::setActive(). */
+    void deactivate();
+
+    void updateDecorationSize(bool showPreview);
 
 private:
-    DolphinController* m_controller;
+    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
+
+    QFont m_font;
+    QSize m_decorationSize;
+
+    DolphinDirLister* m_dirLister;
+    DolphinModel* m_dolphinModel;
+    DolphinSortFilterProxyModel* m_proxyModel;
 
-    friend class ColumnWidget;
+    QRect m_dropRect;
+
+    friend class DolphinColumnViewContainer;
 };
 
+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_url;
+}
+
 #endif