123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- import H from './../parts/Globals.js';
- import './../parts/Utilities.js';
- import eventEmitterMixin from './eventEmitterMixin.js';
- /**
- * A control point class which is a connection between controllable
- * transform methods and a user actions.
- *
- * @constructor
- * @mixes eventEmitterMixin
- * @memberOf Annotation
- *
- * @param {Highcharts.Chart} chart a chart instance
- * @param {Object} target a controllable instance which is a target for
- * a control point
- * @param {Annotation.ControlPoint.Options} options an options object
- * @param {number} [index]
- **/
- function ControlPoint(chart, target, options, index) {
- this.chart = chart;
- this.target = target;
- this.options = options;
- this.index = H.pick(options.index, index);
- }
- /**
- * @typedef {Object} Annotation.ControlPoint.Position
- * @property {number} x
- * @property {number} y
- */
- /**
- * @callback Annotation.ControlPoint.Positioner
- * @param {Object} e event
- * @param {Controllable} target
- * @return {Annotation.ControlPoint.Position} position
- */
- /**
- * @typedef {Object} Annotation.ControlPoint.Options
- * @property {string} symbol
- * @property {number} width
- * @property {number} height
- * @property {Object} style
- * @property {boolean} visible
- * @property {Annotation.ControlPoint.Positioner} positioner
- * @property {Object} events
- */
- H.extend(
- ControlPoint.prototype,
- eventEmitterMixin
- );
- /**
- * Set the visibility.
- *
- * @param {boolean} [visible]
- **/
- ControlPoint.prototype.setVisibility = function (visible) {
- this.graphic.attr('visibility', visible ? 'visible' : 'hidden');
- this.options.visible = visible;
- };
- /**
- * Render the control point.
- */
- ControlPoint.prototype.render = function () {
- var chart = this.chart,
- options = this.options;
- this.graphic = chart.renderer
- .symbol(
- options.symbol,
- 0,
- 0,
- options.width,
- options.height
- )
- .add(chart.controlPointsGroup)
- .css(options.style);
- this.setVisibility(options.visible);
- this.addEvents();
- };
- /**
- * Redraw the control point.
- *
- * @param {boolean} [animation]
- */
- ControlPoint.prototype.redraw = function (animation) {
- this.graphic[animation ? 'animate' : 'attr'](
- this.options.positioner.call(this, this.target)
- );
- };
- /**
- * Destroy the control point.
- */
- ControlPoint.prototype.destroy = function () {
- eventEmitterMixin.destroy.call(this);
- if (this.graphic) {
- this.graphic = this.graphic.destroy();
- }
- this.chart = null;
- this.target = null;
- this.options = null;
- };
- /**
- * Update the control point.
- */
- ControlPoint.prototype.update = function (userOptions) {
- var chart = this.chart,
- target = this.target,
- index = this.index,
- options = H.merge(true, this.options, userOptions);
- this.destroy();
- this.constructor(chart, target, options, index);
- this.render(chart.controlPointsGroup);
- this.redraw();
- };
- export default ControlPoint;
|