/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWidgets module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** 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 https://www.qt.io/terms-conditions. For further ** information use the contact form at https://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 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QABSTRACTITEMVIEW_H #define QABSTRACTITEMVIEW_H #include #include #include #include #include class tst_QAbstractItemView; class tst_QTreeView; QT_REQUIRE_CONFIG(itemviews); QT_BEGIN_NAMESPACE class QMenu; class QDrag; class QEvent; class QAbstractItemViewPrivate; class Q_WIDGETS_EXPORT QAbstractItemView : public QAbstractScrollArea { Q_OBJECT Q_PROPERTY(bool autoScroll READ hasAutoScroll WRITE setAutoScroll) Q_PROPERTY(int autoScrollMargin READ autoScrollMargin WRITE setAutoScrollMargin) Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers) Q_PROPERTY(bool tabKeyNavigation READ tabKeyNavigation WRITE setTabKeyNavigation) #ifndef QT_NO_DRAGANDDROP Q_PROPERTY(bool showDropIndicator READ showDropIndicator WRITE setDropIndicatorShown) Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled) Q_PROPERTY(bool dragDropOverwriteMode READ dragDropOverwriteMode WRITE setDragDropOverwriteMode) Q_PROPERTY(DragDropMode dragDropMode READ dragDropMode WRITE setDragDropMode) Q_PROPERTY(Qt::DropAction defaultDropAction READ defaultDropAction WRITE setDefaultDropAction) #endif Q_PROPERTY(bool alternatingRowColors READ alternatingRowColors WRITE setAlternatingRowColors) Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior WRITE setSelectionBehavior) Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged) Q_PROPERTY(Qt::TextElideMode textElideMode READ textElideMode WRITE setTextElideMode) Q_PROPERTY(ScrollMode verticalScrollMode READ verticalScrollMode WRITE setVerticalScrollMode RESET resetVerticalScrollMode) Q_PROPERTY(ScrollMode horizontalScrollMode READ horizontalScrollMode WRITE setHorizontalScrollMode RESET resetHorizontalScrollMode) public: enum SelectionMode { NoSelection, SingleSelection, MultiSelection, ExtendedSelection, ContiguousSelection }; Q_ENUM(SelectionMode) enum SelectionBehavior { SelectItems, SelectRows, SelectColumns }; Q_ENUM(SelectionBehavior) enum ScrollHint { EnsureVisible, PositionAtTop, PositionAtBottom, PositionAtCenter }; Q_ENUM(ScrollHint) enum EditTrigger { NoEditTriggers = 0, CurrentChanged = 1, DoubleClicked = 2, SelectedClicked = 4, EditKeyPressed = 8, AnyKeyPressed = 16, AllEditTriggers = 31 }; Q_DECLARE_FLAGS(EditTriggers, EditTrigger) Q_FLAG(EditTriggers) enum ScrollMode { ScrollPerItem, ScrollPerPixel }; Q_ENUM(ScrollMode) explicit QAbstractItemView(QWidget *parent = Q_NULLPTR); ~QAbstractItemView(); virtual void setModel(QAbstractItemModel *model); QAbstractItemModel *model() const; virtual void setSelectionModel(QItemSelectionModel *selectionModel); QItemSelectionModel *selectionModel() const; void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *itemDelegate() const; void setSelectionMode(QAbstractItemView::SelectionMode mode); QAbstractItemView::SelectionMode selectionMode() const; void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior); QAbstractItemView::SelectionBehavior selectionBehavior() const; QModelIndex currentIndex() const; QModelIndex rootIndex() const; void setEditTriggers(EditTriggers triggers); EditTriggers editTriggers() const; void setVerticalScrollMode(ScrollMode mode); ScrollMode verticalScrollMode() const; void resetVerticalScrollMode(); void setHorizontalScrollMode(ScrollMode mode); ScrollMode horizontalScrollMode() const; void resetHorizontalScrollMode(); void setAutoScroll(bool enable); bool hasAutoScroll() const; void setAutoScrollMargin(int margin); int autoScrollMargin() const; void setTabKeyNavigation(bool enable); bool tabKeyNavigation() const; #ifndef QT_NO_DRAGANDDROP void setDropIndicatorShown(bool enable); bool showDropIndicator() const; void setDragEnabled(bool enable); bool dragEnabled() const; void setDragDropOverwriteMode(bool overwrite); bool dragDropOverwriteMode() const; enum DragDropMode { NoDragDrop, DragOnly, DropOnly, DragDrop, InternalMove }; Q_ENUM(DragDropMode) void setDragDropMode(DragDropMode behavior); DragDropMode dragDropMode() const; void setDefaultDropAction(Qt::DropAction dropAction); Qt::DropAction defaultDropAction() const; #endif void setAlternatingRowColors(bool enable); bool alternatingRowColors() const; void setIconSize(const QSize &size); QSize iconSize() const; void setTextElideMode(Qt::TextElideMode mode); Qt::TextElideMode textElideMode() const; virtual void keyboardSearch(const QString &search); virtual QRect visualRect(const QModelIndex &index) const = 0; virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) = 0; virtual QModelIndex indexAt(const QPoint &point) const = 0; QSize sizeHintForIndex(const QModelIndex &index) const; virtual int sizeHintForRow(int row) const; virtual int sizeHintForColumn(int column) const; void openPersistentEditor(const QModelIndex &index); void closePersistentEditor(const QModelIndex &index); void setIndexWidget(const QModelIndex &index, QWidget *widget); QWidget *indexWidget(const QModelIndex &index) const; void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate); QAbstractItemDelegate *itemDelegateForRow(int row) const; void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate); QAbstractItemDelegate *itemDelegateForColumn(int column) const; QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const; virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE; using QAbstractScrollArea::update; public Q_SLOTS: virtual void reset(); virtual void setRootIndex(const QModelIndex &index); virtual void doItemsLayout(); virtual void selectAll(); void edit(const QModelIndex &index); void clearSelection(); void setCurrentIndex(const QModelIndex &index); void scrollToTop(); void scrollToBottom(); void update(const QModelIndex &index); protected Q_SLOTS: virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()); virtual void rowsInserted(const QModelIndex &parent, int start, int end); virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous); virtual void updateEditorData(); virtual void updateEditorGeometries(); virtual void updateGeometries(); virtual void verticalScrollbarAction(int action); virtual void horizontalScrollbarAction(int action); virtual void verticalScrollbarValueChanged(int value); virtual void horizontalScrollbarValueChanged(int value); virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); virtual void commitData(QWidget *editor); virtual void editorDestroyed(QObject *editor); Q_SIGNALS: void pressed(const QModelIndex &index); void clicked(const QModelIndex &index); void doubleClicked(const QModelIndex &index); void activated(const QModelIndex &index); void entered(const QModelIndex &index); void viewportEntered(); void iconSizeChanged(const QSize &size); protected: QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = Q_NULLPTR); void setHorizontalStepsPerItem(int steps); int horizontalStepsPerItem() const; void setVerticalStepsPerItem(int steps); int verticalStepsPerItem() const; enum CursorAction { MoveUp, MoveDown, MoveLeft, MoveRight, MoveHome, MoveEnd, MovePageUp, MovePageDown, MoveNext, MovePrevious }; virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) = 0; virtual int horizontalOffset() const = 0; virtual int verticalOffset() const = 0; virtual bool isIndexHidden(const QModelIndex &index) const = 0; virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) = 0; virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0; virtual QModelIndexList selectedIndexes() const; virtual bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event); virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index, const QEvent *event = Q_NULLPTR) const; #ifndef QT_NO_DRAGANDDROP virtual void startDrag(Qt::DropActions supportedActions); #endif virtual QStyleOptionViewItem viewOptions() const; enum State { NoState, DraggingState, DragSelectingState, EditingState, ExpandingState, CollapsingState, AnimatingState }; State state() const; void setState(State state); void scheduleDelayedItemsLayout(); void executeDelayedItemsLayout(); void setDirtyRegion(const QRegion ®ion); void scrollDirtyRegion(int dx, int dy); QPoint dirtyRegionOffset() const; void startAutoScroll(); void stopAutoScroll(); void doAutoScroll(); bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE; bool event(QEvent *event) Q_DECL_OVERRIDE; bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE; #ifndef QT_NO_DRAGANDDROP void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE; void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; #endif void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE; void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE; void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE; #ifndef QT_NO_DRAGANDDROP enum DropIndicatorPosition { OnItem, AboveItem, BelowItem, OnViewport }; DropIndicatorPosition dropIndicatorPosition() const; #endif QSize viewportSizeHint() const Q_DECL_OVERRIDE; private: Q_DECLARE_PRIVATE(QAbstractItemView) Q_DISABLE_COPY(QAbstractItemView) Q_PRIVATE_SLOT(d_func(), void _q_columnsAboutToBeRemoved(const QModelIndex&, int, int)) Q_PRIVATE_SLOT(d_func(), void _q_columnsRemoved(const QModelIndex&, int, int)) Q_PRIVATE_SLOT(d_func(), void _q_columnsInserted(const QModelIndex&, int, int)) Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex&, int, int)) Q_PRIVATE_SLOT(d_func(), void _q_rowsRemoved(const QModelIndex&, int, int)) Q_PRIVATE_SLOT(d_func(), void _q_columnsMoved(const QModelIndex&, int, int, const QModelIndex&, int)) Q_PRIVATE_SLOT(d_func(), void _q_rowsMoved(const QModelIndex&, int, int, const QModelIndex&, int)) Q_PRIVATE_SLOT(d_func(), void _q_modelDestroyed()) Q_PRIVATE_SLOT(d_func(), void _q_layoutChanged()) Q_PRIVATE_SLOT(d_func(), void _q_headerDataChanged()) #if QT_CONFIG(gestures) && QT_CONFIG(scroller) Q_PRIVATE_SLOT(d_func(), void _q_scrollerStateChanged()) #endif friend class ::tst_QAbstractItemView; friend class ::tst_QTreeView; friend class QTreeViewPrivate; // needed to compile with MSVC friend class QListModeViewBase; friend class QListViewPrivate; friend class QAbstractSlider; }; Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractItemView::EditTriggers) QT_END_NAMESPACE #endif // QABSTRACTITEMVIEW_H