/***************************************************************************
- * Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at>
+ * Copyright (C) 2006 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 TREEVIEWSIDEBARPAGE_H
#define TREEVIEWSIDEBARPAGE_H
+#include <kurl.h>
#include <sidebarpage.h>
class KDirLister;
-class KDirModel;
-class KUrl;
+class DolphinModel;
+class DolphinSortFilterProxyModel;
+class SidebarTreeView;
class QModelIndex;
-class QTreeView;
/**
- * @brief
+ * @brief Shows a tree view of the directories starting from
+ * the currently selected place.
+ *
+ * The tree view is always synchronized with the currently active view
+ * from the main window.
*/
class TreeViewSidebarPage : public SidebarPage
{
Q_OBJECT
public:
- TreeViewSidebarPage(DolphinMainWindow* mainWindow, QWidget* parent = 0);
+ TreeViewSidebarPage(QWidget* parent = 0);
virtual ~TreeViewSidebarPage();
-protected:
- /** @see SidebarPage::activeViewChanged() */
- virtual void activeViewChanged();
+ /** @see QWidget::sizeHint() */
+ virtual QSize sizeHint() const;
+
+ void setShowHiddenFiles(bool show);
+ bool showHiddenFiles() const;
+ void rename(const KFileItem& item);
+
+signals:
+ /**
+ * Is emitted if the an URL change is requested.
+ */
+ void changeUrl(const KUrl& url, Qt::MouseButtons buttons);
+
+ /**
+ * This signal is emitted when the sidebar requests a change in the
+ * current selection. The file-management view recieving this signal is
+ * not required to select all listed files, limiting the selection to
+ * e.g. the current folder. The new selection will be reported via the
+ * setSelection slot.
+ */
+ void changeSelection(const KFileItemList& selection);
+
+public slots:
+ /**
+ * Changes the current selection inside the tree to \a url.
+ */
+ virtual void setUrl(const KUrl& url);
+
+protected:
/** @see QWidget::showEvent() */
virtual void showEvent(QShowEvent* event);
+ /** @see QWidget::contextMenuEvent() */
+ virtual void contextMenuEvent(QContextMenuEvent* event);
+
private slots:
/**
- * Updates the current selection inside the tree to
- * \a url.
+ * Updates the active view to the URL
+ * which is given by the item with the index \a index.
*/
- void updateSelection(const KUrl& url);
+ void updateActiveView(const QModelIndex& index);
/**
- * Updates the URL of the active view to the URL
- * which is given by the item with the index \a index.
+ * Is emitted if URLs have been dropped
+ * to the index \a index.
+ */
+ void dropUrls(const QModelIndex& index, QDropEvent* event);
+
+ /**
+ * Expands the treeview to show the directory
+ * specified by \a index.
+ */
+ void expandToDir(const QModelIndex& index);
+
+ /**
+ * Assures that the leaf folder gets visible.
*/
- void updateViewUrl(const QModelIndex& index);
+ void scrollToLeaf();
+
+ void updateMouseButtons();
private:
/**
- * Connects to signals from the currently active Dolphin view to get
- * informed about highlighting changes.
+ * Initializes the base URL of the tree and expands all
+ * directories until \a url.
+ * @param url URL of the leaf directory that should get expanded.
+ */
+ void loadTree(const KUrl& url);
+
+ /**
+ * Selects the current leaf directory m_leafDir and assures
+ * that the directory is visible if the leaf has been set by
+ * TreeViewSidebarPage::setUrl().
*/
- void connectToActiveView();
+ void selectLeafDirectory();
private:
+ bool m_setLeafVisible;
+ Qt::MouseButtons m_mouseButtons;
KDirLister* m_dirLister;
- KDirModel* m_dirModel;
- QTreeView* m_treeView;
+ DolphinModel* m_dolphinModel;
+ DolphinSortFilterProxyModel* m_proxyModel;
+ SidebarTreeView* m_treeView;
+ KUrl m_leafDir;
};
-#endif // BOOKMARKSSIDEBARPAGE_H
+#endif // TREEVIEWSIDEBARPAGE_H