[ui] AttributeEditor: remove SortFilterDelegateModel

Usage of DelegateModel for model filtering has not proven to be the most stable solution, and might be responsible for random crashes happening during engine's garbage collection.  Implement Loader-based alternative:
* first delegate is a Loader which creates the AttributeItemDelegate if necessary
* compensate spacing using negative height when element is hidden
This commit is contained in:
Yann Lanthony 2019-02-08 15:37:06 +01:00
parent b42f637ac0
commit 45faa860c9

View file

@ -19,31 +19,25 @@ ListView {
implicitHeight: contentHeight
clip: true
spacing: 2
clip: true
ScrollBar.vertical: ScrollBar { id: scrollBar }
model: SortFilterDelegateModel {
model: attributes
filterRole: GraphEditorSettings.showAdvancedAttributes ? "" : "advanced"
filterValue: false
function modelData(item, roleName) {
return item.model.object.desc[roleName]
}
delegate: Loader {
active: !object.desc.advanced || GraphEditorSettings.showAdvancedAttributes
visible: active
height: item ? item.implicitHeight : -spacing // compensate for spacing if item is hidden
Component {
id: delegateComponent
AttributeItemDelegate {
width: ListView.view.width - scrollBar.width
sourceComponent: AttributeItemDelegate {
width: root.width - scrollBar.width
readOnly: root.readOnly
labelWidth: root.labelWidth
attribute: object
onDoubleClicked: root.attributeDoubleClicked(mouse, attr)
}
}
}
// Helper MouseArea to lose edit/activeFocus
// when clicking on the background