diff -r 000000000000 -r 1918ee327afb src/gui/itemviews/qtablewidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gui/itemviews/qtablewidget.h Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,377 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTABLEWIDGET_H +#define QTABLEWIDGET_H + +#include +#include +#include +//#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +#ifndef QT_NO_TABLEWIDGET + +class Q_GUI_EXPORT QTableWidgetSelectionRange +{ +public: + QTableWidgetSelectionRange(); + QTableWidgetSelectionRange(int top, int left, int bottom, int right); + QTableWidgetSelectionRange(const QTableWidgetSelectionRange &other); + ~QTableWidgetSelectionRange(); + + inline int topRow() const { return top; } + inline int bottomRow() const { return bottom; } + inline int leftColumn() const { return left; } + inline int rightColumn() const { return right; } + inline int rowCount() const { return bottom - top + 1; } + inline int columnCount() const { return right - left + 1; } + +private: + int top, left, bottom, right; +}; + +class QTableWidget; +class QTableModel; +class QWidgetItemData; +class QTableWidgetItemPrivate; + +class Q_GUI_EXPORT QTableWidgetItem +{ + friend class QTableWidget; + friend class QTableModel; +public: + enum ItemType { Type = 0, UserType = 1000 }; + QTableWidgetItem(int type = Type); + explicit QTableWidgetItem(const QString &text, int type = Type); + explicit QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type); + QTableWidgetItem(const QTableWidgetItem &other); + virtual ~QTableWidgetItem(); + + virtual QTableWidgetItem *clone() const; + + inline QTableWidget *tableWidget() const { return view; } + + inline int row() const; + inline int column() const; + + inline void setSelected(bool select); + inline bool isSelected() const; + + inline Qt::ItemFlags flags() const { return itemFlags; } + void setFlags(Qt::ItemFlags flags); + + inline QString text() const + { return data(Qt::DisplayRole).toString(); } + inline void setText(const QString &text); + + inline QIcon icon() const + { return qvariant_cast(data(Qt::DecorationRole)); } + inline void setIcon(const QIcon &icon); + + inline QString statusTip() const + { return data(Qt::StatusTipRole).toString(); } + inline void setStatusTip(const QString &statusTip); + +#ifndef QT_NO_TOOLTIP + inline QString toolTip() const + { return data(Qt::ToolTipRole).toString(); } + inline void setToolTip(const QString &toolTip); +#endif + +#ifndef QT_NO_WHATSTHIS + inline QString whatsThis() const + { return data(Qt::WhatsThisRole).toString(); } + inline void setWhatsThis(const QString &whatsThis); +#endif + + inline QFont font() const + { return qvariant_cast(data(Qt::FontRole)); } + inline void setFont(const QFont &font); + + inline int textAlignment() const + { return data(Qt::TextAlignmentRole).toInt(); } + inline void setTextAlignment(int alignment) + { setData(Qt::TextAlignmentRole, alignment); } + + inline QColor backgroundColor() const + { return qvariant_cast(data(Qt::BackgroundColorRole)); } + inline void setBackgroundColor(const QColor &color) + { setData(Qt::BackgroundColorRole, color); } + + inline QBrush background() const + { return qvariant_cast(data(Qt::BackgroundRole)); } + inline void setBackground(const QBrush &brush) + { setData(Qt::BackgroundRole, brush); } + + inline QColor textColor() const + { return qvariant_cast(data(Qt::TextColorRole)); } + inline void setTextColor(const QColor &color) + { setData(Qt::TextColorRole, color); } + + inline QBrush foreground() const + { return qvariant_cast(data(Qt::ForegroundRole)); } + inline void setForeground(const QBrush &brush) + { setData(Qt::ForegroundRole, brush); } + + inline Qt::CheckState checkState() const + { return static_cast(data(Qt::CheckStateRole).toInt()); } + inline void setCheckState(Qt::CheckState state) + { setData(Qt::CheckStateRole, state); } + + inline QSize sizeHint() const + { return qvariant_cast(data(Qt::SizeHintRole)); } + inline void setSizeHint(const QSize &size) + { setData(Qt::SizeHintRole, size); } + + virtual QVariant data(int role) const; + virtual void setData(int role, const QVariant &value); + + virtual bool operator<(const QTableWidgetItem &other) const; + +#ifndef QT_NO_DATASTREAM + virtual void read(QDataStream &in); + virtual void write(QDataStream &out) const; +#endif + QTableWidgetItem &operator=(const QTableWidgetItem &other); + + inline int type() const { return rtti; } + +private: + int rtti; + QVector values; + QTableWidget *view; + QTableWidgetItemPrivate *d; + Qt::ItemFlags itemFlags; +}; + +inline void QTableWidgetItem::setText(const QString &atext) +{ setData(Qt::DisplayRole, atext); } + +inline void QTableWidgetItem::setIcon(const QIcon &aicon) +{ setData(Qt::DecorationRole, aicon); } + +inline void QTableWidgetItem::setStatusTip(const QString &astatusTip) +{ setData(Qt::StatusTipRole, astatusTip); } + +#ifndef QT_NO_TOOLTIP +inline void QTableWidgetItem::setToolTip(const QString &atoolTip) +{ setData(Qt::ToolTipRole, atoolTip); } +#endif + +#ifndef QT_NO_WHATSTHIS +inline void QTableWidgetItem::setWhatsThis(const QString &awhatsThis) +{ setData(Qt::WhatsThisRole, awhatsThis); } +#endif + +inline void QTableWidgetItem::setFont(const QFont &afont) +{ setData(Qt::FontRole, afont); } + +#ifndef QT_NO_DATASTREAM +Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item); +Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item); +#endif + +class QTableWidgetPrivate; + +class Q_GUI_EXPORT QTableWidget : public QTableView +{ + Q_OBJECT + Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount) + Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount) + + friend class QTableModel; +public: + explicit QTableWidget(QWidget *parent = 0); + QTableWidget(int rows, int columns, QWidget *parent = 0); + ~QTableWidget(); + + void setRowCount(int rows); + int rowCount() const; + + void setColumnCount(int columns); + int columnCount() const; + + int row(const QTableWidgetItem *item) const; + int column(const QTableWidgetItem *item) const; + + QTableWidgetItem *item(int row, int column) const; + void setItem(int row, int column, QTableWidgetItem *item); + QTableWidgetItem *takeItem(int row, int column); + + QTableWidgetItem *verticalHeaderItem(int row) const; + void setVerticalHeaderItem(int row, QTableWidgetItem *item); + QTableWidgetItem *takeVerticalHeaderItem(int row); + + QTableWidgetItem *horizontalHeaderItem(int column) const; + void setHorizontalHeaderItem(int column, QTableWidgetItem *item); + QTableWidgetItem *takeHorizontalHeaderItem(int column); + void setVerticalHeaderLabels(const QStringList &labels); + void setHorizontalHeaderLabels(const QStringList &labels); + + int currentRow() const; + int currentColumn() const; + QTableWidgetItem *currentItem() const; + void setCurrentItem(QTableWidgetItem *item); + void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command); + void setCurrentCell(int row, int column); + void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command); + + void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder); + void setSortingEnabled(bool enable); + bool isSortingEnabled() const; + + void editItem(QTableWidgetItem *item); + void openPersistentEditor(QTableWidgetItem *item); + void closePersistentEditor(QTableWidgetItem *item); + + QWidget *cellWidget(int row, int column) const; + void setCellWidget(int row, int column, QWidget *widget); + inline void removeCellWidget(int row, int column); + + bool isItemSelected(const QTableWidgetItem *item) const; + void setItemSelected(const QTableWidgetItem *item, bool select); + void setRangeSelected(const QTableWidgetSelectionRange &range, bool select); + + QList selectedRanges() const; + QList selectedItems(); + QList findItems(const QString &text, Qt::MatchFlags flags) const; + + int visualRow(int logicalRow) const; + int visualColumn(int logicalColumn) const; + + QTableWidgetItem *itemAt(const QPoint &p) const; + inline QTableWidgetItem *itemAt(int x, int y) const; + QRect visualItemRect(const QTableWidgetItem *item) const; + + const QTableWidgetItem *itemPrototype() const; + void setItemPrototype(const QTableWidgetItem *item); + +public Q_SLOTS: + void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible); + void insertRow(int row); + void insertColumn(int column); + void removeRow(int row); + void removeColumn(int column); + void clear(); + void clearContents(); + +Q_SIGNALS: + void itemPressed(QTableWidgetItem *item); + void itemClicked(QTableWidgetItem *item); + void itemDoubleClicked(QTableWidgetItem *item); + + void itemActivated(QTableWidgetItem *item); + void itemEntered(QTableWidgetItem *item); + void itemChanged(QTableWidgetItem *item); + + void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous); + void itemSelectionChanged(); + + void cellPressed(int row, int column); + void cellClicked(int row, int column); + void cellDoubleClicked(int row, int column); + + void cellActivated(int row, int column); + void cellEntered(int row, int column); + void cellChanged(int row, int column); + + void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn); + +protected: + bool event(QEvent *e); + virtual QStringList mimeTypes() const; + virtual QMimeData *mimeData(const QList items) const; + virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action); + virtual Qt::DropActions supportedDropActions() const; + QList items(const QMimeData *data) const; + + QModelIndex indexFromItem(QTableWidgetItem *item) const; + QTableWidgetItem *itemFromIndex(const QModelIndex &index) const; + void dropEvent(QDropEvent *event); + +private: + void setModel(QAbstractItemModel *model); + + Q_DECLARE_PRIVATE(QTableWidget) + Q_DISABLE_COPY(QTableWidget) + + Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index)) + Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index)) + Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index)) + Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index)) + Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index)) + Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index)) + Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex ¤t)) + Q_PRIVATE_SLOT(d_func(), void _q_sort()) + Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)) +}; + +inline void QTableWidget::removeCellWidget(int arow, int acolumn) +{ setCellWidget(arow, acolumn, 0); } + +inline QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const +{ return itemAt(QPoint(ax, ay)); } + +inline int QTableWidgetItem::row() const +{ return (view ? view->row(this) : -1); } + +inline int QTableWidgetItem::column() const +{ return (view ? view->column(this) : -1); } + +inline void QTableWidgetItem::setSelected(bool aselect) +{ if (view) view->setItemSelected(this, aselect); } + +inline bool QTableWidgetItem::isSelected() const +{ return (view ? view->isItemSelected(this) : false); } + +#endif // QT_NO_TABLEWIDGET + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QTABLEWIDGET_H