248 QGridLayoutItem(
int row,
int column,
int rowSpan = 1,
int columnSpan = 1,
249 Qt::Alignment alignment = { });
250 virtual ~QGridLayoutItem() {}
252 inline int firstRow()
const {
return q_firstRows[Qt::Vertical]; }
253 inline int firstColumn()
const {
return q_firstRows[Qt::Horizontal]; }
254 inline int rowSpan()
const {
return q_rowSpans[Qt::Vertical]; }
255 inline int columnSpan()
const {
return q_rowSpans[Qt::Horizontal]; }
256 inline int lastRow()
const {
return firstRow() + rowSpan() - 1; }
257 inline int lastColumn()
const {
return firstColumn() + columnSpan() - 1; }
259 int firstRow(Qt::Orientation orientation)
const;
260 int firstColumn(Qt::Orientation orientation)
const;
261 int lastRow(Qt::Orientation orientation)
const;
262 int lastColumn(Qt::Orientation orientation)
const;
263 int rowSpan(Qt::Orientation orientation)
const;
264 int columnSpan(Qt::Orientation orientation)
const;
265 void setFirstRow(
int row, Qt::Orientation orientation = Qt::Vertical);
266 void setRowSpan(
int rowSpan, Qt::Orientation orientation = Qt::Vertical);
268 int stretchFactor(Qt::Orientation orientation)
const;
269 void setStretchFactor(
int stretch, Qt::Orientation orientation);
271 inline Qt::Alignment alignment()
const {
return q_alignment; }
272 inline void setAlignment(Qt::Alignment alignment) { q_alignment = alignment; }
274 virtual QLayoutPolicy::Policy sizePolicy(Qt::Orientation orientation)
const = 0;
275 virtual QSizeF sizeHint(Qt::SizeHint which,
const QSizeF &constraint)
const = 0;
276 virtual bool isEmpty()
const {
return false; }
278 virtual void setGeometry(
const QRectF &rect) = 0;
280
281
282
283 virtual bool hasDynamicConstraint()
const {
return false; }
284 virtual Qt::Orientation dynamicConstraintOrientation()
const {
return Qt::Horizontal; }
287 virtual QLayoutPolicy::ControlTypes controlTypes(LayoutSide side)
const;
289 inline virtual QString toString()
const {
return QDebug::toString(
this); }
291 QRectF geometryWithin(qreal x, qreal y, qreal width, qreal height, qreal rowDescent, Qt::Alignment align,
bool snapToPixelGrid)
const;
292 QGridLayoutBox box(Qt::Orientation orientation,
bool snapToPixelGrid, qreal constraint = -1.0)
const;
296 void insertOrRemoveRows(
int row,
int delta, Qt::Orientation orientation = Qt::Vertical);
297 QSizeF effectiveMaxSize(
const QSizeF &constraint)
const;
299#ifdef QGRIDLAYOUTENGINE_DEBUG
300 void dump(
int indent = 0)
const;
304 QHVContainer<
int> q_firstRows;
305 QHVContainer<
int> q_rowSpans;
306 QHVContainer<
int> q_stretches;
307 Qt::Alignment q_alignment;
314 QGridLayoutEngine(Qt::Alignment defaultAlignment = { },
bool snapToPixelGrid =
false);
315 inline ~QGridLayoutEngine() { qDeleteAll(q_items); }
317 int rowCount(Qt::Orientation orientation)
const;
318 int columnCount(Qt::Orientation orientation)
const;
319 inline int rowCount()
const {
return q_infos[Qt::Vertical].count; }
320 inline int columnCount()
const {
return q_infos[Qt::Horizontal].count; }
322 int itemCount()
const;
323 QGridLayoutItem *itemAt(
int index)
const;
325 int effectiveFirstRow(Qt::Orientation orientation = Qt::Vertical)
const;
326 int effectiveLastRow(Qt::Orientation orientation = Qt::Vertical)
const;
328 void setSpacing(qreal spacing, Qt::Orientations orientations);
329 qreal spacing(Qt::Orientation orientation,
const QAbstractLayoutStyleInfo *styleInfo)
const;
331 void setRowSpacing(
int row, qreal spacing, Qt::Orientation orientation = Qt::Vertical);
332 qreal rowSpacing(
int row, Qt::Orientation orientation = Qt::Vertical)
const;
334 void setRowStretchFactor(
int row,
int stretch, Qt::Orientation orientation = Qt::Vertical);
335 int rowStretchFactor(
int row, Qt::Orientation orientation = Qt::Vertical)
const;
337 void setRowSizeHint(Qt::SizeHint which,
int row, qreal size,
338 Qt::Orientation orientation = Qt::Vertical);
339 qreal rowSizeHint(Qt::SizeHint which,
int row,
340 Qt::Orientation orientation = Qt::Vertical)
const;
342 bool uniformCellWidths()
const;
343 void setUniformCellWidths(
bool uniformCellWidths);
345 bool uniformCellHeights()
const;
346 void setUniformCellHeights(
bool uniformCellHeights);
348 void setRowAlignment(
int row, Qt::Alignment alignment, Qt::Orientation orientation);
349 Qt::Alignment rowAlignment(
int row, Qt::Orientation orientation)
const;
351 Qt::Alignment effectiveAlignment(
const QGridLayoutItem *layoutItem)
const;
354 void insertItem(QGridLayoutItem *item,
int index);
355 void addItem(QGridLayoutItem *item);
356 void removeItem(QGridLayoutItem *item);
359 const QList<QGridLayoutItem *> oldItems = q_items;
362 int rows = rowCount(Qt::Vertical);
363 removeRows(0, rows, Qt::Vertical);
364 rows = rowCount(Qt::Horizontal);
365 removeRows(0, rows, Qt::Horizontal);
366 qDeleteAll(oldItems);
369 QGridLayoutItem *itemAt(
int row,
int column, Qt::Orientation orientation = Qt::Vertical)
const;
370 inline void insertRow(
int row, Qt::Orientation orientation = Qt::Vertical)
371 { insertOrRemoveRows(row, +1, orientation); }
372 inline void removeRows(
int row,
int count, Qt::Orientation orientation)
373 { insertOrRemoveRows(row, -count, orientation); }
376 void setGeometries(
const QRectF &contentsGeometry,
const QAbstractLayoutStyleInfo *styleInfo);
377 QRectF cellRect(
const QRectF &contentsGeometry,
int row,
int column,
int rowSpan,
int columnSpan,
378 const QAbstractLayoutStyleInfo *styleInfo)
const;
379 QSizeF sizeHint(Qt::SizeHint which,
const QSizeF &constraint,
380 const QAbstractLayoutStyleInfo *styleInfo)
const;
383 QSizeF dynamicallyConstrainedSizeHint(Qt::SizeHint which,
const QSizeF &constraint)
const;
384 bool ensureDynamicConstraint()
const;
385 bool hasDynamicConstraint()
const;
386 Qt::Orientation constraintOrientation()
const;
389 QLayoutPolicy::ControlTypes controlTypes(LayoutSide side)
const;
391 void setVisualDirection(Qt::LayoutDirection direction);
392 Qt::LayoutDirection visualDirection()
const;
393#ifdef QGRIDLAYOUTENGINE_DEBUG
394 void dump(
int indent = 0)
const;
398 static int grossRoundUp(
int n) {
return ((n + 2) | 0x3) - 2; }
400 void maybeExpandGrid(
int row,
int column, Qt::Orientation orientation = Qt::Vertical);
401 void regenerateGrid();
402 inline int internalGridRowCount()
const {
return grossRoundUp(rowCount()); }
403 inline int internalGridColumnCount()
const {
return grossRoundUp(columnCount()); }
404 void setItemAt(
int row,
int column, QGridLayoutItem *item);
405 void insertOrRemoveRows(
int row,
int delta, Qt::Orientation orientation = Qt::Vertical);
406 void fillRowData(QGridLayoutRowData *rowData,
407 const qreal *colPositions,
const qreal *colSizes,
408 Qt::Orientation orientation,
409 const QAbstractLayoutStyleInfo *styleInfo)
const;
410 void ensureEffectiveFirstAndLastRows()
const;
411 void ensureColumnAndRowData(QGridLayoutRowData *rowData, QGridLayoutBox *totalBox,
412 const qreal *colPositions,
const qreal *colSizes,
413 Qt::Orientation orientation,
414 const QAbstractLayoutStyleInfo *styleInfo)
const;
416 void ensureGeometries(
const QSizeF &size,
const QAbstractLayoutStyleInfo *styleInfo)
const;
418 QList<QGridLayoutItem *> q_items;
421 QList<QGridLayoutItem *> q_grid;
422 QHVContainer<QLayoutParameter<qreal>> q_defaultSpacings;
423 QHVContainer<QGridLayoutRowInfo> q_infos;
424 Qt::LayoutDirection m_visualDirection;
427 Qt::Alignment m_defaultAlignment;
428 unsigned m_snapToPixelGrid : 1;
429 unsigned m_uniformCellWidths : 1;
430 unsigned m_uniformCellHeights : 1;
433 mutable QHVContainer<
int> q_cachedEffectiveFirstRows;
434 mutable QHVContainer<
int> q_cachedEffectiveLastRows;
435 mutable quint8 q_cachedConstraintOrientation : 3;
438 mutable QHVContainer<QGridLayoutBox> q_totalBoxes;
441 CachedWithNoConstraint = -1
444 mutable QHVContainer<qreal> q_totalBoxCachedConstraints;
447 mutable QGridLayoutRowData q_columnData;
448 mutable QGridLayoutRowData q_rowData;
451 mutable QSizeF q_cachedSize;
452 mutable QList<qreal> q_xx;
453 mutable QList<qreal> q_yy;
454 mutable QList<qreal> q_widths;
455 mutable QList<qreal> q_heights;
456 mutable QList<qreal> q_descents;
458 friend class QGridLayoutItem;