Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-04 08:50:01

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 QLISTWIDGET_H
0006 #define QLISTWIDGET_H
0007 
0008 #include <QtWidgets/qlistview.h>
0009 #include <QtWidgets/qtwidgetsglobal.h>
0010 #include <QtCore/qlist.h>
0011 #include <QtCore/qitemselectionmodel.h>
0012 #include <QtCore/qvariant.h>
0013 
0014 QT_REQUIRE_CONFIG(listwidget);
0015 
0016 QT_BEGIN_NAMESPACE
0017 
0018 class QListWidget;
0019 class QListModel;
0020 class QWidgetItemData;
0021 class QListWidgetItemPrivate;
0022 
0023 class Q_WIDGETS_EXPORT QListWidgetItem
0024 {
0025     friend class QListModel;
0026     friend class QListWidget;
0027 public:
0028     enum ItemType { Type = 0, UserType = 1000 };
0029     explicit QListWidgetItem(QListWidget *listview = nullptr, int type = Type);
0030     explicit QListWidgetItem(const QString &text, QListWidget *listview = nullptr, int type = Type);
0031     explicit QListWidgetItem(const QIcon &icon, const QString &text,
0032                              QListWidget *listview = nullptr, int type = Type);
0033     QListWidgetItem(const QListWidgetItem &other);
0034     virtual ~QListWidgetItem();
0035 
0036     virtual QListWidgetItem *clone() const;
0037 
0038     inline QListWidget *listWidget() const { return view; }
0039 
0040     void setSelected(bool select);
0041     bool isSelected() const;
0042 
0043     inline void setHidden(bool hide);
0044     inline bool isHidden() const;
0045 
0046     inline Qt::ItemFlags flags() const { return itemFlags; }
0047     void setFlags(Qt::ItemFlags flags);
0048 
0049     inline QString text() const
0050         { return data(Qt::DisplayRole).toString(); }
0051     inline void setText(const QString &text);
0052 
0053     inline QIcon icon() const
0054         { return qvariant_cast<QIcon>(data(Qt::DecorationRole)); }
0055     inline void setIcon(const QIcon &icon);
0056 
0057     inline QString statusTip() const
0058         { return data(Qt::StatusTipRole).toString(); }
0059     inline void setStatusTip(const QString &statusTip);
0060 
0061 #if QT_CONFIG(tooltip)
0062     inline QString toolTip() const
0063         { return data(Qt::ToolTipRole).toString(); }
0064     inline void setToolTip(const QString &toolTip);
0065 #endif
0066 
0067 #if QT_CONFIG(whatsthis)
0068     inline QString whatsThis() const
0069         { return data(Qt::WhatsThisRole).toString(); }
0070     inline void setWhatsThis(const QString &whatsThis);
0071 #endif
0072 
0073     inline QFont font() const
0074         { return qvariant_cast<QFont>(data(Qt::FontRole)); }
0075     inline void setFont(const QFont &font);
0076 
0077 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
0078     inline int textAlignment() const
0079         { return data(Qt::TextAlignmentRole).toInt(); }
0080 #else
0081     inline Qt::Alignment textAlignment() const
0082     { return qvariant_cast<Qt::Alignment>(data(Qt::TextAlignmentRole)); }
0083 #endif
0084 #if QT_DEPRECATED_SINCE(6, 4)
0085     QT_DEPRECATED_VERSION_X_6_4("Use the overload taking Qt::Alignment")
0086     inline void setTextAlignment(int alignment)
0087         { setData(Qt::TextAlignmentRole, alignment); }
0088     inline void setTextAlignment(Qt::AlignmentFlag alignment)
0089         { setData(Qt::TextAlignmentRole, QVariant::fromValue(Qt::Alignment(alignment))); }
0090 #endif
0091     inline void setTextAlignment(Qt::Alignment alignment)
0092         { setData(Qt::TextAlignmentRole, QVariant::fromValue(alignment)); }
0093 
0094     inline QBrush background() const
0095         { return qvariant_cast<QBrush>(data(Qt::BackgroundRole)); }
0096     inline void setBackground(const QBrush &brush)
0097         { setData(Qt::BackgroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
0098 
0099     inline QBrush foreground() const
0100         { return qvariant_cast<QBrush>(data(Qt::ForegroundRole)); }
0101     inline void setForeground(const QBrush &brush)
0102         { setData(Qt::ForegroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
0103 
0104     inline Qt::CheckState checkState() const
0105         { return qvariant_cast<Qt::CheckState>(data(Qt::CheckStateRole)); }
0106     inline void setCheckState(Qt::CheckState state)
0107         { setData(Qt::CheckStateRole, static_cast<int>(state)); }
0108 
0109     inline QSize sizeHint() const
0110         { return qvariant_cast<QSize>(data(Qt::SizeHintRole)); }
0111     inline void setSizeHint(const QSize &size)
0112         { setData(Qt::SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); }
0113 
0114     virtual QVariant data(int role) const;
0115     virtual void setData(int role, const QVariant &value);
0116 
0117     virtual bool operator<(const QListWidgetItem &other) const;
0118 
0119 #ifndef QT_NO_DATASTREAM
0120     virtual void read(QDataStream &in);
0121     virtual void write(QDataStream &out) const;
0122 #endif
0123     QListWidgetItem &operator=(const QListWidgetItem &other);
0124 
0125     inline int type() const { return rtti; }
0126 
0127 private:
0128     QListModel *listModel() const;
0129     int rtti;
0130     QListWidget *view;
0131     QListWidgetItemPrivate *d;
0132     Qt::ItemFlags itemFlags;
0133 };
0134 
0135 inline void QListWidgetItem::setText(const QString &atext)
0136 { setData(Qt::DisplayRole, atext); }
0137 
0138 inline void QListWidgetItem::setIcon(const QIcon &aicon)
0139 { setData(Qt::DecorationRole, aicon); }
0140 
0141 inline void QListWidgetItem::setStatusTip(const QString &astatusTip)
0142 { setData(Qt::StatusTipRole, astatusTip); }
0143 
0144 #if QT_CONFIG(tooltip)
0145 inline void QListWidgetItem::setToolTip(const QString &atoolTip)
0146 { setData(Qt::ToolTipRole, atoolTip); }
0147 #endif
0148 
0149 #if QT_CONFIG(whatsthis)
0150 inline void QListWidgetItem::setWhatsThis(const QString &awhatsThis)
0151 { setData(Qt::WhatsThisRole, awhatsThis); }
0152 #endif
0153 
0154 inline void QListWidgetItem::setFont(const QFont &afont)
0155 { setData(Qt::FontRole, afont); }
0156 
0157 #ifndef QT_NO_DATASTREAM
0158 Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QListWidgetItem &item);
0159 Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QListWidgetItem &item);
0160 #endif
0161 
0162 class QListWidgetPrivate;
0163 
0164 class Q_WIDGETS_EXPORT QListWidget : public QListView
0165 {
0166     Q_OBJECT
0167     Q_PROPERTY(int count READ count)
0168     Q_PROPERTY(int currentRow READ currentRow WRITE setCurrentRow NOTIFY currentRowChanged
0169                USER true)
0170     Q_PROPERTY(bool sortingEnabled READ isSortingEnabled WRITE setSortingEnabled)
0171 #if QT_CONFIG(draganddrop)
0172     Q_PROPERTY(Qt::DropActions supportedDragActions READ supportedDragActions WRITE setSupportedDragActions)
0173 #endif
0174 
0175     friend class QListWidgetItem;
0176     friend class QListModel;
0177 public:
0178     explicit QListWidget(QWidget *parent = nullptr);
0179     ~QListWidget();
0180 
0181     void setSelectionModel(QItemSelectionModel *selectionModel) override;
0182 
0183     QListWidgetItem *item(int row) const;
0184     int row(const QListWidgetItem *item) const;
0185     void insertItem(int row, QListWidgetItem *item);
0186     void insertItem(int row, const QString &label);
0187     void insertItems(int row, const QStringList &labels);
0188     inline void addItem(const QString &label) { insertItem(count(), label); }
0189     inline void addItem(QListWidgetItem *item);
0190     inline void addItems(const QStringList &labels) { insertItems(count(), labels); }
0191     QListWidgetItem *takeItem(int row);
0192     int count() const;
0193 
0194     QListWidgetItem *currentItem() const;
0195     void setCurrentItem(QListWidgetItem *item);
0196     void setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command);
0197 
0198     int currentRow() const;
0199     void setCurrentRow(int row);
0200     void setCurrentRow(int row, QItemSelectionModel::SelectionFlags command);
0201 
0202     QListWidgetItem *itemAt(const QPoint &p) const;
0203     inline QListWidgetItem *itemAt(int x, int y) const;
0204     QRect visualItemRect(const QListWidgetItem *item) const;
0205 
0206     void sortItems(Qt::SortOrder order = Qt::AscendingOrder);
0207     void setSortingEnabled(bool enable);
0208     bool isSortingEnabled() const;
0209 
0210     void editItem(QListWidgetItem *item);
0211     void openPersistentEditor(QListWidgetItem *item);
0212     void closePersistentEditor(QListWidgetItem *item);
0213     using QAbstractItemView::isPersistentEditorOpen;
0214     bool isPersistentEditorOpen(QListWidgetItem *item) const;
0215 
0216     QWidget *itemWidget(QListWidgetItem *item) const;
0217     void setItemWidget(QListWidgetItem *item, QWidget *widget);
0218     inline void removeItemWidget(QListWidgetItem *item);
0219 
0220     QList<QListWidgetItem*> selectedItems() const;
0221     QList<QListWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags) const;
0222 
0223     QList<QListWidgetItem*> items(const QMimeData *data) const;
0224 
0225     QModelIndex indexFromItem(const QListWidgetItem *item) const;
0226     QListWidgetItem *itemFromIndex(const QModelIndex &index) const;
0227 
0228 #if QT_CONFIG(draganddrop)
0229     void setSupportedDragActions(Qt::DropActions actions);
0230     Qt::DropActions supportedDragActions() const;
0231 #endif
0232 protected:
0233 #if QT_CONFIG(draganddrop)
0234     void dropEvent(QDropEvent *event) override;
0235 #endif
0236 public Q_SLOTS:
0237     void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);
0238     void clear();
0239 
0240 Q_SIGNALS:
0241     void itemPressed(QListWidgetItem *item);
0242     void itemClicked(QListWidgetItem *item);
0243     void itemDoubleClicked(QListWidgetItem *item);
0244     void itemActivated(QListWidgetItem *item);
0245     void itemEntered(QListWidgetItem *item);
0246     void itemChanged(QListWidgetItem *item);
0247 
0248     void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
0249     void currentTextChanged(const QString &currentText);
0250     void currentRowChanged(int currentRow);
0251 
0252     void itemSelectionChanged();
0253 
0254 protected:
0255     bool event(QEvent *e) override;
0256     virtual QStringList mimeTypes() const;
0257     virtual QMimeData *mimeData(const QList<QListWidgetItem *> &items) const;
0258 #if QT_CONFIG(draganddrop)
0259     virtual bool dropMimeData(int index, const QMimeData *data, Qt::DropAction action);
0260     virtual Qt::DropActions supportedDropActions() const;
0261 #endif
0262 
0263 private:
0264     void setModel(QAbstractItemModel *model) override;
0265     Qt::SortOrder sortOrder() const;
0266 
0267     Q_DECLARE_PRIVATE(QListWidget)
0268     Q_DISABLE_COPY(QListWidget)
0269 };
0270 
0271 inline void QListWidget::removeItemWidget(QListWidgetItem *aItem)
0272 { setItemWidget(aItem, nullptr); }
0273 
0274 inline void QListWidget::addItem(QListWidgetItem *aitem)
0275 { insertItem(count(), aitem); }
0276 
0277 inline QListWidgetItem *QListWidget::itemAt(int ax, int ay) const
0278 { return itemAt(QPoint(ax, ay)); }
0279 
0280 inline void QListWidgetItem::setHidden(bool ahide)
0281 { if (view) view->setRowHidden(view->row(this), ahide); }
0282 
0283 inline bool QListWidgetItem::isHidden() const
0284 { return (view ? view->isRowHidden(view->row(this)) : false); }
0285 
0286 QT_END_NAMESPACE
0287 
0288 #endif // QLISTWIDGET_H