Files
stemify/stemroller/qml/StemRoller/Sidebar.qml
T
ClericalErrorandClaude Opus 5.5 1845f03c41 StemRoller: desktop stem separator, Android stems player, and server daemons
- stemroller/: PySide6/QML desktop app and player for separating music into stems
- android/: Plex music player that plays per-stem mixes, with Android Auto support,
  a graphic + parametric (Equalizer APO-style) EQ, and offline downloads
- server/: stemserve (serves stems to the app) and stemd (separates the library on
  the server's GPU, with "Stem Now" priority requests)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 21:17:17 -07:00

73 lines
2.6 KiB
QML

import QtQuick
import QtQuick.Controls.Basic
GlassPanel {
id: side
signal browse()
Item {
id: header
anchors { left: parent.left; right: parent.right; top: parent.top }
height: 52
Txt {
anchors { left: parent.left; leftMargin: 16; verticalCenter: parent.verticalCenter }
text: "Queue"
font.pixelSize: Theme.fs16
font.weight: Font.DemiBold
}
Rectangle {
visible: list.count > 0
anchors { left: parent.left; leftMargin: 76; verticalCenter: parent.verticalCenter }
width: cnt.implicitWidth + 12
height: 18
radius: 9
color: Qt.rgba(1, 1, 1, 0.08)
Txt { id: cnt; anchors.centerIn: parent; text: list.count; font.pixelSize: 11; color: Theme.textLo }
}
IconButton {
anchors { right: parent.right; rightMargin: 10; verticalCenter: parent.verticalCenter }
iconName: "add"
tip: "Add files (Ctrl+O)"
onClicked: side.browse()
}
}
ListView {
id: list
anchors { left: parent.left; right: parent.right; top: header.bottom; bottom: parent.bottom; margins: 8; topMargin: 0 }
model: jobsModel
spacing: 4
clip: true
boundsBehavior: Flickable.StopAtBounds
delegate: QueueItem {}
add: Transition {
NumberAnimation { property: "opacity"; from: 0; to: 1; duration: Theme.med }
NumberAnimation { property: "x"; from: -16; duration: Theme.slow; easing.type: Easing.BezierSpline; easing.bezierCurve: Theme.ease }
}
displaced: Transition {
NumberAnimation { properties: "y"; duration: Theme.med; easing.type: Easing.BezierSpline; easing.bezierCurve: Theme.ease }
}
ScrollBar.vertical: ScrollBar {
policy: ScrollBar.AsNeeded
contentItem: Rectangle { implicitWidth: 4; radius: 2; color: Qt.rgba(1, 1, 1, 0.18); visible: parent.size < 1 }
background: Item {}
}
Column {
visible: list.count === 0
anchors.centerIn: parent
spacing: 8
width: parent.width - 32
Icon { anchors.horizontalCenter: parent.horizontalCenter; name: "upload"; size: 28; color: Theme.alpha(Theme.textLo, 0.7) }
Txt {
width: parent.width
horizontalAlignment: Text.AlignHCenter
wrapMode: Text.WordWrap
text: "Drop audio anywhere to queue it"
color: Theme.textLo
font.pixelSize: Theme.fs12
}
}
}
}