diff options
Diffstat (limited to 'konqueror/listview/konq_listviewwidget.h')
-rw-r--r-- | konqueror/listview/konq_listviewwidget.h | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/konqueror/listview/konq_listviewwidget.h b/konqueror/listview/konq_listviewwidget.h new file mode 100644 index 000000000..bc4161862 --- /dev/null +++ b/konqueror/listview/konq_listviewwidget.h @@ -0,0 +1,270 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> + 2004 Michael Brade <brade@kde.org> + + 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 WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 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; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +#ifndef __konq_listviewwidget_h__ +#define __konq_listviewwidget_h__ + +#include <qvaluelist.h> +#include <qvaluevector.h> + +#include <kurl.h> +#include <kfileitem.h> +#include <klistview.h> +#include <kparts/browserextension.h> +#include <konq_propsview.h> +#include "konq_listviewitems.h" + +namespace KIO { class Job; } + +class QCursor; +class QRect; +class KDirLister; +class KonqFMSettings; +class ListViewPropertiesExtension; +class KToggleAction; +class KonqListView; +class KonqFileTip; +class ListViewBrowserExtension; +class QTimer; +class QFocusEvent; +class QDragMoveEvent; +class QDragEnterEvent; +class QDragLeaveEvent; +class QDropEvent; +class QPaintEvent; +class QResizeEvent; +class QMouseEvent; + +class ColumnInfo +{ +public: + ColumnInfo(); + void setData( const QString& n, const QString& desktopName, int kioUds, + KToggleAction *someAction, int theWith = -1 ); + void setData( const QString& n, const QString& desktopName, int kioUds /* UDS_EXTRA */, + QVariant::Type type, KToggleAction *someAction, int theWith = -1 ); + int displayInColumn; + QString name; + QString desktopFileName; + int udsId; + QVariant::Type type; // only used if udsId == UDS_EXTRA + bool displayThisOne; + KToggleAction *toggleThisOne; + int width; +}; + +/** + * The tree view widget (based on KListView). + * Most of the functionality is here. + */ +class KonqBaseListViewWidget : public KListView +{ + friend class KonqBaseListViewItem; + friend class KonqListView; + friend class ListViewBrowserExtension; + + Q_OBJECT +public: + KonqBaseListViewWidget( KonqListView *parent, QWidget *parentWidget ); + virtual ~KonqBaseListViewWidget(); + unsigned int NumberOfAtoms; + + virtual void stop(); + const KURL& url(); + + struct iterator + { + KonqBaseListViewItem *m_p; + + iterator() : m_p( 0L ) { } + iterator( KonqBaseListViewItem *_b ) : m_p( _b ) { } + iterator( const iterator& _it ) : m_p( _it.m_p ) { } + + KonqBaseListViewItem& operator*() { return *m_p; } + KonqBaseListViewItem *operator->() { return m_p; } + bool operator==( const iterator& _it ) { return ( m_p == _it.m_p ); } + bool operator!=( const iterator& _it ) { return ( m_p != _it.m_p ); } + iterator& operator++(); + iterator operator++(int); + }; + iterator begin() { iterator it( (KonqBaseListViewItem *)firstChild() ); return it; } + iterator end() { iterator it; return it; } + + virtual bool openURL( const KURL &url ); + + void selectedItems( QPtrList<KonqBaseListViewItem> *_list ); + KFileItemList visibleFileItems(); + KFileItemList selectedFileItems(); + KURL::List selectedUrls( bool mostLocal = false ); + + /** @return the KonqListViewDir which handles the directory _url */ + //virtual KonqListViewDir *findDir ( const QString & _url ); + + /** + * @return the Properties instance for this view. Used by the items. + */ + KonqPropsView *props() const; + + //QPtrList<ColumnInfo> *columnConfigInfo() { return &confColumns; }; + QValueVector<ColumnInfo>& columnConfigInfo() { return confColumns; }; + QString sortedByColumn; + + virtual void setShowIcons( bool enable ) { m_showIcons = enable; } + virtual bool showIcons() { return m_showIcons; } + + void setItemFont( const QFont &f ) { m_itemFont = f; } + QFont itemFont() const { return m_itemFont; } + void setItemColor( const QColor &c ) { m_itemColor = c; } + QColor itemColor() const { return m_itemColor; } + int iconSize() const { return props()->iconSize(); } + + void setAscending( bool b ) { m_bAscending = b; } + bool ascending() const { return m_bAscending; } + bool caseInsensitiveSort() const; + + virtual void paintEmptyArea( QPainter *p, const QRect &r ); + + virtual void saveState( QDataStream & ); + virtual void restoreState( QDataStream & ); + + virtual void disableIcons( const KURL::List& lst ); + + KonqListView *m_pBrowserView; + KonqFMSettings *m_pSettings; + +signals: + void viewportAdjusted(); + +public slots: + //virtual void slotOnItem( KonqBaseListViewItem* _item ); + // The '2' was added to differentiate it from KListView::slotMouseButtonClicked() + void slotMouseButtonClicked2( int _button, QListViewItem *_item, const QPoint& pos, int ); + virtual void slotExecuted( QListViewItem *_item ); + void slotItemRenamed( QListViewItem *, const QString &, int ); + +protected slots: + void slotAutoScroll(); + + // from QListView + virtual void slotReturnPressed( QListViewItem *_item ); + virtual void slotCurrentChanged( QListViewItem *_item ) { slotOnItem( _item ); } + + // slots connected to the directory lister + virtual void slotStarted(); + virtual void slotCompleted(); + virtual void slotCanceled(); + virtual void slotClear(); + virtual void slotNewItems( const KFileItemList & ); + virtual void slotDeleteItem( KFileItem * ); + virtual void slotRefreshItems( const KFileItemList & ); + virtual void slotRedirection( const KURL & ); + void slotPopupMenu( QListViewItem *, const QPoint&, int ); + + // forces a repaint on column size changes / branch expansion + // when there is a background pixmap + void slotUpdateBackground(); + + //Notifies the browser view of the currently selected items + void slotSelectionChanged(); + virtual void reportItemCounts(); + +protected: + //creates the listview columns according to confColumns + virtual void createColumns(); + //reads the configuration for the columns of the current + //protocol, it is called when the protocol changes + //it checks/unchecks the menu items and sets confColumns + void readProtocolConfig( const KURL& url ); + //calls updateContents of every ListViewItem, called after + //the columns changed + void updateListContents(); + + //this is called in the constructor, so virtual would be nonsense + void initConfig(); + + virtual void startDrag(); + virtual void viewportDragMoveEvent( QDragMoveEvent *_ev ); + virtual void viewportDragEnterEvent( QDragEnterEvent *_ev ); + virtual void viewportDragLeaveEvent( QDragLeaveEvent *_ev ); + virtual void viewportDropEvent( QDropEvent *_ev ); + virtual void viewportPaintEvent( QPaintEvent *e ); + virtual void viewportResizeEvent( QResizeEvent *e ); + + virtual void drawRubber(); + virtual void contentsMousePressEvent( QMouseEvent *e ); + virtual void contentsMouseReleaseEvent( QMouseEvent *e ); + virtual void contentsMouseMoveEvent( QMouseEvent *e ); + virtual void contentsWheelEvent( QWheelEvent * e ); + + virtual void leaveEvent( QEvent *e ); + + /** Common method for slotCompleted and slotCanceled */ + virtual void setComplete(); + + //the second parameter is set to true when the menu shortcut is pressed, + //so the position of the mouse pointer doesn't matter when using keyboard, aleXXX + virtual void popupMenu( const QPoint& _global, bool alwaysForSelectedFiles = false ); + + //this one is called only by KListView, and this is friend anyways (Alex) + //KDirLister *dirLister() const { return m_dirLister; } + +protected: + int executeArea( QListViewItem *_item ); + + /** The directory lister for this URL */ + KDirLister *m_dirLister; + + //QPtrList<ColumnInfo> confColumns; + // IMO there is really no need for an advanced data structure + //we have a fixed number of members, + //it consumes less memory and access should be faster (Alex) + // This might not be the case for ever... we should introduce custom fields in kio (David) + QValueVector<ColumnInfo> confColumns; + + KonqBaseListViewItem *m_dragOverItem; + KonqBaseListViewItem *m_activeItem; + QPtrList<KonqBaseListViewItem> *m_selected; + QTimer *m_scrollTimer; + + QFont m_itemFont; + QColor m_itemColor; + + QRect *m_rubber; + + bool m_bTopLevelComplete:1; + bool m_showIcons:1; + bool m_bCaseInsensitive:1; + bool m_bUpdateContentsPosAfterListing:1; + bool m_bAscending:1; + bool m_itemFound:1; + bool m_restored:1; + + int m_filenameColumn; + int m_filenameColumnWidth; + + KURL m_url; + + QString m_itemToGoTo; + QStringList m_itemsToSelect; + QTimer *m_backgroundTimer; + + KonqFileTip *m_fileTip; +}; + +#endif |