- Disable sound initialization to prevent hanging
- Add missing import re in utils.py
- Fix settings loading for QSettings
- Update file paths to use PROJECT_ROOT
- Revert to working API paths and listener from commit efdc63e
115 lines
3.1 KiB
QML
115 lines
3.1 KiB
QML
// Copyright (C) 2023 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
|
pragma ComponentBehavior: Bound
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
|
|
Pane {
|
|
id: root
|
|
anchors.fill: parent
|
|
|
|
property double totalProgress: 0
|
|
property int totalTimeRemaining: -1
|
|
property string stage : "Preparing..."
|
|
|
|
function clearText() {
|
|
textArea.clear();
|
|
}
|
|
|
|
function update(payload) {
|
|
if ("message" in payload && typeof payload.message === "string" && payload.message) {
|
|
textArea.insert(textArea.length, payload.message + "\n");
|
|
}
|
|
|
|
if ("totalProgress" in payload && typeof payload.totalProgress === "number") {
|
|
root.totalProgress = payload.totalProgress;
|
|
}
|
|
|
|
if ("totalTimeRemaining" in payload && typeof payload.totalTimeRemaining === "number") {
|
|
root.totalTimeRemaining = payload.totalTimeRemaining;
|
|
}
|
|
|
|
if ("stage" in payload && typeof payload.stage === "string") {
|
|
root.stage = payload.stage;
|
|
}
|
|
}
|
|
|
|
function formatDuration(milliseconds, showMilliseconds = true) {
|
|
if (milliseconds < 0)
|
|
return " Estimating..."
|
|
const partSeconds = Math.floor(milliseconds / 1000) % 60;
|
|
const partMinutes = Math.floor(milliseconds / 60000) % 60;
|
|
const partHours = Math.floor(milliseconds / 3600000) % 60;
|
|
|
|
if (partHours > 0) {
|
|
return partHours + "h " + partMinutes + "m " + partSeconds + "s";
|
|
}
|
|
if (partMinutes > 0) {
|
|
return partMinutes + "m " + partSeconds + "s";
|
|
}
|
|
if (partSeconds > 0) {
|
|
return partSeconds + "s";
|
|
}
|
|
return "0s";
|
|
}
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
|
|
RowLayout {
|
|
Label {
|
|
padding: 0
|
|
text: root.stage
|
|
}
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
Label {
|
|
padding: 0
|
|
text: (root.totalProgress * 100).toFixed(0) + "%"
|
|
}
|
|
}
|
|
|
|
ProgressBar {
|
|
Layout.fillWidth: true
|
|
value: root.totalProgress
|
|
}
|
|
|
|
RowLayout {
|
|
Label {
|
|
padding: 0
|
|
text: totalTimeRemaining > 0 ? "Remaining: " + root.formatDuration(root.totalTimeRemaining) : ""
|
|
}
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
|
|
Frame {
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
ScrollView {
|
|
width: parent.width
|
|
height: parent.height
|
|
id: scroll
|
|
TextArea {
|
|
id: textArea
|
|
width: parent.width
|
|
height: parent.height
|
|
readOnly: true
|
|
placeholderText: qsTr("Qt Lightmapper")
|
|
font.pixelSize: 12
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
}
|
|
|
|
Button {
|
|
objectName: "cancelButton"
|
|
Layout.fillWidth: true
|
|
text: "Cancel"
|
|
}
|
|
}
|
|
}
|