All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.jetbrains.datalore.vis.svg.SvgNodeContainer.kt Maven / Gradle / Ivy

There is a newer version: 3.2.0
Show newest version
/*
 * Copyright (c) 2019. JetBrains s.r.o.
 * Use of this source code is governed by the MIT license that can be found in the LICENSE file.
 */

package jetbrains.datalore.vis.svg

import jetbrains.datalore.base.observable.event.ListenerCaller
import jetbrains.datalore.base.observable.event.Listeners
import jetbrains.datalore.base.observable.property.Property
import jetbrains.datalore.base.observable.property.ValueProperty
import jetbrains.datalore.base.registration.Registration
import jetbrains.datalore.vis.svg.event.SvgAttributeEvent

class SvgNodeContainer(root: SvgSvgElement) {
    private val mySvgRoot: ValueProperty = object : ValueProperty(root) {
        override fun set(value: SvgSvgElement) {
            this.get().detach()
            super.set(value)
            value.attach(this@SvgNodeContainer)
        }
    }
    private val myListeners: Listeners = Listeners()
    private var myPeer: SvgPlatformPeer? = null

    init {
        mySvgRoot.get().attach(this)
    }

    fun setPeer(peer: SvgPlatformPeer?) {
        myPeer = peer
    }

    fun getPeer(): SvgPlatformPeer? = myPeer

    fun root(): Property {
        return mySvgRoot
    }

    fun addListener(l: SvgNodeContainerListener): Registration {
        return myListeners.add(l)
    }

    internal fun attributeChanged(element: SvgElement, event: SvgAttributeEvent<*>) {
        myListeners.fire(object : ListenerCaller {
            override fun call(l: SvgNodeContainerListener) {
                l.onAttributeSet(element, event)
            }
        })
    }

    internal fun svgNodeAttached(node: SvgNode) {
        myListeners.fire(object : ListenerCaller {
            override fun call(l: SvgNodeContainerListener) {
                l.onNodeAttached(node)
            }
        })
    }

    internal fun svgNodeDetached(node: SvgNode) {
        myListeners.fire(object : ListenerCaller {
            override fun call(l: SvgNodeContainerListener) {
                l.onNodeDetached(node)
            }
        })
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy