diff options
Diffstat (limited to 'src/quick/items/qquicktableview_p_p.h')
-rw-r--r-- | src/quick/items/qquicktableview_p_p.h | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/src/quick/items/qquicktableview_p_p.h b/src/quick/items/qquicktableview_p_p.h index d8c2b036ac..3e115ecc4a 100644 --- a/src/quick/items/qquicktableview_p_p.h +++ b/src/quick/items/qquicktableview_p_p.h @@ -24,13 +24,15 @@ #include <QtQmlModels/private/qqmlchangeset_p.h> #include <QtQml/qqmlinfo.h> -#include <QtQuick/private/qminimalflatset_p.h> #include <QtQuick/private/qquickflickable_p_p.h> #include <QtQuick/private/qquickitemviewfxitem_p_p.h> #include <QtQuick/private/qquickanimation_p.h> #include <QtQuick/private/qquickselectable_p.h> #include <QtQuick/private/qquicksinglepointhandler_p.h> #include <QtQuick/private/qquickhoverhandler_p.h> +#include <QtQuick/private/qquicktaphandler_p.h> + +#include <QtCore/private/qminimalflatset_p.h> QT_BEGIN_NAMESPACE @@ -108,7 +110,21 @@ protected: QPointerEvent *ev, QEventPoint &point) override; }; -class Q_QUICK_PRIVATE_EXPORT QQuickTableViewPrivate : public QQuickFlickablePrivate, public QQuickSelectable +/*! \internal + * QQuickTableViewTapHandler used to handle tap events explicitly for table view + */ +class QQuickTableViewTapHandler : public QQuickTapHandler +{ + Q_OBJECT + +public: + explicit QQuickTableViewTapHandler(QQuickTableView *view); + bool wantsEventPoint(const QPointerEvent *event, const QEventPoint &point) override; + + friend class QQuickTableViewPrivate; +}; + +class Q_QUICK_EXPORT QQuickTableViewPrivate : public QQuickFlickablePrivate, public QQuickSelectable { public: Q_DECLARE_PUBLIC(QQuickTableView) @@ -224,6 +240,11 @@ public: Done }; + enum class SectionState { + Idle = 0, + Moving + }; + enum class RebuildOption { None = 0, All = 0x1, @@ -343,6 +364,10 @@ public: QPointer<QItemSelectionModel> selectionModel; QQuickTableView::SelectionBehavior selectionBehavior = QQuickTableView::SelectCells; + QQuickTableView::SelectionMode selectionMode = QQuickTableView::ExtendedSelection; + QItemSelectionModel::SelectionFlag selectionFlag = QItemSelectionModel::NoUpdate; + std::function<void(CallBackFlag)> selectableCallbackFunction; + bool inSelectionModelUpdate = false; int assignedPositionViewAtRowAfterRebuild = 0; int assignedPositionViewAtColumnAfterRebuild = 0; @@ -360,8 +385,10 @@ public: QPoint selectionStartCell = {-1, -1}; QPoint selectionEndCell = {-1, -1}; + QItemSelection existingSelection; QMargins edgesBeforeRebuild; + QSize tableSizeBeforeRebuild; int currentRow = -1; int currentColumn = -1; @@ -381,6 +408,16 @@ public: QString forcedIncubationMode = qEnvironmentVariable("QT_TABLEVIEW_INCUBATION_MODE"); #endif + struct SectionData { + int index = -1; + int prevIndex = -1; + }; + + QList<SectionData> visualIndices[Qt::Vertical]; + QList<SectionData> logicalIndices[Qt::Vertical]; + + SectionState m_sectionState = SectionState::Idle; + public: void init(); @@ -388,7 +425,7 @@ public: int modelIndexAtCell(const QPoint &cell) const; QPoint cellAtModelIndex(int modelIndex) const; - int modelIndexToCellIndex(const QModelIndex &modelIndex) const; + int modelIndexToCellIndex(const QModelIndex &modelIndex, bool visualIndex = true) const; inline bool cellIsValid(const QPoint &cell) const { return cell.x() != -1 && cell.y() != -1; } qreal sizeHintForColumn(int column) const; @@ -502,6 +539,7 @@ public: virtual void syncModel(); virtual void syncSyncView(); virtual void syncPositionView(); + virtual QAbstractItemModel *selectionSourceModel(); inline void syncRebuildOptions(); void connectToModel(); @@ -515,6 +553,7 @@ public: void columnsRemovedCallback(const QModelIndex &parent, int begin, int end); void layoutChangedCallback(const QList<QPersistentModelIndex> &parents, QAbstractItemModel::LayoutChangeHint hint); void modelResetCallback(); + bool compareModel(const QVariant& model1, const QVariant& model2) const; void positionViewAtRow(int row, Qt::Alignment alignment, qreal offset, const QRectF subRect = QRectF()); void positionViewAtColumn(int column, Qt::Alignment alignment, qreal offset, const QRectF subRect = QRectF()); @@ -531,7 +570,6 @@ public: void selectionChangedInSelectionModel(const QItemSelection &selected, const QItemSelection &deselected); void updateSelectedOnAllDelegateItems(); void setSelectedOnDelegateItem(const QModelIndex &modelIndex, bool select); - void syncSourceModelInSelectionModel(); bool currentInSelectionModel(const QPoint &cell) const; void currentChangedInSelectionModel(const QModelIndex ¤t, const QModelIndex &previous); @@ -560,18 +598,30 @@ public: // QQuickSelectable QQuickItem *selectionPointerHandlerTarget() const override; - bool startSelection(const QPointF &pos) override; + bool startSelection(const QPointF &pos, Qt::KeyboardModifiers modifiers) override; void setSelectionStartPos(const QPointF &pos) override; void setSelectionEndPos(const QPointF &pos) override; void clearSelection() override; void normalizeSelection() override; QRectF selectionRectangle() const override; QSizeF scrollTowardsSelectionPoint(const QPointF &pos, const QSizeF &step) override; + void setCallback(std::function<void(CallBackFlag)> func) override; + void cancelSelectionTracking(); QPoint clampedCellAtPos(const QPointF &pos) const; virtual void updateSelection(const QRect &oldSelection, const QRect &newSelection); QRect selection() const; // ---------------- + + // Column reordering + void moveSection(int source , int destination, Qt::Orientations orientation); + void initializeIndexMapping(); + void clearIndexMapping(); + void clearSection(Qt::Orientations orientation); + virtual int logicalRowIndex(const int visualIndex) const; + virtual int logicalColumnIndex(const int visualIndex) const; + virtual int visualRowIndex(const int logicalIndex) const; + virtual int visualColumnIndex(const int logicalIndex) const; }; class FxTableItem : public QQuickItemViewFxItem |