diff options
Diffstat (limited to 'kftpgrabber/src/widgets/browser/detailsview.h')
-rw-r--r-- | kftpgrabber/src/widgets/browser/detailsview.h | 374 |
1 files changed, 374 insertions, 0 deletions
diff --git a/kftpgrabber/src/widgets/browser/detailsview.h b/kftpgrabber/src/widgets/browser/detailsview.h new file mode 100644 index 0000000..eb60b70 --- /dev/null +++ b/kftpgrabber/src/widgets/browser/detailsview.h @@ -0,0 +1,374 @@ +/* + * This file is part of the KFTPGrabber project + * + * Copyright (C) 2003-2006 by the KFTPGrabber developers + * Copyright (C) 2003-2006 Jernej Kos <kostko@jweb-network.net> + * + * 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 the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and + * NON-INFRINGEMENT. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, + * MA 02110-1301, USA. + * + * In addition, as a special exception, the copyright holders give + * permission to link the code of portions of this program with the + * OpenSSL library under certain conditions as described in each + * individual source file, and distribute linked combinations + * including the two. + * + * You must obey the GNU General Public License in all respects + * for all of the code used other than OpenSSL. If you modify + * file(s) with this exception, you may extend this exception to your + * version of the file(s), but you are not obligated to do so. If you + * do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source + * files in the program, then also delete it here. + */ +#ifndef KFTPWIDGETS_BROWSERDETAILSVIEW_H +#define KFTPWIDGETS_BROWSERDETAILSVIEW_H + +#include "browser/locationnavigator.h" + +#include <kfiledetailview.h> +#include <kdirlister.h> + +namespace KFTPSession { + class Session; +} + +namespace KFTPWidgets { + +namespace Browser { + +class DirLister; +class TreeView; +class View; + +/** + * This class represents a detailed list view for displaying local and + * remote directory contents. It is based upon KFileDetailView but uses + * a custom (wrapped) DirLister for actual listings. + * + * @author Jernej Kos + */ +class DetailsView : public KFileDetailView { +Q_OBJECT +public: + /** + * Maps the column indices of KFileDetailView to a + * descriptive column name. + */ + enum ColumnName { + NameColumn = 0, + SizeColumn = 1, + DateColumn = 2, + PermissionsColumn = 3, + OwnerColumn = 4, + GroupColumn = 5 + }; + + /** + * Class constructor. + * + * @param parent Parent widget + * @param view Main view container + * @param session Current session + */ + DetailsView(QWidget *parent, View *view, KFTPSession::Session *session); + + /** + * Class destructor. + */ + ~DetailsView(); + + /** + * Returns the navigator object for navigating this view. + */ + const LocationNavigator *locationNavigator() const { return m_navigator; } + + /** + * Returns the current URL. + */ + const KURL &url() const; + + /** + * Returns the current history elements. + * + * @param index Variable to save the current history position to + * @return Current history element list + */ + const QValueList<LocationNavigator::Element> history(int &index) const; + + /** + * @overload + * Reimplemented from KFileView to support filtered views. + */ + bool isSelected(const KFileItem *i) const; + + /** + * Set the tree view widget to use for the tree. + * + * @param tree A valid tree view widget + */ + void setTreeView(TreeView *tree); + + /** + * Set the home URL. + * + * @param url URL to use as home URL + */ + void setHomeUrl(const KURL &url); + + /** + * Changes the "show hidden files" setting. + * + * @param value True to enable showing hidden files, false otherwise + */ + void setShowHidden(bool value) { m_showHidden = value; } + + /** + * Go one history hop back. + */ + void goBack(); + + /** + * Go one history hop forward. + */ + void goForward(); + + /** + * Go up in the directory structure. + */ + void goUp(); + + /** + * Go the the predefined home URL. + */ + void goHome(); + + /** + * Do item post-processing. + */ + void endItemUpdates(); + + /** + * @overload + * Reimplemented from KFileDetailView. + */ + void insertItem(KFileItem *fileItem); + + /** + * Fetch a file item by its filename. + * + * @param file Item's filename + */ + KFileItem *fileItem(const QString &filename); + + /** + * Changes item's colors in the list view. Note that this overrides any + * highlight colors predefined by user filters. + * + * @param item The item to change colors for + * @param text Text color + * @param background Background color + */ + void setItemColor(KFileItem *item, const QColor &text, const QColor &background); + + /** + * Changes item's visibility in the list view. + * + * @param item The item tho change visiblity for + * @param visibility 1 if the item should be visible, 0 if it should be hidden, reverse otherwise + */ + void setItemVisibility(KFileItem *item, int visibility = -1); + + /** + * Mark or unmark the item. If the item is already marked it will be + * unmarked and vice-versa. + * + * @param item The item to mark + */ + void markItem(KFileItem *item); + + /** + * Mark or unmark the item identified by its filename. If the item is + * already marked it will be unmarked and vice-versa. + * + * @param filename Item's filename + */ + void markItem(const QString &filename); + + /** + * Unmark all items. + */ + void unmarkItems(); +public slots: + /** + * Open an URL. Note that if a remote URL is specified the session needs to + * be connected to the specified host! + * + * @param url URL to open + */ + void openUrl(const KURL &url); + + /** + * Reload the current directory listing. + */ + void reload(); + + /** + * Calculates new widths for all the columns. + */ + void updateColumnWidths(); + + /** + * This method gets called when the widget is resized. It is used for automatic + * resize handling. + * + * @param width The new width + * @param height The new height + */ + void resizeContents(int width, int height); + + /** + * Returns the drag object to use for copy/paste and "drag and drop". + */ + QDragObject *dragObject(); +protected: + /** + * Instruct the directory lister object to fetch the specified URL. + * + * @param url URL to fetch + * @param reload Should the cache be invalidated + */ + void fetchLocation(const KURL &url, bool reload = false); + + /** + * This method gets called when the widget is resized. It is used for automatic + * resize handling. + */ + void resizeEvent(QResizeEvent *event); + + /** + * Returns true if the drop event should be accepted. + */ + bool acceptDrag(QDropEvent *event) const; + + /** + * Called when something acceptable gets dropped on us. + */ + void contentsDropEvent(QDropEvent *event); +private: + class ListViewItem : public KFileListViewItem { + public: + ListViewItem(QListView *parent, KFileItem *fileItem); + + /** + * @overload + * Reimplemented from KListView to implement nicer items. + */ + void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment); + + /** + * Set a text color for this item. + * + * @param color Text color + */ + void setColor(QColor color) { m_textColor = color; } + + /** + * Set a background color for this item. + * + * @param color Background color + */ + void setBackground(QColor color) { m_backgroundColor = color; } + + /** + * Set marked state for this item. + * + * @param marked True if this item should be marked, false otherwise + */ + void markItem(bool marked); + + /** + * Returns true if this item is marked. + */ + bool marked() const { return m_marked; } + private: + QColor m_textColor; + QColor m_backgroundColor; + bool m_marked; + }; + + View *m_view; + DirLister *m_dirLister; + LocationNavigator *m_navigator; + TreeView *m_treeView; + QTimer *m_resizeTimer; + + bool m_refreshing; + bool m_showHidden; + bool m_shouldDisableResize; + bool m_autoResizeEnabled; +protected slots: + void slotClear(); + void slotCompleted(); + void slotDeleteItem(KFileItem *item); + void slotRefreshItems(); + void slotSiteChanged(const KURL &url); + + void slotUrlChanged(const KURL &url); + + /** + * This slot gets called when an item has been renamed. + */ + void slotItemRenamed(QListViewItem *item, const QString &name); + + void slotContentsMoving(int x, int y); + + /** + * This slot gets called when a context menu should be displayed. + */ + void slotContextMenu(KListView*, QListViewItem *i, const QPoint &p); + + /** + * This slot gets called when an item has been clicked. + */ + void slotItemExecuted(); + + /** + * This slot gets called when a section in listview's header is resized. This + * is needed for proper automatic resize handling. + * + * @param section The section that was resized + */ + void slotHeaderResized(int section); +signals: + /** + * This signals gets emitted when user scrolls the widget. + * + * @param x New X position + * @param y New Y position + */ + void contentsMoved(int x, int y); + + /** + * This signal is emitted when items change. + */ + void itemsChanged(); +}; + +} + +} + +#endif |