Replace plot properties by a wrapper
This commit is contained in:
parent
f0a6e12358
commit
81aa5d2fcc
@ -25,9 +25,9 @@ import space.kscience.visionforge.ring.ThreeCanvasWithControls
|
|||||||
import space.kscience.visionforge.ring.tab
|
import space.kscience.visionforge.ring.tab
|
||||||
import space.kscience.visionforge.solid.Solids
|
import space.kscience.visionforge.solid.Solids
|
||||||
import space.kscience.visionforge.solid.ambientLight
|
import space.kscience.visionforge.solid.ambientLight
|
||||||
|
import space.kscience.visionforge.solid.edges
|
||||||
import space.kscience.visionforge.solid.set
|
import space.kscience.visionforge.solid.set
|
||||||
import space.kscience.visionforge.solid.specifications.Canvas3DOptions
|
import space.kscience.visionforge.solid.specifications.Canvas3DOptions
|
||||||
import space.kscience.visionforge.solid.three.edges
|
|
||||||
import styled.css
|
import styled.css
|
||||||
import styled.styledDiv
|
import styled.styledDiv
|
||||||
import styled.styledSpan
|
import styled.styledSpan
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
kotlin.mpp.stability.nowarn=true
|
kotlin.mpp.stability.nowarn=true
|
||||||
kotlin.jupyter.add.scanner=false
|
kotlin.jupyter.add.scanner=false
|
||||||
#kotlin.incremental.js.ir=true
|
kotlin.incremental.js.ir=true
|
||||||
|
|
||||||
org.gradle.parallel=true
|
org.gradle.parallel=true
|
||||||
org.gradle.jvmargs=-Xmx4G
|
org.gradle.jvmargs=-Xmx4G
|
||||||
|
@ -298,4 +298,3 @@ public operator fun MutableVisionProperties.set(name: Name, value: String): Unit
|
|||||||
|
|
||||||
public operator fun MutableVisionProperties.set(name: String, value: String): Unit =
|
public operator fun MutableVisionProperties.set(name: String, value: String): Unit =
|
||||||
set(name.parseAsName(), value)
|
set(name.parseAsName(), value)
|
||||||
|
|
||||||
|
@ -1,25 +1,83 @@
|
|||||||
package space.kscience.visionforge.plotly
|
package space.kscience.visionforge.plotly
|
||||||
|
|
||||||
|
import kotlinx.coroutines.channels.awaitClose
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.callbackFlow
|
||||||
|
import kotlinx.coroutines.flow.emptyFlow
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.serialization.SerialName
|
import kotlinx.serialization.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import space.kscience.dataforge.meta.asObservable
|
import kotlinx.serialization.Transient
|
||||||
|
import space.kscience.dataforge.meta.*
|
||||||
|
import space.kscience.dataforge.meta.descriptors.MetaDescriptor
|
||||||
import space.kscience.dataforge.misc.DFExperimental
|
import space.kscience.dataforge.misc.DFExperimental
|
||||||
import space.kscience.dataforge.names.Name
|
import space.kscience.dataforge.names.Name
|
||||||
import space.kscience.plotly.Plot
|
import space.kscience.plotly.Plot
|
||||||
import space.kscience.plotly.Plotly
|
import space.kscience.plotly.Plotly
|
||||||
import space.kscience.visionforge.AbstractVision
|
import space.kscience.visionforge.MutableVisionProperties
|
||||||
|
import space.kscience.visionforge.Vision
|
||||||
import space.kscience.visionforge.html.VisionOutput
|
import space.kscience.visionforge.html.VisionOutput
|
||||||
import space.kscience.visionforge.root
|
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@SerialName("vision.plotly")
|
@SerialName("vision.plotly")
|
||||||
public class VisionOfPlotly private constructor() : AbstractVision() {
|
public class VisionOfPlotly private constructor(
|
||||||
|
@Serializable(MutableMetaSerializer::class) public val meta: MutableMeta,
|
||||||
|
) : Vision {
|
||||||
|
public constructor(plot: Plot) : this(plot.meta)
|
||||||
|
|
||||||
|
public val plot: Plot get() = Plot(meta.asObservable())
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
override var parent: Vision? = null
|
||||||
|
|
||||||
|
@Transient
|
||||||
|
override val properties: MutableVisionProperties = object : MutableVisionProperties {
|
||||||
|
override fun setProperty(name: Name, node: Meta?, notify: Boolean) {
|
||||||
|
meta.setMeta(name, node)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setValue(name: Name, value: Value?, notify: Boolean) {
|
||||||
|
meta.setValue(name, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val own: Meta get() = meta
|
||||||
|
|
||||||
|
override val descriptor: MetaDescriptor? get() = this@VisionOfPlotly.descriptor
|
||||||
|
|
||||||
|
override fun getProperty(
|
||||||
|
name: Name,
|
||||||
|
inherit: Boolean?,
|
||||||
|
includeStyles: Boolean?,
|
||||||
|
): MutableMeta = meta.getMeta(name) ?: MutableMeta()
|
||||||
|
|
||||||
|
override fun getValue(
|
||||||
|
name: Name,
|
||||||
|
inherit: Boolean?,
|
||||||
|
includeStyles: Boolean?,
|
||||||
|
): Value? = meta.getValue(name)
|
||||||
|
|
||||||
|
override val changes: Flow<Name> = if (meta is ObservableMeta) {
|
||||||
|
callbackFlow {
|
||||||
|
meta.onChange(this) {
|
||||||
|
launch {
|
||||||
|
send(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
awaitClose {
|
||||||
|
meta.removeListener(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else emptyFlow()
|
||||||
|
|
||||||
|
|
||||||
|
override fun invalidate(propertyName: Name) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
public constructor(plot: Plot) : this() {
|
|
||||||
properties.setProperty(Name.EMPTY, plot.meta)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public val plot: Plot get() = Plot(properties.root().asObservable())
|
|
||||||
|
override val descriptor: MetaDescriptor? = null // TODO add descriptor for Plot
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun Plot.asVision(): VisionOfPlotly = VisionOfPlotly(this)
|
public fun Plot.asVision(): VisionOfPlotly = VisionOfPlotly(this)
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package space.kscience.visionforge.plotly
|
||||||
|
|
||||||
|
import space.kscience.plotly.Plotly
|
||||||
|
import space.kscience.plotly.scatter
|
||||||
|
import kotlin.test.Test
|
||||||
|
import kotlin.test.assertTrue
|
||||||
|
|
||||||
|
class VisionOfPlotlyTest {
|
||||||
|
@Test
|
||||||
|
fun conversion(){
|
||||||
|
val plot = Plotly.plot {
|
||||||
|
scatter {
|
||||||
|
x(1,2,3)
|
||||||
|
y(1,2,3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val vision = VisionOfPlotly(plot)
|
||||||
|
// println(vision.plot.toJsonString())
|
||||||
|
// println(vision.plot.data.toJsonString())
|
||||||
|
assertTrue { vision.plot.data.first().x.doubles.size == 3}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user