DataForge 0.7.1 and other version updates
This commit is contained in:
parent
fbb402de90
commit
595512959c
@ -7,12 +7,12 @@ plugins {
|
|||||||
// id("org.jetbrains.kotlinx.kover") version "0.5.0"
|
// id("org.jetbrains.kotlinx.kover") version "0.5.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
val dataforgeVersion by extra("0.6.2")
|
val dataforgeVersion by extra("0.7.1")
|
||||||
val fxVersion by extra("11")
|
val fxVersion by extra("11")
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
group = "space.kscience"
|
group = "space.kscience"
|
||||||
version = "0.3.0-dev-16"
|
version = "0.3.0-dev-17"
|
||||||
}
|
}
|
||||||
|
|
||||||
subprojects {
|
subprojects {
|
||||||
|
@ -34,6 +34,6 @@ class GDMLVisionTest {
|
|||||||
val child = cubes[Name.of("composite-000","segment-0")]
|
val child = cubes[Name.of("composite-000","segment-0")]
|
||||||
assertNotNull(child)
|
assertNotNull(child)
|
||||||
child.properties.setValue(SolidMaterial.MATERIAL_COLOR_KEY, "red".asValue())
|
child.properties.setValue(SolidMaterial.MATERIAL_COLOR_KEY, "red".asValue())
|
||||||
assertEquals("red", child.properties.getMeta(SolidMaterial.MATERIAL_COLOR_KEY).string)
|
assertEquals("red", child.properties[SolidMaterial.MATERIAL_COLOR_KEY].string)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -71,7 +71,7 @@ class Model(val manager: VisionManager) {
|
|||||||
|
|
||||||
fun reset() {
|
fun reset() {
|
||||||
map.values.forEach {
|
map.values.forEach {
|
||||||
it.properties.setMeta(SolidMaterial.MATERIAL_COLOR_KEY, null)
|
it.properties[SolidMaterial.MATERIAL_COLOR_KEY] = null
|
||||||
}
|
}
|
||||||
tracks.children.clear()
|
tracks.children.clear()
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@ org.gradle.jvmargs=-Xmx4G
|
|||||||
|
|
||||||
org.jetbrains.compose.experimental.jscanvas.enabled=true
|
org.jetbrains.compose.experimental.jscanvas.enabled=true
|
||||||
|
|
||||||
toolsVersion=0.15.0-kotlin-1.9.20
|
toolsVersion=0.15.2-kotlin-1.9.21
|
||||||
#kotlin.experimental.tryK2=true
|
#kotlin.experimental.tryK2=true
|
||||||
#kscience.wasm.disabled=true
|
#kscience.wasm.disabled=true
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
@ -29,7 +29,7 @@ public fun RBuilder.visionPropertyEditor(
|
|||||||
this.descriptor = descriptor
|
this.descriptor = descriptor
|
||||||
this.scope = vision.manager?.context ?: error("Orphan vision could not be observed")
|
this.scope = vision.manager?.context ?: error("Orphan vision could not be observed")
|
||||||
this.getPropertyState = { name ->
|
this.getPropertyState = { name ->
|
||||||
val ownMeta = vision.properties.own?.getMeta(name)
|
val ownMeta = vision.properties.own?.get(name)
|
||||||
if (ownMeta != null && !ownMeta.isEmpty()) {
|
if (ownMeta != null && !ownMeta.isEmpty()) {
|
||||||
EditorPropertyState.Defined
|
EditorPropertyState.Defined
|
||||||
} else if (vision.properties.root().getValue(name) != null) {
|
} else if (vision.properties.root().getValue(name) != null) {
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("space.kscience.gradle.mpp")
|
id("space.kscience.gradle.mpp")
|
||||||
id("org.jetbrains.compose") version "1.5.10"
|
alias(spclibs.plugins.compose)
|
||||||
|
// id("org.jetbrains.compose") version "1.5.11"
|
||||||
// id("com.android.library")
|
// id("com.android.library")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,9 +17,8 @@ import org.jetbrains.compose.web.dom.Text
|
|||||||
import space.kscience.dataforge.meta.MutableMeta
|
import space.kscience.dataforge.meta.MutableMeta
|
||||||
import space.kscience.dataforge.meta.ObservableMutableMeta
|
import space.kscience.dataforge.meta.ObservableMutableMeta
|
||||||
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
||||||
import space.kscience.dataforge.meta.descriptors.ValueRequirement
|
import space.kscience.dataforge.meta.descriptors.ValueRestriction
|
||||||
import space.kscience.dataforge.meta.descriptors.get
|
import space.kscience.dataforge.meta.descriptors.get
|
||||||
import space.kscience.dataforge.meta.get
|
|
||||||
import space.kscience.dataforge.meta.remove
|
import space.kscience.dataforge.meta.remove
|
||||||
import space.kscience.dataforge.names.*
|
import space.kscience.dataforge.names.*
|
||||||
import space.kscience.visionforge.hidden
|
import space.kscience.visionforge.hidden
|
||||||
@ -104,7 +103,7 @@ public fun PropertyEditor(
|
|||||||
Text(token)
|
Text(token)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!name.isEmpty() && descriptor?.valueRequirement != ValueRequirement.ABSENT) {
|
if (!name.isEmpty() && descriptor?.valueRestriction != ValueRestriction.ABSENT) {
|
||||||
Div({
|
Div({
|
||||||
style {
|
style {
|
||||||
width(160.px)
|
width(160.px)
|
||||||
|
@ -16,7 +16,7 @@ import org.w3c.dom.HTMLOptionElement
|
|||||||
import org.w3c.dom.asList
|
import org.w3c.dom.asList
|
||||||
import space.kscience.dataforge.meta.*
|
import space.kscience.dataforge.meta.*
|
||||||
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
||||||
import space.kscience.dataforge.meta.descriptors.ValueRequirement
|
import space.kscience.dataforge.meta.descriptors.ValueRestriction
|
||||||
import space.kscience.dataforge.meta.descriptors.allowedValues
|
import space.kscience.dataforge.meta.descriptors.allowedValues
|
||||||
import space.kscience.visionforge.Colors
|
import space.kscience.visionforge.Colors
|
||||||
import space.kscience.visionforge.widgetType
|
import space.kscience.visionforge.widgetType
|
||||||
@ -199,7 +199,7 @@ public fun RangeValueChooser(
|
|||||||
|
|
||||||
|
|
||||||
FlexRow {
|
FlexRow {
|
||||||
if (descriptor?.valueRequirement != ValueRequirement.REQUIRED) {
|
if (descriptor?.valueRestriction != ValueRestriction.REQUIRED) {
|
||||||
Input(type = InputType.Checkbox) {
|
Input(type = InputType.Checkbox) {
|
||||||
if (!rangeDisabled) defaultChecked()
|
if (!rangeDisabled) defaultChecked()
|
||||||
|
|
||||||
|
@ -16,9 +16,8 @@ import react.dom.attrs
|
|||||||
import space.kscience.dataforge.meta.MutableMeta
|
import space.kscience.dataforge.meta.MutableMeta
|
||||||
import space.kscience.dataforge.meta.ObservableMutableMeta
|
import space.kscience.dataforge.meta.ObservableMutableMeta
|
||||||
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
||||||
import space.kscience.dataforge.meta.descriptors.ValueRequirement
|
import space.kscience.dataforge.meta.descriptors.ValueRestriction
|
||||||
import space.kscience.dataforge.meta.descriptors.get
|
import space.kscience.dataforge.meta.descriptors.get
|
||||||
import space.kscience.dataforge.meta.get
|
|
||||||
import space.kscience.dataforge.meta.remove
|
import space.kscience.dataforge.meta.remove
|
||||||
import space.kscience.dataforge.names.*
|
import space.kscience.dataforge.names.*
|
||||||
import space.kscience.visionforge.hidden
|
import space.kscience.visionforge.hidden
|
||||||
@ -146,7 +145,7 @@ private fun RBuilder.propertyEditorItem(props: PropertyEditorProps) {
|
|||||||
}
|
}
|
||||||
+token
|
+token
|
||||||
}
|
}
|
||||||
if (!props.name.isEmpty() && descriptor?.valueRequirement != ValueRequirement.ABSENT) {
|
if (!props.name.isEmpty() && descriptor?.valueRestriction != ValueRestriction.ABSENT) {
|
||||||
styledDiv {
|
styledDiv {
|
||||||
css {
|
css {
|
||||||
//+TreeStyles.resizeableInput
|
//+TreeStyles.resizeableInput
|
||||||
@ -185,7 +184,7 @@ private fun RBuilder.propertyEditorItem(props: PropertyEditorProps) {
|
|||||||
}
|
}
|
||||||
+"\u00D7"
|
+"\u00D7"
|
||||||
attrs {
|
attrs {
|
||||||
if (editorPropertyState!= EditorPropertyState.Defined) {
|
if (editorPropertyState != EditorPropertyState.Defined) {
|
||||||
disabled = true
|
disabled = true
|
||||||
} else {
|
} else {
|
||||||
onClickFunction = removeClick
|
onClickFunction = removeClick
|
||||||
|
@ -12,7 +12,7 @@ import react.dom.attrs
|
|||||||
import react.fc
|
import react.fc
|
||||||
import react.useState
|
import react.useState
|
||||||
import space.kscience.dataforge.meta.asValue
|
import space.kscience.dataforge.meta.asValue
|
||||||
import space.kscience.dataforge.meta.descriptors.ValueRequirement
|
import space.kscience.dataforge.meta.descriptors.ValueRestriction
|
||||||
import space.kscience.dataforge.meta.double
|
import space.kscience.dataforge.meta.double
|
||||||
import space.kscience.dataforge.meta.get
|
import space.kscience.dataforge.meta.get
|
||||||
import space.kscience.dataforge.meta.string
|
import space.kscience.dataforge.meta.string
|
||||||
@ -43,7 +43,7 @@ public val RangeValueChooser: FC<ValueChooserProps> = fc("RangeValueChooser") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
flexRow {
|
flexRow {
|
||||||
if (props.descriptor?.valueRequirement != ValueRequirement.REQUIRED) {
|
if (props.descriptor?.valueRestriction != ValueRestriction.REQUIRED) {
|
||||||
styledInput(type = InputType.checkBox) {
|
styledInput(type = InputType.checkBox) {
|
||||||
attrs {
|
attrs {
|
||||||
defaultChecked = rangeDisabled.not()
|
defaultChecked = rangeDisabled.not()
|
||||||
|
@ -13,7 +13,7 @@ import kotlin.jvm.JvmInline
|
|||||||
@JvmInline
|
@JvmInline
|
||||||
public value class StyleSheet(private val owner: Vision) {
|
public value class StyleSheet(private val owner: Vision) {
|
||||||
|
|
||||||
private val styleNode: Meta get() = owner.properties.getMeta(STYLESHEET_KEY)
|
private val styleNode: Meta get() = owner.properties[STYLESHEET_KEY]
|
||||||
|
|
||||||
public val items: Map<NameToken, Meta> get() = styleNode.items
|
public val items: Map<NameToken, Meta> get() = styleNode.items
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ public value class StyleSheet(private val owner: Vision) {
|
|||||||
* Define a style without notifying owner
|
* Define a style without notifying owner
|
||||||
*/
|
*/
|
||||||
public fun define(key: String, style: Meta?) {
|
public fun define(key: String, style: Meta?) {
|
||||||
owner.properties.setMeta(STYLESHEET_KEY + key, style)
|
owner.properties[STYLESHEET_KEY + key] = style
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,7 +92,7 @@ public fun Vision.useStyle(name: String, notify: Boolean = true) {
|
|||||||
* Resolve a style with given name for given [Vision]. The style is not necessarily applied to this [Vision].
|
* Resolve a style with given name for given [Vision]. The style is not necessarily applied to this [Vision].
|
||||||
*/
|
*/
|
||||||
public fun Vision.getStyle(name: String): Meta? =
|
public fun Vision.getStyle(name: String): Meta? =
|
||||||
properties.own?.getMeta(StyleSheet.STYLESHEET_KEY + name) ?: parent?.getStyle(name)
|
properties.own?.get(StyleSheet.STYLESHEET_KEY + name) ?: parent?.getStyle(name)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolve a property from all styles
|
* Resolve a property from all styles
|
||||||
|
@ -10,7 +10,7 @@ import space.kscience.dataforge.meta.asValue
|
|||||||
import space.kscience.dataforge.meta.boolean
|
import space.kscience.dataforge.meta.boolean
|
||||||
import space.kscience.dataforge.meta.descriptors.Described
|
import space.kscience.dataforge.meta.descriptors.Described
|
||||||
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
||||||
import space.kscience.dataforge.misc.Type
|
import space.kscience.dataforge.misc.DfType
|
||||||
import space.kscience.dataforge.names.Name
|
import space.kscience.dataforge.names.Name
|
||||||
import space.kscience.dataforge.names.asName
|
import space.kscience.dataforge.names.asName
|
||||||
import space.kscience.visionforge.AbstractVisionGroup.Companion.updateProperties
|
import space.kscience.visionforge.AbstractVisionGroup.Companion.updateProperties
|
||||||
@ -19,7 +19,7 @@ import space.kscience.visionforge.Vision.Companion.TYPE
|
|||||||
/**
|
/**
|
||||||
* A root type for display hierarchy
|
* A root type for display hierarchy
|
||||||
*/
|
*/
|
||||||
@Type(TYPE)
|
@DfType(TYPE)
|
||||||
public interface Vision : Described {
|
public interface Vision : Described {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,13 +34,13 @@ public interface VisionProperties : MetaProvider {
|
|||||||
* @param inherit toggles parent node property lookup. Null means inference from descriptor.
|
* @param inherit toggles parent node property lookup. Null means inference from descriptor.
|
||||||
* @param includeStyles toggles inclusion of properties from styles.
|
* @param includeStyles toggles inclusion of properties from styles.
|
||||||
*/
|
*/
|
||||||
public fun getMeta(
|
public fun get(
|
||||||
name: Name,
|
name: Name,
|
||||||
inherit: Boolean?,
|
inherit: Boolean?,
|
||||||
includeStyles: Boolean? = null,
|
includeStyles: Boolean? = null,
|
||||||
): Meta
|
): Meta
|
||||||
|
|
||||||
override fun getMeta(name: Name): Meta? = getMeta(name, null, null)
|
override fun get(name: Name): Meta? = get(name, null, null)
|
||||||
|
|
||||||
|
|
||||||
public val changes: Flow<Name>
|
public val changes: Flow<Name>
|
||||||
@ -54,7 +54,7 @@ public interface VisionProperties : MetaProvider {
|
|||||||
|
|
||||||
public interface MutableVisionProperties : VisionProperties, MutableMetaProvider {
|
public interface MutableVisionProperties : VisionProperties, MutableMetaProvider {
|
||||||
|
|
||||||
override fun getMeta(
|
override fun get(
|
||||||
name: Name,
|
name: Name,
|
||||||
inherit: Boolean?,
|
inherit: Boolean?,
|
||||||
includeStyles: Boolean?,
|
includeStyles: Boolean?,
|
||||||
@ -65,7 +65,7 @@ public interface MutableVisionProperties : VisionProperties, MutableMetaProvider
|
|||||||
includeStyles,
|
includeStyles,
|
||||||
)
|
)
|
||||||
|
|
||||||
public fun setMeta(
|
public fun set(
|
||||||
name: Name,
|
name: Name,
|
||||||
node: Meta?,
|
node: Meta?,
|
||||||
notify: Boolean,
|
notify: Boolean,
|
||||||
@ -77,10 +77,10 @@ public interface MutableVisionProperties : VisionProperties, MutableMetaProvider
|
|||||||
notify: Boolean,
|
notify: Boolean,
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun getMeta(name: Name): MutableMeta = getMeta(name, null, null)
|
override fun get(name: Name): MutableMeta = get(name, null, null)
|
||||||
|
|
||||||
override fun setMeta(name: Name, node: Meta?) {
|
override fun set(name: Name, node: Meta?) {
|
||||||
setMeta(name, node, true)
|
set(name, node, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setValue(name: Name, value: Value?) {
|
override fun setValue(name: Name, value: Value?) {
|
||||||
@ -89,7 +89,7 @@ public interface MutableVisionProperties : VisionProperties, MutableMetaProvider
|
|||||||
}
|
}
|
||||||
|
|
||||||
public fun MutableVisionProperties.remove(name: Name) {
|
public fun MutableVisionProperties.remove(name: Name) {
|
||||||
setMeta(name, null)
|
set(name, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun MutableVisionProperties.remove(name: String) {
|
public fun MutableVisionProperties.remove(name: String) {
|
||||||
@ -114,7 +114,7 @@ private class VisionPropertiesItem(
|
|||||||
|
|
||||||
override val items: Map<NameToken, MutableMeta>
|
override val items: Map<NameToken, MutableMeta>
|
||||||
get() {
|
get() {
|
||||||
val metaKeys = properties.own?.getMeta(nodeName)?.items?.keys ?: emptySet()
|
val metaKeys = properties.own?.get(nodeName)?.items?.keys ?: emptySet()
|
||||||
val descriptorKeys = descriptor?.children?.map { NameToken(it.key) } ?: emptySet()
|
val descriptorKeys = descriptor?.children?.map { NameToken(it.key) } ?: emptySet()
|
||||||
val defaultKeys = default?.get(nodeName)?.items?.keys ?: emptySet()
|
val defaultKeys = default?.get(nodeName)?.items?.keys ?: emptySet()
|
||||||
val inheritFlag = descriptor?.inherited ?: inherit
|
val inheritFlag = descriptor?.inherited ?: inherit
|
||||||
@ -148,8 +148,8 @@ private class VisionPropertiesItem(
|
|||||||
default
|
default
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun setMeta(name: Name, node: Meta?) {
|
override fun set(name: Name, node: Meta?) {
|
||||||
properties.setMeta(nodeName + name, node)
|
properties[nodeName + name] = node
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String = Meta.toString(this)
|
override fun toString(): String = Meta.toString(this)
|
||||||
@ -202,16 +202,16 @@ public abstract class AbstractVisionProperties(
|
|||||||
return descriptor?.defaultValue
|
return descriptor?.defaultValue
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setMeta(name: Name, node: Meta?, notify: Boolean) {
|
override fun set(name: Name, node: Meta?, notify: Boolean) {
|
||||||
//ignore if the value is the same as existing
|
//ignore if the value is the same as existing
|
||||||
if (own?.getMeta(name) == node) return
|
if (own?.get(name) == node) return
|
||||||
|
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
properties = node?.asMutableMeta()
|
properties = node?.asMutableMeta()
|
||||||
} else if (node == null) {
|
} else if (node == null) {
|
||||||
properties?.setMeta(name, node)
|
properties?.set(name, node)
|
||||||
} else {
|
} else {
|
||||||
getOrCreateProperties().setMeta(name, node)
|
getOrCreateProperties()[name] = node
|
||||||
}
|
}
|
||||||
if (notify) {
|
if (notify) {
|
||||||
invalidate(name)
|
invalidate(name)
|
||||||
@ -223,7 +223,7 @@ public abstract class AbstractVisionProperties(
|
|||||||
if (own?.getValue(name) == value) return
|
if (own?.getValue(name) == value) return
|
||||||
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
properties?.getMeta(name)?.value = null
|
properties?.get(name)?.value = null
|
||||||
} else {
|
} else {
|
||||||
getOrCreateProperties().setValue(name, value)
|
getOrCreateProperties().setValue(name, value)
|
||||||
}
|
}
|
||||||
@ -272,11 +272,11 @@ public fun VisionProperties.getValue(
|
|||||||
/**
|
/**
|
||||||
* Get [Vision] property using key as a String
|
* Get [Vision] property using key as a String
|
||||||
*/
|
*/
|
||||||
public fun VisionProperties.getMeta(
|
public fun VisionProperties.get(
|
||||||
name: String,
|
name: String,
|
||||||
inherit: Boolean? = null,
|
inherit: Boolean? = null,
|
||||||
includeStyles: Boolean? = null,
|
includeStyles: Boolean? = null,
|
||||||
): Meta = getMeta(name.parseAsName(), inherit, includeStyles)
|
): Meta = get(name.parseAsName(), inherit, includeStyles)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The root property node with given inheritance and style flags
|
* The root property node with given inheritance and style flags
|
||||||
@ -286,17 +286,17 @@ public fun VisionProperties.getMeta(
|
|||||||
public fun MutableVisionProperties.root(
|
public fun MutableVisionProperties.root(
|
||||||
inherit: Boolean? = null,
|
inherit: Boolean? = null,
|
||||||
includeStyles: Boolean? = null,
|
includeStyles: Boolean? = null,
|
||||||
): MutableMeta = getMeta(Name.EMPTY, inherit, includeStyles)
|
): MutableMeta = get(Name.EMPTY, inherit, includeStyles)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get [Vision] property using key as a String
|
* Get [Vision] property using key as a String
|
||||||
*/
|
*/
|
||||||
public fun MutableVisionProperties.getMeta(
|
public fun MutableVisionProperties.get(
|
||||||
name: String,
|
name: String,
|
||||||
inherit: Boolean? = null,
|
inherit: Boolean? = null,
|
||||||
includeStyles: Boolean? = null,
|
includeStyles: Boolean? = null,
|
||||||
): MutableMeta = getMeta(name.parseAsName(), inherit, includeStyles)
|
): MutableMeta = get(name.parseAsName(), inherit, includeStyles)
|
||||||
|
|
||||||
//
|
//
|
||||||
//public operator fun MutableVisionProperties.set(name: Name, value: Number): Unit =
|
//public operator fun MutableVisionProperties.set(name: Name, value: Number): Unit =
|
||||||
|
@ -17,10 +17,10 @@ public fun Vision.flowProperty(
|
|||||||
includeStyles: Boolean? = null,
|
includeStyles: Boolean? = null,
|
||||||
): Flow<Meta> = flow {
|
): Flow<Meta> = flow {
|
||||||
//Pass initial value.
|
//Pass initial value.
|
||||||
emit(properties.getMeta(propertyName, inherit, includeStyles))
|
emit(properties.get(propertyName, inherit, includeStyles))
|
||||||
properties.changes.collect { name ->
|
properties.changes.collect { name ->
|
||||||
if (name.startsWith(propertyName)) {
|
if (name.startsWith(propertyName)) {
|
||||||
emit(properties.getMeta(propertyName, inherit, includeStyles))
|
emit(properties.get(propertyName, inherit, includeStyles))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,10 @@ public fun Vision.useProperty(
|
|||||||
callback: (Meta) -> Unit,
|
callback: (Meta) -> Unit,
|
||||||
): Job {
|
): Job {
|
||||||
//Pass initial value.
|
//Pass initial value.
|
||||||
callback(properties.getMeta(propertyName, inherit, includeStyles))
|
callback(properties.get(propertyName, inherit, includeStyles))
|
||||||
return properties.changes.onEach { name ->
|
return properties.changes.onEach { name ->
|
||||||
if (name.startsWith(propertyName)) {
|
if (name.startsWith(propertyName)) {
|
||||||
callback(properties.getMeta(propertyName, inherit, includeStyles))
|
callback(properties.get(propertyName, inherit, includeStyles))
|
||||||
}
|
}
|
||||||
}.launchIn(scope ?: error("Orphan Vision can't observe properties"))
|
}.launchIn(scope ?: error("Orphan Vision can't observe properties"))
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ internal class VisionPropertyTest {
|
|||||||
@Test
|
@Test
|
||||||
fun testPropertyEdit() {
|
fun testPropertyEdit() {
|
||||||
val vision = manager.group()
|
val vision = manager.group()
|
||||||
vision.properties.getMeta("fff.ddd").apply {
|
vision.properties.get("fff.ddd").apply {
|
||||||
value = 2.asValue()
|
value = 2.asValue()
|
||||||
}
|
}
|
||||||
assertEquals(2, vision.properties.getValue("fff.ddd")?.int)
|
assertEquals(2, vision.properties.getValue("fff.ddd")?.int)
|
||||||
@ -50,7 +50,7 @@ internal class VisionPropertyTest {
|
|||||||
@Test
|
@Test
|
||||||
fun testPropertyUpdate() {
|
fun testPropertyUpdate() {
|
||||||
val vision = manager.group()
|
val vision = manager.group()
|
||||||
vision.properties.getMeta("fff").updateWith(TestScheme) {
|
vision.properties.get("fff").updateWith(TestScheme) {
|
||||||
ddd = 2
|
ddd = 2
|
||||||
}
|
}
|
||||||
assertEquals(2, vision.properties.getValue("fff.ddd")?.int)
|
assertEquals(2, vision.properties.getValue("fff.ddd")?.int)
|
||||||
@ -85,7 +85,7 @@ internal class VisionPropertyTest {
|
|||||||
|
|
||||||
child.properties.remove("test")
|
child.properties.remove("test")
|
||||||
|
|
||||||
assertEquals(11, child.properties.getMeta("test", inherit = true).int)
|
assertEquals(11, child.properties.get("test", inherit = true).int)
|
||||||
// assertEquals(11, deferred.await()?.int)
|
// assertEquals(11, deferred.await()?.int)
|
||||||
// assertEquals(2, callCounter)
|
// assertEquals(2, callCounter)
|
||||||
subscription.cancel()
|
subscription.cancel()
|
||||||
|
@ -9,8 +9,8 @@ import kotlinx.serialization.serializerOrNull
|
|||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
import org.w3c.dom.HTMLElement
|
import org.w3c.dom.HTMLElement
|
||||||
import space.kscience.dataforge.meta.Meta
|
import space.kscience.dataforge.meta.Meta
|
||||||
|
import space.kscience.dataforge.misc.DfType
|
||||||
import space.kscience.dataforge.misc.Named
|
import space.kscience.dataforge.misc.Named
|
||||||
import space.kscience.dataforge.misc.Type
|
|
||||||
import space.kscience.dataforge.names.Name
|
import space.kscience.dataforge.names.Name
|
||||||
import space.kscience.dataforge.names.asName
|
import space.kscience.dataforge.names.asName
|
||||||
import space.kscience.dataforge.names.parseAsName
|
import space.kscience.dataforge.names.parseAsName
|
||||||
@ -20,7 +20,7 @@ import kotlin.reflect.cast
|
|||||||
/**
|
/**
|
||||||
* A browser renderer for a [Vision].
|
* A browser renderer for a [Vision].
|
||||||
*/
|
*/
|
||||||
@Type(ElementVisionRenderer.TYPE)
|
@DfType(ElementVisionRenderer.TYPE)
|
||||||
public interface ElementVisionRenderer : Named {
|
public interface ElementVisionRenderer : Named {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -161,7 +161,7 @@ public class JsVisionClient : AbstractPlugin(), VisionClient {
|
|||||||
|
|
||||||
//launch backward property propagation
|
//launch backward property propagation
|
||||||
vision.properties.changes.onEach { propertyName: Name ->
|
vision.properties.changes.onEach { propertyName: Name ->
|
||||||
changeCollector.propertyChanged(visionName, propertyName, vision.properties.getMeta(propertyName))
|
changeCollector.propertyChanged(visionName, propertyName, vision.properties[propertyName])
|
||||||
}.launchIn(this)
|
}.launchIn(this)
|
||||||
|
|
||||||
//aggregate atomic changes
|
//aggregate atomic changes
|
||||||
|
@ -2,7 +2,7 @@ plugins {
|
|||||||
id("space.kscience.gradle.mpp")
|
id("space.kscience.gradle.mpp")
|
||||||
}
|
}
|
||||||
|
|
||||||
val plotlyVersion = "0.6.0"
|
val plotlyVersion = "0.6.1"
|
||||||
|
|
||||||
kscience {
|
kscience {
|
||||||
jvm()
|
jvm()
|
||||||
|
@ -33,8 +33,8 @@ public class VisionOfPlotly private constructor(
|
|||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
override val properties: MutableVisionProperties = object : MutableVisionProperties {
|
override val properties: MutableVisionProperties = object : MutableVisionProperties {
|
||||||
override fun setMeta(name: Name, node: Meta?, notify: Boolean) {
|
override fun set(name: Name, node: Meta?, notify: Boolean) {
|
||||||
meta.setMeta(name, node)
|
meta[name] = node
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setValue(name: Name, value: Value?, notify: Boolean) {
|
override fun setValue(name: Name, value: Value?, notify: Boolean) {
|
||||||
@ -45,11 +45,11 @@ public class VisionOfPlotly private constructor(
|
|||||||
|
|
||||||
override val descriptor: MetaDescriptor? get() = this@VisionOfPlotly.descriptor
|
override val descriptor: MetaDescriptor? get() = this@VisionOfPlotly.descriptor
|
||||||
|
|
||||||
override fun getMeta(
|
override fun get(
|
||||||
name: Name,
|
name: Name,
|
||||||
inherit: Boolean?,
|
inherit: Boolean?,
|
||||||
includeStyles: Boolean?,
|
includeStyles: Boolean?,
|
||||||
): MutableMeta = meta.getMeta(name) ?: MutableMeta()
|
): MutableMeta = meta[name] ?: MutableMeta()
|
||||||
|
|
||||||
override fun getValue(
|
override fun getValue(
|
||||||
name: Name,
|
name: Name,
|
||||||
|
@ -32,7 +32,7 @@ import kotlin.time.Duration.Companion.milliseconds
|
|||||||
public class VisionRoute(
|
public class VisionRoute(
|
||||||
public val route: String,
|
public val route: String,
|
||||||
public val visionManager: VisionManager,
|
public val visionManager: VisionManager,
|
||||||
override val meta: ObservableMutableMeta = MutableMeta(),
|
override val meta: ObservableMutableMeta = ObservableMutableMeta(),
|
||||||
) : Configurable, ContextAware {
|
) : Configurable, ContextAware {
|
||||||
|
|
||||||
public enum class Mode {
|
public enum class Mode {
|
||||||
|
@ -39,7 +39,7 @@ public inline fun MutableVisionContainer<Solid>.composite(
|
|||||||
}
|
}
|
||||||
val res = Composite(type, children[0], children[1])
|
val res = Composite(type, children[0], children[1])
|
||||||
|
|
||||||
res.properties.setMeta(Name.EMPTY, group.properties.own)
|
res.properties[Name.EMPTY] = group.properties.own
|
||||||
|
|
||||||
setChild(name, res)
|
setChild(name, res)
|
||||||
return res
|
return res
|
||||||
|
@ -92,7 +92,7 @@ public class Extruded(
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun build(): Extruded = Extruded(shape, layers).apply {
|
internal fun build(): Extruded = Extruded(shape, layers).apply {
|
||||||
this.properties.setMeta(Name.EMPTY, this@Builder.properties)
|
this.properties[Name.EMPTY] = this@Builder.properties
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +190,7 @@ internal fun float32Vector(
|
|||||||
|
|
||||||
override fun setValue(thisRef: Solid, property: KProperty<*>, value: Float32Vector3D?) {
|
override fun setValue(thisRef: Solid, property: KProperty<*>, value: Float32Vector3D?) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
thisRef.properties.setMeta(name, null)
|
thisRef.properties[name] = null
|
||||||
} else {
|
} else {
|
||||||
thisRef.properties[name + X_KEY] = value.x
|
thisRef.properties[name + X_KEY] = value.x
|
||||||
thisRef.properties[name + Y_KEY] = value.y
|
thisRef.properties[name + Y_KEY] = value.y
|
||||||
|
@ -110,12 +110,12 @@ public val Solid.color: ColorAccessor
|
|||||||
get() = ColorAccessor(properties.root(true), MATERIAL_COLOR_KEY)
|
get() = ColorAccessor(properties.root(true), MATERIAL_COLOR_KEY)
|
||||||
|
|
||||||
public var Solid.material: SolidMaterial?
|
public var Solid.material: SolidMaterial?
|
||||||
get() = SolidMaterial.read(properties.getMeta(MATERIAL_KEY))
|
get() = SolidMaterial.read(properties[MATERIAL_KEY])
|
||||||
set(value) = properties.setMeta(MATERIAL_KEY, value?.meta)
|
set(value) = properties.set(MATERIAL_KEY, value?.meta)
|
||||||
|
|
||||||
@VisionBuilder
|
@VisionBuilder
|
||||||
public fun Solid.material(builder: SolidMaterial.() -> Unit) {
|
public fun Solid.material(builder: SolidMaterial.() -> Unit) {
|
||||||
properties.getMeta(MATERIAL_KEY).updateWith(SolidMaterial, builder)
|
properties[MATERIAL_KEY].updateWith(SolidMaterial, builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
public var Solid.opacity: Number?
|
public var Solid.opacity: Number?
|
||||||
@ -128,5 +128,5 @@ public var Solid.opacity: Number?
|
|||||||
@VisionBuilder
|
@VisionBuilder
|
||||||
public fun Solid.edges(enabled: Boolean = true, block: SolidMaterial.() -> Unit = {}) {
|
public fun Solid.edges(enabled: Boolean = true, block: SolidMaterial.() -> Unit = {}) {
|
||||||
properties[SolidMaterial.EDGES_ENABLED_KEY] = enabled
|
properties[SolidMaterial.EDGES_ENABLED_KEY] = enabled
|
||||||
SolidMaterial.write(properties.getMeta(SolidMaterial.EDGES_MATERIAL_KEY)).apply(block)
|
SolidMaterial.write(properties[SolidMaterial.EDGES_MATERIAL_KEY]).apply(block)
|
||||||
}
|
}
|
@ -162,7 +162,7 @@ internal class SolidReferenceChild(
|
|||||||
override val properties: MutableVisionProperties = object : MutableVisionProperties {
|
override val properties: MutableVisionProperties = object : MutableVisionProperties {
|
||||||
override val descriptor: MetaDescriptor get() = this@SolidReferenceChild.descriptor
|
override val descriptor: MetaDescriptor get() = this@SolidReferenceChild.descriptor
|
||||||
|
|
||||||
override val own: MutableMeta by lazy { owner.properties.getMeta(childToken(childName).asName()) }
|
override val own: MutableMeta by lazy { owner.properties[childToken(childName).asName()] }
|
||||||
|
|
||||||
override fun getValue(
|
override fun getValue(
|
||||||
name: Name,
|
name: Name,
|
||||||
@ -170,8 +170,8 @@ internal class SolidReferenceChild(
|
|||||||
includeStyles: Boolean?,
|
includeStyles: Boolean?,
|
||||||
): Value? = own.getValue(name) ?: prototype.properties.getValue(name, inherit, includeStyles)
|
): Value? = own.getValue(name) ?: prototype.properties.getValue(name, inherit, includeStyles)
|
||||||
|
|
||||||
override fun setMeta(name: Name, node: Meta?, notify: Boolean) {
|
override fun set(name: Name, node: Meta?, notify: Boolean) {
|
||||||
own.setMeta(name, node)
|
own[name] = node
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setValue(name: Name, value: Value?, notify: Boolean) {
|
override fun setValue(name: Name, value: Value?, notify: Boolean) {
|
||||||
|
@ -155,7 +155,7 @@ public class Surface(
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun build(): Surface = Surface(layers).apply {
|
internal fun build(): Surface = Surface(layers).apply {
|
||||||
properties.setMeta(Name.EMPTY, this@Builder.properties)
|
properties[Name.EMPTY] = this@Builder.properties
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,9 +36,9 @@ internal fun Meta.toVector2D(): Float32Vector2D =
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
internal fun MetaProvider.point3D(default: Float = 0f) = Float32Euclidean3DSpace.vector(
|
internal fun MetaProvider.point3D(default: Float = 0f) = Float32Euclidean3DSpace.vector(
|
||||||
getMeta(X_KEY).float ?: default,
|
get(X_KEY).float ?: default,
|
||||||
getMeta(Y_KEY).float ?: default,
|
get(Y_KEY).float ?: default,
|
||||||
getMeta(Z_KEY).float ?: default
|
get(Z_KEY).float ?: default
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ internal fun Solid.updateFrom(other: Solid): Solid {
|
|||||||
scaleX *= other.scaleX
|
scaleX *= other.scaleX
|
||||||
scaleY *= other.scaleY
|
scaleY *= other.scaleY
|
||||||
scaleZ *= other.scaleZ
|
scaleZ *= other.scaleZ
|
||||||
properties.setMeta(Name.EMPTY, other.properties.root())
|
properties[Name.EMPTY] = other.properties.root()
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ plugins {
|
|||||||
id("space.kscience.gradle.mpp")
|
id("space.kscience.gradle.mpp")
|
||||||
}
|
}
|
||||||
|
|
||||||
val tablesVersion = "0.2.1"
|
val tablesVersion = "0.3.0"
|
||||||
|
|
||||||
kscience {
|
kscience {
|
||||||
jvm()
|
jvm()
|
||||||
|
@ -6,6 +6,7 @@ import space.kscience.dataforge.meta.double
|
|||||||
import space.kscience.dataforge.meta.int
|
import space.kscience.dataforge.meta.int
|
||||||
import space.kscience.tables.ColumnHeader
|
import space.kscience.tables.ColumnHeader
|
||||||
import space.kscience.tables.ColumnTable
|
import space.kscience.tables.ColumnTable
|
||||||
|
import space.kscience.tables.fill
|
||||||
import space.kscience.tables.get
|
import space.kscience.tables.get
|
||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
@ -18,7 +19,7 @@ internal class VisionOfTableTest {
|
|||||||
val y by ColumnHeader.typed<Value>()
|
val y by ColumnHeader.typed<Value>()
|
||||||
|
|
||||||
val table = ColumnTable<Value>(100) {
|
val table = ColumnTable<Value>(100) {
|
||||||
x.fill { it.asValue() }
|
fill(x, null) { it.asValue() }
|
||||||
y.values = x.values.map { it?.double?.pow(2)?.asValue() }
|
y.values = x.values.map { it?.double?.pow(2)?.asValue() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package space.kscience.visionforge.solid.three
|
package space.kscience.visionforge.solid.three
|
||||||
|
|
||||||
import space.kscience.dataforge.misc.Type
|
import space.kscience.dataforge.misc.DfType
|
||||||
import space.kscience.dataforge.names.Name
|
import space.kscience.dataforge.names.Name
|
||||||
import space.kscience.dataforge.names.startsWith
|
import space.kscience.dataforge.names.startsWith
|
||||||
import space.kscience.visionforge.Vision
|
import space.kscience.visionforge.Vision
|
||||||
@ -17,7 +17,7 @@ import kotlin.reflect.KClass
|
|||||||
/**
|
/**
|
||||||
* Builder and updater for three.js object
|
* Builder and updater for three.js object
|
||||||
*/
|
*/
|
||||||
@Type(TYPE)
|
@DfType(TYPE)
|
||||||
public interface ThreeFactory<in T : Vision> {
|
public interface ThreeFactory<in T : Vision> {
|
||||||
|
|
||||||
public val type: KClass<in T>
|
public val type: KClass<in T>
|
||||||
|
@ -24,7 +24,7 @@ public object ThreeLineFactory : ThreeFactory<PolyLine> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val material = ThreeMaterials.getLineMaterial(
|
val material = ThreeMaterials.getLineMaterial(
|
||||||
vision.properties.getMeta(SolidMaterial.MATERIAL_KEY),
|
vision.properties[SolidMaterial.MATERIAL_KEY],
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ public object ThreeMaterials {
|
|||||||
private val visionMaterialCache = HashMap<Vision, Material>()
|
private val visionMaterialCache = HashMap<Vision, Material>()
|
||||||
|
|
||||||
internal fun cacheMaterial(vision: Vision): Material = visionMaterialCache.getOrPut(vision) {
|
internal fun cacheMaterial(vision: Vision): Material = visionMaterialCache.getOrPut(vision) {
|
||||||
buildMaterial(vision.properties.getMeta(SolidMaterial.MATERIAL_KEY)).apply {
|
buildMaterial(vision.properties[SolidMaterial.MATERIAL_KEY]).apply {
|
||||||
cached = true
|
cached = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,11 +133,11 @@ public fun Mesh.setMaterial(vision: Vision) {
|
|||||||
} else {
|
} else {
|
||||||
material = vision.parent?.let { parent ->
|
material = vision.parent?.let { parent ->
|
||||||
//TODO cache parent material
|
//TODO cache parent material
|
||||||
ThreeMaterials.buildMaterial(parent.properties.getMeta(SolidMaterial.MATERIAL_KEY))
|
ThreeMaterials.buildMaterial(parent.properties[SolidMaterial.MATERIAL_KEY])
|
||||||
} ?: ThreeMaterials.cacheMaterial(vision)
|
} ?: ThreeMaterials.cacheMaterial(vision)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
material = ThreeMaterials.buildMaterial(vision.properties.getMeta(SolidMaterial.MATERIAL_KEY))
|
material = ThreeMaterials.buildMaterial(vision.properties[SolidMaterial.MATERIAL_KEY])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,18 +153,18 @@ public fun Mesh.updateMaterialProperty(vision: Vision, propertyName: Name) {
|
|||||||
when (propertyName) {
|
when (propertyName) {
|
||||||
SolidMaterial.MATERIAL_COLOR_KEY -> {
|
SolidMaterial.MATERIAL_COLOR_KEY -> {
|
||||||
material.asDynamic().color =
|
material.asDynamic().color =
|
||||||
vision.properties.getMeta(SolidMaterial.MATERIAL_COLOR_KEY).threeColor()
|
vision.properties[SolidMaterial.MATERIAL_COLOR_KEY].threeColor()
|
||||||
?: ThreeMaterials.DEFAULT_COLOR
|
?: ThreeMaterials.DEFAULT_COLOR
|
||||||
}
|
}
|
||||||
|
|
||||||
SolidMaterial.SPECULAR_COLOR_KEY -> {
|
SolidMaterial.SPECULAR_COLOR_KEY -> {
|
||||||
material.asDynamic().specular =
|
material.asDynamic().specular =
|
||||||
vision.properties.getMeta(SolidMaterial.SPECULAR_COLOR_KEY).threeColor()
|
vision.properties[SolidMaterial.SPECULAR_COLOR_KEY].threeColor()
|
||||||
?: ThreeMaterials.DEFAULT_COLOR
|
?: ThreeMaterials.DEFAULT_COLOR
|
||||||
}
|
}
|
||||||
|
|
||||||
SolidMaterial.MATERIAL_EMISSIVE_COLOR_KEY -> {
|
SolidMaterial.MATERIAL_EMISSIVE_COLOR_KEY -> {
|
||||||
material.asDynamic().emissive = vision.properties.getMeta(SolidMaterial.MATERIAL_EMISSIVE_COLOR_KEY)
|
material.asDynamic().emissive = vision.properties[SolidMaterial.MATERIAL_EMISSIVE_COLOR_KEY]
|
||||||
.threeColor()
|
.threeColor()
|
||||||
?: ThreeMaterials.BLACK_COLOR
|
?: ThreeMaterials.BLACK_COLOR
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ public fun Mesh.applyEdges(vision: Solid) {
|
|||||||
val edges = children.find { it.name == EDGES_OBJECT_NAME } as? LineSegments
|
val edges = children.find { it.name == EDGES_OBJECT_NAME } as? LineSegments
|
||||||
//inherited edges definition, enabled by default
|
//inherited edges definition, enabled by default
|
||||||
if (vision.properties.getValue(EDGES_ENABLED_KEY, inherit = false)?.boolean != false) {
|
if (vision.properties.getValue(EDGES_ENABLED_KEY, inherit = false)?.boolean != false) {
|
||||||
val material = ThreeMaterials.getLineMaterial(vision.properties.getMeta(EDGES_MATERIAL_KEY), true)
|
val material = ThreeMaterials.getLineMaterial(vision.properties[EDGES_MATERIAL_KEY], true)
|
||||||
if (edges == null) {
|
if (edges == null) {
|
||||||
add(
|
add(
|
||||||
LineSegments(
|
LineSegments(
|
||||||
|
Loading…
Reference in New Issue
Block a user