]>
Commit | Line | Data |
---|---|---|
0c0e1888 JH |
1 | /**************************************************************************** |
2 | ** | |
3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | |
4 | ** Contact: http://www.qt-project.org/legal | |
5 | ** | |
6 | ** This file is part of the QtGui module of the Qt Toolkit. | |
7 | ** | |
8 | ** $QT_BEGIN_LICENSE:LGPL$ | |
9 | ** Commercial License Usage | |
10 | ** Licensees holding valid commercial Qt licenses may use this file in | |
11 | ** accordance with the commercial license agreement provided with the | |
12 | ** Software or, alternatively, in accordance with the terms contained in | |
13 | ** a written agreement between you and Digia. For licensing terms and | |
14 | ** conditions see http://qt.digia.com/licensing. For further information | |
15 | ** use the contact form at http://qt.digia.com/contact-us. | |
16 | ** | |
17 | ** GNU Lesser General Public License Usage | |
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | |
19 | ** General Public License version 2.1 as published by the Free Software | |
20 | ** Foundation and appearing in the file LICENSE.LGPL included in the | |
21 | ** packaging of this file. Please review the following information to | |
22 | ** ensure the GNU Lesser General Public License version 2.1 requirements | |
23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | |
24 | ** | |
25 | ** In addition, as a special exception, Digia gives you certain additional | |
26 | ** rights. These rights are described in the Digia Qt LGPL Exception | |
27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | |
28 | ** | |
29 | ** GNU General Public License Usage | |
30 | ** Alternatively, this file may be used under the terms of the GNU | |
31 | ** General Public License version 3.0 as published by the Free Software | |
32 | ** Foundation and appearing in the file LICENSE.GPL included in the | |
33 | ** packaging of this file. Please review the following information to | |
34 | ** ensure the GNU General Public License version 3.0 requirements will be | |
35 | ** met: http://www.gnu.org/copyleft/gpl.html. | |
36 | ** | |
37 | ** | |
38 | ** $QT_END_LICENSE$ | |
39 | ** | |
40 | ****************************************************************************/ | |
41 | ||
42 | #include <QWidget> | |
43 | ||
44 | struct QWellArrayData; | |
45 | ||
46 | class QWellArray : public QWidget | |
47 | { | |
48 | Q_OBJECT | |
49 | Q_PROPERTY(int selectedColumn READ selectedColumn) | |
50 | Q_PROPERTY(int selectedRow READ selectedRow) | |
51 | ||
52 | public: | |
53 | QWellArray(int rows, int cols, QWidget* parent=0); | |
54 | ~QWellArray() {} | |
55 | QString cellContent(int row, int col) const; | |
56 | ||
57 | int selectedColumn() const { return selCol; } | |
58 | int selectedRow() const { return selRow; } | |
59 | ||
60 | virtual void setCurrent(int row, int col); | |
61 | virtual void setSelected(int row, int col); | |
62 | ||
63 | QSize sizeHint() const; | |
64 | ||
65 | virtual void setCellBrush(int row, int col, const QBrush &); | |
66 | QBrush cellBrush(int row, int col); | |
67 | ||
68 | inline int cellWidth() const | |
69 | { return cellw; } | |
70 | ||
71 | inline int cellHeight() const | |
72 | { return cellh; } | |
73 | ||
74 | inline int rowAt(int y) const | |
75 | { return y / cellh; } | |
76 | ||
77 | inline int columnAt(int x) const | |
78 | { if (isRightToLeft()) return ncols - (x / cellw) - 1; return x / cellw; } | |
79 | ||
80 | inline int rowY(int row) const | |
81 | { return cellh * row; } | |
82 | ||
83 | inline int columnX(int column) const | |
84 | { if (isRightToLeft()) return cellw * (ncols - column - 1); return cellw * column; } | |
85 | ||
86 | inline int numRows() const | |
87 | { return nrows; } | |
88 | ||
89 | inline int numCols() const | |
90 | {return ncols; } | |
91 | ||
92 | inline QRect cellRect() const | |
93 | { return QRect(0, 0, cellw, cellh); } | |
94 | ||
95 | inline QSize gridSize() const | |
96 | { return QSize(ncols * cellw, nrows * cellh); } | |
97 | ||
98 | QRect cellGeometry(int row, int column) | |
99 | { | |
100 | QRect r; | |
101 | if (row >= 0 && row < nrows && column >= 0 && column < ncols) | |
102 | r.setRect(columnX(column), rowY(row), cellw, cellh); | |
103 | return r; | |
104 | } | |
105 | ||
106 | inline void updateCell(int row, int column) { update(cellGeometry(row, column)); } | |
107 | ||
108 | signals: | |
109 | void selected(int row, int col); | |
110 | ||
111 | protected: | |
112 | virtual void paintCell(QPainter *, int row, int col, const QRect&); | |
113 | virtual void paintCellContents(QPainter *, int row, int col, const QRect&); | |
114 | ||
115 | void mousePressEvent(QMouseEvent*); | |
116 | void mouseReleaseEvent(QMouseEvent*); | |
117 | void keyPressEvent(QKeyEvent*); | |
118 | void focusInEvent(QFocusEvent*); | |
119 | void focusOutEvent(QFocusEvent*); | |
120 | void paintEvent(QPaintEvent *); | |
121 | ||
122 | private: | |
123 | Q_DISABLE_COPY(QWellArray) | |
124 | ||
125 | int nrows; | |
126 | int ncols; | |
127 | int cellw; | |
128 | int cellh; | |
129 | int curRow; | |
130 | int curCol; | |
131 | int selRow; | |
132 | int selCol; | |
133 | QWellArrayData *d; | |
134 | }; |