src/component/representation-component.js
- /**
- * @file Representation Component
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- * @private
- */
-
- import Signal from '../../lib/signals.es6.js'
-
- import { defaults } from '../utils.js'
- import Component from './component.js'
-
- // add here to avoid cyclic import dependency
- Component.prototype.__getRepresentationComponent = function (repr, p) {
- return new RepresentationComponent(
- this.stage, repr, p, this
- )
- }
-
- /**
- * Extends {@link ComponentSignals}
- *
- * @typedef {Object} RepresentationComponentSignals
- * @property {Signal<String>} parametersChanged - on parameters change
- */
-
- /**
- * Component wrapping a {@link Representation} object
- */
- class RepresentationComponent extends Component {
- /**
- * Create representation component
- * @param {Stage} stage - stage object the component belongs to
- * @param {Representation} repr - representation object to wrap
- * @param {RepresentationParameters} [params] - component parameters
- * @param {Component} [parent] - parent component
- */
- constructor (stage, repr, params, parent) {
- var p = params || {}
- p.name = defaults(p.name, repr.type)
-
- super(stage, p)
-
- /**
- * Events emitted by the component
- * @type {RepresentationComponentSignals}
- */
- this.signals = Object.assign(this.signals, {
- parametersChanged: new Signal()
- })
-
- this.parent = parent
-
- this.setRepresentation(repr)
- }
-
- /**
- * Component type
- * @type {String}
- */
- get type () { return 'representation' }
-
- getType () {
- return this.repr.type
- }
-
- setRepresentation (repr) {
- this.disposeRepresentation()
- this.repr = repr
- // this.name = repr.type;
- this.stage.tasks.listen(this.repr.tasks)
- this.updateVisibility()
- }
-
- /**
- * @ignore
- * @alias RepresentationComponent#addRepresentation
- * @return {undefined}
- */
- addRepresentation () {}
-
- /**
- * @ignore
- * @alias RepresentationComponent#removeRepresentation
- * @return {undefined}
- */
- removeRepresentation () {}
-
- /**
- * @ignore
- * @alias RepresentationComponent#hasRepresentation
- * @return {undefined}
- */
- hasRepresentation () {}
-
- disposeRepresentation () {
- if (this.repr) {
- this.stage.tasks.unlisten(this.repr.tasks)
- this.repr.dispose()
- }
- }
-
- dispose () {
- if (this.parent && this.parent.hasRepresentation(this)) {
- this.parent.removeRepresentation(this)
- } else {
- this.disposeRepresentation()
- this.signals.disposed.dispatch()
- }
- }
-
- /**
- * Set the visibility of the component, takes parent visibility into account
- * @param {Boolean} value - visibility flag
- * @return {RepresentationComponent} this object
- */
- setVisibility (value) {
- this.visible = value
- this.updateVisibility()
- this.signals.visibilityChanged.dispatch(this.visible)
-
- return this
- }
-
- getVisibility () {
- if (this.parent) {
- return this.parent.visible && this.visible
- } else {
- return this.visible
- }
- }
-
- /**
- * Toggle visibility of the component, takes parent visibility into account
- * @return {RepresentationComponent} this object
- */
- toggleVisibility () {
- return this.setVisibility(!this.visible)
- }
-
- updateVisibility () {
- this.repr.setVisibility(this.getVisibility())
- }
-
- /**
- * Set selection
- * @param {Object} what - flags indicating what attributes to update
- * @param {Boolean} what.position - update position attribute
- * @param {Boolean} what.color - update color attribute
- * @param {Boolean} what.radius - update radius attribute
- * @return {RepresentationComponent} this object
- */
- update (what) {
- this.repr.update(what)
-
- return this
- }
-
- build (params) {
- this.repr.build(params)
-
- return this
- }
-
- /**
- * Set selection
- * @param {String} string - selection string
- * @return {RepresentationComponent} this object
- */
- setSelection (string) {
- this.repr.setSelection(string)
-
- return this
- }
-
- /**
- * Set representation parameters
- * @param {RepresentationParameters} params - parameter object
- * @return {RepresentationComponent} this object
- */
- setParameters (params) {
- this.repr.setParameters(params)
- this.signals.parametersChanged.dispatch(
- this.repr.getParameters()
- )
-
- return this
- }
-
- /**
- * Get representation parameters
- * @return {RepresentationParameters} parameter object
- */
- getParameters () {
- return this.repr.getParameters()
- }
-
- /**
- * Set color
- * @param {String|Color|Hex} value - color value
- * @return {RepresentationComponent} this object
- */
- setColor (value) {
- this.repr.setColor(value)
-
- return this
- }
-
- /**
- * @ignore
- * @return {undefined}
- */
- getCenter () {}
-
- /**
- * @ignore
- * @return {undefined}
- */
- getZoom () {}
-
- /**
- * @ignore
- * @return {undefined}
- */
- getBox () {}
- }
-
- export default RepresentationComponent