Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
Facility for working with Qt data models.
This module is a placeholder for the ability to freely define QML classes which
implement the QAbstractItemModel
interface and functions to interact with
those models. This is not currently supported, but the functionality will be
available in a future release.
HsQML does currently provide one mechanism for creating a Qt data model, the
AutoListModel
item. This item implements the QAbstractItemModel
interface
and provides a QML-side solution for generating a stateful Qt data model from a
succession of JavaScript arrays.
The advantage of this over using the arrays directly is that, when the array
changes, the AutoListModel
can generate item add, remove, and change events
based on the differences between the old and new arrays. An simple array
binding, on the other hand, causes the entire model to be reset so that views
lose their state, cannot animate changes, etc.
To use this facility, you must assign an AutoListModel
item to the model
property of a QML view such as a Repeater
item. In turn, the source
property of the AutoListModel
must then be bound to an expression yielding
the arrays you want to use. The AutoListModel
can be imported from the
HsQML.Model 1.0
module using an import
statement in your QML script and it
has several properties which can be set from QML as described below:
mode
- Specifies how the model is updated when the source array changes.
Possible values are:
AutoListModel.ByReset
- The model is reset entirely (default).
AutoListModel.ByIndex
- The elements in the old and new arrays are compared for equality and change signals are sent for any that aren't equal. If the length of the array has changed then elements will be added to or removed from the end of the list model.
AutoListModel.ByKey
- The key function is applied to each element in the old and new arrays. According to the key, elements which exist in both the old and new arrays are moved to their new positions in the list model as necessary, elements which only exist in the new array are added, and ones which only existed in the old are removed. Where elements have been moved, the old and new values are compared for equality and change signals are sent for any that aren't equal. Unlike the other modes which only require linear time to process the arrays, if elements are reordered then this mode requires quadratic time in the worst case.
AutoListModel.ByKeyNoReorder
- This is the same as the ByKey mode except that the model will not explicitly move elements to different positions, only remove and re-add them at their new location as necessary.
source
- JavaScript array containing the elements for the model.
equalityTest
- JavaScript function which takes two parameters, compares them
for equality, and returns a boolean. This is used by all the modes except
ByReset
. If no function is set then the model will use the JavaScript equals operator by default. keyFunction
- JavaScript function which takes a single parameter and
returns a string key for use by the
ByKey
andByKeyNoReorder
modes. If no function is set then the model will use JavaScript's string conversion by default.