1/**********************************************************************
2** $Id: qttableview.h,v 1.2 2002/03/09 03:13:13 jwalz Exp $
3**
4** Definition of QtTableView class
5**
6** Created : 941115
7**
8** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
9**
10** This file contains a class moved out of the Qt GUI Toolkit API. It
11** may be used, distributed and modified without limitation.
12**
13**********************************************************************/
14
15#ifndef QTTABLEVIEW_H
16#define QTTABLEVIEW_H
17
18#ifndef QT_H
19#include <qframe.h>
20#endif // QT_H
21
22#ifndef QT_NO_QTTABLEVIEW
23
24class QScrollBar;
25class QCornerSquare;
26
27
28class QtTableView : public QFrame
29{
30    Q_OBJECT
31public:
32    virtual void setBackgroundColor( const QColor & );
33    virtual void setPalette( const QPalette & );
34    void	show();
35
36    void	repaint( bool erase=TRUE );
37    void	repaint( int x, int y, int w, int h, bool erase=TRUE );
38    void	repaint( const QRect &, bool erase=TRUE );
39
40protected:
41    QtTableView( QWidget *parent=0, const char *name=0, WFlags f=0 );
42   ~QtTableView();
43
44    int		numRows()	const;
45    virtual void setNumRows( int );
46    int		numCols()	const;
47    virtual void setNumCols( int );
48
49    int		topCell()	const;
50    virtual void setTopCell( int row );
51    int		leftCell()	const;
52    virtual void setLeftCell( int col );
53    virtual void setTopLeftCell( int row, int col );
54
55    int		xOffset()	const;
56    virtual void setXOffset( int );
57    int		yOffset()	const;
58    virtual void setYOffset( int );
59    virtual void setOffset( int x, int y, bool updateScrBars = TRUE );
60
61    virtual int cellWidth( int col );
62    virtual int cellHeight( int row );
63    int		cellWidth()	const;
64    int		cellHeight()	const;
65    virtual void setCellWidth( int );
66    virtual void setCellHeight( int );
67
68    virtual int totalWidth();
69    virtual int totalHeight();
70
71    uint	tableFlags()	const;
72    bool	testTableFlags( uint f ) const;
73    virtual void setTableFlags( uint f );
74    void	clearTableFlags( uint f = ~0 );
75
76    bool	autoUpdate()	 const;
77    virtual void setAutoUpdate( bool );
78
79    void	updateCell( int row, int column, bool erase=TRUE );
80
81    QRect	cellUpdateRect() const;
82    QRect	viewRect()	 const;
83
84    int		lastRowVisible() const;
85    int		lastColVisible() const;
86
87    bool	rowIsVisible( int row ) const;
88    bool	colIsVisible( int col ) const;
89
90    QScrollBar *verticalScrollBar() const;
91    QScrollBar *horizontalScrollBar() const;
92
93private slots:
94    void	horSbValue( int );
95    void	horSbSliding( int );
96    void	horSbSlidingDone();
97    void	verSbValue( int );
98    void	verSbSliding( int );
99    void	verSbSlidingDone();
100
101protected:
102    virtual void paintCell( QPainter *, int row, int col ) = 0;
103    virtual void setupPainter( QPainter * );
104
105    void	paintEvent( QPaintEvent * );
106    void	resizeEvent( QResizeEvent * );
107
108    int		findRow( int yPos ) const;
109    int		findCol( int xPos ) const;
110
111    bool	rowYPos( int row, int *yPos ) const;
112    bool	colXPos( int col, int *xPos ) const;
113
114    int		maxXOffset();
115    int		maxYOffset();
116    int		maxColOffset();
117    int		maxRowOffset();
118
119    int		minViewX()	const;
120    int		minViewY()	const;
121    int		maxViewX()	const;
122    int		maxViewY()	const;
123    int		viewWidth()	const;
124    int		viewHeight()	const;
125
126    void	scroll( int xPixels, int yPixels );
127    void	updateScrollBars();
128    void	updateTableSize();
129
130private:
131    void	coverCornerSquare( bool );
132    void	snapToGrid( bool horizontal, bool vertical );
133    virtual void	setHorScrollBar( bool on, bool update = TRUE );
134    virtual void	setVerScrollBar( bool on, bool update = TRUE );
135    void	updateView();
136    int		findRawRow( int yPos, int *cellMaxY, int *cellMinY = 0,
137			    bool goOutsideView = FALSE ) const;
138    int		findRawCol( int xPos, int *cellMaxX, int *cellMinX = 0,
139			    bool goOutsideView = FALSE ) const;
140    int		maxColsVisible() const;
141
142    void	updateScrollBars( uint );
143    void	updateFrameSize();
144
145    void	doAutoScrollBars();
146    void	showOrHideScrollBars();
147
148    int		nRows;
149    int		nCols;
150    int		xOffs, yOffs;
151    int		xCellOffs, yCellOffs;
152    short	xCellDelta, yCellDelta;
153    short	cellH, cellW;
154
155    uint	eraseInPaint		: 1;
156    uint	verSliding		: 1;
157    uint	verSnappingOff		: 1;
158    uint	horSliding		: 1;
159    uint	horSnappingOff		: 1;
160    uint	coveringCornerSquare	: 1;
161    uint	sbDirty			: 8;
162    uint	inSbUpdate		: 1;
163
164    uint	tFlags;
165    QRect	cellUpdateR;
166
167    QScrollBar *vScrollBar;
168    QScrollBar *hScrollBar;
169    QCornerSquare *cornerSquare;
170
171private:	// Disabled copy constructor and operator=
172#if defined(Q_DISABLE_COPY)
173    QtTableView( const QtTableView & );
174    QtTableView &operator=( const QtTableView & );
175#endif
176};
177
178
179const uint Tbl_vScrollBar	= 0x00000001;
180const uint Tbl_hScrollBar	= 0x00000002;
181const uint Tbl_autoVScrollBar	= 0x00000004;
182const uint Tbl_autoHScrollBar	= 0x00000008;
183const uint Tbl_autoScrollBars	= 0x0000000C;
184
185const uint Tbl_clipCellPainting = 0x00000100;
186const uint Tbl_cutCellsV	= 0x00000200;
187const uint Tbl_cutCellsH	= 0x00000400;
188const uint Tbl_cutCells		= 0x00000600;
189
190const uint Tbl_scrollLastHCell	= 0x00000800;
191const uint Tbl_scrollLastVCell	= 0x00001000;
192const uint Tbl_scrollLastCell	= 0x00001800;
193
194const uint Tbl_smoothHScrolling = 0x00002000;
195const uint Tbl_smoothVScrolling = 0x00004000;
196const uint Tbl_smoothScrolling	= 0x00006000;
197
198const uint Tbl_snapToHGrid	= 0x00008000;
199const uint Tbl_snapToVGrid	= 0x00010000;
200const uint Tbl_snapToGrid	= 0x00018000;
201
202
203inline int QtTableView::numRows() const
204{ return nRows; }
205
206inline int QtTableView::numCols() const
207{ return nCols; }
208
209inline int QtTableView::topCell() const
210{ return yCellOffs; }
211
212inline int QtTableView::leftCell() const
213{ return xCellOffs; }
214
215inline int QtTableView::xOffset() const
216{ return xOffs; }
217
218inline int QtTableView::yOffset() const
219{ return yOffs; }
220
221inline int QtTableView::cellHeight() const
222{ return cellH; }
223
224inline int QtTableView::cellWidth() const
225{ return cellW; }
226
227inline uint QtTableView::tableFlags() const
228{ return tFlags; }
229
230inline bool QtTableView::testTableFlags( uint f ) const
231{ return (tFlags & f) != 0; }
232
233inline QRect QtTableView::cellUpdateRect() const
234{ return cellUpdateR; }
235
236inline bool QtTableView::autoUpdate() const
237{ return isUpdatesEnabled(); }
238
239inline void QtTableView::repaint( bool erase )
240{ repaint( 0, 0, width(), height(), erase ); }
241
242inline void QtTableView::repaint( const QRect &r, bool erase )
243{ repaint( r.x(), r.y(), r.width(), r.height(), erase ); }
244
245inline void QtTableView::updateScrollBars()
246{ updateScrollBars( 0 ); }
247
248
249#endif // QT_NO_QTTABLEVIEW
250
251#endif // QTTABLEVIEW_H
252