import QtQuick import QtQuick.Controls import XMB 1.0 Item { id: root focus: true property int catIndex: 0 property int itemIndex: 0 Sounds { id: sounds } Rectangle { anchors.fill: parent color: "#071022" } // Hintergrund-Glow (dezent) Rectangle { width: parent.width height: parent.height opacity: 0.20 gradient: Gradient { GradientStop { position: 0.0; color: "#10284a" } GradientStop { position: 1.0; color: "#071022" } } } CategoryStrip { id: strip anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top anchors.topMargin: 80 height: 130 model: XmbModel.categories currentIndex: root.catIndex onActivated: (idx) => { root.catIndex = idx root.itemIndex = 0 sounds.move() } } VerticalList { id: vlist anchors.left: parent.left anchors.right: parent.right anchors.top: strip.bottom anchors.bottom: parent.bottom anchors.topMargin: 20 anchors.bottomMargin: 40 itemsModel: XmbModel.itemsForCategory(root.catIndex) currentIndex: root.itemIndex onActivated: (idx) => { root.itemIndex = idx sounds.move() } onTriggered: (entryObj) => { sounds.select() Launcher.launch(entryObj) } } // Controller / Keyboard input Keys.onPressed: (e) => { if (e.isAutoRepeat) return switch (e.key) { case Qt.Key_Left: root.catIndex = Math.max(0, root.catIndex - 1) root.itemIndex = 0 strip.positionViewAtIndex(root.catIndex, ListView.Visible) sounds.move() e.accepted = true break case Qt.Key_Right: root.catIndex = Math.min(XmbModel.categoryCount - 1, root.catIndex + 1) root.itemIndex = 0 strip.positionViewAtIndex(root.catIndex, ListView.Visible) sounds.move() e.accepted = true break case Qt.Key_Up: root.itemIndex = Math.max(0, root.itemIndex - 1) vlist.positionViewAtIndex(root.itemIndex, ListView.Visible) sounds.move() e.accepted = true break case Qt.Key_Down: root.itemIndex = Math.min(vlist.count - 1, root.itemIndex + 1) vlist.positionViewAtIndex(root.itemIndex, ListView.Visible) sounds.move() e.accepted = true break case Qt.Key_Return: case Qt.Key_Enter: case Qt.Key_Space: vlist.triggerCurrent() e.accepted = true break case Qt.Key_Escape: case Qt.Key_Backspace: sounds.back() // optional: zurück in Kategorie-Root root.itemIndex = 0 e.accepted = true break default: break } } }