source: trunk/src/gui/itemviews/qtablewidget.h@ 846

Last change on this file since 846 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

File size: 13.3 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtGui module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QTABLEWIDGET_H
43#define QTABLEWIDGET_H
44
45#include <QtGui/qtableview.h>
46#include <QtCore/qvariant.h>
47#include <QtCore/qvector.h>
48//#include <QtGui/qitemselectionmodel.h>
49
50QT_BEGIN_HEADER
51
52QT_BEGIN_NAMESPACE
53
54QT_MODULE(Gui)
55
56#ifndef QT_NO_TABLEWIDGET
57
58class Q_GUI_EXPORT QTableWidgetSelectionRange
59{
60public:
61 QTableWidgetSelectionRange();
62 QTableWidgetSelectionRange(int top, int left, int bottom, int right);
63 QTableWidgetSelectionRange(const QTableWidgetSelectionRange &other);
64 ~QTableWidgetSelectionRange();
65
66 inline int topRow() const { return top; }
67 inline int bottomRow() const { return bottom; }
68 inline int leftColumn() const { return left; }
69 inline int rightColumn() const { return right; }
70 inline int rowCount() const { return bottom - top + 1; }
71 inline int columnCount() const { return right - left + 1; }
72
73private:
74 int top, left, bottom, right;
75};
76
77class QTableWidget;
78class QTableModel;
79class QWidgetItemData;
80class QTableWidgetItemPrivate;
81
82class Q_GUI_EXPORT QTableWidgetItem
83{
84 friend class QTableWidget;
85 friend class QTableModel;
86public:
87 enum ItemType { Type = 0, UserType = 1000 };
88 QTableWidgetItem(int type = Type);
89 explicit QTableWidgetItem(const QString &text, int type = Type);
90 explicit QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type);
91 QTableWidgetItem(const QTableWidgetItem &other);
92 virtual ~QTableWidgetItem();
93
94 virtual QTableWidgetItem *clone() const;
95
96 inline QTableWidget *tableWidget() const { return view; }
97
98 inline int row() const;
99 inline int column() const;
100
101 inline void setSelected(bool select);
102 inline bool isSelected() const;
103
104 inline Qt::ItemFlags flags() const { return itemFlags; }
105 void setFlags(Qt::ItemFlags flags);
106
107 inline QString text() const
108 { return data(Qt::DisplayRole).toString(); }
109 inline void setText(const QString &text);
110
111 inline QIcon icon() const
112 { return qvariant_cast<QIcon>(data(Qt::DecorationRole)); }
113 inline void setIcon(const QIcon &icon);
114
115 inline QString statusTip() const
116 { return data(Qt::StatusTipRole).toString(); }
117 inline void setStatusTip(const QString &statusTip);
118
119#ifndef QT_NO_TOOLTIP
120 inline QString toolTip() const
121 { return data(Qt::ToolTipRole).toString(); }
122 inline void setToolTip(const QString &toolTip);
123#endif
124
125#ifndef QT_NO_WHATSTHIS
126 inline QString whatsThis() const
127 { return data(Qt::WhatsThisRole).toString(); }
128 inline void setWhatsThis(const QString &whatsThis);
129#endif
130
131 inline QFont font() const
132 { return qvariant_cast<QFont>(data(Qt::FontRole)); }
133 inline void setFont(const QFont &font);
134
135 inline int textAlignment() const
136 { return data(Qt::TextAlignmentRole).toInt(); }
137 inline void setTextAlignment(int alignment)
138 { setData(Qt::TextAlignmentRole, alignment); }
139
140 inline QColor backgroundColor() const
141 { return qvariant_cast<QColor>(data(Qt::BackgroundColorRole)); }
142 inline void setBackgroundColor(const QColor &color)
143 { setData(Qt::BackgroundColorRole, color); }
144
145 inline QBrush background() const
146 { return qvariant_cast<QBrush>(data(Qt::BackgroundRole)); }
147 inline void setBackground(const QBrush &brush)
148 { setData(Qt::BackgroundRole, brush); }
149
150 inline QColor textColor() const
151 { return qvariant_cast<QColor>(data(Qt::TextColorRole)); }
152 inline void setTextColor(const QColor &color)
153 { setData(Qt::TextColorRole, color); }
154
155 inline QBrush foreground() const
156 { return qvariant_cast<QBrush>(data(Qt::ForegroundRole)); }
157 inline void setForeground(const QBrush &brush)
158 { setData(Qt::ForegroundRole, brush); }
159
160 inline Qt::CheckState checkState() const
161 { return static_cast<Qt::CheckState>(data(Qt::CheckStateRole).toInt()); }
162 inline void setCheckState(Qt::CheckState state)
163 { setData(Qt::CheckStateRole, state); }
164
165 inline QSize sizeHint() const
166 { return qvariant_cast<QSize>(data(Qt::SizeHintRole)); }
167 inline void setSizeHint(const QSize &size)
168 { setData(Qt::SizeHintRole, size); }
169
170 virtual QVariant data(int role) const;
171 virtual void setData(int role, const QVariant &value);
172
173 virtual bool operator<(const QTableWidgetItem &other) const;
174
175#ifndef QT_NO_DATASTREAM
176 virtual void read(QDataStream &in);
177 virtual void write(QDataStream &out) const;
178#endif
179 QTableWidgetItem &operator=(const QTableWidgetItem &other);
180
181 inline int type() const { return rtti; }
182
183private:
184 int rtti;
185 QVector<QWidgetItemData> values;
186 QTableWidget *view;
187 QTableWidgetItemPrivate *d;
188 Qt::ItemFlags itemFlags;
189};
190
191inline void QTableWidgetItem::setText(const QString &atext)
192{ setData(Qt::DisplayRole, atext); }
193
194inline void QTableWidgetItem::setIcon(const QIcon &aicon)
195{ setData(Qt::DecorationRole, aicon); }
196
197inline void QTableWidgetItem::setStatusTip(const QString &astatusTip)
198{ setData(Qt::StatusTipRole, astatusTip); }
199
200#ifndef QT_NO_TOOLTIP
201inline void QTableWidgetItem::setToolTip(const QString &atoolTip)
202{ setData(Qt::ToolTipRole, atoolTip); }
203#endif
204
205#ifndef QT_NO_WHATSTHIS
206inline void QTableWidgetItem::setWhatsThis(const QString &awhatsThis)
207{ setData(Qt::WhatsThisRole, awhatsThis); }
208#endif
209
210inline void QTableWidgetItem::setFont(const QFont &afont)
211{ setData(Qt::FontRole, afont); }
212
213#ifndef QT_NO_DATASTREAM
214Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item);
215Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item);
216#endif
217
218class QTableWidgetPrivate;
219
220class Q_GUI_EXPORT QTableWidget : public QTableView
221{
222 Q_OBJECT
223 Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount)
224 Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
225
226 friend class QTableModel;
227public:
228 explicit QTableWidget(QWidget *parent = 0);
229 QTableWidget(int rows, int columns, QWidget *parent = 0);
230 ~QTableWidget();
231
232 void setRowCount(int rows);
233 int rowCount() const;
234
235 void setColumnCount(int columns);
236 int columnCount() const;
237
238 int row(const QTableWidgetItem *item) const;
239 int column(const QTableWidgetItem *item) const;
240
241 QTableWidgetItem *item(int row, int column) const;
242 void setItem(int row, int column, QTableWidgetItem *item);
243 QTableWidgetItem *takeItem(int row, int column);
244
245 QTableWidgetItem *verticalHeaderItem(int row) const;
246 void setVerticalHeaderItem(int row, QTableWidgetItem *item);
247 QTableWidgetItem *takeVerticalHeaderItem(int row);
248
249 QTableWidgetItem *horizontalHeaderItem(int column) const;
250 void setHorizontalHeaderItem(int column, QTableWidgetItem *item);
251 QTableWidgetItem *takeHorizontalHeaderItem(int column);
252 void setVerticalHeaderLabels(const QStringList &labels);
253 void setHorizontalHeaderLabels(const QStringList &labels);
254
255 int currentRow() const;
256 int currentColumn() const;
257 QTableWidgetItem *currentItem() const;
258 void setCurrentItem(QTableWidgetItem *item);
259 void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command);
260 void setCurrentCell(int row, int column);
261 void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command);
262
263 void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder);
264 void setSortingEnabled(bool enable);
265 bool isSortingEnabled() const;
266
267 void editItem(QTableWidgetItem *item);
268 void openPersistentEditor(QTableWidgetItem *item);
269 void closePersistentEditor(QTableWidgetItem *item);
270
271 QWidget *cellWidget(int row, int column) const;
272 void setCellWidget(int row, int column, QWidget *widget);
273 inline void removeCellWidget(int row, int column);
274
275 bool isItemSelected(const QTableWidgetItem *item) const;
276 void setItemSelected(const QTableWidgetItem *item, bool select);
277 void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
278
279 QList<QTableWidgetSelectionRange> selectedRanges() const;
280 QList<QTableWidgetItem*> selectedItems();
281 QList<QTableWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags) const;
282
283 int visualRow(int logicalRow) const;
284 int visualColumn(int logicalColumn) const;
285
286 QTableWidgetItem *itemAt(const QPoint &p) const;
287 inline QTableWidgetItem *itemAt(int x, int y) const;
288 QRect visualItemRect(const QTableWidgetItem *item) const;
289
290 const QTableWidgetItem *itemPrototype() const;
291 void setItemPrototype(const QTableWidgetItem *item);
292
293public Q_SLOTS:
294 void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);
295 void insertRow(int row);
296 void insertColumn(int column);
297 void removeRow(int row);
298 void removeColumn(int column);
299 void clear();
300 void clearContents();
301
302Q_SIGNALS:
303 void itemPressed(QTableWidgetItem *item);
304 void itemClicked(QTableWidgetItem *item);
305 void itemDoubleClicked(QTableWidgetItem *item);
306
307 void itemActivated(QTableWidgetItem *item);
308 void itemEntered(QTableWidgetItem *item);
309 void itemChanged(QTableWidgetItem *item);
310
311 void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
312 void itemSelectionChanged();
313
314 void cellPressed(int row, int column);
315 void cellClicked(int row, int column);
316 void cellDoubleClicked(int row, int column);
317
318 void cellActivated(int row, int column);
319 void cellEntered(int row, int column);
320 void cellChanged(int row, int column);
321
322 void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
323
324protected:
325 bool event(QEvent *e);
326 virtual QStringList mimeTypes() const;
327 virtual QMimeData *mimeData(const QList<QTableWidgetItem*> items) const;
328 virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action);
329 virtual Qt::DropActions supportedDropActions() const;
330 QList<QTableWidgetItem*> items(const QMimeData *data) const;
331
332 QModelIndex indexFromItem(QTableWidgetItem *item) const;
333 QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
334 void dropEvent(QDropEvent *event);
335
336private:
337 void setModel(QAbstractItemModel *model);
338
339 Q_DECLARE_PRIVATE(QTableWidget)
340 Q_DISABLE_COPY(QTableWidget)
341
342 Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index))
343 Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index))
344 Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index))
345 Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index))
346 Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index))
347 Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index))
348 Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex &current))
349 Q_PRIVATE_SLOT(d_func(), void _q_sort())
350 Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight))
351};
352
353inline void QTableWidget::removeCellWidget(int arow, int acolumn)
354{ setCellWidget(arow, acolumn, 0); }
355
356inline QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const
357{ return itemAt(QPoint(ax, ay)); }
358
359inline int QTableWidgetItem::row() const
360{ return (view ? view->row(this) : -1); }
361
362inline int QTableWidgetItem::column() const
363{ return (view ? view->column(this) : -1); }
364
365inline void QTableWidgetItem::setSelected(bool aselect)
366{ if (view) view->setItemSelected(this, aselect); }
367
368inline bool QTableWidgetItem::isSelected() const
369{ return (view ? view->isItemSelected(this) : false); }
370
371#endif // QT_NO_TABLEWIDGET
372
373QT_END_NAMESPACE
374
375QT_END_HEADER
376
377#endif // QTABLEWIDGET_H
Note: See TracBrowser for help on using the repository browser.