diff --git a/Widgets/NIconPicker.qml b/Widgets/NIconPicker.qml index 813aa468..6a5cc45d 100644 --- a/Widgets/NIconPicker.qml +++ b/Widgets/NIconPicker.qml @@ -30,9 +30,12 @@ Popup { property string query: "" property var allIcons: Object.keys(Icons.icons) - property var filteredIcons: allIcons.filter(function (name) { - return query === "" || name.toLowerCase().indexOf(query.toLowerCase()) !== -1 - }) + property var filteredIcons: { + if (query === "") + return allIcons + var q = query.toLowerCase() + return allIcons.filter(name => name.toLowerCase().includes(q)) + } readonly property int columns: 6 readonly property int cellW: Math.floor(grid.width / columns) readonly property int cellH: Math.round(cellW * 0.7 + 36 * scaling) @@ -93,67 +96,62 @@ Popup { } // Icon grid - NScrollView { + GridView { + id: grid Layout.fillWidth: true Layout.fillHeight: true + Layout.margins: Style.marginM * scaling + cellWidth: root.cellW + cellHeight: root.cellH + model: root.filteredIcons clip: true - horizontalPolicy: ScrollBar.AlwaysOff - verticalPolicy: ScrollBar.AlwaysOn + reuseItems: true + delegate: Rectangle { + width: grid.cellWidth + height: grid.cellHeight + radius: Style.radiusS * scaling - GridView { - id: grid - anchors.fill: parent - anchors.margins: Style.marginM * scaling - cellWidth: root.cellW - cellHeight: root.cellH - model: root.filteredIcons - delegate: Rectangle { - width: grid.cellWidth - height: grid.cellHeight - radius: Style.radiusS * scaling - clip: true - color: (root.selectedIcon === modelData) ? Qt.alpha(Color.mPrimary, 0.15) : Color.transparent - border.color: (root.selectedIcon === modelData) ? Color.mPrimary : Qt.rgba(0, 0, 0, 0) - border.width: (root.selectedIcon === modelData) ? Style.borderS * scaling : 0 + color: (root.selectedIcon === modelData) ? Qt.alpha(Color.mPrimary, 0.15) : Color.transparent + border.color: (root.selectedIcon === modelData) ? Color.mPrimary : Qt.rgba(0, 0, 0, 0) + border.width: (root.selectedIcon === modelData) ? Style.borderS * scaling : 0 - MouseArea { - anchors.fill: parent - onClicked: root.selectedIcon = modelData - onDoubleClicked: { - root.selectedIcon = modelData - root.iconSelected(root.selectedIcon) - root.close() - } + MouseArea { + anchors.fill: parent + onClicked: root.selectedIcon = modelData + onDoubleClicked: { + root.selectedIcon = modelData + root.iconSelected(root.selectedIcon) + root.close() } + } - ColumnLayout { - anchors.fill: parent - anchors.margins: Style.marginS * scaling - spacing: Style.marginS * scaling - Item { - Layout.fillHeight: true - Layout.preferredHeight: 4 * scaling - } - NIcon { - Layout.alignment: Qt.AlignHCenter - icon: modelData - pointSize: 42 * scaling - } - NText { - Layout.alignment: Qt.AlignHCenter - Layout.fillWidth: true - Layout.topMargin: Style.marginXS * scaling - elide: Text.ElideRight - wrapMode: Text.NoWrap - maximumLineCount: 1 - horizontalAlignment: Text.AlignHCenter - color: Color.mOnSurfaceVariant - pointSize: Style.fontSizeXS * scaling - text: modelData - } - Item { - Layout.fillHeight: true - } + ColumnLayout { + anchors.fill: parent + anchors.margins: Style.marginS * scaling + spacing: Style.marginS * scaling + Item { + Layout.fillHeight: true + Layout.preferredHeight: 4 * scaling + } + NIcon { + Layout.alignment: Qt.AlignHCenter + icon: modelData + pointSize: 42 * scaling + } + NText { + Layout.alignment: Qt.AlignHCenter + Layout.fillWidth: true + Layout.topMargin: Style.marginXS * scaling + elide: Text.ElideRight + wrapMode: Text.NoWrap + maximumLineCount: 1 + horizontalAlignment: Text.AlignHCenter + color: Color.mOnSurfaceVariant + pointSize: Style.fontSizeXS * scaling + text: modelData + } + Item { + Layout.fillHeight: true } } }