diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:24:15 -0500 |
commit | bd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch) | |
tree | 7a520322212d48ebcb9fbe1087e7fca28b76185c /src/widgets/qlistview.h | |
download | qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip |
Add Qt3 development HEAD version
Diffstat (limited to 'src/widgets/qlistview.h')
-rw-r--r-- | src/widgets/qlistview.h | 605 |
1 files changed, 605 insertions, 0 deletions
diff --git a/src/widgets/qlistview.h b/src/widgets/qlistview.h new file mode 100644 index 0000000..e5dc0e4 --- /dev/null +++ b/src/widgets/qlistview.h @@ -0,0 +1,605 @@ +/**************************************************************************** +** +** 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 |