/***************************************************************************
- * 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 *
#include "dolphinview.h"
-#include <kurl.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();
- /** @see QAbstractItemView::indexAt() */
- virtual QModelIndex indexAt(const QPoint& point) const;
-
- /**
- * Returns the item on the position \a pos. The KFileItem instance
- * is null if no item is below the position.
- */
- KFileItem itemAt(const QPoint& point) const;
-
- /** @see QAbstractItemView::scrollTo() */
- virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible);
-
- /** @see QAbstractItemView::visualRect() */
- 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.
+ * 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 setRootUrl(const KUrl& url);
-
- /** Returns the URL of the first column. */
- KUrl rootUrl() const;
+ void setActive(bool active);
+ bool isActive() const;
/**
- * Filters the currently shown items by \a nameFilter. All items
- * which contain the given filter string will be shown.
+ * 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 setNameFilter(const QString& nameFilter);
+ void setChildUrl(const KUrl& url);
+ KUrl childUrl() const;
- /**
- * Returns the currently used name filter. All items
- * which contain the name filter will be shown.
- */
- QString nameFilter() const;
+ /** Sets the directory URL that is shown inside the column widget. */
+ void setUrl(const KUrl& url);
- /**
- * 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);
+ /** Returns the directory URL that is shown inside the column widget. */
+ KUrl url() const;
/**
- * Does an inline editing for the item \a item
- * inside the active column.
+ * Updates the background color dependent from the activation state
+ * \a isViewActive of the column view.
*/
- void editItem(const KFileItem& item);
+ void updateBackground();
/**
- * Returns the selected items of the active column.
+ * Returns the item on the position \a pos. The KFileItem instance
+ * is null if no item is below the position.
*/
- KFileItemList selectedItems() const;
+ 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 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);
- /**
- * 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(bool showPreview);
+ void slotShowPreviewChanged();
- /**
- * Updates the background color of the columns to respect
- * the current activation state \a active.
- */
- void updateColumnsBackground(bool active);
+private:
+ /** Used by DolphinColumnView::setActive(). */
+ void activate();
- void slotSortingChanged(DolphinView::Sorting sorting);
- void slotSortOrderChanged(Qt::SortOrder order);
- void slotShowHiddenFilesChanged();
- void slotShowPreviewChanged();
+ /** Used by DolphinColumnView::setActive(). */
+ void deactivate();
+
+ void updateDecorationSize(bool showPreview);
private:
- DolphinColumnWidget* activeColumn() const;
+ 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
- /**
- * 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);
+ QFont m_font;
+ QSize m_decorationSize;
- void layoutColumns();
- void updateScrollBar();
+ DolphinDirLister* m_dirLister;
+ DolphinModel* m_dolphinModel;
+ DolphinSortFilterProxyModel* m_proxyModel;
- /**
- * Assures that the currently active column is fully visible
- * by adjusting the horizontal position of the content.
- */
- void assureVisibleActiveColumn();
+ QRect m_dropRect;
- /**
- * 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);
+ friend class DolphinColumnViewContainer;
+};
- /** Removes all columns except of the root column. */
- void removeAllColumns();
+inline bool DolphinColumnView::isActive() const
+{
+ return m_active;
+}
- /**
- * Returns the position of the point \a point relative to the column
- * \a column.
- */
- QPoint columnPosition(DolphinColumnWidget* column, const QPoint& point) const;
+inline void DolphinColumnView::setChildUrl(const KUrl& url)
+{
+ m_childUrl = url;
+}
- /**
- * Deletes the column. If the itemview of the controller is set to the column,
- * the controllers itemview is set to 0.
- */
- void deleteColumn(DolphinColumnWidget* column);
+inline KUrl DolphinColumnView::childUrl() const
+{
+ return m_childUrl;
+}
-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;
-};
+inline void DolphinColumnView::setUrl(const KUrl& url)
+{
+ if (url != m_url) {
+ m_url = url;
+ //reload();
+ }
+}
-inline DolphinColumnWidget* DolphinColumnView::activeColumn() const
+inline KUrl DolphinColumnView::url() const
{
- return m_columns[m_index];
+ return m_url;
}
#endif