diff options
Diffstat (limited to 'konqueror/listview/konq_listviewwidget.h')
-rw-r--r-- | konqueror/listview/konq_listviewwidget.h | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/konqueror/listview/konq_listviewwidget.h b/konqueror/listview/konq_listviewwidget.h new file mode 100644 index 000000000..ae79e5c03 --- /dev/null +++ b/konqueror/listview/konq_listviewwidget.h @@ -0,0 +1,274 @@ +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Torben Weis <[email protected]> + 2004 Michael Brade <[email protected]> + + 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 <tqvaluelist.h> +#include <tqvaluevector.h> + +#include <kurl.h> +#include <tdefileitem.h> +#include <tdelistview.h> +#include <tdeparts/browserextension.h> +#include <konq_propsview.h> +#include "konq_listviewitems.h" + +namespace TDEIO { class Job; } + +class TQCursor; +class TQRect; +class KDirLister; +class KonqFMSettings; +class ListViewPropertiesExtension; +class TDEToggleAction; +class KonqListView; +class KonqFileTip; +class ListViewBrowserExtension; +class TQTimer; +class TQFocusEvent; +class TQDragMoveEvent; +class TQDragEnterEvent; +class TQDragLeaveEvent; +class TQDropEvent; +class TQPaintEvent; +class TQResizeEvent; +class TQMouseEvent; + +class ColumnInfo +{ +public: + ColumnInfo(); + void setData( const TQString& n, const TQString& desktopName, int kioUds, + TDEToggleAction *someAction, int theWith = -1 ); + void setData( const TQString& n, const TQString& desktopName, int kioUds /* UDS_EXTRA */, + TQVariant::Type type, TDEToggleAction *someAction, int theWith = -1 ); + int displayInColumn; + TQString name; + TQString desktopFileName; + int udsId; + TQVariant::Type type; // only used if udsId == UDS_EXTRA + bool displayThisOne; + TDEToggleAction *toggleThisOne; + int width; +}; + +/** + * The tree view widget (based on TDEListView). + * Most of the functionality is here. + */ +class KonqBaseListViewWidget : public TDEListView +{ + friend class KonqBaseListViewItem; + friend class KonqListView; + friend class ListViewBrowserExtension; + + Q_OBJECT + +public: + KonqBaseListViewWidget( KonqListView *parent, TQWidget *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( TQPtrList<KonqBaseListViewItem> *_list ); + KFileItemList visibleFileItems(); + KFileItemList selectedFileItems(); + KURL::List selectedUrls( bool mostLocal = false ); + + /** @return the KonqListViewDir which handles the directory _url */ + //virtual KonqListViewDir *findDir ( const TQString & _url ); + + /** + * @return the Properties instance for this view. Used by the items. + */ + KonqPropsView *props() const; + + //TQPtrList<ColumnInfo> *columnConfigInfo() { return &confColumns; }; + TQValueVector<ColumnInfo>& columnConfigInfo() { return confColumns; }; + TQString sortedByColumn; + + virtual void setShowIcons( bool enable ) { m_showIcons = enable; } + virtual bool showIcons() { return m_showIcons; } + + void setItemFont( const TQFont &f ) { m_itemFont = f; } + TQFont itemFont() const { return m_itemFont; } + void setItemColor( const TQColor &c ) { m_itemColor = c; } + TQColor 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( TQPainter *p, const TQRect &r ); + + virtual void saveState( TQDataStream & ); + virtual void restoreState( TQDataStream & ); + + 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 TDEListView::slotMouseButtonClicked() + void slotMouseButtonClicked2( int _button, TQListViewItem *_item, const TQPoint& pos, int ); + virtual void slotExecuted( TQListViewItem *_item ); + void slotItemRenamed( TQListViewItem *, const TQString &, int ); + void slotRenameNextItem(TQListViewItem *item, int col); + void slotRenamePrevItem(TQListViewItem *item, int col); + +protected slots: + void slotAutoScroll(); + + // from TQListView + virtual void slotReturnPressed( TQListViewItem *_item ); + virtual void slotCurrentChanged( TQListViewItem *_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( TQListViewItem *, const TQPoint&, 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( TQDragMoveEvent *_ev ); + virtual void viewportDragEnterEvent( TQDragEnterEvent *_ev ); + virtual void viewportDragLeaveEvent( TQDragLeaveEvent *_ev ); + virtual void viewportDropEvent( TQDropEvent *_ev ); + virtual void viewportPaintEvent( TQPaintEvent *e ); + virtual void viewportResizeEvent( TQResizeEvent *e ); + + virtual void drawRubber( TQPainter * ); + virtual void contentsMousePressEvent( TQMouseEvent *e ); + virtual void contentsMouseReleaseEvent( TQMouseEvent *e ); + virtual void contentsMouseMoveEvent( TQMouseEvent *e ); + virtual void contentsWheelEvent( TQWheelEvent * e ); + + virtual void leaveEvent( TQEvent *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 TQPoint& _global, bool alwaysForSelectedFiles = false ); + + //this one is called only by TDEListView, and this is friend anyways (Alex) + //KDirLister *dirLister() const { return m_dirLister; } + +protected: + int executeArea( TQListViewItem *_item ); + + /** The directory lister for this URL */ + KDirLister *m_dirLister; + + //TQPtrList<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 tdeio (David) + TQValueVector<ColumnInfo> confColumns; + + KonqBaseListViewItem *m_dragOverItem; + KonqBaseListViewItem *m_activeItem; + TQPtrList<KonqBaseListViewItem> *m_selected; + TQTimer *m_scrollTimer; + + TQFont m_itemFont; + TQColor m_itemColor; + + TQRect *m_rubber; + TQPixmap *m_backrubber; + + 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; + + TQString m_itemToGoTo; + TQStringList m_itemsToSelect; + TQTimer *m_backgroundTimer; + + KonqFileTip *m_fileTip; +}; + +#endif |