Fluid 1.3.0
Material Design for QtQuick and Qml
Loading...
Searching...
No Matches
AdaptiveGrid.qml
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
2// SPDX-License-Identifier: MPL-2.0
3
4pragma ComponentBehavior: Bound
5
6import QtQuick
7import QtQuick.Layouts
8import Fluid as MD
9
36Item {
37 id: control
38 Accessible.ignored: true
39
46 default property alias contentData: layout.data
47
54 property real referenceWidth: width
55
57 readonly property int breakpoint: MD.Breakpoints.fromWidth(referenceWidth)
58
60 readonly property int columns: MD.Breakpoints.columnCount(breakpoint)
61
68 property real margins: MD.Breakpoints.margin(breakpoint)
69
76 property real columnSpacing: MD.Breakpoints.gutter(breakpoint)
77
83 property real rowSpacing: MD.Tokens.measurement.space0
84
91 property alias flow: layout.flow
92
100 property alias layoutDirection: layout.layoutDirection
101
103 readonly property real contentWidth: Math.max(0, width - 2 * margins)
104
111 readonly property real columnWidth: Math.max(0, (contentWidth - (columns - 1) * columnSpacing) / columns)
112
113 implicitWidth: layout.implicitWidth + 2 * margins
114 implicitHeight: layout.implicitHeight
115
124 function columnLeft(index) {
125 if (!Number.isInteger(index) || index < 0 || index >= columns)
126 return NaN;
127
128 const physicalIndex = layoutDirection === Qt.RightToLeft ? columns - index - 1 : index;
129 return margins + physicalIndex * (columnWidth + columnSpacing);
130 }
131
138 function columnRight(index) {
139 const left = columnLeft(index);
140 return Number.isNaN(left) ? NaN : left + columnWidth;
141 }
142
150 function spanWidth(span) {
151 if (!Number.isInteger(span) || span < 1 || span > columns)
152 return NaN;
153 return span * columnWidth + (span - 1) * columnSpacing;
154 }
155
156 GridLayout {
157 id: layout
158
159 x: control.margins
160 width: control.contentWidth
161 height: control.height
162 columns: control.columns
163 columnSpacing: control.columnSpacing
164 rowSpacing: control.rowSpacing
165 uniformCellWidths: true
166 }
167}