1
0
Fork 0
flightgear/src/GUI/qml/AircraftDownloadPanel.qml
2018-07-05 00:17:05 +01:00

201 lines
5.9 KiB
QML

import QtQuick 2.4
import FlightGear.Launcher 1.0
import "." // -> forces the qmldir to be loaded
Item {
id: root
property url uri
property int installStatus: LocalAircraftCache.PackageNotInstalled
property int packageSize: 0
property int downloadedBytes: 0
readonly property bool active: (installStatus == LocalAircraftCache.PackageQueued) ||
(installStatus == LocalAircraftCache.PackageDownloading)
readonly property int compactWidth: button.width + sizeText.width
property bool compact: false
implicitWidth: childrenRect.width
implicitHeight: childrenRect.height
state: "not-installed"
onInstallStatusChanged: {
if (installStatus == LocalAircraftCache.PackageInstalled) {
state = "installed";
} else if (installStatus == LocalAircraftCache.PackageNotInstalled) {
state = "not-installed"
} else if (installStatus == LocalAircraftCache.PackageUpdateAvailable) {
state = "has-update"
} else if (installStatus == LocalAircraftCache.PackageQueued) {
state = "queued"
} else if (installStatus == LocalAircraftCache.PackageDownloading) {
state = "downloading"
}
}
states: [
State {
name: "not-installed"
PropertyChanges {
target: button
text: qsTr("Install")
hoverText: ""
visible: true
}
PropertyChanges { target: sizeText; visible: true }
PropertyChanges { target: confirmUninstallPanel; visible: false }
},
State {
name: "installed"
PropertyChanges {
target: button
text: qsTr("Uninstall")
hoverText: ""
visible: true
}
PropertyChanges { target: sizeText; visible: true }
PropertyChanges { target: confirmUninstallPanel; visible: false }
},
State {
name: "has-update"
PropertyChanges {
target: button
text: qsTr("Update")
hoverText: ""
visible: true
}
PropertyChanges { target: sizeText; visible: true }
PropertyChanges { target: confirmUninstallPanel; visible: false }
},
State {
name: "queued"
PropertyChanges {
target: sizeText
visible: true
}
PropertyChanges {
target: button
text: qsTr("Queued")
hoverText: qsTr("Cancel")
visible: true
}
PropertyChanges { target: confirmUninstallPanel; visible: false }
},
State {
name: "downloading"
PropertyChanges { target: progressFrame; visible: true }
PropertyChanges { target: statusText; visible: true }
PropertyChanges { target: sizeText; visible: false }
PropertyChanges { target: confirmUninstallPanel; visible: false }
PropertyChanges {
target: button
text: qsTr("Downloading")
hoverText: qsTr("Cancel")
visible: true
}
},
State {
name: "confirm-uninstall"
PropertyChanges { target: button; visible: false }
PropertyChanges { target: progressFrame; visible: false }
PropertyChanges { target: statusText; visible: false }
PropertyChanges { target: sizeText; visible: false }
PropertyChanges { target: confirmUninstallPanel; visible: true }
}
]
Button {
id: button
onClicked: {
if ((root.state == "has-update") || (root.state == "not-installed")) {
_launcher.requestInstallUpdate(root.uri);
} else if (root.state == "installed") {
root.state = "confirm-uninstall"
} else {
_launcher.requestInstallCancel(root.uri)
}
}
}
StyledText {
id: sizeText
anchors.left: button.right
anchors.leftMargin: 6
anchors.verticalCenter: button.verticalCenter
text: "Size: " + (root.packageSize / 0x100000).toFixed(1) + "MB"
}
Column {
anchors.verticalCenter: button.verticalCenter
anchors.left: button.right
anchors.leftMargin: 6
anchors.right: parent.right
Rectangle {
id: progressFrame
radius: 6
height: 12
width: parent.width
visible: false // hidden by default
border.color: Style.minorFrameColor
border.width: 2
Rectangle {
id: progressBar
radius:3
height: 6
anchors.verticalCenter: parent.verticalCenter
color: Style.themeColor
readonly property real fraction: root.downloadedBytes / root.packageSize
readonly property real maxWidth: parent.width - 10
x: 5
width: maxWidth * fraction
}
}
// show download progress textually, or error message if a problem occurs
StyledText {
id: statusText
visible: false
text: (compact ? "" : "Downloaded ") + (root.downloadedBytes / 0x100000).toFixed(1) +
"MB of " + (root.packageSize / 0x100000).toFixed(1) + "MB";
}
} // item container for progress bar and text
YesNoPanel {
id: confirmUninstallPanel
anchors.fill: parent
promptText: qsTr("Are you sure you want to uninstall this aircraft?")
yesIsDestructive: true
yesText: qsTr("Uninstall")
noText: qsTr("Cancel")
onRejected: root.state = "installed"
onAccepted: _launcher.requestUninstall(root.uri)
}
}