158 lines
4.3 KiB
QML
158 lines
4.3 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Layouts 1.15
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Core.Theme 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Components 0.1
|
|
|
|
import QtMultimedia 5.15
|
|
|
|
Rectangle {
|
|
id: root
|
|
|
|
component ValueIndicator: RowLayout {
|
|
|
|
property string title
|
|
property alias value: lastTagText.text
|
|
property bool readOnly: true
|
|
|
|
spacing: 10
|
|
|
|
StatusBaseText {
|
|
text: parent.title
|
|
}
|
|
|
|
StatusInput {
|
|
id: lastTagText
|
|
Layout.fillWidth: true
|
|
input.edit.readOnly: parent.readOnly
|
|
input.edit.selectByKeyboard: true
|
|
input.edit.selectByMouse: true
|
|
input.rightPadding: 10
|
|
}
|
|
}
|
|
|
|
color: Theme.palette.baseColor3
|
|
|
|
QtObject {
|
|
id: d
|
|
|
|
function sizeToString(size) {
|
|
return whToString(size.width, size.height)
|
|
}
|
|
|
|
function whToString(width, height) {
|
|
return `${width.toFixed(0)}*${height.toFixed(0)}`
|
|
}
|
|
|
|
function rectToString(rect) {
|
|
return `${rect.width.toFixed(2)}*${rect.height.toFixed(2)} (${rect.x.toFixed(2)}, ${rect.y.toFixed(2)})`
|
|
}
|
|
|
|
function cameraStateString(state) {
|
|
switch (state) {
|
|
case Camera.UnloadedState: return "Unloaded"
|
|
case Camera.LoadedState: return "Loaded"
|
|
case Camera.ActiveState: return "Active"
|
|
default: return "unknown"
|
|
}
|
|
}
|
|
|
|
function cameraStatusString(status) {
|
|
switch (status) {
|
|
case Camera.ActiveStatus: return "Active"
|
|
case Camera.StartingStatus: return "Starting"
|
|
case Camera.StoppingStatus: return "Stopping"
|
|
case Camera.StandbyStatus: return "Standby"
|
|
case Camera.LoadedStatus: return "Loaded"
|
|
case Camera.LoadingStatus: return "Loading"
|
|
case Camera.UnloadingStatus: return "Unloading"
|
|
case Camera.UnloadedStatus: return "Unloaded"
|
|
case Camera.UnavailableStatus: return "Unavailable"
|
|
default: return "unknown"
|
|
}
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.margins: 20
|
|
spacing: 10
|
|
|
|
StatusQrCodeScanner {
|
|
id: qrScanner
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.preferredHeight: width / sourceRatio
|
|
}
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "Last tag:"
|
|
value: qrScanner.lastTag
|
|
}
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "Current tag:"
|
|
value: qrScanner.currentTag
|
|
}
|
|
|
|
ValueIndicator {
|
|
title: "Last decode time, ms:"
|
|
value: qrScanner.decodeTime
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
spacing: 10
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "Source size:"
|
|
value: d.sizeToString(qrScanner.sourceSize)
|
|
}
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "Source size:"
|
|
value: d.sizeToString(qrScanner.contentSize)
|
|
}
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "View size:"
|
|
value: d.whToString(qrScanner.width, qrScanner.height)
|
|
}
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "Capture rect:"
|
|
value: d.rectToString(qrScanner.captureRectangle)
|
|
}
|
|
}
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
spacing: 10
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "Camera state:"
|
|
value: qrScanner.camera ? d.cameraStateString(qrScanner.camera.cameraState) : ""
|
|
}
|
|
|
|
ValueIndicator {
|
|
Layout.fillWidth: true
|
|
title: "Camera status:"
|
|
value: qrScanner.camera ? d.cameraStatusString(qrScanner.camera.cameraStatus) : ""
|
|
}
|
|
}
|
|
}
|
|
}
|