ff4ff35918
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
106 lines
2.9 KiB
QML
106 lines
2.9 KiB
QML
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import QtQuick.Window
|
|
import QtScxml
|
|
import Mediaplayer
|
|
|
|
Window {
|
|
id: root
|
|
|
|
MediaPlayerDataModel {
|
|
id: model
|
|
}
|
|
|
|
MediaPlayerStateMachine {
|
|
id: stateMachine
|
|
onDataModelChanged: stateMachine.start()
|
|
dataModel: model
|
|
}
|
|
|
|
visible: true
|
|
width: 750
|
|
height: 350
|
|
color: "white"
|
|
|
|
ListView {
|
|
id: theList
|
|
width: parent.width / 2
|
|
height: parent.height
|
|
keyNavigationWraps: true
|
|
highlightMoveDuration: 0
|
|
focus: true
|
|
model: ListModel {
|
|
id: theModel
|
|
ListElement { media: "Song 1" }
|
|
ListElement { media: "Song 2" }
|
|
ListElement { media: "Song 3" }
|
|
}
|
|
highlight: Rectangle { color: "lightsteelblue" }
|
|
currentIndex: -1
|
|
delegate: Rectangle {
|
|
id: delegateRect
|
|
required property string media
|
|
required property int index
|
|
height: 40
|
|
width: parent.width
|
|
color: "transparent"
|
|
MouseArea {
|
|
anchors.fill: parent;
|
|
onClicked: root.tap(delegateRect.index)
|
|
}
|
|
Text {
|
|
id: txt
|
|
anchors.fill: parent
|
|
text: delegateRect.media
|
|
verticalAlignment: Text.AlignVCenter
|
|
}
|
|
}
|
|
}
|
|
|
|
Text {
|
|
id: theLog
|
|
anchors.left: theList.right
|
|
anchors.top: theText.bottom
|
|
anchors.right: parent.right
|
|
anchors.bottom: parent.bottom
|
|
}
|
|
|
|
Text {
|
|
id: theText
|
|
anchors.left: theList.right
|
|
anchors.right: parent.right;
|
|
anchors.top: parent.top
|
|
text: "Stopped"
|
|
color: stateMachine.playing ? "green" : "red"
|
|
}
|
|
|
|
EventConnection {
|
|
stateMachine: stateMachine
|
|
events: ["playbackStarted", "playbackStopped"]
|
|
onOccurred: (event)=> {
|
|
var media = event.data.media;
|
|
if (event.name === "playbackStarted") {
|
|
theText.text = "Playing '" + media + "'";
|
|
theLog.text = theLog.text + "\nplaybackStarted with data: "
|
|
+ JSON.stringify(event.data);
|
|
} else if (event.name === "playbackStopped") {
|
|
theText.text = "Stopped '" + media + "'";
|
|
theLog.text = theLog.text + "\nplaybackStopped with data: "
|
|
+ JSON.stringify(event.data);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Submit tap event to state machine.
|
|
// "tap" toggles playing state of the current media.
|
|
function tap(idx) {
|
|
var media = theModel.get(idx).media;
|
|
var data = { "media": media };
|
|
stateMachine.submitEvent("tap", data);
|
|
}
|
|
}
|