40a85cae28
Avoid binding loop warning, and change logic around re-starting the aircraft dirs scan, to hopefully clarify the crash Brendan and others are seeing.
134 lines
3.7 KiB
QML
134 lines
3.7 KiB
QML
import QtQuick 2.4
|
|
import FlightGear.Launcher 1.0
|
|
import "."
|
|
|
|
Item {
|
|
id: delegateRoot
|
|
|
|
signal performDelete();
|
|
signal performMove(var newIndex);
|
|
|
|
property alias deletePromptText: confirmDeletePath.promptText
|
|
property int modelCount: 0
|
|
|
|
height: childrenRect.height
|
|
|
|
Item {
|
|
id: divider
|
|
visible: model.index > 0 // divider before each item except the first
|
|
height: Style.margin
|
|
width: parent.width
|
|
|
|
Rectangle {
|
|
color: Style.frameColor
|
|
height: 1
|
|
width: parent.width - Style.strutSize
|
|
anchors.centerIn: parent
|
|
}
|
|
}
|
|
|
|
// this is the main visible content
|
|
Item {
|
|
id: contentRect
|
|
anchors.top: divider.bottom
|
|
// color: "#cfcfcf"
|
|
|
|
height: Math.max(label.implicitHeight, pathDeleteButton.height)
|
|
width: delegateRoot.width
|
|
|
|
Checkbox {
|
|
id: enableCheckbox
|
|
checked: model.enabled
|
|
anchors.left: parent.left
|
|
height: parent.height
|
|
onCheckedChanged: {
|
|
if (model.enabled !== checked) {
|
|
model.enabled = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
id: pathDelegateHover
|
|
anchors.left: enableCheckbox.right
|
|
anchors.leftMargin: Style.margin
|
|
anchors.right: parent.right
|
|
height: parent.height
|
|
|
|
hoverEnabled: true
|
|
acceptedButtons: Qt.NoButton
|
|
|
|
// it's important that the button and text are children of the
|
|
// MouseArea, so nested containsMouse logic works
|
|
ClickableText {
|
|
id: label
|
|
text: model.path
|
|
onClicked: {
|
|
// open the location
|
|
_addOns.openDirectory(model.path)
|
|
}
|
|
anchors.left: parent.left
|
|
anchors.right: reorderButton.left
|
|
anchors.rightMargin: Style.margin
|
|
height: contentRect.height
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
wrapMode: Text.WordWrap
|
|
|
|
font.strikeout: enableCheckbox.checked === false
|
|
}
|
|
|
|
DeleteButton {
|
|
id: pathDeleteButton
|
|
anchors.right: parent.right
|
|
visible: pathDelegateHover.containsMouse
|
|
onClicked: {
|
|
confirmDeletePath.visible = true
|
|
}
|
|
}
|
|
|
|
DragToReorderButton {
|
|
id: reorderButton
|
|
anchors.right: pathDeleteButton.left
|
|
anchors.rightMargin: Style.margin
|
|
visible: pathDelegateHover.containsMouse && (canMoveDown || canMoveUp)
|
|
|
|
canMoveUp: model.index > 0
|
|
canMoveDown: model.index < (delegateRoot.modelCount - 1)
|
|
|
|
onMoveUp: {
|
|
if (model.index === 0)
|
|
return;
|
|
delegateRoot.performMove(model.index - 1)
|
|
}
|
|
|
|
onMoveDown: {
|
|
delegateRoot.performMove(model.index + 1)
|
|
}
|
|
}
|
|
} // of MouseArea for hover
|
|
|
|
YesNoPanel {
|
|
id: confirmDeletePath
|
|
visible: false
|
|
anchors.fill: parent
|
|
yesText: qsTr("Remove")
|
|
noText: qsTr("Cancel")
|
|
yesIsDestructive: true
|
|
|
|
onAccepted: {
|
|
delegateRoot.performDelete()
|
|
}
|
|
|
|
onRejected: {
|
|
confirmDeletePath.visible = false
|
|
}
|
|
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
z: -1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|