diff --git a/Modules/Settings/NavPane/NavLocations.qml b/Modules/Settings/NavPane/NavLocations.qml index f07eb90..bb4d1a8 100644 --- a/Modules/Settings/NavPane/NavLocations.qml +++ b/Modules/Settings/NavPane/NavLocations.qml @@ -148,154 +148,200 @@ VerticalFadeFlickable { } } - ListView { + Column { id: resultList Layout.fillWidth: true - cacheBuffer: 10000 - implicitHeight: contentHeight - interactive: false spacing: Appearance.padding.large - delegate: ColumnLayout { - id: group + add: Transition { + Anim { + from: 0 + property: "opacity" + to: 1 + type: Anim.DefaultEffects + } + } + move: Transition { + Anim { + properties: "x,y" + } - required property int index - required property var modelData + Anim { + property: "opacity" + to: 1 + type: Anim.DefaultEffects + } + } - spacing: Appearance.spacing.small - width: resultList.width - - RowLayout { - Layout.fillWidth: true - Layout.leftMargin: Appearance.padding.small - spacing: Appearance.spacing.small - - MaterialIcon { - color: DynamicColors.palette.m3primary - font.pointSize: Appearance.font.size.large - text: group.modelData.icon - } - - CustomText { - Layout.fillWidth: true - color: DynamicColors.palette.m3primary - elide: Text.ElideRight - font.pointSize: Appearance.font.size.large - text: group.modelData.page - } + Repeater { + model: ScriptModel { + objectProp: "pageIdx" + values: root.groups } ColumnLayout { - Layout.fillWidth: true - spacing: Appearance.spacing.extraSmall / 2 + id: group - Repeater { - model: group.modelData.entries + required property int index + required property var modelData - CustomRect { - id: result + spacing: Appearance.spacing.small + width: resultList.width - required property int index - readonly property bool isFirst: index === 0 - readonly property bool isLast: index === group.modelData.entries.length - 1 - required property var modelData + RowLayout { + Layout.fillWidth: true + Layout.leftMargin: Appearance.padding.small + spacing: Appearance.spacing.small + MaterialIcon { + color: DynamicColors.palette.m3primary + fill: 1 + font.pointSize: Appearance.font.size.large + text: group.modelData.icon + } + + CustomText { Layout.fillWidth: true - bottomLeftRadius: layer.pressed ? Appearance.rounding.medium : isLast ? Appearance.rounding.large : Appearance.rounding.extraSmall - bottomRightRadius: layer.pressed ? Appearance.rounding.medium : isLast ? Appearance.rounding.large : Appearance.rounding.extraSmall - color: DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHigh, 2) - implicitHeight: { - const h = resultLayout.implicitHeight + resultLayout.anchors.margins * 2; - return h % 2 === 0 ? h : h + 1; - } - topLeftRadius: layer.pressed ? Appearance.rounding.medium : isFirst ? Appearance.rounding.large : Appearance.rounding.extraSmall - topRightRadius: layer.pressed ? Appearance.rounding.medium : isFirst ? Appearance.rounding.large : Appearance.rounding.extraSmall + color: DynamicColors.palette.m3secondary + elide: Text.ElideRight + font.pointSize: Appearance.font.size.large + text: group.modelData.page + } + } - RadiusBehavior on bottomLeftRadius { + Column { + id: cardList + + Layout.fillWidth: true + spacing: Appearance.spacing.extraSmall / 2 + + add: Transition { + Anim { + from: 0 + property: "opacity" + to: 1 + type: Anim.DefaultEffects } - RadiusBehavior on bottomRightRadius { - } - RadiusBehavior on topLeftRadius { - } - RadiusBehavior on topRightRadius { + } + move: Transition { + Anim { + properties: "x,y" } - ColumnLayout { - id: resultLayout + Anim { + property: "opacity" + to: 1 + type: Anim.DefaultEffects + } + } - anchors.fill: parent - anchors.margins: Appearance.padding.large - anchors.rightMargin: result.modelData.togglePath ? toggle.width + Appearance.padding.large * 2 : Appearance.padding.large - spacing: Appearance.spacing.small / 2 + Repeater { + model: ScriptModel { + objectProp: "anchor" + values: group.modelData.entries + } - CustomText { - Layout.fillWidth: true - color: DynamicColors.palette.m3onSurfaceVariant - elide: Text.ElideRight - font.pointSize: Appearance.font.size.small - text: { - const labels = result.modelData.crumbLabels.slice(1); - const section = result.modelData.section; - const parts = section && section !== labels[labels.length - 1] ? labels.concat(section) : labels; - return parts.join(" \u203a "); + CustomRect { + id: result + + required property int index + readonly property bool isFirst: index === 0 + readonly property bool isLast: index === group.modelData.entries.length - 1 + required property var modelData + + bottomLeftRadius: layer.pressed ? Appearance.rounding.medium : isLast ? Appearance.rounding.large : Appearance.rounding.extraSmall + bottomRightRadius: layer.pressed ? Appearance.rounding.medium : isLast ? Appearance.rounding.large : Appearance.rounding.extraSmall + color: DynamicColors.layer(DynamicColors.palette.m3surfaceContainerHigh, 2) + implicitHeight: { + const h = resultLayout.implicitHeight + resultLayout.anchors.margins * 2; + return h % 2 === 0 ? h : h + 1; + } + topLeftRadius: layer.pressed ? Appearance.rounding.medium : isFirst ? Appearance.rounding.large : Appearance.rounding.extraSmall + topRightRadius: layer.pressed ? Appearance.rounding.medium : isFirst ? Appearance.rounding.large : Appearance.rounding.extraSmall + width: cardList.width + + RadiusBehavior on bottomLeftRadius { + } + RadiusBehavior on bottomRightRadius { + } + RadiusBehavior on topLeftRadius { + } + RadiusBehavior on topRightRadius { + } + + ColumnLayout { + id: resultLayout + + anchors.fill: parent + anchors.margins: Appearance.padding.large + anchors.rightMargin: result.modelData.togglePath ? toggle.width + Appearance.padding.large * 2 : Appearance.padding.large + spacing: Appearance.spacing.small / 2 + + CustomText { + Layout.fillWidth: true + color: DynamicColors.palette.m3onSurfaceVariant + elide: Text.ElideRight + font.pointSize: Appearance.font.size.small + text: { + const labels = result.modelData.crumbLabels.slice(1); + const section = result.modelData.section; + const parts = section && section !== labels[labels.length - 1] ? labels.concat(section) : labels; + return parts.join(" \u203a "); + } + visible: text.length > 0 + } + + CustomText { + Layout.fillWidth: true + color: DynamicColors.palette.m3onSurface + elide: Text.ElideRight + font.pointSize: Appearance.font.size.medium + text: SettingsSearcher.highlight(result.modelData.title, root.search, DynamicColors.palette.m3primary) + textFormat: text.includes(" 0 } - visible: text.length > 0 } - CustomText { - Layout.fillWidth: true - color: DynamicColors.palette.m3onSurface - elide: Text.ElideRight - font.pointSize: Appearance.font.size.medium - text: SettingsSearcher.highlight(result.modelData.title, root.search, DynamicColors.palette.m3primary) - textFormat: text.includes(" 0 + CustomSwitch { + id: toggle + + anchors.right: parent.right + anchors.rightMargin: Appearance.padding.large + anchors.verticalCenter: parent.verticalCenter + cLayer: 3 + checked: result.modelData.toggleValue + scale: 0.85 + transformOrigin: Item.Right + visible: result.modelData.togglePath + z: 2 + + onToggled: result.modelData.setToggle(checked) } } - - StateLayer { - id: layer - - z: 1 - - onClicked: { - root.sState.jumpToSetting(result.modelData.pageIdx, result.modelData.subPath, result.modelData.anchor); - } - } - - CustomSwitch { - id: toggle - - anchors.right: parent.right - anchors.rightMargin: Appearance.padding.large - anchors.verticalCenter: parent.verticalCenter - cLayer: 3 - checked: result.modelData.toggleValue - scale: 0.85 - transformOrigin: Item.Right - visible: result.modelData.togglePath - z: 2 - - onToggled: result.modelData.setToggle(checked) - } } } } } - model: ScriptModel { - objectProp: "pageIdx" - values: root.groups - } } CustomText {