home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / qt3_emx.zip / include / qlistview.h < prev    next >
C/C++ Source or Header  |  2001-10-11  |  17KB  |  535 lines

  1. /****************************************************************************
  2. ** $Id:  qt/qlistview.h   3.0.0   edited Sep 28 09:06 $
  3. **
  4. ** Definition of QListView widget class
  5. **
  6. ** Created : 970809
  7. **
  8. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  9. **
  10. ** This file is part of the widgets module of the Qt GUI Toolkit.
  11. **
  12. ** This file may be distributed under the terms of the Q Public License
  13. ** as defined by Trolltech AS of Norway and appearing in the file
  14. ** LICENSE.QPL included in the packaging of this file.
  15. **
  16. ** This file may be distributed and/or modified under the terms of the
  17. ** GNU General Public License version 2 as published by the Free Software
  18. ** Foundation and appearing in the file LICENSE.GPL included in the
  19. ** packaging of this file.
  20. **
  21. ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
  22. ** licenses may use this file in accordance with the Qt Commercial License
  23. ** Agreement provided with the Software.
  24. **
  25. ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  26. ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  27. **
  28. ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
  29. **   information about Qt Commercial License Agreements.
  30. ** See http://www.trolltech.com/qpl/ for QPL licensing information.
  31. ** See http://www.trolltech.com/gpl/ for GPL licensing information.
  32. **
  33. ** Contact info@trolltech.com if any conditions of this licensing are
  34. ** not clear to you.
  35. **
  36. **********************************************************************/
  37.  
  38. #ifndef QLISTVIEW_H
  39. #define QLISTVIEW_H
  40.  
  41. #ifndef QT_H
  42. #include "qscrollview.h"
  43. #endif // QT_H
  44.  
  45. #ifndef QT_NO_LISTVIEW
  46.  
  47.  
  48. class QPixmap;
  49. class QFont;
  50. class QHeader;
  51. class QIconSet;
  52.  
  53. class QListView;
  54. struct QListViewPrivate;
  55. struct QCheckListItemPrivate;
  56. class QListViewItemIterator;
  57. class QDragObject;
  58. class QMimeSource;
  59. class QLineEdit;
  60. class QListViewToolTip;
  61.  
  62. class Q_EXPORT QListViewItem : public Qt
  63. {
  64.     friend class QListViewItemIterator;
  65.     friend class QListViewToolTip;
  66. #if defined(Q_CC_MSVC)
  67.     friend class QListViewItem;
  68. #endif
  69.  
  70. public:
  71.     QListViewItem( QListView * parent );
  72.     QListViewItem( QListViewItem * parent );
  73.     QListViewItem( QListView * parent, QListViewItem * after );
  74.     QListViewItem( QListViewItem * parent, QListViewItem * after );
  75.  
  76.     QListViewItem( QListView * parent,
  77.            QString,     QString = QString::null,
  78.            QString = QString::null, QString = QString::null,
  79.            QString = QString::null, QString = QString::null,
  80.            QString = QString::null, QString = QString::null );
  81.     QListViewItem( QListViewItem * parent,
  82.            QString,     QString = QString::null,
  83.            QString = QString::null, QString = QString::null,
  84.            QString = QString::null, QString = QString::null,
  85.            QString = QString::null, QString = QString::null );
  86.  
  87.     QListViewItem( QListView * parent, QListViewItem * after,
  88.            QString,     QString = QString::null,
  89.            QString = QString::null, QString = QString::null,
  90.            QString = QString::null, QString = QString::null,
  91.            QString = QString::null, QString = QString::null );
  92.     QListViewItem( QListViewItem * parent, QListViewItem * after,
  93.            QString,     QString = QString::null,
  94.            QString = QString::null, QString = QString::null,
  95.            QString = QString::null, QString = QString::null,
  96.            QString = QString::null, QString = QString::null );
  97.     virtual ~QListViewItem();
  98.  
  99.     virtual void insertItem( QListViewItem * );
  100.     virtual void takeItem( QListViewItem * );
  101.     virtual void removeItem( QListViewItem *item ) { takeItem( item ); } //obsolete, use takeItem instead
  102.  
  103.     int height() const;
  104.     virtual void invalidateHeight();
  105.     int totalHeight() const;
  106.     virtual int width( const QFontMetrics&,
  107.                const QListView*, int column) const;
  108.     void widthChanged(int column=-1) const;
  109.     int depth() const;
  110.  
  111.     virtual void setText( int, const QString &);
  112.     virtual QString text( int ) const;
  113.  
  114.     virtual void setPixmap( int, const QPixmap & );
  115.     virtual const QPixmap * pixmap( int ) const;
  116.  
  117.     virtual QString key( int, bool ) const;
  118.     virtual int compare( QListViewItem *i, int col, bool ) const;
  119.     virtual void sortChildItems( int, bool );
  120.  
  121.     int childCount() const { return nChildren; }
  122.  
  123.     bool isOpen() const { return open; }
  124.     virtual void setOpen( bool );
  125.     virtual void setup();
  126.  
  127.     virtual void setSelected( bool );
  128.     bool isSelected() const { return selected; }
  129.  
  130.     virtual void paintCell( QPainter *, const QColorGroup & cg,
  131.                 int column, int width, int alignment );
  132.     virtual void paintBranches( QPainter * p, const QColorGroup & cg,
  133.                 int w, int y, int h );
  134.     virtual void paintFocus( QPainter *, const QColorGroup & cg,
  135.                  const QRect & r );
  136.  
  137.     QListViewItem * firstChild() const;
  138.     QListViewItem * nextSibling() const { return siblingItem; }
  139.     QListViewItem * parent() const;
  140.  
  141.     QListViewItem * itemAbove();
  142.     QListViewItem * itemBelow();
  143.  
  144.     int itemPos() const;
  145.  
  146.     QListView *listView() const;
  147.  
  148.     virtual void setSelectable( bool enable );
  149.     bool isSelectable() const { return selectable && enabled; }
  150.  
  151.     virtual void setExpandable( bool );
  152.     bool isExpandable() const { return expandable; }
  153.  
  154.     void repaint() const;
  155.  
  156.     virtual void sort();
  157.     void moveItem( QListViewItem *after );
  158.  
  159.     virtual void setDragEnabled( bool allow );
  160.     virtual void setDropEnabled( bool allow );
  161.     bool dragEnabled() const;
  162.     bool dropEnabled() const;
  163.     virtual bool acceptDrop( const QMimeSource *mime ) const;
  164.  
  165.     void setVisible( bool b );
  166.     bool isVisible() const;
  167.  
  168.     virtual void setRenameEnabled( int col, bool b );
  169.     bool renameEnabled( int col ) const;
  170.     virtual void startRename( int col );
  171.  
  172.     virtual void setEnabled( bool b );
  173.     bool isEnabled() const;
  174.  
  175.     virtual int rtti() const;
  176.     static int RTTI;
  177.  
  178.     virtual void setMultiLinesEnabled( bool b );
  179.     bool multiLinesEnabled() const;
  180.  
  181. protected:
  182.     virtual void enforceSortOrder() const;
  183.     virtual void setHeight( int );
  184.     virtual void activate();
  185.  
  186.     bool activatedPos( QPoint & );
  187. #ifndef QT_NO_DRAGANDDROP
  188.     virtual void dropped( QDropEvent *e );
  189. #endif
  190.     virtual void dragEntered();
  191.     virtual void dragLeft();
  192.     virtual void okRename( int col );
  193.     virtual void cancelRename( int col );
  194.  
  195.     void ignoreDoubleClick();
  196. private:
  197.     void init();
  198.     void moveToJustAfter( QListViewItem * );
  199.  
  200.     int ownHeight;
  201.     int maybeTotalHeight;
  202.     int nChildren;
  203.  
  204.     uint lsc: 14;
  205.     uint lso: 1;
  206.     uint open : 1;
  207.     uint selected : 1;
  208.     uint selectable: 1;
  209.     uint configured: 1;
  210.     uint expandable: 1;
  211.     uint is_root: 1;
  212.     uint allow_drag : 1;
  213.     uint allow_drop : 1;
  214.     uint visible : 1;
  215.     uint enabled : 1;
  216.     uint mlenabled : 1;
  217.  
  218.     QListViewItem * parentItem;
  219.     QListViewItem * siblingItem;
  220.     QListViewItem * childItem;
  221.     QLineEdit *renameBox;
  222.     int renameCol;
  223.  
  224.     void * columns;
  225.  
  226.     friend class QListView;
  227. };
  228.  
  229. class QCheckListItem;
  230.  
  231. class Q_EXPORT QListView: public QScrollView
  232. {
  233.     friend class QListViewItemIterator;
  234.     friend class QListViewItem;
  235.     friend class QCheckListItem;
  236.     friend class QListViewToolTip;
  237.  
  238.     Q_OBJECT
  239.     Q_ENUMS( SelectionMode ResizeMode RenameAction )
  240.     Q_PROPERTY( int columns READ columns )
  241.     Q_PROPERTY( bool multiSelection READ isMultiSelection WRITE setMultiSelection DESIGNABLE false )
  242.     Q_PROPERTY( SelectionMode selectionMode READ selectionMode WRITE setSelectionMode )
  243.     Q_PROPERTY( int childCount READ childCount )
  244.     Q_PROPERTY( bool allColumnsShowFocus READ allColumnsShowFocus WRITE setAllColumnsShowFocus )
  245.     Q_PROPERTY( bool showSortIndicator READ showSortIndicator WRITE setShowSortIndicator )
  246.     Q_PROPERTY( int itemMargin READ itemMargin WRITE setItemMargin )
  247.     Q_PROPERTY( bool rootIsDecorated READ rootIsDecorated WRITE setRootIsDecorated )
  248.     Q_PROPERTY( bool showToolTips READ showToolTips WRITE setShowToolTips )
  249.     Q_PROPERTY( ResizeMode resizeMode READ resizeMode WRITE setResizeMode )
  250.     Q_PROPERTY( int treeStepSize READ treeStepSize WRITE setTreeStepSize )
  251.     Q_PROPERTY( RenameAction defaultRenameAction READ defaultRenameAction WRITE setDefaultRenameAction )
  252.  
  253. public:
  254.     QListView( QWidget* parent=0, const char* name=0, WFlags f = 0 );
  255.     ~QListView();
  256.  
  257.     int treeStepSize() const;
  258.     virtual void setTreeStepSize( int );
  259.  
  260.     virtual void insertItem( QListViewItem * );
  261.     virtual void takeItem( QListViewItem * );
  262.     virtual void removeItem( QListViewItem *item ) { takeItem( item ); } // obsolete, use takeItem instead
  263.  
  264.     QHeader * header() const;
  265.  
  266.     virtual int addColumn( const QString &label, int size = -1);
  267.     virtual int addColumn( const QIconSet& iconset, const QString &label, int size = -1);
  268.     virtual void removeColumn( int index );
  269.     virtual void setColumnText( int column, const QString &label );
  270.     virtual void setColumnText( int column, const QIconSet& iconset, const QString &label );
  271.     QString columnText( int column ) const;
  272.     virtual void setColumnWidth( int column, int width );
  273.     int columnWidth( int column ) const;
  274.     enum WidthMode { Manual, Maximum };
  275.     virtual void setColumnWidthMode( int column, WidthMode );
  276.     WidthMode columnWidthMode( int column ) const;
  277.     int columns() const;
  278.  
  279.     virtual void setColumnAlignment( int, int );
  280.     int columnAlignment( int ) const;
  281.  
  282.     void show();
  283.  
  284.     QListViewItem * itemAt( const QPoint & screenPos ) const;
  285.     QRect itemRect( const QListViewItem * ) const;
  286.     int itemPos( const QListViewItem * );
  287.  
  288.     void ensureItemVisible( const QListViewItem * );
  289.  
  290.     void repaintItem( const QListViewItem * ) const;
  291.  
  292.     virtual void setMultiSelection( bool enable );
  293.     bool isMultiSelection() const;
  294.  
  295.     enum SelectionMode { Single, Multi, Extended, NoSelection  };
  296.     void setSelectionMode( SelectionMode mode );
  297.     SelectionMode selectionMode() const;
  298.  
  299.     virtual void clearSelection();
  300.     virtual void setSelected( QListViewItem *, bool );
  301.     bool isSelected( const QListViewItem * ) const;
  302.     QListViewItem * selectedItem() const;
  303.     virtual void setOpen( QListViewItem *, bool );
  304.     bool isOpen( const QListViewItem * ) const;
  305.  
  306.     virtual void setCurrentItem( QListViewItem * );
  307.     QListViewItem * currentItem() const;
  308.  
  309.     QListViewItem * firstChild() const;
  310.     QListViewItem * lastItem() const;
  311.  
  312.     int childCount() const;
  313.  
  314.     virtual void setAllColumnsShowFocus( bool );
  315.     bool allColumnsShowFocus() const;
  316.  
  317.     virtual void setItemMargin( int );
  318.     int itemMargin() const;
  319.  
  320.     virtual void setRootIsDecorated( bool );
  321.     bool rootIsDecorated() const;
  322.  
  323.     virtual void setSorting( int column, bool increasing = TRUE );
  324.     virtual void sort();
  325.  
  326.     virtual void setFont( const QFont & );
  327.     virtual void setPalette( const QPalette & );
  328.  
  329.     bool eventFilter( QObject * o, QEvent * );
  330.  
  331.     QSize sizeHint() const;
  332.     QSize minimumSizeHint() const;
  333.  
  334.     virtual void setShowSortIndicator( bool show );
  335.     bool showSortIndicator() const;
  336.     virtual void setShowToolTips( bool b );
  337.     bool showToolTips() const;
  338.  
  339.     enum ResizeMode { NoColumn, AllColumns, LastColumn };
  340.     virtual void setResizeMode( ResizeMode m );
  341.     ResizeMode resizeMode() const;
  342.  
  343.     QListViewItem * findItem( const QString& text, int column, ComparisonFlags compare = ExactMatch | CaseSensitive ) const;
  344.  
  345.     enum RenameAction { Accept, Reject };
  346.     virtual void setDefaultRenameAction( RenameAction a );
  347.     RenameAction defaultRenameAction() const;
  348.     bool isRenaming() const;
  349.  
  350.  
  351. public slots:
  352.     virtual void clear();
  353.     virtual void invertSelection();
  354.     virtual void selectAll( bool select );
  355.     void triggerUpdate();
  356.     void setContentsPos( int x, int y );
  357.  
  358. signals:
  359.     void selectionChanged();
  360.     void selectionChanged( QListViewItem * );
  361.     void currentChanged( QListViewItem * );
  362.     void clicked( QListViewItem * );
  363.     void clicked( QListViewItem *, const QPoint &, int );
  364.     void pressed( QListViewItem * );
  365.     void pressed( QListViewItem *, const QPoint &, int );
  366.  
  367.     void doubleClicked( QListViewItem * );
  368.     void returnPressed( QListViewItem * );
  369.     void spacePressed( QListViewItem * );
  370.     void rightButtonClicked( QListViewItem *, const QPoint&, int );
  371.     void rightButtonPressed( QListViewItem *, const QPoint&, int );
  372.     void mouseButtonPressed( int, QListViewItem *, const QPoint& , int );
  373.     void mouseButtonClicked( int, QListViewItem *,  const QPoint&, int );
  374.  
  375.     void contextMenuRequested( QListViewItem *, const QPoint &, int );
  376.  
  377.     void onItem( QListViewItem *item );
  378.     void onViewport();
  379.  
  380.     void expanded( QListViewItem *item );
  381.     void collapsed( QListViewItem *item );
  382. #ifndef QT_NO_DRAGANDDROP
  383.     void dropped( QDropEvent *e );
  384. #endif
  385.     void itemRenamed( QListViewItem *item, int col, const QString & );
  386.     void itemRenamed( QListViewItem *item, int col  );
  387.  
  388. protected:
  389.     void contentsMousePressEvent( QMouseEvent * e );
  390.     void contentsMouseReleaseEvent( QMouseEvent * e );
  391.     void contentsMouseMoveEvent( QMouseEvent * e );
  392.     void contentsMouseDoubleClickEvent( QMouseEvent * e );
  393.     void contentsContextMenuEvent( QContextMenuEvent * e );
  394. #ifndef QT_NO_DRAGANDDROP
  395.     void contentsDragEnterEvent( QDragEnterEvent *e );
  396.     void contentsDragMoveEvent( QDragMoveEvent *e );
  397.     void contentsDragLeaveEvent( QDragLeaveEvent *e );
  398.     void contentsDropEvent( QDropEvent *e );
  399.     virtual QDragObject *dragObject();
  400.     virtual void startDrag();
  401. #endif
  402.  
  403.     void focusInEvent( QFocusEvent * e );
  404.     void focusOutEvent( QFocusEvent * e );
  405.  
  406.     void keyPressEvent( QKeyEvent *e );
  407.  
  408.     void resizeEvent( QResizeEvent *e );
  409.     void viewportResizeEvent( QResizeEvent *e );
  410.  
  411.     void showEvent( QShowEvent * );
  412.  
  413.     void drawContentsOffset( QPainter *, int ox, int oy,
  414.                  int cx, int cy, int cw, int ch );
  415.  
  416.     virtual void paintEmptyArea( QPainter *, const QRect & );
  417.     void styleChange( QStyle& );
  418.     void windowActivationChange( bool );
  419.  
  420. protected slots:
  421.     void updateContents();
  422.     void doAutoScroll();
  423.  
  424. private slots:
  425.     void changeSortColumn( int );
  426.     void updateDirtyItems();
  427.     void makeVisible();
  428.     void handleSizeChange( int, int, int );
  429.     void startRename();
  430.  
  431. private:
  432.     void contentsMousePressEventEx( QMouseEvent * e );
  433.     void init();
  434.     void updateGeometries();
  435.     void buildDrawableList() const;
  436.     void reconfigureItems();
  437.     void widthChanged(const QListViewItem*, int c);
  438.     void handleItemChange( QListViewItem *old, bool shift, bool control );
  439.     void selectRange( QListViewItem *from, QListViewItem *to, bool invert, bool includeFirst, bool clearSel = FALSE );
  440.  
  441.     QListViewPrivate * d;
  442.  
  443. private:    // Disabled copy constructor and operator=
  444. #if defined(Q_DISABLE_COPY)
  445.     QListView( const QWidget & );
  446.     QListView &operator=( const QWidget & );
  447. #endif
  448. };
  449.  
  450.  
  451. class Q_EXPORT QCheckListItem : public QListViewItem
  452. {
  453. public:
  454.     enum Type { RadioButton, CheckBox, Controller };
  455.  
  456.     QCheckListItem( QCheckListItem *parent, const QString &text,
  457.             Type = Controller );
  458.     QCheckListItem( QListViewItem *parent, const QString &text,
  459.             Type = Controller );
  460.     QCheckListItem( QListView *parent, const QString &text,
  461.             Type = Controller );
  462.     QCheckListItem( QListViewItem *parent, const QString &text,
  463.             const QPixmap & );
  464.     QCheckListItem( QListView *parent, const QString &text,
  465.             const QPixmap & );
  466.     ~QCheckListItem();
  467.  
  468.     void paintCell( QPainter *,  const QColorGroup & cg,
  469.             int column, int width, int alignment );
  470.     virtual void paintFocus( QPainter *, const QColorGroup & cg,
  471.                  const QRect & r );
  472.     int width( const QFontMetrics&, const QListView*, int column) const;
  473.     void setup();
  474.  
  475.     virtual void setOn( bool );
  476.     bool isOn() const { return on; }
  477.     Type type() const { return myType; }
  478.     QString text() const { return QListViewItem::text( 0 ); }
  479.     QString text( int n ) const { return QListViewItem::text( n ); }
  480.  
  481.     int rtti() const;
  482.     static int RTTI;
  483.  
  484. protected:
  485.     void activate();
  486.     void turnOffChild();
  487.     virtual void stateChange( bool );
  488.  
  489. private:
  490.     void init();
  491.     Type myType;
  492.     bool on;
  493.     QCheckListItem *exclusive;
  494. };
  495.  
  496. class Q_EXPORT QListViewItemIterator
  497. {
  498.     friend struct QListViewPrivate;
  499.     friend class QListView;
  500.     friend class QListViewItem;
  501.  
  502. public:
  503.     QListViewItemIterator();
  504.     QListViewItemIterator( QListViewItem *item );
  505.     QListViewItemIterator( const QListViewItemIterator &it );
  506.     QListViewItemIterator( QListView *lv );
  507.  
  508.     QListViewItemIterator &operator=( const QListViewItemIterator &it );
  509.  
  510.     ~QListViewItemIterator();
  511.  
  512.     QListViewItemIterator &operator++();
  513.     const QListViewItemIterator operator++( int );
  514.     QListViewItemIterator &operator+=( int j );
  515.  
  516.     QListViewItemIterator &operator--();
  517.     const QListViewItemIterator operator--( int );
  518.     QListViewItemIterator &operator-=( int j );
  519.  
  520.     QListViewItem *current() const;
  521.  
  522. protected:
  523.     QListViewItem *curr;
  524.     QListView *listView;
  525.  
  526. private:
  527.     void addToListView();
  528.     void currentRemoved();
  529.  
  530. };
  531.  
  532. #endif // QT_NO_LISTVIEW
  533.  
  534. #endif // QLISTVIEW_H
  535.