Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/QtWidgets/qtreewidget.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QTREEWIDGET_H
0006 #define QTREEWIDGET_H
0007 
0008 #include <QtWidgets/qtreeview.h>
0009 #include <QtWidgets/qtreewidgetitemiterator.h>
0010 #include <QtWidgets/qtwidgetsglobal.h>
0011 #include <QtCore/qlist.h>
0012 #include <QtCore/qvariant.h>
0013 
0014 QT_REQUIRE_CONFIG(treewidget);
0015 
0016 QT_BEGIN_NAMESPACE
0017 
0018 class QTreeWidget;
0019 class QTreeModel;
0020 class QWidgetItemData;
0021 class QTreeWidgetItemPrivate;
0022 
0023 class Q_WIDGETS_EXPORT QTreeWidgetItem
0024 {
0025     friend class QTreeModel;
0026     friend class QTreeWidget;
0027     friend class QTreeWidgetPrivate;
0028     friend class QTreeWidgetItemIterator;
0029     friend class QTreeWidgetItemPrivate;
0030 public:
0031     enum ItemType { Type = 0, UserType = 1000 };
0032     explicit QTreeWidgetItem(int type = Type);
0033     explicit QTreeWidgetItem(const QStringList &strings, int type = Type);
0034     explicit QTreeWidgetItem(QTreeWidget *treeview, int type = Type);
0035     QTreeWidgetItem(QTreeWidget *treeview, const QStringList &strings, int type = Type);
0036     QTreeWidgetItem(QTreeWidget *treeview, QTreeWidgetItem *after, int type = Type);
0037     explicit QTreeWidgetItem(QTreeWidgetItem *parent, int type = Type);
0038     QTreeWidgetItem(QTreeWidgetItem *parent, const QStringList &strings, int type = Type);
0039     QTreeWidgetItem(QTreeWidgetItem *parent, QTreeWidgetItem *after, int type = Type);
0040     QTreeWidgetItem(const QTreeWidgetItem &other);
0041     virtual ~QTreeWidgetItem();
0042 
0043     virtual QTreeWidgetItem *clone() const;
0044 
0045     inline QTreeWidget *treeWidget() const { return view; }
0046 
0047     void setSelected(bool select);
0048     bool isSelected() const;
0049 
0050     void setHidden(bool hide);
0051     bool isHidden() const;
0052 
0053     void setExpanded(bool expand);
0054     bool isExpanded() const;
0055 
0056     void setFirstColumnSpanned(bool span);
0057     bool isFirstColumnSpanned() const;
0058 
0059     inline void setDisabled(bool disabled);
0060     inline bool isDisabled() const;
0061 
0062     enum ChildIndicatorPolicy { ShowIndicator, DontShowIndicator, DontShowIndicatorWhenChildless };
0063     void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy);
0064     QTreeWidgetItem::ChildIndicatorPolicy childIndicatorPolicy() const;
0065 
0066     Qt::ItemFlags flags() const;
0067     void setFlags(Qt::ItemFlags flags);
0068 
0069     inline QString text(int column) const
0070         { return data(column, Qt::DisplayRole).toString(); }
0071     inline void setText(int column, const QString &text);
0072 
0073     inline QIcon icon(int column) const
0074         { return qvariant_cast<QIcon>(data(column, Qt::DecorationRole)); }
0075     inline void setIcon(int column, const QIcon &icon);
0076 
0077     inline QString statusTip(int column) const
0078         { return data(column, Qt::StatusTipRole).toString(); }
0079     inline void setStatusTip(int column, const QString &statusTip);
0080 
0081 #if QT_CONFIG(tooltip)
0082     inline QString toolTip(int column) const
0083         { return data(column, Qt::ToolTipRole).toString(); }
0084     inline void setToolTip(int column, const QString &toolTip);
0085 #endif
0086 
0087 #if QT_CONFIG(whatsthis)
0088     inline QString whatsThis(int column) const
0089         { return data(column, Qt::WhatsThisRole).toString(); }
0090     inline void setWhatsThis(int column, const QString &whatsThis);
0091 #endif
0092 
0093     inline QFont font(int column) const
0094         { return qvariant_cast<QFont>(data(column, Qt::FontRole)); }
0095     inline void setFont(int column, const QFont &font);
0096 
0097 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
0098     inline int textAlignment(int column) const
0099         { return data(column, Qt::TextAlignmentRole).toInt(); }
0100 #else
0101     inline Qt::Alignment textAlignment(int column) const
0102     { return qvariant_cast<Qt::Alignment>(data(column, Qt::TextAlignmentRole)); }
0103 #endif
0104 #if QT_DEPRECATED_SINCE(6, 4)
0105     QT_DEPRECATED_VERSION_X_6_4("Use the overload taking Qt::Alignment")
0106     inline void setTextAlignment(int column, int alignment)
0107         { setData(column, Qt::TextAlignmentRole, alignment); }
0108     inline void setTextAlignment(int column, Qt::AlignmentFlag alignment)
0109         { setData(column, Qt::TextAlignmentRole, QVariant::fromValue(Qt::Alignment(alignment))); }
0110 #endif
0111     inline void setTextAlignment(int column, Qt::Alignment alignment)
0112         { setData(column, Qt::TextAlignmentRole, QVariant::fromValue(alignment)); }
0113 
0114     inline QBrush background(int column) const
0115         { return qvariant_cast<QBrush>(data(column, Qt::BackgroundRole)); }
0116     inline void setBackground(int column, const QBrush &brush)
0117         { setData(column, Qt::BackgroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
0118 
0119     inline QBrush foreground(int column) const
0120         { return qvariant_cast<QBrush>(data(column, Qt::ForegroundRole)); }
0121     inline void setForeground(int column, const QBrush &brush)
0122         { setData(column, Qt::ForegroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
0123 
0124     inline Qt::CheckState checkState(int column) const
0125         { return qvariant_cast<Qt::CheckState>(data(column, Qt::CheckStateRole)); }
0126     inline void setCheckState(int column, Qt::CheckState state)
0127         { setData(column, Qt::CheckStateRole, state); }
0128 
0129     inline QSize sizeHint(int column) const
0130         { return qvariant_cast<QSize>(data(column, Qt::SizeHintRole)); }
0131     inline void setSizeHint(int column, const QSize &size)
0132         { setData(column, Qt::SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); }
0133 
0134     virtual QVariant data(int column, int role) const;
0135     virtual void setData(int column, int role, const QVariant &value);
0136 
0137     virtual bool operator<(const QTreeWidgetItem &other) const;
0138 
0139 #ifndef QT_NO_DATASTREAM
0140     virtual void read(QDataStream &in);
0141     virtual void write(QDataStream &out) const;
0142 #endif
0143     QTreeWidgetItem &operator=(const QTreeWidgetItem &other);
0144 
0145     inline QTreeWidgetItem *parent() const { return par; }
0146     inline QTreeWidgetItem *child(int index) const {
0147         if (index < 0 || index >= children.size())
0148             return nullptr;
0149         executePendingSort();
0150         return children.at(index);
0151     }
0152     inline int childCount() const { return int(children.size()); }
0153     inline int columnCount() const { return int(values.size()); }
0154     inline int indexOfChild(QTreeWidgetItem *child) const;
0155 
0156     void addChild(QTreeWidgetItem *child);
0157     void insertChild(int index, QTreeWidgetItem *child);
0158     void removeChild(QTreeWidgetItem *child);
0159     QTreeWidgetItem *takeChild(int index);
0160 
0161     void addChildren(const QList<QTreeWidgetItem*> &children);
0162     void insertChildren(int index, const QList<QTreeWidgetItem*> &children);
0163     QList<QTreeWidgetItem*> takeChildren();
0164 
0165     inline int type() const { return rtti; }
0166     inline void sortChildren(int column, Qt::SortOrder order)
0167         { sortChildren(column, order, false); }
0168 
0169 protected:
0170     void emitDataChanged();
0171 
0172 private:
0173     void sortChildren(int column, Qt::SortOrder order, bool climb);
0174     QVariant childrenCheckState(int column) const;
0175     void itemChanged();
0176     void executePendingSort() const;
0177     QTreeModel *treeModel(QTreeWidget *v = nullptr) const;
0178 
0179     int rtti;
0180     // One item has a vector of column entries. Each column has a vector of (role, value) pairs.
0181     QList<QList<QWidgetItemData>> values;
0182     QTreeWidget *view = nullptr;
0183     QTreeWidgetItemPrivate *d;
0184     QTreeWidgetItem *par = nullptr;
0185     // ### Qt7: Move children to d-pointer and replace QList by a suitable data structure.
0186     //          to fix QTBUG-94546
0187     QList<QTreeWidgetItem*> children;
0188     Qt::ItemFlags itemFlags = Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled
0189             | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
0190 };
0191 
0192 inline void QTreeWidgetItem::setText(int column, const QString &atext)
0193 { setData(column, Qt::DisplayRole, atext); }
0194 
0195 inline void QTreeWidgetItem::setIcon(int column, const QIcon &aicon)
0196 { setData(column, Qt::DecorationRole, aicon); }
0197 
0198 #if QT_CONFIG(statustip)
0199 inline void QTreeWidgetItem::setStatusTip(int column, const QString &astatusTip)
0200 { setData(column, Qt::StatusTipRole, astatusTip); }
0201 #endif
0202 
0203 #if QT_CONFIG(tooltip)
0204 inline void QTreeWidgetItem::setToolTip(int column, const QString &atoolTip)
0205 { setData(column, Qt::ToolTipRole, atoolTip); }
0206 #endif
0207 
0208 #if QT_CONFIG(whatsthis)
0209 inline void QTreeWidgetItem::setWhatsThis(int column, const QString &awhatsThis)
0210 { setData(column, Qt::WhatsThisRole, awhatsThis); }
0211 #endif
0212 
0213 inline void QTreeWidgetItem::setFont(int column, const QFont &afont)
0214 { setData(column, Qt::FontRole, afont); }
0215 
0216 inline int QTreeWidgetItem::indexOfChild(QTreeWidgetItem *achild) const
0217 { executePendingSort(); return int(children.indexOf(achild)); }
0218 
0219 #ifndef QT_NO_DATASTREAM
0220 Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item);
0221 Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item);
0222 #endif
0223 
0224 class QTreeWidgetPrivate;
0225 
0226 class Q_WIDGETS_EXPORT QTreeWidget : public QTreeView
0227 {
0228     Q_OBJECT
0229     Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
0230     Q_PROPERTY(int topLevelItemCount READ topLevelItemCount)
0231 #if QT_CONFIG(draganddrop)
0232     Q_PROPERTY(Qt::DropActions supportedDragActions READ supportedDragActions WRITE setSupportedDragActions)
0233 #endif
0234 
0235     friend class QTreeModel;
0236     friend class QTreeWidgetItem;
0237 public:
0238     explicit QTreeWidget(QWidget *parent = nullptr);
0239     ~QTreeWidget();
0240 
0241     int columnCount() const;
0242     void setColumnCount(int columns);
0243 
0244     QTreeWidgetItem *invisibleRootItem() const;
0245     QTreeWidgetItem *topLevelItem(int index) const;
0246     int topLevelItemCount() const;
0247     void insertTopLevelItem(int index, QTreeWidgetItem *item);
0248     void addTopLevelItem(QTreeWidgetItem *item);
0249     QTreeWidgetItem *takeTopLevelItem(int index);
0250     int indexOfTopLevelItem(QTreeWidgetItem *item) const;
0251 
0252     void insertTopLevelItems(int index, const QList<QTreeWidgetItem*> &items);
0253     void addTopLevelItems(const QList<QTreeWidgetItem*> &items);
0254 
0255     QTreeWidgetItem *headerItem() const;
0256     void setHeaderItem(QTreeWidgetItem *item);
0257     void setHeaderLabels(const QStringList &labels);
0258     inline void setHeaderLabel(const QString &label);
0259 
0260     QTreeWidgetItem *currentItem() const;
0261     int currentColumn() const;
0262     void setCurrentItem(QTreeWidgetItem *item);
0263     void setCurrentItem(QTreeWidgetItem *item, int column);
0264     void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command);
0265 
0266     QTreeWidgetItem *itemAt(const QPoint &p) const;
0267     inline QTreeWidgetItem *itemAt(int x, int y) const;
0268     QRect visualItemRect(const QTreeWidgetItem *item) const;
0269 
0270     int sortColumn() const;
0271     void sortItems(int column, Qt::SortOrder order);
0272 
0273     void editItem(QTreeWidgetItem *item, int column = 0);
0274     void openPersistentEditor(QTreeWidgetItem *item, int column = 0);
0275     void closePersistentEditor(QTreeWidgetItem *item, int column = 0);
0276     using QAbstractItemView::isPersistentEditorOpen;
0277     bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const;
0278 
0279     QWidget *itemWidget(QTreeWidgetItem *item, int column) const;
0280     void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget);
0281     inline void removeItemWidget(QTreeWidgetItem *item, int column);
0282 
0283     QList<QTreeWidgetItem*> selectedItems() const;
0284     QList<QTreeWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags,
0285                                       int column = 0) const;
0286 
0287     QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
0288     QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
0289 
0290     QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const;
0291     QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const;
0292 
0293     void setSelectionModel(QItemSelectionModel *selectionModel) override;
0294 
0295 #if QT_CONFIG(draganddrop)
0296     Qt::DropActions supportedDragActions() const;
0297     void setSupportedDragActions(Qt::DropActions actions);
0298 #endif
0299 
0300 public Q_SLOTS:
0301     void scrollToItem(const QTreeWidgetItem *item,
0302                       QAbstractItemView::ScrollHint hint = EnsureVisible);
0303     void expandItem(const QTreeWidgetItem *item);
0304     void collapseItem(const QTreeWidgetItem *item);
0305     void clear();
0306 
0307 Q_SIGNALS:
0308     void itemPressed(QTreeWidgetItem *item, int column);
0309     void itemClicked(QTreeWidgetItem *item, int column);
0310     void itemDoubleClicked(QTreeWidgetItem *item, int column);
0311     void itemActivated(QTreeWidgetItem *item, int column);
0312     void itemEntered(QTreeWidgetItem *item, int column);
0313     void itemChanged(QTreeWidgetItem *item, int column);
0314     void itemExpanded(QTreeWidgetItem *item);
0315     void itemCollapsed(QTreeWidgetItem *item);
0316     void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
0317     void itemSelectionChanged();
0318 
0319 protected:
0320     bool event(QEvent *e) override;
0321     virtual QStringList mimeTypes() const;
0322     virtual QMimeData *mimeData(const QList<QTreeWidgetItem *> &items) const;
0323     virtual bool dropMimeData(QTreeWidgetItem *parent, int index,
0324                               const QMimeData *data, Qt::DropAction action);
0325     virtual Qt::DropActions supportedDropActions() const;
0326 
0327 #if QT_CONFIG(draganddrop)
0328     void dropEvent(QDropEvent *event) override;
0329 #endif
0330 private:
0331     void setModel(QAbstractItemModel *model) override;
0332 
0333     Q_DECLARE_PRIVATE(QTreeWidget)
0334     Q_DISABLE_COPY(QTreeWidget)
0335 };
0336 
0337 inline void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column)
0338 { setItemWidget(item, column, nullptr); }
0339 
0340 inline QTreeWidgetItem *QTreeWidget::itemAt(int ax, int ay) const
0341 { return itemAt(QPoint(ax, ay)); }
0342 
0343 inline void QTreeWidget::setHeaderLabel(const QString &alabel)
0344 { setHeaderLabels(QStringList(alabel)); }
0345 
0346 inline void QTreeWidgetItem::setDisabled(bool disabled)
0347 { setFlags(disabled ? (flags() & ~Qt::ItemIsEnabled) : flags() | Qt::ItemIsEnabled); }
0348 
0349 inline bool QTreeWidgetItem::isDisabled() const
0350 { return !(flags() & Qt::ItemIsEnabled); }
0351 
0352 QT_END_NAMESPACE
0353 
0354 #endif // QTREEWIDGET_H