pilot version of inheritance.md

This commit is contained in:
Kira Dmitrieva 2021-08-22 18:10:05 +03:00
parent 51b8ae279a
commit 59bc541540
2 changed files with 10 additions and 15 deletions

View File

@ -2,21 +2,16 @@
Inheritance is an ability of an element to transfer a pack of properties to its `children` elements 'wrapped inside'.
`VisionBase`
Properties have to be set in a specific order:
### Main properties' inheritance:
* styles - `StyleSheet`
* parents
* parent's styles
* defaults
Properties, which can be inherited by objects, are `styles`, `prototypes` (if the object is a reference), `inherit` (it stands for the presence of `parent` objects), and `defaults`.
All values of `styles` property are contained in class `StyleSheet`, where they all are defined at `Group`s level. The `prototypes` property tree is defined in `SolidGroup` class via `PrototypeHolder` interface, and
`SolidReference` class helps to reuse a template object.
`SolidReference`
As for `prototypes`, this property has to be set after styles, but before parents. So the order will be this:
### Reference properties' inheritance:
* styles
* prototypes - `PrototypeHolder` in `SolidGroup`
* parents
The order of inheritance of properties is set in function `getPropertyValue` in `VisionBase` class.
The order is this:
* own styles
* prototypes
* parent
* parent's styles
* defaults

View File

@ -36,7 +36,7 @@ public interface Vision : Described, Configurable {
public val manager: VisionManager? get() = parent?.manager
/**
* This Vision own properties (ignoring inheritance, styles and defaults
* This Vision own properties (ignoring inheritance, styles and defaults)
*/
override val meta: ObservableMutableMeta
@ -92,7 +92,7 @@ public val Vision.propertyChanges: Flow<Name>
}
/**
* Subscribe on property updates. The subscription is bound to the given [scope] and canceled when the scope is canceled
* Subscribe on property updates. The subscription is bound to the given scope and canceled when the scope is canceled
*/
public fun Vision.onPropertyChange(callback: Meta.(Name) -> Unit) {
meta.onChange(null, callback)