/***************************************************************************
- * 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 <QAbstractItemView>
-#include <QList>
+#include "dolphinview.h"
+
+#include <QFont>
+#include <QListView>
+#include <QSize>
#include <QStyleOption>
-class ColumnWidget;
-class DolphinController;
+#include <kurl.h>
+
+class DolphinColumnViewContainer;
class DolphinModel;
-class KUrl;
-class QAbstractProxyModel;
-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;
- virtual void setModel(QAbstractItemModel* model);
-
/**
- * 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;
-public slots:
/**
- * Shows the column which represents the URL \a url. If the column
- * is already shown, it gets activated, otherwise it will be created.
+ * 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 showColumn(const KUrl& url);
+ void setChildUrl(const KUrl& url);
+ KUrl childUrl() const;
-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;
+ /** Sets the directory URL that is shown inside the column widget. */
+ void setUrl(const KUrl& url);
- virtual void mousePressEvent(QMouseEvent* event);
- virtual void resizeEvent(QResizeEvent* event);
-
-private slots:
- void zoomIn();
- void zoomOut();
+ /** Returns the directory URL that is shown inside the column widget. */
+ KUrl url() const;
/**
- * Moves the content of the columns view to represent
- * the scrollbar position \a x.
+ * Updates the background color dependent from the activation state
+ * \a isViewActive of the column view.
*/
- void moveContentHorizontally(int x);
+ void updateBackground();
/**
- * 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.
+ * Returns the item on the position \a pos. The KFileItem instance
+ * is null if no item is below the position.
*/
- void updateDecorationSize();
+ KFileItem itemAt(const QPoint& pos) const;
- /**
- * Expands the directory model the the currently active URL.
- * Used by DolphinColumnView::reload() after the directory
- * lister has been loaded.
- */
- void expandToActiveUrl();
+ virtual void setSelectionModel(QItemSelectionModel* model);
- /**
- * Triggers the reloading of columns after the model index
- * \a index has been expanded. Used by DolphinModel::expandToActiveUrl().
- */
- void triggerReloadColumns(const QModelIndex& index);
-
- /**
- * Adjusts the root index of all columns to represent the reloaded
- * model. Used by DolphinModel::triggerReloadColumns().
- */
- void reloadColumns();
-
-private:
- bool isZoomInPossible() const;
- bool isZoomOutPossible() const;
+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);
- inline ColumnWidget* activeColumn() const;
+private slots:
+ void setZoomLevel(int level);
- /**
- * 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 slotEntered(const QModelIndex& index);
+ void requestActivation();
+ void updateFont();
- void layoutColumns();
- void updateScrollBar();
+ void slotShowPreviewChanged();
- /**
- * Assures that the currently active column is fully visible
- * by adjusting the horizontal position of the content.
- */
- void assureVisibleActiveColumn();
+private:
+ /** Used by DolphinColumnView::setActive(). */
+ void activate();
- /**
- * 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(ColumnWidget* column);
+ /** Used by DolphinColumnView::setActive(). */
+ void deactivate();
- /**
- * Deletes all inactive child columns, that are a child of
- * the currently active column.
- */
- void deleteInactiveChildColumns();
+ void updateDecorationSize(bool showPreview);
private:
- DolphinController* m_controller;
- bool m_restoreActiveColumnFocus;
- int m_index;
- int m_contentX;
- QList<ColumnWidget*> m_columns;
- QTimeLine* m_animation;
+ 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;
- QAbstractProxyModel* m_proxyModel;
+ DolphinSortFilterProxyModel* m_proxyModel;
+
+ QRect m_dropRect;
- friend class ColumnWidget;
+ friend class DolphinColumnViewContainer;
};
-ColumnWidget* 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