diff options
Diffstat (limited to 'src/gui/itemviews/qstandarditemmodel.h')
-rw-r--r-- | src/gui/itemviews/qstandarditemmodel.h | 456 |
1 files changed, 456 insertions, 0 deletions
diff --git a/src/gui/itemviews/qstandarditemmodel.h b/src/gui/itemviews/qstandarditemmodel.h new file mode 100644 index 0000000..f24f0ab --- /dev/null +++ b/src/gui/itemviews/qstandarditemmodel.h @@ -0,0 +1,456 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (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 either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSTANDARDITEMMODEL_H +#define QSTANDARDITEMMODEL_H + +#include <QtCore/qabstractitemmodel.h> +#include <QtGui/qbrush.h> +#include <QtGui/qfont.h> +#include <QtGui/qicon.h> +#ifndef QT_NO_DATASTREAM +#include <QtCore/qdatastream.h> +#endif + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +#ifndef QT_NO_STANDARDITEMMODEL + +template <class T> class QList; + +class QStandardItemModel; + +class QStandardItemPrivate; +class Q_GUI_EXPORT QStandardItem +{ +public: + QStandardItem(); + QStandardItem(const QString &text); + QStandardItem(const QIcon &icon, const QString &text); + explicit QStandardItem(int rows, int columns = 1); + virtual ~QStandardItem(); + + virtual QVariant data(int role = Qt::UserRole + 1) const; + virtual void setData(const QVariant &value, int role = Qt::UserRole + 1); + + inline QString text() const { + return qvariant_cast<QString>(data(Qt::DisplayRole)); + } + inline void setText(const QString &text); + + inline QIcon icon() const { + return qvariant_cast<QIcon>(data(Qt::DecorationRole)); + } + inline void setIcon(const QIcon &icon); + +#ifndef QT_NO_TOOLTIP + inline QString toolTip() const { + return qvariant_cast<QString>(data(Qt::ToolTipRole)); + } + inline void setToolTip(const QString &toolTip); +#endif + +#ifndef QT_NO_STATUSTIP + inline QString statusTip() const { + return qvariant_cast<QString>(data(Qt::StatusTipRole)); + } + inline void setStatusTip(const QString &statusTip); +#endif + +#ifndef QT_NO_WHATSTHIS + inline QString whatsThis() const { + return qvariant_cast<QString>(data(Qt::WhatsThisRole)); + } + inline void setWhatsThis(const QString &whatsThis); +#endif + + inline QSize sizeHint() const { + return qvariant_cast<QSize>(data(Qt::SizeHintRole)); + } + inline void setSizeHint(const QSize &sizeHint); + + inline QFont font() const { + return qvariant_cast<QFont>(data(Qt::FontRole)); + } + inline void setFont(const QFont &font); + + inline Qt::Alignment textAlignment() const { + return Qt::Alignment(qvariant_cast<int>(data(Qt::TextAlignmentRole))); + } + inline void setTextAlignment(Qt::Alignment textAlignment); + + inline QBrush background() const { + return qvariant_cast<QBrush>(data(Qt::BackgroundRole)); + } + inline void setBackground(const QBrush &brush); + + inline QBrush foreground() const { + return qvariant_cast<QBrush>(data(Qt::ForegroundRole)); + } + inline void setForeground(const QBrush &brush); + + inline Qt::CheckState checkState() const { + return Qt::CheckState(qvariant_cast<int>(data(Qt::CheckStateRole))); + } + inline void setCheckState(Qt::CheckState checkState); + + inline QString accessibleText() const { + return qvariant_cast<QString>(data(Qt::AccessibleTextRole)); + } + inline void setAccessibleText(const QString &accessibleText); + + inline QString accessibleDescription() const { + return qvariant_cast<QString>(data(Qt::AccessibleDescriptionRole)); + } + inline void setAccessibleDescription(const QString &accessibleDescription); + + Qt::ItemFlags flags() const; + void setFlags(Qt::ItemFlags flags); + + inline bool isEnabled() const { + return (flags() & Qt::ItemIsEnabled) != 0; + } + void setEnabled(bool enabled); + + inline bool isEditable() const { + return (flags() & Qt::ItemIsEditable) != 0; + } + void setEditable(bool editable); + + inline bool isSelectable() const { + return (flags() & Qt::ItemIsSelectable) != 0; + } + void setSelectable(bool selectable); + + inline bool isCheckable() const { + return (flags() & Qt::ItemIsUserCheckable) != 0; + } + void setCheckable(bool checkable); + + inline bool isTristate() const { + return (flags() & Qt::ItemIsTristate) != 0; + } + void setTristate(bool tristate); + +#ifndef QT_NO_DRAGANDDROP + inline bool isDragEnabled() const { + return (flags() & Qt::ItemIsDragEnabled) != 0; + } + void setDragEnabled(bool dragEnabled); + + inline bool isDropEnabled() const { + return (flags() & Qt::ItemIsDropEnabled) != 0; + } + void setDropEnabled(bool dropEnabled); +#endif // QT_NO_DRAGANDDROP + + QStandardItem *parent() const; + int row() const; + int column() const; + QModelIndex index() const; + QStandardItemModel *model() const; + + int rowCount() const; + void setRowCount(int rows); + int columnCount() const; + void setColumnCount(int columns); + + bool hasChildren() const; + QStandardItem *child(int row, int column = 0) const; + void setChild(int row, int column, QStandardItem *item); + inline void setChild(int row, QStandardItem *item); + + void insertRow(int row, const QList<QStandardItem*> &items); + void insertColumn(int column, const QList<QStandardItem*> &items); + void insertRows(int row, const QList<QStandardItem*> &items); + void insertRows(int row, int count); + void insertColumns(int column, int count); + + void removeRow(int row); + void removeColumn(int column); + void removeRows(int row, int count); + void removeColumns(int column, int count); + + inline void appendRow(const QList<QStandardItem*> &items); + inline void appendRows(const QList<QStandardItem*> &items); + inline void appendColumn(const QList<QStandardItem*> &items); + inline void insertRow(int row, QStandardItem *item); + inline void appendRow(QStandardItem *item); + + QStandardItem *takeChild(int row, int column = 0); + QList<QStandardItem*> takeRow(int row); + QList<QStandardItem*> takeColumn(int column); + + void sortChildren(int column, Qt::SortOrder order = Qt::AscendingOrder); + + virtual QStandardItem *clone() const; + + enum ItemType { Type = 0, UserType = 1000 }; + virtual int type() const; + +#ifndef QT_NO_DATASTREAM + virtual void read(QDataStream &in); + virtual void write(QDataStream &out) const; +#endif + virtual bool operator<(const QStandardItem &other) const; + +protected: + QStandardItem(const QStandardItem &other); + QStandardItem(QStandardItemPrivate &dd); + QStandardItem &operator=(const QStandardItem &other); + QStandardItemPrivate *d_ptr; + + void emitDataChanged(); + +private: + Q_DECLARE_PRIVATE(QStandardItem) + friend class QStandardItemModelPrivate; + friend class QStandardItemModel; +}; + +inline void QStandardItem::setText(const QString &atext) +{ setData(atext, Qt::DisplayRole); } + +inline void QStandardItem::setIcon(const QIcon &aicon) +{ setData(aicon, Qt::DecorationRole); } + +#ifndef QT_NO_TOOLTIP +inline void QStandardItem::setToolTip(const QString &atoolTip) +{ setData(atoolTip, Qt::ToolTipRole); } +#endif + +#ifndef QT_NO_STATUSTIP +inline void QStandardItem::setStatusTip(const QString &astatusTip) +{ setData(astatusTip, Qt::StatusTipRole); } +#endif + +#ifndef QT_NO_WHATSTHIS +inline void QStandardItem::setWhatsThis(const QString &awhatsThis) +{ setData(awhatsThis, Qt::WhatsThisRole); } +#endif + +inline void QStandardItem::setSizeHint(const QSize &asizeHint) +{ setData(asizeHint, Qt::SizeHintRole); } + +inline void QStandardItem::setFont(const QFont &afont) +{ setData(afont, Qt::FontRole); } + +inline void QStandardItem::setTextAlignment(Qt::Alignment atextAlignment) +{ setData(int(atextAlignment), Qt::TextAlignmentRole); } + +inline void QStandardItem::setBackground(const QBrush &abrush) +{ setData(abrush, Qt::BackgroundRole); } + +inline void QStandardItem::setForeground(const QBrush &abrush) +{ setData(abrush, Qt::ForegroundRole); } + +inline void QStandardItem::setCheckState(Qt::CheckState acheckState) +{ setData(acheckState, Qt::CheckStateRole); } + +inline void QStandardItem::setAccessibleText(const QString &aaccessibleText) +{ setData(aaccessibleText, Qt::AccessibleTextRole); } + +inline void QStandardItem::setAccessibleDescription(const QString &aaccessibleDescription) +{ setData(aaccessibleDescription, Qt::AccessibleDescriptionRole); } + +inline void QStandardItem::setChild(int arow, QStandardItem *aitem) +{ setChild(arow, 0, aitem); } + +inline void QStandardItem::appendRow(const QList<QStandardItem*> &aitems) +{ insertRow(rowCount(), aitems); } + +inline void QStandardItem::appendRows(const QList<QStandardItem*> &aitems) +{ insertRows(rowCount(), aitems); } + +inline void QStandardItem::appendColumn(const QList<QStandardItem*> &aitems) +{ insertColumn(columnCount(), aitems); } + +inline void QStandardItem::insertRow(int arow, QStandardItem *aitem) +{ insertRow(arow, QList<QStandardItem*>() << aitem); } + +inline void QStandardItem::appendRow(QStandardItem *aitem) +{ insertRow(rowCount(), aitem); } + +class QStandardItemModelPrivate; + +class Q_GUI_EXPORT QStandardItemModel : public QAbstractItemModel +{ + Q_OBJECT + Q_PROPERTY(int sortRole READ sortRole WRITE setSortRole) + +public: + explicit QStandardItemModel(QObject *parent = 0); + QStandardItemModel(int rows, int columns, QObject *parent = 0); + ~QStandardItemModel(); + + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; + QModelIndex parent(const QModelIndex &child) const; + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()); + + Qt::ItemFlags flags(const QModelIndex &index) const; + Qt::DropActions supportedDropActions() const; + + QMap<int, QVariant> itemData(const QModelIndex &index) const; + bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles); + + void clear(); + +#ifdef Q_NO_USING_KEYWORD + inline QObject *parent() const { return QObject::parent(); } +#else + using QObject::parent; +#endif + + void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + + QStandardItem *itemFromIndex(const QModelIndex &index) const; + QModelIndex indexFromItem(const QStandardItem *item) const; + + QStandardItem *item(int row, int column = 0) const; + void setItem(int row, int column, QStandardItem *item); + inline void setItem(int row, QStandardItem *item); + QStandardItem *invisibleRootItem() const; + + QStandardItem *horizontalHeaderItem(int column) const; + void setHorizontalHeaderItem(int column, QStandardItem *item); + QStandardItem *verticalHeaderItem(int row) const; + void setVerticalHeaderItem(int row, QStandardItem *item); + + void setHorizontalHeaderLabels(const QStringList &labels); + void setVerticalHeaderLabels(const QStringList &labels); + + void setRowCount(int rows); + void setColumnCount(int columns); + + void appendRow(const QList<QStandardItem*> &items); + void appendColumn(const QList<QStandardItem*> &items); + inline void appendRow(QStandardItem *item); + + void insertRow(int row, const QList<QStandardItem*> &items); + void insertColumn(int column, const QList<QStandardItem*> &items); + inline void insertRow(int row, QStandardItem *item); + + inline bool insertRow(int row, const QModelIndex &parent = QModelIndex()); + inline bool insertColumn(int column, const QModelIndex &parent = QModelIndex()); + + QStandardItem *takeItem(int row, int column = 0); + QList<QStandardItem*> takeRow(int row); + QList<QStandardItem*> takeColumn(int column); + + QStandardItem *takeHorizontalHeaderItem(int column); + QStandardItem *takeVerticalHeaderItem(int row); + + const QStandardItem *itemPrototype() const; + void setItemPrototype(const QStandardItem *item); + + QList<QStandardItem*> findItems(const QString &text, + Qt::MatchFlags flags = Qt::MatchExactly, + int column = 0) const; + + int sortRole() const; + void setSortRole(int role); + + QStringList mimeTypes() const; + QMimeData *mimeData(const QModelIndexList &indexes) const; + bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); + +Q_SIGNALS: + void itemChanged(QStandardItem *item); + +protected: + QStandardItemModel(QStandardItemModelPrivate &dd, QObject *parent = 0); + +private: + friend class QStandardItemPrivate; + friend class QStandardItem; + Q_DISABLE_COPY(QStandardItemModel) + Q_DECLARE_PRIVATE(QStandardItemModel) + + Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &topLeft, + const QModelIndex &bottomRight)) +}; + +inline void QStandardItemModel::setItem(int arow, QStandardItem *aitem) +{ setItem(arow, 0, aitem); } + +inline void QStandardItemModel::appendRow(QStandardItem *aitem) +{ appendRow(QList<QStandardItem*>() << aitem); } + +inline void QStandardItemModel::insertRow(int arow, QStandardItem *aitem) +{ insertRow(arow, QList<QStandardItem*>() << aitem); } + +inline bool QStandardItemModel::insertRow(int arow, const QModelIndex &aparent) +{ return QAbstractItemModel::insertRow(arow, aparent); } +inline bool QStandardItemModel::insertColumn(int acolumn, const QModelIndex &aparent) +{ return QAbstractItemModel::insertColumn(acolumn, aparent); } + +#ifndef QT_NO_DATASTREAM +Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QStandardItem &item); +Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QStandardItem &item); +#endif + +#endif // QT_NO_STANDARDITEMMODEL + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif //QSTANDARDITEMMODEL_H |