1
0
Fork 0
flightgear/src/GUI/AircraftFullDelegate.qml
James Turner d34edaa569 Pure QtQuick aircraft-UI
Moves previews, searching, rating handling and extended aircraft
information entirely into QQ. Many cosmetic tweaks and improvements
still to come.
2017-12-04 22:34:39 +00:00

225 lines
6.2 KiB
QML

import QtQuick 2.0
import FlightGear.Launcher 1.0
Item {
id: root
readonly property int margin: 8
// background
height: Math.max(contentBox.childrenRect.height, thumbnailBox.height) + footer.height
MouseArea {
anchors.fill: parent
onClicked: {
root.ListView.view.currentIndex = model.index
_launcher.selectAircraft(model.uri);
}
}
Rectangle {
id: thumbnailBox
// thumbnail border
y: Math.max(0, Math.round((contentBox.childrenRect.height - height) * 0.5))
border.width: 1
border.color: "#7f7f7f"
width: thumbnail.width
height: thumbnail.height
ThumbnailImage {
id: thumbnail
aircraftUri: model.uri
maximumSize.width: 300
maximumSize.height: 200
}
Image {
id: previewIcon
visible: model.hasPreviews
anchors.left: parent.left
anchors.bottom: parent.bottom
source: "qrc:///preview-icon"
opacity: showPreviewsMouse.containsMouse ? 1.0 : 0.5
Behavior on opacity {
NumberAnimation { duration: 100 }
}
}
MouseArea {
id: showPreviewsMouse
hoverEnabled: true
anchors.fill: parent
visible: model.hasPreviews
onClicked: {
_launcher.showPreviewsFor(model.uri);
}
}
}
Column {
id: contentBox
anchors.leftMargin: root.margin
anchors.left: thumbnailBox.right
anchors.right: parent.right
anchors.rightMargin: root.margin
spacing: root.margin
Item
{
// box to contain the aircraft title and the variant
// selection button arrows
id: headingBox
width: parent.width
height: title.height
ArrowButton {
id: previousVariantButton
visible: (model.variantCount > 0) && (model.activeVariant > 0)
arrow: "qrc:///left-arrow-icon"
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
onClicked: {
model.activeVariant = (model.activeVariant - 1)
}
}
Text {
id: title
anchors.verticalCenter: parent.verticalCenter
anchors.left: previousVariantButton.right
anchors.right: nextVariantButton.left
horizontalAlignment: Text.AlignHCenter
font.pixelSize: 24
text: model.title
elide: Text.ElideRight
}
ArrowButton {
id: nextVariantButton
arrow: "qrc:///right-arrow-icon"
visible: (model.variantCount > 0) && (model.activeVariant < model.variantCount - 1)
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
onClicked: {
model.activeVariant = (model.activeVariant + 1)
}
}
} // top header box (title + variant arrows)
// this element normally hides itself unless needed
AircraftWarningPanel {
id: warningBox
aircraftStatus: model.aircraftStatus
requiredFGVersion: model.requiredFGVersion
width: parent.width
}
Text {
id: authors
visible: (model.authors != undefined)
width: parent.width
text: "by: " + model.authors
maximumLineCount: 3
wrapMode: Text.WordWrap
elide: Text.ElideRight
}
Text {
id: description
width: parent.width
text: model.description
maximumLineCount: 10
wrapMode: Text.WordWrap
elide: Text.ElideRight
}
Item {
// this area holds the install/update/remove button,
// and the ratings grid. when a download / update is
// happening, the content is re-arranged to give more room
// for the progress bar and feedback
id: bottomContent
readonly property int minimumWidthForBottomContent: ratingGrid.width + downloadPanel.compactWidth + root.margin
width: Math.max(parent.width, minimumWidthForBottomContent)
height: ratingGrid.height
AircraftDownloadPanel
{
id: downloadPanel
visible: (model.package != undefined)
packageSize: model.packageSizeBytes
installStatus: model.packageStatus
downloadedBytes: model.downloadedBytes
uri: model.uri
width: parent.width // full width, grid sits on top
}
Grid {
id: ratingGrid
anchors.right: parent.right
// hide ratings when the panel is doing something, to
// make more room for the progress bar and text
visible: model.hasRatings && !downloadPanel.active
rows: 2
columns: 2
rowSpacing: root.margin
columnSpacing: root.margin
AircraftRating {
title: "Flight model"
value: model.ratingFDM;
}
AircraftRating {
title: "Systems"
value: model.ratingSystems;
}
AircraftRating {
title: "Cockpit"
value: model.ratingCockpit;
}
AircraftRating {
title: "Exterior"
value: model.ratingExterior;
}
}
}
} // of content column
Item {
id: footer
height: 12
width: parent.width
anchors.bottom: parent.bottom
Rectangle {
color: "#68A6E1"
height: 2
width: parent.width - 60
anchors.centerIn: parent
}
}
} // of root item