Files
komplex-hub/Dependencies/Components/imports/compat/QtAndroidAutomotive/ActivityView/ActivityView.qml
T
2026-06-02 15:11:36 -04:00

213 lines
6.3 KiB
QML

/****************************************************************************
**
** Copyright (C) 2022 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt Android Automotive compatibility.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick
import QtQuick.Controls
Item {
id: root
width: 480
height: 640
property alias radius: rect.radius
property string packageName: "some.package.name"
property string className
readonly property alias status: internal.status
property alias placeholder: placeholderItem.children
property bool usePlaceholder: false
onUsePlaceholderChanged: {
if (placeholder) {
placeholder.visible = usePlaceholder
avMock.visible = !usePlaceholder
} else {
avMock.visible = true
}
}
onPlaceholderChanged: {
if (!placeholder)
avMock.visible = true
}
enum Status {
NotInitialized,
Ready,
Starting,
Started
}
QtObject {
id: internal
property var status: ActivityView.NotInitialized
property real fontPointSize: 20
function enumToString(val) {
switch (val) {
case ActivityView.NotInitialized: return "NotInitialized"
case ActivityView.Ready: return "Ready"
case ActivityView.Starting: return "Starting"
case ActivityView.Started: return "Started"
}
return "Unknown"
}
}
component StatusButton: Rectangle {
id: button
color: highlighted ? "lightGray" : "gray"
radius: 5
clip: true
width: btnText.width
height: btnText.height
property int statusId: 0
property bool highlighted: false
signal clicked(int value)
Label {
id: btnText
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pointSize: internal.fontPointSize
text: " " + internal.enumToString(statusId) + " "
}
MouseArea {
anchors.fill: parent
onClicked: button.clicked(statusId)
}
}
Item {
id: placeholderItem
anchors.fill: parent
}
Item {
id: avMock
anchors.fill: parent
Rectangle {
id: rect
anchors.fill: parent
color: "#AAAAAA"
radius: 0
border.color: "#888888"
border.width: 2
clip: true
Image {
id: icon
anchors.centerIn: parent
anchors.verticalCenterOffset: - statusArea.height / 2
source: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAQMAAAD58POIAAAABlBMV
EUAAAA+Pj4LNneDAAAAAXRSTlMAQObYZgAAAAlwSFlzAAALEwAACxMBAJqcGAAAASNJREFUSMft1
TFuwzAMBVApAqIlgNZu6hF6A/UovYm99VjV1mu46AUyelDNilJgftkx0gbtZg4C/BCFNETRSnE88
3JQEi+8HAEel/DEywngYV624DTv24KjMrHmvsRBEfUIxhGdI4B+I/rqESgHgmHALZbhDOAZRoDAM
AF0DARQniGNrhDbrERDmxXBpZwmBSnEj7mQ0Y9LSFLXBkipXf3TaVE51E5b0Lev8hOI7cveBcP9s
Aw4U1c2JNkSYjkDO0PHv3b0OkPpAC/wcYF3gXQNgsDnDjv8AdxuuqZP07VOdtDrZdrZCZqfr5BOA
j7ikJIr9i9w+2avJsxqBq3nWKjPE871wTZzfYffQ2zBUTTNx3MFlnrdjGiTz6j5AOvcsF09yG/q3
/z/4fD/YgAAAABJRU5ErkJggg=="
}
Label {
id: packageLabel
anchors.top: icon.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 5
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pointSize: internal.fontPointSize
text: root.packageName
}
}
Rectangle {
id: statusArea
anchors.left: parent.left
anchors.right: parent.right
anchors.top: statusFlow.top
anchors.bottom: statusFlow.bottom
anchors.topMargin: -5
anchors.bottomMargin: -5
color: "black"
opacity: 0.5
radius: rect.radius
}
Label {
id: statusLabel
anchors.top: statusFlow.top
anchors.left: parent.left
text: " " + "status:" + " "
color: "lightGray"
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pointSize: internal.fontPointSize
}
Flow {
id: statusFlow
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 5
anchors.leftMargin: statusLabel.width
spacing: 5
Repeater {
model: [ActivityView.NotInitialized, ActivityView.Ready, ActivityView.Starting,
ActivityView.Started]
delegate: StatusButton {
statusId: modelData
onClicked: (value) => internal.status = value
highlighted: modelData === internal.status
}
}
}
}
}