@quartic/bokehjs
Version:
Interactive, novel data visualization
155 lines (154 loc) • 5.86 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var DEFAULT_POLY_OVERLAY, extend = function (child, parent) { for (var key in parent) {
if (hasProp.call(parent, key))
child[key] = parent[key];
} function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty;
var select_tool_1 = require("./select_tool");
var poly_annotation_1 = require("../../annotations/poly_annotation");
var p = require("core/properties");
exports.LassoSelectToolView = (function (superClass) {
extend(LassoSelectToolView, superClass);
function LassoSelectToolView() {
return LassoSelectToolView.__super__.constructor.apply(this, arguments);
}
LassoSelectToolView.prototype.initialize = function (options) {
LassoSelectToolView.__super__.initialize.call(this, options);
this.listenTo(this.model, 'change:active', this._active_change);
return this.data = null;
};
LassoSelectToolView.prototype._active_change = function () {
if (!this.model.active) {
return this._clear_overlay();
}
};
LassoSelectToolView.prototype._keyup = function (e) {
if (e.keyCode === 13) {
return this._clear_overlay();
}
};
LassoSelectToolView.prototype._pan_start = function (e) {
var canvas, vx, vy;
canvas = this.plot_view.canvas;
vx = canvas.sx_to_vx(e.bokeh.sx);
vy = canvas.sy_to_vy(e.bokeh.sy);
this.data = {
vx: [vx],
vy: [vy]
};
return null;
};
LassoSelectToolView.prototype._pan = function (e) {
var append, canvas, h_range, overlay, ref, v_range, vx, vy;
canvas = this.plot_view.canvas;
vx = canvas.sx_to_vx(e.bokeh.sx);
vy = canvas.sy_to_vy(e.bokeh.sy);
h_range = this.plot_model.frame.h_range;
v_range = this.plot_model.frame.v_range;
if (vx > h_range.end) {
vx = h_range.end;
}
if (vx < h_range.start) {
vx = h_range.start;
}
if (vy > v_range.end) {
vy = v_range.end;
}
if (vy < v_range.start) {
vy = v_range.start;
}
this.data.vx.push(vx);
this.data.vy.push(vy);
overlay = this.model.overlay;
overlay.update({
xs: this.data.vx,
ys: this.data.vy
});
if (this.model.select_every_mousemove) {
append = (ref = e.srcEvent.shiftKey) != null ? ref : false;
return this._select(this.data.vx, this.data.vy, false, append);
}
};
LassoSelectToolView.prototype._pan_end = function (e) {
var append, ref;
this._clear_overlay();
append = (ref = e.srcEvent.shiftKey) != null ? ref : false;
this._select(this.data.vx, this.data.vy, true, append);
return this.plot_view.push_state('lasso_select', {
selection: this.plot_view.get_selection()
});
};
LassoSelectToolView.prototype._clear_overlay = function () {
return this.model.overlay.update({
xs: [],
ys: []
});
};
LassoSelectToolView.prototype._select = function (vx, vy, final, append) {
var ds, geometry, i, len, r, ref, sm;
geometry = {
type: 'poly',
vx: vx,
vy: vy
};
ref = this.model.computed_renderers;
for (i = 0, len = ref.length; i < len; i++) {
r = ref[i];
ds = r.data_source;
sm = ds.selection_manager;
sm.select(this, this.plot_view.renderer_views[r.id], geometry, final, append);
}
if (this.model.callback != null) {
this._emit_callback(geometry);
}
this._save_geometry(geometry, final, append);
return null;
};
LassoSelectToolView.prototype._emit_callback = function (geometry) {
var canvas, frame, r, xmapper, ymapper;
r = this.model.computed_renderers[0];
canvas = this.plot_model.canvas;
frame = this.plot_model.frame;
geometry['sx'] = canvas.v_vx_to_sx(geometry.vx);
geometry['sy'] = canvas.v_vy_to_sy(geometry.vy);
xmapper = frame.x_mappers[r.x_range_name];
ymapper = frame.y_mappers[r.y_range_name];
geometry['x'] = xmapper.v_map_from_target(geometry.vx);
geometry['y'] = ymapper.v_map_from_target(geometry.vy);
this.model.callback.execute(this.model, {
geometry: geometry
});
};
return LassoSelectToolView;
})(select_tool_1.SelectToolView);
DEFAULT_POLY_OVERLAY = function () {
return new poly_annotation_1.PolyAnnotation({
level: "overlay",
xs_units: "screen",
ys_units: "screen",
fill_color: "lightgrey",
fill_alpha: 0.5,
line_color: "black",
line_alpha: 1.0,
line_width: 2,
line_dash: [4, 4]
});
};
exports.LassoSelectTool = (function (superClass) {
extend(LassoSelectTool, superClass);
function LassoSelectTool() {
return LassoSelectTool.__super__.constructor.apply(this, arguments);
}
LassoSelectTool.prototype.default_view = exports.LassoSelectToolView;
LassoSelectTool.prototype.type = "LassoSelectTool";
LassoSelectTool.prototype.tool_name = "Lasso Select";
LassoSelectTool.prototype.icon = "bk-tool-icon-lasso-select";
LassoSelectTool.prototype.event_type = "pan";
LassoSelectTool.prototype.default_order = 12;
LassoSelectTool.define({
select_every_mousemove: [p.Bool, true],
callback: [p.Instance],
overlay: [p.Instance, DEFAULT_POLY_OVERLAY]
});
return LassoSelectTool;
})(select_tool_1.SelectTool);