diff options
Diffstat (limited to 'src/quick/items/qquicktableview_p.h')
-rw-r--r-- | src/quick/items/qquicktableview_p.h | 257 |
1 files changed, 203 insertions, 54 deletions
diff --git a/src/quick/items/qquicktableview_p.h b/src/quick/items/qquicktableview_p.h index 5ef73a816f..10cc53274d 100644 --- a/src/quick/items/qquicktableview_p.h +++ b/src/quick/items/qquicktableview_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtQuick 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$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QQUICKTABLEVIEW_P_H #define QQUICKTABLEVIEW_P_H @@ -58,15 +22,19 @@ QT_REQUIRE_CONFIG(quick_tableview); #include <QtQuick/private/qtquickglobal_p.h> #include <QtQuick/private/qquickflickable_p.h> #include <QtQml/private/qqmlnullablevalue_p.h> +#include <QtQml/private/qqmlfinalizer_p.h> +#include <QtQml/private/qqmlguard_p.h> QT_BEGIN_NAMESPACE class QQuickTableViewAttached; class QQuickTableViewPrivate; +class QItemSelectionModel; -class Q_QUICK_PRIVATE_EXPORT QQuickTableView : public QQuickFlickable +class Q_QUICK_EXPORT QQuickTableView : public QQuickFlickable, public QQmlFinalizerHook { Q_OBJECT + Q_INTERFACES(QQmlFinalizerHook) Q_PROPERTY(int rows READ rows NOTIFY rowsChanged) Q_PROPERTY(int columns READ columns NOTIFY columnsChanged) @@ -79,14 +47,70 @@ class Q_QUICK_PRIVATE_EXPORT QQuickTableView : public QQuickFlickable Q_PROPERTY(bool reuseItems READ reuseItems WRITE setReuseItems NOTIFY reuseItemsChanged) Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged) Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged) - Q_PROPERTY(QQuickTableView *syncView READ syncView WRITE setSyncView NOTIFY syncViewChanged REVISION 14) - Q_PROPERTY(Qt::Orientations syncDirection READ syncDirection WRITE setSyncDirection NOTIFY syncDirectionChanged REVISION 14) + Q_PROPERTY(QQuickTableView *syncView READ syncView WRITE setSyncView NOTIFY syncViewChanged REVISION(2, 14)) + Q_PROPERTY(Qt::Orientations syncDirection READ syncDirection WRITE setSyncDirection NOTIFY syncDirectionChanged REVISION(2, 14)) + Q_PROPERTY(int leftColumn READ leftColumn NOTIFY leftColumnChanged REVISION(6, 0)) + Q_PROPERTY(int rightColumn READ rightColumn NOTIFY rightColumnChanged REVISION(6, 0)) + Q_PROPERTY(int topRow READ topRow NOTIFY topRowChanged REVISION(6, 0)) + Q_PROPERTY(int bottomRow READ bottomRow NOTIFY bottomRowChanged REVISION(6, 0)) + Q_PROPERTY(QItemSelectionModel *selectionModel READ selectionModel WRITE setSelectionModel NOTIFY selectionModelChanged REVISION(6, 2)) + Q_PROPERTY(bool animate READ animate WRITE setAnimate NOTIFY animateChanged REVISION(6, 4)) + Q_PROPERTY(bool keyNavigationEnabled READ keyNavigationEnabled WRITE setKeyNavigationEnabled NOTIFY keyNavigationEnabledChanged REVISION(6, 4)) + Q_PROPERTY(bool pointerNavigationEnabled READ pointerNavigationEnabled WRITE setPointerNavigationEnabled NOTIFY pointerNavigationEnabledChanged REVISION(6, 4)) + Q_PROPERTY(int currentRow READ currentRow NOTIFY currentRowChanged REVISION(6, 4) FINAL) + Q_PROPERTY(int currentColumn READ currentColumn NOTIFY currentColumnChanged REVISION(6, 4) FINAL) + Q_PROPERTY(bool alternatingRows READ alternatingRows WRITE setAlternatingRows NOTIFY alternatingRowsChanged REVISION(6, 4) FINAL) + Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior WRITE setSelectionBehavior NOTIFY selectionBehaviorChanged REVISION(6, 4) FINAL) + Q_PROPERTY(bool resizableColumns READ resizableColumns WRITE setResizableColumns NOTIFY resizableColumnsChanged REVISION(6, 5) FINAL) + Q_PROPERTY(bool resizableRows READ resizableRows WRITE setResizableRows NOTIFY resizableRowsChanged REVISION(6, 5) FINAL) + Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers NOTIFY editTriggersChanged REVISION(6, 5) FINAL) + Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged REVISION(6, 6) FINAL) QML_NAMED_ELEMENT(TableView) - QML_ADDED_IN_MINOR_VERSION(12) + QML_ADDED_IN_VERSION(2, 12) QML_ATTACHED(QQuickTableViewAttached) public: + enum PositionModeFlag { + AlignLeft = Qt::AlignLeft, + AlignRight = Qt::AlignRight, + AlignHCenter = Qt::AlignHCenter, + AlignTop = Qt::AlignTop, + AlignBottom = Qt::AlignBottom, + AlignVCenter = Qt::AlignVCenter, + AlignCenter = AlignVCenter | AlignHCenter, + Visible = 0x01000, + Contain = 0x02000 + }; + Q_DECLARE_FLAGS(PositionMode, PositionModeFlag) + Q_FLAG(PositionMode) + + enum SelectionBehavior { + SelectionDisabled, + SelectCells, + SelectRows, + SelectColumns + }; + Q_ENUM(SelectionBehavior) + + enum SelectionMode { + SingleSelection, + ContiguousSelection, + ExtendedSelection + }; + Q_ENUM(SelectionMode) + + enum EditTrigger { + NoEditTriggers = 0x0, + SingleTapped = 0x1, + DoubleTapped = 0x2, + SelectedTapped = 0x4, + EditKeyPressed = 0x8, + AnyKeyPressed = 0x10, + }; + Q_DECLARE_FLAGS(EditTriggers, EditTrigger) + Q_FLAG(EditTriggers) + QQuickTableView(QQuickItem *parent = nullptr); ~QQuickTableView() override; int rows() const; @@ -104,8 +128,8 @@ public: QJSValue columnWidthProvider() const; void setColumnWidthProvider(const QJSValue &provider); - virtual QVariant model() const; - virtual void setModel(const QVariant &newModel); + QVariant model() const; + void setModel(const QVariant &newModel); QQmlComponent *delegate() const; void setDelegate(QQmlComponent *); @@ -122,7 +146,97 @@ public: Qt::Orientations syncDirection() const; void setSyncDirection(Qt::Orientations direction); + QItemSelectionModel *selectionModel() const; + void setSelectionModel(QItemSelectionModel *selectionModel); + + bool animate() const; + void setAnimate(bool animate); + + bool keyNavigationEnabled() const; + void setKeyNavigationEnabled(bool enabled); + bool pointerNavigationEnabled() const; + void setPointerNavigationEnabled(bool enabled); + + int leftColumn() const; + int rightColumn() const; + int topRow() const; + int bottomRow() const; + + int currentRow() const; + int currentColumn() const; + + bool alternatingRows() const; + void setAlternatingRows(bool alternatingRows); + + SelectionBehavior selectionBehavior() const; + void setSelectionBehavior(SelectionBehavior selectionBehavior); + SelectionMode selectionMode() const; + void setSelectionMode(SelectionMode selectionMode); + + bool resizableColumns() const; + void setResizableColumns(bool enabled); + + bool resizableRows() const; + void setResizableRows(bool enabled); + + EditTriggers editTriggers() const; + void setEditTriggers(EditTriggers editTriggers); + Q_INVOKABLE void forceLayout(); + Q_INVOKABLE void positionViewAtCell(const QPoint &cell, PositionMode mode, const QPointF &offset = QPointF(), const QRectF &subRect = QRectF()); + Q_INVOKABLE void positionViewAtIndex(const QModelIndex &index, PositionMode mode, const QPointF &offset = QPointF(), const QRectF &subRect = QRectF()); + Q_INVOKABLE void positionViewAtRow(int row, PositionMode mode, qreal offset = 0, const QRectF &subRect = QRectF()); + Q_INVOKABLE void positionViewAtColumn(int column, PositionMode mode, qreal offset = 0, const QRectF &subRect = QRectF()); + Q_INVOKABLE QQuickItem *itemAtCell(const QPoint &cell) const; + + Q_REVISION(6, 4) Q_INVOKABLE QPoint cellAtPosition(const QPointF &position, bool includeSpacing = false) const; + Q_REVISION(6, 4) Q_INVOKABLE QPoint cellAtPosition(qreal x, qreal y, bool includeSpacing = false) const; +#if QT_DEPRECATED_SINCE(6, 4) + QT_DEPRECATED_VERSION_X_6_4("Use index(row, column) instead") + Q_REVISION(6, 4) Q_INVOKABLE virtual QModelIndex modelIndex(int row, int column) const; + QT_DEPRECATED_VERSION_X_6_4("Use cellAtPosition() instead") + Q_INVOKABLE QPoint cellAtPos(const QPointF &position, bool includeSpacing = false) const; + Q_INVOKABLE QPoint cellAtPos(qreal x, qreal y, bool includeSpacing = false) const; +#endif + + Q_REVISION(6, 2) Q_INVOKABLE bool isColumnLoaded(int column) const; + Q_REVISION(6, 2) Q_INVOKABLE bool isRowLoaded(int row) const; + + Q_REVISION(6, 2) Q_INVOKABLE qreal columnWidth(int column) const; + Q_REVISION(6, 2) Q_INVOKABLE qreal rowHeight(int row) const; + Q_REVISION(6, 2) Q_INVOKABLE qreal implicitColumnWidth(int column) const; + Q_REVISION(6, 2) Q_INVOKABLE qreal implicitRowHeight(int row) const; + + Q_REVISION(6, 4) Q_INVOKABLE QModelIndex index(int row, int column) const; + Q_REVISION(6, 4) Q_INVOKABLE virtual QModelIndex modelIndex(const QPoint &cell) const; + Q_REVISION(6, 4) Q_INVOKABLE virtual QPoint cellAtIndex(const QModelIndex &index) const; + Q_REVISION(6, 4) Q_INVOKABLE int rowAtIndex(const QModelIndex &index) const; + Q_REVISION(6, 4) Q_INVOKABLE int columnAtIndex(const QModelIndex &index) const; + + Q_REVISION(6, 5) Q_INVOKABLE void setColumnWidth(int column, qreal size); + Q_REVISION(6, 5) Q_INVOKABLE void clearColumnWidths(); + Q_REVISION(6, 5) Q_INVOKABLE qreal explicitColumnWidth(int column) const; + + Q_REVISION(6, 5) Q_INVOKABLE void setRowHeight(int row, qreal size); + Q_REVISION(6, 5) Q_INVOKABLE void clearRowHeights(); + Q_REVISION(6, 5) Q_INVOKABLE qreal explicitRowHeight(int row) const; + + Q_REVISION(6, 5) Q_INVOKABLE void edit(const QModelIndex &index); + Q_REVISION(6, 5) Q_INVOKABLE void closeEditor(); + + Q_REVISION(6, 5) Q_INVOKABLE QQuickItem *itemAtIndex(const QModelIndex &index) const; + +#if QT_DEPRECATED_SINCE(6, 5) + QT_DEPRECATED_VERSION_X_6_5("Use itemAtIndex(index(row, column)) instead") + Q_INVOKABLE QQuickItem *itemAtCell(int column, int row) const; + QT_DEPRECATED_VERSION_X_6_5("Use positionViewAtIndex(index(row, column)) instead") + Q_INVOKABLE void positionViewAtCell(int column, int row, PositionMode mode, const QPointF &offset = QPointF(), const QRectF &subRect = QRectF()); +#endif + + Q_REVISION(6, 8) Q_INVOKABLE void moveColumn(int source, int destination); + Q_REVISION(6, 8) Q_INVOKABLE void moveRow(int source, int destination); + Q_REVISION(6, 8) Q_INVOKABLE void clearColumnReordering(); + Q_REVISION(6, 8) Q_INVOKABLE void clearRowReordering(); static QQuickTableViewAttached *qmlAttachedProperties(QObject *); @@ -136,16 +250,39 @@ Q_SIGNALS: void modelChanged(); void delegateChanged(); void reuseItemsChanged(); - Q_REVISION(14) void syncViewChanged(); - Q_REVISION(14) void syncDirectionChanged(); + Q_REVISION(2, 14) void syncViewChanged(); + Q_REVISION(2, 14) void syncDirectionChanged(); + Q_REVISION(6, 0) void leftColumnChanged(); + Q_REVISION(6, 0) void rightColumnChanged(); + Q_REVISION(6, 0) void topRowChanged(); + Q_REVISION(6, 0) void bottomRowChanged(); + Q_REVISION(6, 2) void selectionModelChanged(); + Q_REVISION(6, 4) void animateChanged(); + Q_REVISION(6, 4) void keyNavigationEnabledChanged(); + Q_REVISION(6, 4) void pointerNavigationEnabledChanged(); + Q_REVISION(6, 4) void currentRowChanged(); + Q_REVISION(6, 4) void currentColumnChanged(); + Q_REVISION(6, 4) void alternatingRowsChanged(); + Q_REVISION(6, 4) void selectionBehaviorChanged(); + Q_REVISION(6, 5) void resizableColumnsChanged(); + Q_REVISION(6, 5) void resizableRowsChanged(); + Q_REVISION(6, 5) void editTriggersChanged(); + Q_REVISION(6, 5) void layoutChanged(); + Q_REVISION(6, 6) void selectionModeChanged(); + Q_REVISION(6, 8) void rowMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); + Q_REVISION(6, 8) void columnMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); + protected: - void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; + void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; void viewportMoved(Qt::Orientations orientation) override; - void componentComplete() override; + void keyPressEvent(QKeyEvent *e) override; + bool eventFilter(QObject *obj, QEvent *event) override; protected: QQuickTableView(QQuickTableViewPrivate &dd, QQuickItem *parent); + // QQmlFinalizerHook interface + void componentFinalized() override; private: Q_DISABLE_COPY(QQuickTableView) @@ -155,14 +292,13 @@ private: qreal maxXExtent() const override; qreal minYExtent() const override; qreal maxYExtent() const override; - - Q_PRIVATE_SLOT(d_func(), void _q_componentFinalized()) }; -class Q_QUICK_PRIVATE_EXPORT QQuickTableViewAttached : public QObject +class Q_QUICK_EXPORT QQuickTableViewAttached : public QObject { Q_OBJECT - Q_PROPERTY(QQuickTableView *view READ view NOTIFY viewChanged) + Q_PROPERTY(QQuickTableView *view READ view NOTIFY viewChanged FINAL) + Q_PROPERTY(QQmlComponent *editDelegate READ editDelegate WRITE setEditDelegate NOTIFY editDelegateChanged FINAL) public: QQuickTableViewAttached(QObject *parent) @@ -176,19 +312,32 @@ public: Q_EMIT viewChanged(); } + QQmlComponent *editDelegate() const { return m_editDelegate; } + void setEditDelegate(QQmlComponent *newEditDelegate) + { + if (m_editDelegate == newEditDelegate) + return; + m_editDelegate = newEditDelegate; + Q_EMIT editDelegateChanged(); + } + Q_SIGNALS: void viewChanged(); void pooled(); void reused(); + void editDelegateChanged(); + void commit(); private: QPointer<QQuickTableView> m_view; + QQmlGuard<QQmlComponent> m_editDelegate; friend class QQuickTableViewPrivate; }; -QT_END_NAMESPACE +Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickTableView::PositionMode) +Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickTableView::EditTriggers) -QML_DECLARE_TYPE(QQuickTableView) +QT_END_NAMESPACE #endif // QQUICKTABLEVIEW_P_H |