blob: 3dd613f907d52d99d7f31a8c931ae8f6cdc136e0 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** 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 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** As a special exception, The Qt Company gives you certain additional
** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $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_NAMESPACE
#ifndef QT_NO_STANDARDITEMMODEL
template <class T> class QList;
class QStandardItemModel;
class QStandardItemPrivate;
class Q_GUI_EXPORT QStandardItem
{
public:
QStandardItem();
explicit 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);
QScopedPointer<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();
void setItemRoleNames(const QHash<int,QByteArray> &roleNames);
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
// Qt 6: Remove
QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
QVariant headerData(int section, Qt::Orientation orientation,
int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
int role = Qt::EditRole) Q_DECL_OVERRIDE;
bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
QMap<int, QVariant> itemData(const QModelIndex &index) const Q_DECL_OVERRIDE;
bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) Q_DECL_OVERRIDE;
void clear();
using QObject::parent;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
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 Q_DECL_OVERRIDE;
QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
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
#endif //QSTANDARDITEMMODEL_H