Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-16 09:06:25

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 
0004 #ifndef QABSTRACTITEMVIEW_H
0005 #define QABSTRACTITEMVIEW_H
0006 
0007 #include <QtWidgets/qtwidgetsglobal.h>
0008 #include <QtWidgets/qabstractscrollarea.h>
0009 #include <QtCore/qabstractitemmodel.h>
0010 #include <QtCore/qitemselectionmodel.h>
0011 #include <QtWidgets/qabstractitemdelegate.h>
0012 
0013 class tst_QAbstractItemView;
0014 class tst_QTreeView;
0015 
0016 QT_REQUIRE_CONFIG(itemviews);
0017 
0018 QT_BEGIN_NAMESPACE
0019 
0020 class QMenu;
0021 class QDrag;
0022 class QEvent;
0023 class QAbstractItemViewPrivate;
0024 
0025 class Q_WIDGETS_EXPORT QAbstractItemView : public QAbstractScrollArea
0026 {
0027     Q_OBJECT
0028     Q_PROPERTY(bool autoScroll READ hasAutoScroll WRITE setAutoScroll)
0029     Q_PROPERTY(int autoScrollMargin READ autoScrollMargin WRITE setAutoScrollMargin)
0030     Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers)
0031     Q_PROPERTY(bool tabKeyNavigation READ tabKeyNavigation WRITE setTabKeyNavigation)
0032 #if QT_CONFIG(draganddrop)
0033     Q_PROPERTY(bool showDropIndicator READ showDropIndicator WRITE setDropIndicatorShown)
0034     Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled)
0035     Q_PROPERTY(bool dragDropOverwriteMode READ dragDropOverwriteMode WRITE setDragDropOverwriteMode)
0036     Q_PROPERTY(DragDropMode dragDropMode READ dragDropMode WRITE setDragDropMode)
0037     Q_PROPERTY(Qt::DropAction defaultDropAction READ defaultDropAction WRITE setDefaultDropAction)
0038 #endif
0039     Q_PROPERTY(bool alternatingRowColors READ alternatingRowColors WRITE setAlternatingRowColors)
0040     Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
0041     Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior
0042                WRITE setSelectionBehavior)
0043     Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged)
0044     Q_PROPERTY(Qt::TextElideMode textElideMode READ textElideMode WRITE setTextElideMode)
0045     Q_PROPERTY(ScrollMode verticalScrollMode READ verticalScrollMode WRITE setVerticalScrollMode
0046                RESET resetVerticalScrollMode)
0047     Q_PROPERTY(ScrollMode horizontalScrollMode READ horizontalScrollMode
0048                WRITE setHorizontalScrollMode RESET resetHorizontalScrollMode)
0049     Q_PROPERTY(int updateThreshold READ updateThreshold WRITE setUpdateThreshold)
0050 
0051 public:
0052     enum SelectionMode {
0053         NoSelection,
0054         SingleSelection,
0055         MultiSelection,
0056         ExtendedSelection,
0057         ContiguousSelection
0058     };
0059     Q_ENUM(SelectionMode)
0060 
0061     enum SelectionBehavior {
0062         SelectItems,
0063         SelectRows,
0064         SelectColumns
0065     };
0066     Q_ENUM(SelectionBehavior)
0067 
0068     enum ScrollHint {
0069         EnsureVisible,
0070         PositionAtTop,
0071         PositionAtBottom,
0072         PositionAtCenter
0073     };
0074     Q_ENUM(ScrollHint)
0075 
0076     enum EditTrigger {
0077         NoEditTriggers = 0,
0078         CurrentChanged = 1,
0079         DoubleClicked = 2,
0080         SelectedClicked = 4,
0081         EditKeyPressed = 8,
0082         AnyKeyPressed = 16,
0083         AllEditTriggers = 31
0084     };
0085 
0086     Q_DECLARE_FLAGS(EditTriggers, EditTrigger)
0087     Q_FLAG(EditTriggers)
0088 
0089     enum ScrollMode {
0090         ScrollPerItem,
0091         ScrollPerPixel
0092     };
0093     Q_ENUM(ScrollMode)
0094 
0095     explicit QAbstractItemView(QWidget *parent = nullptr);
0096     ~QAbstractItemView();
0097 
0098     virtual void setModel(QAbstractItemModel *model);
0099     QAbstractItemModel *model() const;
0100 
0101     virtual void setSelectionModel(QItemSelectionModel *selectionModel);
0102     QItemSelectionModel *selectionModel() const;
0103 
0104     void setItemDelegate(QAbstractItemDelegate *delegate);
0105     QAbstractItemDelegate *itemDelegate() const;
0106 
0107     void setSelectionMode(QAbstractItemView::SelectionMode mode);
0108     QAbstractItemView::SelectionMode selectionMode() const;
0109 
0110     void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior);
0111     QAbstractItemView::SelectionBehavior selectionBehavior() const;
0112 
0113     QModelIndex currentIndex() const;
0114     QModelIndex rootIndex() const;
0115 
0116     void setEditTriggers(EditTriggers triggers);
0117     EditTriggers editTriggers() const;
0118 
0119     void setVerticalScrollMode(ScrollMode mode);
0120     ScrollMode verticalScrollMode() const;
0121     void resetVerticalScrollMode();
0122 
0123     void setHorizontalScrollMode(ScrollMode mode);
0124     ScrollMode horizontalScrollMode() const;
0125     void resetHorizontalScrollMode();
0126 
0127     void setAutoScroll(bool enable);
0128     bool hasAutoScroll() const;
0129 
0130     void setAutoScrollMargin(int margin);
0131     int autoScrollMargin() const;
0132 
0133     void setTabKeyNavigation(bool enable);
0134     bool tabKeyNavigation() const;
0135 
0136 #if QT_CONFIG(draganddrop)
0137     void setDropIndicatorShown(bool enable);
0138     bool showDropIndicator() const;
0139 
0140     void setDragEnabled(bool enable);
0141     bool dragEnabled() const;
0142 
0143     void setDragDropOverwriteMode(bool overwrite);
0144     bool dragDropOverwriteMode() const;
0145 
0146     enum DragDropMode {
0147         NoDragDrop,
0148         DragOnly,
0149         DropOnly,
0150         DragDrop,
0151         InternalMove
0152     };
0153     Q_ENUM(DragDropMode)
0154 
0155     void setDragDropMode(DragDropMode behavior);
0156     DragDropMode dragDropMode() const;
0157 
0158     void setDefaultDropAction(Qt::DropAction dropAction);
0159     Qt::DropAction defaultDropAction() const;
0160 #endif
0161 
0162     void setAlternatingRowColors(bool enable);
0163     bool alternatingRowColors() const;
0164 
0165     void setIconSize(const QSize &size);
0166     QSize iconSize() const;
0167 
0168     void setTextElideMode(Qt::TextElideMode mode);
0169     Qt::TextElideMode textElideMode() const;
0170 
0171     virtual void keyboardSearch(const QString &search);
0172 
0173     virtual QRect visualRect(const QModelIndex &index) const = 0;
0174     virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) = 0;
0175     virtual QModelIndex indexAt(const QPoint &point) const = 0;
0176 
0177     QSize sizeHintForIndex(const QModelIndex &index) const;
0178     virtual int sizeHintForRow(int row) const;
0179     virtual int sizeHintForColumn(int column) const;
0180 
0181     int updateThreshold() const;
0182     void setUpdateThreshold(int threshold);
0183 
0184     void openPersistentEditor(const QModelIndex &index);
0185     void closePersistentEditor(const QModelIndex &index);
0186     bool isPersistentEditorOpen(const QModelIndex &index) const;
0187 
0188     void setIndexWidget(const QModelIndex &index, QWidget *widget);
0189     QWidget *indexWidget(const QModelIndex &index) const;
0190 
0191     void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate);
0192     QAbstractItemDelegate *itemDelegateForRow(int row) const;
0193 
0194     void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate);
0195     QAbstractItemDelegate *itemDelegateForColumn(int column) const;
0196 
0197 #if QT_DEPRECATED_SINCE(6, 0)
0198     QT_DEPRECATED_VERSION_X_6_0("Use itemDelegateForIndex instead")
0199     QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const
0200     { return itemDelegateForIndex(index); }
0201 #endif
0202     virtual QAbstractItemDelegate *itemDelegateForIndex(const QModelIndex &index) const;
0203 
0204     virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
0205 
0206     using QAbstractScrollArea::update;
0207 
0208 public Q_SLOTS:
0209     virtual void reset();
0210     virtual void setRootIndex(const QModelIndex &index);
0211     virtual void doItemsLayout();
0212     virtual void selectAll();
0213     void edit(const QModelIndex &index);
0214     void clearSelection();
0215     void setCurrentIndex(const QModelIndex &index);
0216     void scrollToTop();
0217     void scrollToBottom();
0218     void update(const QModelIndex &index);
0219 
0220 protected Q_SLOTS:
0221     virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
0222                              const QList<int> &roles = QList<int>());
0223     virtual void rowsInserted(const QModelIndex &parent, int start, int end);
0224     virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
0225     virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
0226     virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);
0227     virtual void updateEditorData();
0228     virtual void updateEditorGeometries();
0229     virtual void updateGeometries();
0230     virtual void verticalScrollbarAction(int action);
0231     virtual void horizontalScrollbarAction(int action);
0232     virtual void verticalScrollbarValueChanged(int value);
0233     virtual void horizontalScrollbarValueChanged(int value);
0234     virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint);
0235     virtual void commitData(QWidget *editor);
0236     virtual void editorDestroyed(QObject *editor);
0237 
0238 Q_SIGNALS:
0239     void pressed(const QModelIndex &index);
0240     void clicked(const QModelIndex &index);
0241     void doubleClicked(const QModelIndex &index);
0242 
0243     void activated(const QModelIndex &index);
0244     void entered(const QModelIndex &index);
0245     void viewportEntered();
0246 
0247     void iconSizeChanged(const QSize &size);
0248 
0249 protected:
0250     QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = nullptr);
0251 
0252     enum CursorAction { MoveUp, MoveDown, MoveLeft, MoveRight,
0253                         MoveHome, MoveEnd, MovePageUp, MovePageDown,
0254                         MoveNext, MovePrevious };
0255     virtual QModelIndex moveCursor(CursorAction cursorAction,
0256                                    Qt::KeyboardModifiers modifiers) = 0;
0257 
0258     virtual int horizontalOffset() const = 0;
0259     virtual int verticalOffset() const = 0;
0260 
0261     virtual bool isIndexHidden(const QModelIndex &index) const = 0;
0262 
0263     virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) = 0;
0264     virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0;
0265     virtual QModelIndexList selectedIndexes() const;
0266 
0267     virtual bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event);
0268 
0269     virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index,
0270                                                                  const QEvent *event = nullptr) const;
0271 
0272 #if QT_CONFIG(draganddrop)
0273     virtual void startDrag(Qt::DropActions supportedActions);
0274 #endif
0275 
0276     virtual void initViewItemOption(QStyleOptionViewItem *option) const;
0277 
0278     enum State {
0279         NoState,
0280         DraggingState,
0281         DragSelectingState,
0282         EditingState,
0283         ExpandingState,
0284         CollapsingState,
0285         AnimatingState
0286     };
0287 
0288     State state() const;
0289     void setState(State state);
0290 
0291     void scheduleDelayedItemsLayout();
0292     void executeDelayedItemsLayout();
0293 
0294     void setDirtyRegion(const QRegion &region);
0295     void scrollDirtyRegion(int dx, int dy);
0296     QPoint dirtyRegionOffset() const;
0297 
0298     void startAutoScroll();
0299     void stopAutoScroll();
0300     void doAutoScroll();
0301 
0302     bool focusNextPrevChild(bool next) override;
0303     bool event(QEvent *event) override;
0304     bool viewportEvent(QEvent *event) override;
0305     void mousePressEvent(QMouseEvent *event) override;
0306     void mouseMoveEvent(QMouseEvent *event) override;
0307     void mouseReleaseEvent(QMouseEvent *event) override;
0308     void mouseDoubleClickEvent(QMouseEvent *event) override;
0309 #if QT_CONFIG(draganddrop)
0310     void dragEnterEvent(QDragEnterEvent *event) override;
0311     void dragMoveEvent(QDragMoveEvent *event) override;
0312     void dragLeaveEvent(QDragLeaveEvent *event) override;
0313     void dropEvent(QDropEvent *event) override;
0314 #endif
0315     void focusInEvent(QFocusEvent *event) override;
0316     void focusOutEvent(QFocusEvent *event) override;
0317     void keyPressEvent(QKeyEvent *event) override;
0318     void resizeEvent(QResizeEvent *event) override;
0319     void timerEvent(QTimerEvent *event) override;
0320     void inputMethodEvent(QInputMethodEvent *event) override;
0321     bool eventFilter(QObject *object, QEvent *event) override;
0322 
0323 #if QT_CONFIG(draganddrop)
0324     enum DropIndicatorPosition { OnItem, AboveItem, BelowItem, OnViewport };
0325     DropIndicatorPosition dropIndicatorPosition() const;
0326 #endif
0327 
0328     QSize viewportSizeHint() const override;
0329 
0330 private:
0331     Q_DECLARE_PRIVATE(QAbstractItemView)
0332     Q_DISABLE_COPY(QAbstractItemView)
0333 
0334     friend class ::tst_QAbstractItemView;
0335     friend class ::tst_QTreeView;
0336     friend class QTreeViewPrivate; // needed to compile with MSVC
0337     friend class QListModeViewBase;
0338     friend class QListViewPrivate;
0339     friend class QAbstractSlider;
0340     friend class QComboBoxPrivate; // needed to call initViewItemOption
0341 };
0342 
0343 Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractItemView::EditTriggers)
0344 
0345 QT_END_NAMESPACE
0346 
0347 #endif // QABSTRACTITEMVIEW_H