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

  1. /****************************************************************************
  2. ** $Id:  qt/qiconview.h   3.0.0   edited Oct 1 13:46 $
  3. **
  4. ** Definition of QIconView widget class
  5. **
  6. ** Created : 990707
  7. **
  8. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  9. **
  10. ** This file is part of the iconview 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 QICONVIEW_H
  39. #define QICONVIEW_H
  40.  
  41. #ifndef QT_H
  42. #include <qscrollview.h>
  43. #include <qstring.h>
  44. #include <qrect.h>
  45. #include <qpoint.h>
  46. #include <qsize.h>
  47. #include <qfont.h> // QString->QFont conversion
  48. #include <qdragobject.h>
  49. #include <qbitmap.h>
  50. #include <qpicture.h>
  51. #endif // QT_H
  52.  
  53. #ifndef QT_NO_ICONVIEW
  54.  
  55. #if !defined( QT_MODULE_ICONVIEW ) || defined( QT_INTERNAL_ICONVIEW )
  56. #define QM_EXPORT_ICONVIEW
  57. #else
  58. #define QM_EXPORT_ICONVIEW Q_EXPORT
  59. #endif
  60.  
  61. class QIconView;
  62. class QPainter;
  63. class QMimeSource;
  64. class QMouseEvent;
  65. class QDragEnterEvent;
  66. class QDragMoveEvent;
  67. class QDragLeaveEvent;
  68. class QKeyEvent;
  69. class QFocusEvent;
  70. class QShowEvent;
  71. class QIconViewItem;
  72. class QIconViewItemLineEdit;
  73. class QStringList;
  74. class QIconDragPrivate;
  75.  
  76. #ifndef QT_NO_DRAGANDDROP
  77.  
  78. class QM_EXPORT_ICONVIEW QIconDragItem
  79. {
  80. public:
  81.     QIconDragItem();
  82.     virtual ~QIconDragItem();
  83.     virtual QByteArray data() const;
  84.     virtual void setData( const QByteArray &d );
  85.     bool operator== ( const QIconDragItem& ) const;
  86.  
  87. private:
  88.     QByteArray ba;
  89.  
  90. };
  91.  
  92. class QM_EXPORT_ICONVIEW QIconDrag : public QDragObject
  93. {
  94.     Q_OBJECT
  95. public:
  96.     QIconDrag( QWidget * dragSource, const char* name = 0 );
  97.     virtual ~QIconDrag();
  98.  
  99.     void append( const QIconDragItem &item, const QRect &pr, const QRect &tr );
  100.  
  101.     virtual const char* format( int i ) const;
  102.     static bool canDecode( QMimeSource* e );
  103.     virtual QByteArray encodedData( const char* mime ) const;
  104.  
  105. private:
  106.     QIconDragPrivate *d;
  107.     QChar endMark;
  108.  
  109.     friend class QIconView;
  110.     friend class QIconViewPrivate;
  111. };
  112.  
  113. #endif
  114.  
  115. class QIconViewToolTip;
  116. class QIconViewItemPrivate;
  117.  
  118. class QM_EXPORT_ICONVIEW QIconViewItem : public Qt
  119. {
  120.     friend class QIconView;
  121.     friend class QIconViewToolTip;
  122.     friend class QIconViewItemLineEdit;
  123.  
  124. public:
  125.     QIconViewItem( QIconView *parent );
  126.     QIconViewItem( QIconView *parent, QIconViewItem *after );
  127.     QIconViewItem( QIconView *parent, const QString &text );
  128.     QIconViewItem( QIconView *parent, QIconViewItem *after, const QString &text );
  129.     QIconViewItem( QIconView *parent, const QString &text, const QPixmap &icon );
  130.     QIconViewItem( QIconView *parent, QIconViewItem *after, const QString &text, const QPixmap &icon );
  131. #ifndef QT_NO_PICTURE
  132.     QIconViewItem( QIconView *parent, const QString &text, const QPicture &picture );
  133.     QIconViewItem( QIconView *parent, QIconViewItem *after, const QString &text, const QPicture &picture );
  134. #endif
  135.     virtual ~QIconViewItem();
  136.  
  137.     virtual void setRenameEnabled( bool allow );
  138.     virtual void setDragEnabled( bool allow );
  139.     virtual void setDropEnabled( bool allow );
  140.  
  141.     virtual QString text() const;
  142.     virtual QPixmap *pixmap() const;
  143. #ifndef QT_NO_PICTURE
  144.     virtual QPicture *picture() const;
  145. #endif
  146.     virtual QString key() const;
  147.  
  148.     bool renameEnabled() const;
  149.     bool dragEnabled() const;
  150.     bool dropEnabled() const;
  151.  
  152.     QIconView *iconView() const;
  153.     QIconViewItem *prevItem() const;
  154.     QIconViewItem *nextItem() const;
  155.  
  156.     int index() const;
  157.  
  158.     virtual void setSelected( bool s, bool cb );
  159.     virtual void setSelected( bool s );
  160.     virtual void setSelectable( bool s );
  161.  
  162.     bool isSelected() const;
  163.     bool isSelectable() const;
  164.  
  165.     virtual void repaint();
  166.  
  167.     virtual bool move( int x, int y );
  168.     virtual void moveBy( int dx, int dy );
  169.     virtual bool move( const QPoint &pnt );
  170.     virtual void moveBy( const QPoint &pnt );
  171.  
  172.     QRect rect() const;
  173.     int x() const;
  174.     int y() const;
  175.     int width() const;
  176.     int height() const;
  177.     QSize size() const;
  178.     QPoint pos() const;
  179.     QRect textRect( bool relative = TRUE ) const;
  180.     QRect pixmapRect( bool relative = TRUE ) const;
  181.     bool contains( const QPoint& pnt ) const;
  182.     bool intersects( const QRect& r ) const;
  183.  
  184.     virtual bool acceptDrop( const QMimeSource *mime ) const;
  185.  
  186. #ifndef QT_NO_TEXTEDIT
  187.     void rename();
  188. #endif
  189.  
  190.     virtual int compare( QIconViewItem *i ) const;
  191.  
  192.     virtual void setText( const QString &text );
  193.     virtual void setPixmap( const QPixmap &icon );
  194. #ifndef QT_NO_PICTURE
  195.     virtual void setPicture( const QPicture &icon );
  196. #endif
  197.     virtual void setText( const QString &text, bool recalc, bool redraw = TRUE );
  198.     virtual void setPixmap( const QPixmap &icon, bool recalc, bool redraw = TRUE );
  199.     virtual void setKey( const QString &k );
  200.  
  201.     virtual int rtti() const;
  202.     static int RTTI;
  203.  
  204. protected:
  205. #ifndef QT_NO_TEXTEDIT
  206.     virtual void removeRenameBox();
  207. #endif
  208.     virtual void calcRect( const QString &text_ = QString::null );
  209.     virtual void paintItem( QPainter *p, const QColorGroup &cg );
  210.     virtual void paintFocus( QPainter *p, const QColorGroup &cg );
  211. #ifndef QT_NO_DRAGANDDROP
  212.     virtual void dropped( QDropEvent *e, const QValueList<QIconDragItem> &lst );
  213. #endif
  214.     virtual void dragEntered();
  215.     virtual void dragLeft();
  216.     void setItemRect( const QRect &r );
  217.     void setTextRect( const QRect &r );
  218.     void setPixmapRect( const QRect &r );
  219.     void calcTmpText();
  220.  
  221. private:
  222.     void init( QIconViewItem *after = 0
  223. #ifndef QT_NO_PICTURE
  224.            , QPicture *pic = 0
  225. #endif
  226.            );
  227. #ifndef QT_NO_TEXTEDIT
  228.     void renameItem();
  229.     void cancelRenameItem();
  230. #endif
  231.     void checkRect();
  232.  
  233.     QIconView *view;
  234.     QString itemText, itemKey;
  235.     QString tmpText;
  236.     QPixmap *itemIcon;
  237. #ifndef QT_NO_PICTURE
  238.     QPicture *itemPic;
  239. #endif
  240.     QIconViewItem *prev, *next;
  241.     uint allow_rename : 1;
  242.     uint allow_drag : 1;
  243.     uint allow_drop : 1;
  244.     uint selected : 1;
  245.     uint selectable : 1;
  246.     uint dirty : 1;
  247.     uint wordWrapDirty : 1;
  248.     QRect itemRect, itemTextRect, itemIconRect;
  249. #ifndef QT_NO_TEXTEDIT
  250.     QIconViewItemLineEdit *renameBox;
  251. #endif
  252.     QRect oldRect;
  253.  
  254.     QIconViewItemPrivate *d;
  255.  
  256. };
  257.  
  258. class QIconViewPrivate;          /* don't touch */
  259.  
  260. class QM_EXPORT_ICONVIEW QIconView : public QScrollView
  261. {
  262.     friend class QIconViewItem;
  263.     friend class QIconViewPrivate;
  264.     friend class QIconViewToolTip;
  265.  
  266.     Q_OBJECT
  267.     // #### sorting and sort direction do not work
  268.     Q_ENUMS( SelectionMode ItemTextPos Arrangement ResizeMode )
  269.     Q_PROPERTY( bool sorting READ sorting )
  270.     Q_PROPERTY( bool sortDirection READ sortDirection )
  271.     Q_PROPERTY( SelectionMode selectionMode READ selectionMode WRITE setSelectionMode )
  272.     Q_PROPERTY( int gridX READ gridX WRITE setGridX )
  273.     Q_PROPERTY( int gridY READ gridY WRITE setGridY )
  274.     Q_PROPERTY( int spacing READ spacing WRITE setSpacing )
  275.     Q_PROPERTY( ItemTextPos itemTextPos READ itemTextPos WRITE setItemTextPos )
  276.     Q_PROPERTY( QBrush itemTextBackground READ itemTextBackground WRITE setItemTextBackground )
  277.     Q_PROPERTY( Arrangement arrangement READ arrangement WRITE setArrangement )
  278.     Q_PROPERTY( ResizeMode resizeMode READ resizeMode WRITE setResizeMode )
  279.     Q_PROPERTY( int maxItemWidth READ maxItemWidth WRITE setMaxItemWidth )
  280.     Q_PROPERTY( int maxItemTextLength READ maxItemTextLength WRITE setMaxItemTextLength )
  281.     Q_PROPERTY( bool autoArrange READ autoArrange WRITE setAutoArrange )
  282.     Q_PROPERTY( bool itemsMovable READ itemsMovable WRITE setItemsMovable )
  283.     Q_PROPERTY( bool wordWrapIconText READ wordWrapIconText WRITE setWordWrapIconText )
  284.     Q_PROPERTY( bool showToolTips READ showToolTips WRITE setShowToolTips )
  285.     Q_PROPERTY( uint count READ count )
  286.  
  287. public:
  288.     enum SelectionMode {
  289.     Single = 0,
  290.     Multi,
  291.     Extended,
  292.     NoSelection
  293.     };
  294.     enum Arrangement {
  295.     LeftToRight = 0,
  296.     TopToBottom
  297.     };
  298.     enum ResizeMode {
  299.     Fixed = 0,
  300.     Adjust
  301.     };
  302.     enum ItemTextPos {
  303.     Bottom = 0,
  304.     Right
  305.     };
  306.  
  307.     QIconView( QWidget* parent=0, const char* name=0, WFlags f = 0 );
  308.     virtual ~QIconView();
  309.  
  310.     virtual void insertItem( QIconViewItem *item, QIconViewItem *after = 0L );
  311.     virtual void takeItem( QIconViewItem *item );
  312.  
  313.     int index( const QIconViewItem *item ) const;
  314.  
  315.     QIconViewItem *firstItem() const;
  316.     QIconViewItem *lastItem() const;
  317.     QIconViewItem *currentItem() const;
  318.     virtual void setCurrentItem( QIconViewItem *item );
  319.     virtual void setSelected( QIconViewItem *item, bool s, bool cb = FALSE );
  320.  
  321.     uint count() const;
  322.  
  323. public:
  324.     virtual void showEvent( QShowEvent * );
  325.  
  326.     virtual void setSelectionMode( SelectionMode m );
  327.     SelectionMode selectionMode() const;
  328.  
  329.     QIconViewItem *findItem( const QPoint &pos ) const;
  330.     QIconViewItem *findItem( const QString &text, ComparisonFlags compare = BeginsWith ) const;
  331.     virtual void selectAll( bool select );
  332.     virtual void clearSelection();
  333.     virtual void invertSelection();
  334.  
  335.     virtual void repaintItem( QIconViewItem *item );
  336.  
  337.     void ensureItemVisible( QIconViewItem *item );
  338.     QIconViewItem* findFirstVisibleItem( const QRect &r ) const;
  339.     QIconViewItem* findLastVisibleItem( const QRect &r ) const;
  340.  
  341.     virtual void clear();
  342.  
  343.     virtual void setGridX( int rx );
  344.     virtual void setGridY( int ry );
  345.     int gridX() const;
  346.     int gridY() const;
  347.     virtual void setSpacing( int sp );
  348.     int spacing() const;
  349.     virtual void setItemTextPos( ItemTextPos pos );
  350.     ItemTextPos itemTextPos() const;
  351.     virtual void setItemTextBackground( const QBrush &b );
  352.     QBrush itemTextBackground() const;
  353.     virtual void setArrangement( Arrangement am );
  354.     Arrangement arrangement() const;
  355.     virtual void setResizeMode( ResizeMode am );
  356.     ResizeMode resizeMode() const;
  357.     virtual void setMaxItemWidth( int w );
  358.     int maxItemWidth() const;
  359.     virtual void setMaxItemTextLength( int w );
  360.     int maxItemTextLength() const;
  361.     virtual void setAutoArrange( bool b );
  362.     bool autoArrange() const;
  363.     virtual void setShowToolTips( bool b );
  364.     bool showToolTips() const;
  365.  
  366.     void setSorting( bool sort, bool ascending = TRUE );
  367.     bool sorting() const;
  368.     bool sortDirection() const;
  369.  
  370.     virtual void setItemsMovable( bool b );
  371.     bool itemsMovable() const;
  372.     virtual void setWordWrapIconText( bool b );
  373.     bool wordWrapIconText() const;
  374.  
  375.     bool eventFilter( QObject * o, QEvent * );
  376.  
  377.     QSize minimumSizeHint() const;
  378.     QSize sizeHint() const;
  379.  
  380.     virtual void sort( bool ascending = TRUE );
  381.  
  382.     virtual void setFont( const QFont & );
  383.     virtual void setPalette( const QPalette & );
  384.  
  385.     bool isRenaming() const;
  386.  
  387. public slots:
  388.     virtual void arrangeItemsInGrid( const QSize &grid, bool update = TRUE );
  389.     virtual void arrangeItemsInGrid( bool update = TRUE );
  390.     virtual void setContentsPos( int x, int y );
  391.     virtual void updateContents();
  392.  
  393. signals:
  394.     void selectionChanged();
  395.     void selectionChanged( QIconViewItem *item );
  396.     void currentChanged( QIconViewItem *item );
  397.     void clicked( QIconViewItem * );
  398.     void clicked( QIconViewItem *, const QPoint & );
  399.     void pressed( QIconViewItem * );
  400.     void pressed( QIconViewItem *, const QPoint & );
  401.  
  402.     void doubleClicked( QIconViewItem *item );
  403.     void returnPressed( QIconViewItem *item );
  404.     void rightButtonClicked( QIconViewItem* item, const QPoint& pos );
  405.     void rightButtonPressed( QIconViewItem* item, const QPoint& pos );
  406.     void mouseButtonPressed( int button, QIconViewItem* item, const QPoint& pos );
  407.     void mouseButtonClicked( int button, QIconViewItem* item, const QPoint& pos );
  408.     void contextMenuRequested( QIconViewItem* item, const QPoint &pos );
  409.  
  410. #ifndef QT_NO_DRAGANDDROP
  411.     void dropped( QDropEvent *e, const QValueList<QIconDragItem> &lst );
  412. #endif
  413.     void moved();
  414.     void onItem( QIconViewItem *item );
  415.     void onViewport();
  416.     void itemRenamed( QIconViewItem *item, const QString & );
  417.     void itemRenamed( QIconViewItem *item );
  418.  
  419. protected slots:
  420.     virtual void doAutoScroll();
  421.     virtual void adjustItems();
  422.     virtual void slotUpdate();
  423.  
  424. private slots:
  425.     void clearInputString();
  426.     void movedContents( int dx, int dy );
  427.  
  428. protected:
  429.     void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
  430.     void contentsMousePressEvent( QMouseEvent *e );
  431.     void contentsMouseReleaseEvent( QMouseEvent *e );
  432.     void contentsMouseMoveEvent( QMouseEvent *e );
  433.     void contentsMouseDoubleClickEvent( QMouseEvent *e );
  434.     void contentsContextMenuEvent( QContextMenuEvent *e );
  435.  
  436. #ifndef QT_NO_DRAGANDDROP
  437.     void contentsDragEnterEvent( QDragEnterEvent *e );
  438.     void contentsDragMoveEvent( QDragMoveEvent *e );
  439.     void contentsDragLeaveEvent( QDragLeaveEvent *e );
  440.     void contentsDropEvent( QDropEvent *e );
  441. #endif
  442.  
  443.     void resizeEvent( QResizeEvent* e );
  444.     void keyPressEvent( QKeyEvent *e );
  445.     void focusInEvent( QFocusEvent *e );
  446.     void focusOutEvent( QFocusEvent *e );
  447.     void enterEvent( QEvent *e );
  448.  
  449.     virtual void drawRubber( QPainter *p );
  450. #ifndef QT_NO_DRAGANDDROP
  451.     virtual QDragObject *dragObject();
  452.     virtual void startDrag();
  453. #endif
  454.     virtual void insertInGrid( QIconViewItem *item );
  455.     virtual void drawBackground( QPainter *p, const QRect &r );
  456.  
  457.     void emitSelectionChanged( QIconViewItem * i = 0 );
  458.     void emitRenamed( QIconViewItem *item );
  459.  
  460.     QIconViewItem *makeRowLayout( QIconViewItem *begin, int &y, bool &changed );
  461.  
  462.     void styleChange( QStyle& );
  463.     void windowActivationChange( bool );
  464.  
  465. private:
  466.     void contentsMousePressEventEx( QMouseEvent *e );
  467.     virtual void drawDragShapes( const QPoint &pnt );
  468. #ifndef QT_NO_DRAGANDDROP
  469.     virtual void initDragEnter( QDropEvent *e );
  470. #endif
  471.     void drawContents( QPainter* );
  472.     void findItemByName( const QString &text );
  473.     void handleItemChange( QIconViewItem *old, bool shift, bool control );
  474.  
  475.     int calcGridNum( int w, int x ) const;
  476.     QIconViewItem *rowBegin( QIconViewItem *item ) const;
  477.     void updateItemContainer( QIconViewItem *item );
  478.     void appendItemContainer();
  479.     void rebuildContainers();
  480.     QBitmap mask( QPixmap *pix ) const;
  481.  
  482.     QIconViewPrivate *d;
  483.  
  484. private:    // Disabled copy constructor and operator=
  485. #if defined(Q_DISABLE_COPY)
  486.     QIconView( const QIconView & );
  487.     QIconView& operator=( const QIconView & );
  488. #endif
  489. };
  490.  
  491. #endif // QT_NO_ICONVIEW
  492.  
  493. #endif // QICONVIEW_H
  494.