/**************************************************************************** ** ** Definition of QListView widget class ** ** Created : 970809 ** ** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. ** ** This file is part of the widgets module of the Qt GUI Toolkit. ** ** This file may be used under the terms of the GNU General ** Public License versions 2.0 or 3.0 as published by the Free ** Software Foundation and appearing in the files LICENSE.GPL2 ** and LICENSE.GPL3 included in the packaging of this file. ** Alternatively you may (at your option) use any later version ** of the GNU General Public License if such license has been ** publicly approved by Trolltech ASA (or its successors, if any) ** and the KDE Free Qt Foundation. ** ** Please review the following information to ensure GNU General ** Public Licensing requirements will be met: ** http://trolltech.com/products/qt/licenses/licensing/opensource/. ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview ** or contact the sales department at sales@trolltech.com. ** ** This file may be used under the terms of the Q Public License as ** defined by Trolltech ASA and appearing in the file LICENSE.QPL ** included in the packaging of this file. Licensees holding valid Qt ** Commercial licenses may use this file in accordance with the Qt ** Commercial License Agreement provided with the Software. ** ** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, ** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted ** herein. ** **********************************************************************/ #ifndef QLISTVIEW_H #define QLISTVIEW_H #ifndef QT_H #include "qscrollview.h" #endif // QT_H #ifndef QT_NO_LISTVIEW class QPixmap; class QFont; class QHeader; class QIconSet; class QListView; struct QListViewPrivate; struct QCheckListItemPrivate; class QListViewItemIterator; struct QListViewItemIteratorPrivate; class QDragObject; class QMimeSource; class QLineEdit; class QListViewToolTip; class Q_EXPORT QListViewItem : public Qt { friend class QListViewItemIterator; friend class QListViewToolTip; public: QListViewItem( QListView * parent ); QListViewItem( QListViewItem * parent ); QListViewItem( QListView * parent, QListViewItem * after ); QListViewItem( QListViewItem * parent, QListViewItem * after ); QListViewItem( QListView * parent, QString, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null ); QListViewItem( QListViewItem * parent, QString, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null ); QListViewItem( QListView * parent, QListViewItem * after, QString, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null ); QListViewItem( QListViewItem * parent, QListViewItem * after, QString, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null, QString = QString::null ); virtual ~QListViewItem(); virtual void insertItem( QListViewItem * ); virtual void takeItem( QListViewItem * ); virtual void removeItem( QListViewItem *item ) { takeItem( item ); } //obsolete, use takeItem instead int height() const; virtual void invalidateHeight(); int totalHeight() const; virtual int width( const QFontMetrics&, const QListView*, int column) const; void widthChanged(int column=-1) const; int depth() const; virtual void setText( int, const QString &); virtual QString text( int ) const; virtual void setPixmap( int, const QPixmap & ); virtual const QPixmap * pixmap( int ) const; virtual QString key( int, bool ) const; virtual int compare( QListViewItem *i, int col, bool ) const; virtual void sortChildItems( int, bool ); int childCount() const { return nChildren; } bool isOpen() const { return open; } virtual void setOpen( bool ); virtual void setup(); virtual void setSelected( bool ); bool isSelected() const { return selected; } virtual void paintCell( QPainter *, const QColorGroup & cg, int column, int width, int alignment ); virtual void paintBranches( QPainter * p, const QColorGroup & cg, int w, int y, int h ); virtual void paintFocus( QPainter *, const QColorGroup & cg, const QRect & r ); QListViewItem * firstChild() const; QListViewItem * nextSibling() const { return siblingItem; } QListViewItem * parent() const; QListViewItem * itemAbove(); QListViewItem * itemBelow(); int itemPos() const; QListView *listView() const; virtual void setSelectable( bool enable ); bool isSelectable() const { return selectable && enabled; } virtual void setExpandable( bool ); bool isExpandable() const { return expandable; } void repaint() const; virtual void sort(); void moveItem( QListViewItem *after ); virtual void setDragEnabled( bool allow ); virtual void setDropEnabled( bool allow ); bool dragEnabled() const; bool dropEnabled() const; virtual bool acceptDrop( const QMimeSource *mime ) const; void setVisible( bool b ); bool isVisible() const; virtual void setRenameEnabled( int col, bool b ); bool renameEnabled( int col ) const; virtual void startRename( int col ); virtual void setEnabled( bool b ); bool isEnabled() const; virtual int rtti() const; // ### Qt 4: make const or better use an enum static int RTTI; virtual void setMultiLinesEnabled( bool b ); bool multiLinesEnabled() const; protected: virtual void enforceSortOrder() const; virtual void setHeight( int ); virtual void activate(); bool activatedPos( QPoint & ); #ifndef QT_NO_DRAGANDDROP virtual void dropped( QDropEvent *e ); #endif virtual void dragEntered(); virtual void dragLeft(); virtual void okRename( int col ); virtual void cancelRename( int col ); void ignoreDoubleClick(); private: void init(); void moveToJustAfter( QListViewItem * ); void enforceSortOrderBackToRoot(); void removeRenameBox(); int ownHeight; int maybeTotalHeight; int nChildren; uint lsc: 14; uint lso: 1; uint open : 1; uint selected : 1; uint selectable: 1; uint configured: 1; uint expandable: 1; uint is_root: 1; uint allow_drag : 1; uint allow_drop : 1; uint visible : 1; uint enabled : 1; uint mlenabled : 1; QListViewItem * parentItem; QListViewItem * siblingItem; QListViewItem * childItem; QLineEdit *renameBox; int renameCol; void * columns; friend class QListView; }; class QCheckListItem; class Q_EXPORT QListView: public QScrollView { friend class QListViewItemIterator; friend class QListViewItem; friend class QCheckListItem; friend class QListViewToolTip; Q_OBJECT Q_ENUMS( SelectionMode ResizeMode RenameAction ) Q_PROPERTY( int columns READ columns ) Q_PROPERTY( bool multiSelection READ isMultiSelection WRITE setMultiSelection DESIGNABLE false ) Q_PROPERTY( SelectionMode selectionMode READ selectionMode WRITE setSelectionMode ) Q_PROPERTY( int childCount READ childCount ) Q_PROPERTY( bool allColumnsShowFocus READ allColumnsShowFocus WRITE setAllColumnsShowFocus ) Q_PROPERTY( bool showSortIndicator READ showSortIndicator WRITE setShowSortIndicator ) Q_PROPERTY( int itemMargin READ itemMargin WRITE setItemMargin ) Q_PROPERTY( bool rootIsDecorated READ rootIsDecorated WRITE setRootIsDecorated ) Q_PROPERTY( bool showToolTips READ showToolTips WRITE setShowToolTips ) Q_PROPERTY( ResizeMode resizeMode READ resizeMode WRITE setResizeMode ) Q_PROPERTY( int treeStepSize READ treeStepSize WRITE setTreeStepSize ) Q_PROPERTY( RenameAction defaultRenameAction READ defaultRenameAction WRITE setDefaultRenameAction ) public: QListView( QWidget* parent=0, const char* name=0, WFlags f = 0 ); ~QListView(); int treeStepSize() const; virtual void setTreeStepSize( int ); virtual void insertItem( QListViewItem * ); virtual void takeItem( QListViewItem * ); virtual void removeItem( QListViewItem *item ) { takeItem( item ); } // obsolete, use takeItem instead QHeader * header() const; virtual int addColumn( const QString &label, int size = -1); virtual int addColumn( const QIconSet& iconset, const QString &label, int size = -1); virtual void removeColumn( int index ); virtual void setColumnText( int column, const QString &label ); virtual void setColumnText( int column, const QIconSet& iconset, const QString &label ); QString columnText( int column ) const; virtual void setColumnWidth( int column, int width ); int columnWidth( int column ) const; enum WidthMode { Manual, Maximum }; virtual void setColumnWidthMode( int column, WidthMode ); WidthMode columnWidthMode( int column ) const; int columns() const; virtual void setColumnAlignment( int, int ); int columnAlignment( int ) const; void show(); QListViewItem * itemAt( const QPoint & screenPos ) const; QRect itemRect( const QListViewItem * ) const; int itemPos( const QListViewItem * ); void ensureItemVisible( const QListViewItem * ); void repaintItem( const QListViewItem * ) const; virtual void setMultiSelection( bool enable ); bool isMultiSelection() const; enum SelectionMode { Single, Multi, Extended, NoSelection }; void setSelectionMode( SelectionMode mode ); SelectionMode selectionMode() const; virtual void clearSelection(); virtual void setSelected( QListViewItem *, bool ); void setSelectionAnchor( QListViewItem * ); bool isSelected( const QListViewItem * ) const; QListViewItem * selectedItem() const; virtual void setOpen( QListViewItem *, bool ); bool isOpen( const QListViewItem * ) const; virtual void setCurrentItem( QListViewItem * ); QListViewItem * currentItem() const; QListViewItem * firstChild() const; QListViewItem * lastItem() const; int childCount() const; virtual void setAllColumnsShowFocus( bool ); bool allColumnsShowFocus() const; virtual void setItemMargin( int ); int itemMargin() const; virtual void setRootIsDecorated( bool ); bool rootIsDecorated() const; virtual void setSorting( int column, bool ascending = TRUE ); int sortColumn() const; void setSortColumn( int column ); SortOrder sortOrder() const; void setSortOrder( SortOrder order ); virtual void sort(); virtual void setFont( const QFont & ); virtual void setPalette( const QPalette & ); bool eventFilter( QObject * o, QEvent * ); QSize sizeHint() const; QSize minimumSizeHint() const; virtual void setShowSortIndicator( bool show ); bool showSortIndicator() const; virtual void setShowToolTips( bool b ); bool showToolTips() const; enum ResizeMode { NoColumn, AllColumns, LastColumn }; virtual void setResizeMode( ResizeMode m ); ResizeMode resizeMode() const; QListViewItem * findItem( const QString& text, int column, ComparisonFlags compare = ExactMatch | CaseSensitive ) const; enum RenameAction { Accept, Reject }; virtual void setDefaultRenameAction( RenameAction a ); RenameAction defaultRenameAction() const; bool isRenaming() const; void hideColumn( int column ); public slots: virtual void clear(); virtual void invertSelection(); virtual void selectAll( bool select ); void triggerUpdate(); void setContentsPos( int x, int y ); void adjustColumn( int col ); signals: void selectionChanged(); void selectionChanged( QListViewItem * ); void currentChanged( QListViewItem * ); void clicked( QListViewItem * ); void clicked( QListViewItem *, const QPoint &, int ); void pressed( QListViewItem * ); void pressed( QListViewItem *, const QPoint &, int ); void doubleClicked( QListViewItem * ); void doubleClicked( QListViewItem *, const QPoint&, int ); void returnPressed( QListViewItem * ); void spacePressed( QListViewItem * ); void rightButtonClicked( QListViewItem *, const QPoint&, int ); void rightButtonPressed( QListViewItem *, const QPoint&, int ); void mouseButtonPressed( int, QListViewItem *, const QPoint& , int ); void mouseButtonClicked( int, QListViewItem *, const QPoint&, int ); void contextMenuRequested( QListViewItem *, const QPoint &, int ); void onItem( QListViewItem *item ); void onViewport(); void expanded( QListViewItem *item ); void collapsed( QListViewItem *item ); #ifndef QT_NO_DRAGANDDROP void dropped( QDropEvent *e ); #endif void itemRenamed( QListViewItem *item, int col, const QString & ); void itemRenamed( QListViewItem *item, int col ); protected: void contentsMousePressEvent( QMouseEvent * e ); void contentsMouseReleaseEvent( QMouseEvent * e ); void contentsMouseMoveEvent( QMouseEvent * e ); void contentsMouseDoubleClickEvent( QMouseEvent * e ); void contentsContextMenuEvent( QContextMenuEvent * e ); #ifndef QT_NO_DRAGANDDROP void contentsDragEnterEvent( QDragEnterEvent *e ); void contentsDragMoveEvent( QDragMoveEvent *e ); void contentsDragLeaveEvent( QDragLeaveEvent *e ); void contentsDropEvent( QDropEvent *e ); virtual QDragObject *dragObject(); virtual void startDrag(); #endif void focusInEvent( QFocusEvent * e ); void focusOutEvent( QFocusEvent * e ); void keyPressEvent( QKeyEvent *e ); void resizeEvent( QResizeEvent *e ); void viewportResizeEvent( QResizeEvent *e ); void showEvent( QShowEvent * ); void drawContentsOffset( QPainter *, int ox, int oy, int cx, int cy, int cw, int ch ); virtual void paintEmptyArea( QPainter *, const QRect & ); void styleChange( QStyle& ); void windowActivationChange( bool ); protected slots: void updateContents(); void doAutoScroll(); private slots: void changeSortColumn( int ); void handleIndexChange(); void updateDirtyItems(); void makeVisible(); void handleSizeChange( int, int, int ); void startRename(); void openFocusItem(); private: void contentsMousePressEventEx( QMouseEvent * e ); void contentsMouseReleaseEventEx( QMouseEvent * e ); void init(); void updateGeometries(); void buildDrawableList() const; void reconfigureItems(); void widthChanged(const QListViewItem*, int c); void handleItemChange( QListViewItem *old, bool shift, bool control ); void selectRange( QListViewItem *from, QListViewItem *to, bool invert, bool includeFirst, bool clearSel = FALSE ); bool selectRange( QListViewItem *newItem, QListViewItem *oldItem, QListViewItem *anchorItem ); bool clearRange( QListViewItem *from, QListViewItem *to, bool includeFirst = TRUE ); void doAutoScroll( const QPoint &cursorPos ); QListViewPrivate * d; private: // Disabled copy constructor and operator= #if defined(Q_DISABLE_COPY) QListView( const QListView & ); QListView &operator=( const QListView & ); #endif }; class Q_EXPORT QCheckListItem : public QListViewItem { public: enum Type { RadioButton, CheckBox, Controller, RadioButtonController=Controller, CheckBoxController }; // ### should be integrated with qbutton in ver4 perhaps enum ToggleState { Off, NoChange, On }; QCheckListItem( QCheckListItem *parent, const QString &text, Type = RadioButtonController ); QCheckListItem( QCheckListItem *parent, QListViewItem *after, const QString &text, Type = RadioButtonController ); QCheckListItem( QListViewItem *parent, const QString &text, Type = RadioButtonController ); QCheckListItem( QListViewItem *parent, QListViewItem *after, const QString &text, Type = RadioButtonController ); QCheckListItem( QListView *parent, const QString &text, Type = RadioButtonController ); QCheckListItem( QListView *parent, QListViewItem *after, const QString &text, Type = RadioButtonController ); QCheckListItem( QListViewItem *parent, const QString &text, const QPixmap & ); QCheckListItem( QListView *parent, const QString &text, const QPixmap & ); ~QCheckListItem(); void paintCell( QPainter *, const QColorGroup & cg, int column, int width, int alignment ); virtual void paintFocus( QPainter *, const QColorGroup & cg, const QRect & r ); int width( const QFontMetrics&, const QListView*, int column) const; void setup(); virtual void setOn( bool ); // ### should be replaced by setChecked in ver4 bool isOn() const { return on; } Type type() const { return myType; } QString text() const { return QListViewItem::text( 0 ); } QString text( int n ) const { return QListViewItem::text( n ); } void setTristate( bool ); bool isTristate() const; ToggleState state() const; void setState( ToggleState s); int rtti() const; static int RTTI; protected: void activate(); void turnOffChild(); virtual void stateChange( bool ); private: void init(); ToggleState internalState() const; void setStoredState( ToggleState newState, void *key ); ToggleState storedState( void *key ) const; void stateChange( ToggleState s ); void restoreState( void *key, int depth = 0 ); void updateController( bool update = TRUE , bool store = FALSE ); void updateStoredState( void *key ); void setState( ToggleState s, bool update, bool store ); void setCurrentState( ToggleState s ); Type myType; bool on; // ### remove in ver4 QCheckListItemPrivate *d; }; class Q_EXPORT QListViewItemIterator { friend struct QListViewPrivate; friend class QListView; friend class QListViewItem; public: enum IteratorFlag { Visible = 0x00000001, Invisible = 0x00000002, Selected = 0x00000004, Unselected = 0x00000008, Selectable = 0x00000010, NotSelectable = 0x00000020, DragEnabled = 0x00000040, DragDisabled = 0x00000080, DropEnabled = 0x00000100, DropDisabled = 0x00000200, Expandable = 0x00000400, NotExpandable = 0x00000800, Checked = 0x00001000, NotChecked = 0x00002000 }; QListViewItemIterator(); QListViewItemIterator( QListViewItem *item ); QListViewItemIterator( QListViewItem *item, int iteratorFlags ); QListViewItemIterator( const QListViewItemIterator &it ); QListViewItemIterator( QListView *lv ); QListViewItemIterator( QListView *lv, int iteratorFlags ); QListViewItemIterator &operator=( const QListViewItemIterator &it ); ~QListViewItemIterator(); QListViewItemIterator &operator++(); const QListViewItemIterator operator++( int ); QListViewItemIterator &operator+=( int j ); QListViewItemIterator &operator--(); const QListViewItemIterator operator--( int ); QListViewItemIterator &operator-=( int j ); QListViewItem* operator*(); QListViewItem *current() const; protected: QListViewItem *curr; QListView *listView; private: QListViewItemIteratorPrivate* d() const; void init( int flags ); void addToListView(); void currentRemoved(); bool matchesFlags( const QListViewItem* ) const; bool testPair( QListViewItemIterator::IteratorFlag, QListViewItemIterator::IteratorFlag, bool ) const; bool isChecked( const QListViewItem* ) const; }; #endif // QT_NO_LISTVIEW #endif // QLISTVIEW_H