Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
qtableview_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QTABLEVIEW_P_H
5#define QTABLEVIEW_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include "qtableview.h"
20#include "qheaderview.h"
21
22#include <QtCore/QList>
23#include <QtCore/QMap>
24#include <QtCore/QSet>
25#include <QtCore/QDebug>
26#include "private/qabstractitemview_p.h"
27
28#include <list>
29
31
33
45{
46public:
47 struct Span
48 {
49 int m_top;
50 int m_left;
55 : m_top(-1), m_left(-1), m_bottom(-1), m_right(-1), will_be_deleted(false) { }
56 Span(int row, int column, int rowCount, int columnCount)
57 : m_top(row), m_left(column), m_bottom(row+rowCount-1), m_right(column+columnCount-1), will_be_deleted(false) { }
58 inline int top() const { return m_top; }
59 inline int left() const { return m_left; }
60 inline int bottom() const { return m_bottom; }
61 inline int right() const { return m_right; }
62 inline int height() const { return m_bottom - m_top + 1; }
63 inline int width() const { return m_right - m_left + 1; }
64 };
65
67 {
68 qDeleteAll(spans);
69 }
70
71 void addSpan(Span *span);
72 void updateSpan(Span *span, int old_height);
73 Span *spanAt(int x, int y) const;
74 void clear();
75 QSet<Span *> spansInRect(int x, int y, int w, int h) const;
76
77 void updateInsertedRows(int start, int end);
78 void updateInsertedColumns(int start, int end);
79 void updateRemovedRows(int start, int end);
80 void updateRemovedColumns(int start, int end);
81
82#ifdef QT_BUILD_INTERNAL
83 bool checkConsistency() const;
84#endif
85
86 typedef std::list<Span *> SpanList;
87 SpanList spans; //lists of all spans
88private:
89 //the indexes are negative so the QMap::lowerBound do what i need.
93
94 bool cleanSpanSubIndex(SubIndex &subindex, int end, bool update = false);
95};
96
98
99
101{
102 Q_DECLARE_PUBLIC(QTableView)
103public:
105 : showGrid(true), gridStyle(Qt::SolidLine),
106 columnResizeTimerID(0), rowResizeTimerID(0),
107 horizontalHeader(nullptr), verticalHeader(nullptr),
108 sortingEnabled(false), geometryRecursionBlock(false),
109 visualCursor(QPoint())
110 {
111 wrapItemText = true;
112#if QT_CONFIG(draganddrop)
113 overwrite = true;
114#endif
115 }
116 void init();
117 void trimHiddenSelections(QItemSelectionRange *range) const;
118 QRect intersectedRect(const QRect rect, const QModelIndex &topLeft, const QModelIndex &bottomRight) const override;
119
120 inline bool isHidden(int row, int col) const {
121 return verticalHeader->isSectionHidden(row)
122 || horizontalHeader->isSectionHidden(col);
123 }
124 inline int visualRow(int logicalRow) const {
125 return verticalHeader->visualIndex(logicalRow);
126 }
127 inline int visualColumn(int logicalCol) const {
128 return horizontalHeader->visualIndex(logicalCol);
129 }
130 inline int logicalRow(int visualRow) const {
131 return verticalHeader->logicalIndex(visualRow);
132 }
133 inline int logicalColumn(int visualCol) const {
134 return horizontalHeader->logicalIndex(visualCol);
135 }
136
137 inline int accessibleTable2Index(const QModelIndex &index) const {
138 const int vHeader = verticalHeader ? 1 : 0;
139 return (index.row() + (horizontalHeader ? 1 : 0)) * (index.model()->columnCount() + vHeader)
140 + index.column() + vHeader;
141 }
142
143 int sectionSpanEndLogical(const QHeaderView *header, int logical, int span) const;
144 int sectionSpanSize(const QHeaderView *header, int logical, int span) const;
145 bool spanContainsSection(const QHeaderView *header, int logical, int spanLogical, int span) const;
146 void drawAndClipSpans(const QRegion &area, QPainter *painter,
147 const QStyleOptionViewItem &option, QBitArray *drawn,
148 int firstVisualRow, int lastVisualRow, int firstVisualColumn, int lastVisualColumn);
149 void drawCell(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index);
150 int widthHintForIndex(const QModelIndex &index, int hint, const QStyleOptionViewItem &option) const;
151 int heightHintForIndex(const QModelIndex &index, int hint, QStyleOptionViewItem &option) const;
152
161#if QT_CONFIG(abstractbutton)
162 QWidget *cornerWidget;
163#endif
166 QPoint visualCursor; // (Row,column) cell coordinates to track through span navigation.
167
169
170 void setSpan(int row, int column, int rowSpan, int columnSpan);
171 QSpanCollection::Span span(int row, int column) const;
172 inline int rowSpan(int row, int column) const {
173 return span(row, column).height();
174 }
175 inline int columnSpan(int row, int column) const {
176 return span(row, column).width();
177 }
178 inline bool hasSpans() const {
179 return !spans.spans.empty();
180 }
181 inline int rowSpanHeight(int row, int span) const {
182 return sectionSpanSize(verticalHeader, row, span);
183 }
184 inline int columnSpanWidth(int column, int span) const {
185 return sectionSpanSize(horizontalHeader, column, span);
186 }
187 inline int rowSpanEndLogical(int row, int span) const {
188 return sectionSpanEndLogical(verticalHeader, row, span);
189 }
190 inline int columnSpanEndLogical(int column, int span) const {
191 return sectionSpanEndLogical(horizontalHeader, column, span);
192 }
193
194 inline bool isRowHidden(int row) const {
195 return verticalHeader->isSectionHidden(row);
196 }
197 inline bool isColumnHidden(int column) const {
198 return horizontalHeader->isSectionHidden(column);
199 }
200 inline bool isCellEnabled(int row, int column) const {
201 return isIndexEnabled(model->index(row, column, root));
202 }
203
205 {
206 Increasing,
207 Decreasing
208 };
209 int nextActiveVisualRow(int rowToStart, int column, int limit,
210 SearchDirection searchDirection) const;
211 int nextActiveVisualColumn(int row, int columnToStart, int limit,
212 SearchDirection searchDirection) const;
213
214 QRect visualSpanRect(const QSpanCollection::Span &span) const;
215
216 void _q_selectRow(int row);
217 void _q_selectColumn(int column);
218
219 void selectRow(int row, bool anchor);
220 void selectColumn(int column, bool anchor);
221
222 void _q_updateSpanInsertedRows(const QModelIndex &parent, int start, int end);
223 void _q_updateSpanInsertedColumns(const QModelIndex &parent, int start, int end);
224 void _q_updateSpanRemovedRows(const QModelIndex &parent, int start, int end);
225 void _q_updateSpanRemovedColumns(const QModelIndex &parent, int start, int end);
226 void _q_sortIndicatorChanged(int column, Qt::SortOrder order);
227};
228
230
231#endif // QTABLEVIEW_P_H
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Returns the index of the data in row and column with parent.
\inmodule QtCore
Definition qbitarray.h:13
The QHeaderView class provides a header row or header column for item views.
Definition qheaderview.h:18
bool isSectionHidden(int logicalIndex) const
Returns true if the section specified by logicalIndex is explicitly hidden from the user; otherwise r...
Definition qlist.h:74
Definition qmap.h:186
\inmodule QtCore
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
\inmodule QtCore\reentrant
Definition qpoint.h:23
\inmodule QtCore\reentrant
Definition qrect.h:30
The QRegion class specifies a clip region for a painter.
Definition qregion.h:27
Definition qset.h:18
std::list< Span * > SpanList
QSpanCollection spans
int logicalColumn(int visualCol) const
QList< int > columnsToUpdate
QList< int > rowsToUpdate
bool hasSpans() const
QHeaderView * horizontalHeader
bool isRowHidden(int row) const
bool isCellEnabled(int row, int column) const
bool isHidden(int row, int col) const
bool isColumnHidden(int column) const
int columnSpan(int row, int column) const
int rowSpanEndLogical(int row, int span) const
Qt::PenStyle gridStyle
int logicalRow(int visualRow) const
int visualRow(int logicalRow) const
QHeaderView * verticalHeader
int rowSpanHeight(int row, int span) const
int columnSpanWidth(int column, int span) const
int columnSpanEndLogical(int column, int span) const
int accessibleTable2Index(const QModelIndex &index) const
int rowSpan(int row, int column) const
int visualColumn(int logicalCol) const
The QTableView class provides a default model/view implementation of a table view.
Definition qtableview.h:18
The QWidget class is the base class of all user interface objects.
Definition qwidget.h:99
b clear()
qDeleteAll(list.begin(), list.end())
rect
[4]
Combined button and popup list for selecting options.
SortOrder
Definition qnamespace.h:120
static QString header(const QString &name)
static int area(const QSize &s)
Definition qicon.cpp:152
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLuint index
[2]
GLuint GLuint end
GLsizei range
GLuint start
GLint y
GLfloat GLfloat GLfloat GLfloat h
GLenum GLenum GLsizei void GLsizei void * column
GLint limit
GLenum GLenum GLsizei void * row
GLenum GLenum GLsizei void GLsizei void void * span
GLuint GLenum option
GLfixed GLfixed GLint GLint order
static QT_BEGIN_NAMESPACE QVariant hint(QPlatformIntegration::StyleHint h)
#define Q_AUTOTEST_EXPORT
#define QT_REQUIRE_CONFIG(feature)
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:145
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:163
QSqlQueryModel * model
[16]
QObject::connect nullptr
QPainter painter(this)
[7]
Span(int row, int column, int rowCount, int columnCount)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent