TransformList¶
Description¶
The TransformList object is a PropertyModifier object which transforms a source list into a target list using an arbitrary expression. The expression is evaluated for each element in the source list and the result is written to the corresponding element in the target list. ReduceList manages strong bindings between elements in the source list, the expression and the target list, i.e. whenever either an element in the source list or other variable parts of the evaluated expression change the target list is being updated instantly.
TransformList primarily is designed to use with DataObject lists. TransformList replaces traditional for
loops in a declarative manner. This not only reduces the code complexity but also improves performance. When only a few elements in the source list are changed, TransformList will only update the corresponding elements of the target list. This saves unnecessary expression evaluations and further processings caused by the updates.
› Inherits: | PropertyModifier |
---|
Properties¶
error¶
This property holds the most recently occurred error or TransformList.NoError if no error occurred. If the same error occurs multiple times this property does not change. Use the errorOccurred() signal to detect multiple occurrences of the same error.
› Type: | Error |
---|---|
› Signal: | errorChanged() |
› Attributes: | Readonly |
errorString¶
This property holds the current human readable error string corresponding to the current value in the error property. It may include additional information such as failure reasons or locations.
› Type: | String |
---|---|
› Signal: | errorStringChanged() |
› Attributes: | Readonly |
eval¶
This property holds an expression which is evaluated for each element in the source list. The respective source list element is available in a local item
property inside the expression. The result of the expression is written to the corresponding element in the target list. The expression is reevaluated whenever the source list element or other parts of the expression change. The target list therefore always contains an up-to-date representation of the transformed data.
› Type: | <QML expression> |
---|---|
› Signal: | evalChanged() |
› Attributes: | Writable |
Signals¶
Enumerations¶
Error¶
This enumeration describes all errors which can occur in TransformList objects. The most recently occurred error is stored in the error property.
Name | Value | Description |
---|---|---|
TransformList.NoError |
0 |
No error occurred or was detected. |
TransformList.InvalidPropertyType |
1 |
TransformList not supported for non-list property “”. |
TransformList.NotWritableError |
2 |
TransformList not supported for readonly property “”. |
TransformList.InvalidObjectTypeError |
3 |
Can’t add incompatible object to property “”. |
TransformList.ObjectInsertionError |
4 |
Error inserting object to property “”. |
TransformList.EvalExpressionError |
5 |
Error while evaluating expression: <Unknown File>: . |
Example¶
import InCore.Foundation 2.5
Application {
MeasurementGroup {
id: randomNegativeMeasurements
Measurement { data: -Math.random() }
Measurement { data: -Math.random() }
Measurement { data: -Math.random() }
Measurement { data: -Math.random() }
Measurement { data: -Math.random() }
}
// create a second MeasurementGroup which contains identical measurements except for data being transformed
MeasurementGroup {
id: absoluteMeasurements
TransformList on objects {
source: randomNegativeMeasurements.objects
eval: Math.abs(item.data)
}
onObjectsDataChanged: console.log(index, objects[index].data)
}
// wrap value array into List object
List {
id: simpleValueList
items: [ 1, 2, 3 ]
}
// create a List which contains transformed items
List {
TransformList on items {
source: simpleValueList
eval: item*5
}
onItemsChanged: console.log(items)
}
onCompleted: {
// update a value and observe an automatic update of the list above
simpleValueList.setItem( 1, 123 )
}
}