@quartic/bokehjs
Version:
Interactive, novel data visualization
149 lines (148 loc) • 6.02 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var DEFAULT_BOX_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 box_annotation_1 = require("../../annotations/box_annotation");
var p = require("core/properties");
exports.BoxSelectToolView = (function (superClass) {
extend(BoxSelectToolView, superClass);
function BoxSelectToolView() {
return BoxSelectToolView.__super__.constructor.apply(this, arguments);
}
BoxSelectToolView.prototype._pan_start = function (e) {
var canvas;
canvas = this.plot_view.canvas;
this._baseboint = [canvas.sx_to_vx(e.bokeh.sx), canvas.sy_to_vy(e.bokeh.sy)];
return null;
};
BoxSelectToolView.prototype._pan = function (e) {
var append, canvas, curpoint, dims, frame, ref, ref1, vxlim, vylim;
canvas = this.plot_view.canvas;
curpoint = [canvas.sx_to_vx(e.bokeh.sx), canvas.sy_to_vy(e.bokeh.sy)];
frame = this.plot_model.frame;
dims = this.model.dimensions;
ref = this.model._get_dim_limits(this._baseboint, curpoint, frame, dims), vxlim = ref[0], vylim = ref[1];
this.model.overlay.update({
left: vxlim[0],
right: vxlim[1],
top: vylim[1],
bottom: vylim[0]
});
if (this.model.select_every_mousemove) {
append = (ref1 = e.srcEvent.shiftKey) != null ? ref1 : false;
this._select(vxlim, vylim, false, append);
}
return null;
};
BoxSelectToolView.prototype._pan_end = function (e) {
var append, canvas, curpoint, dims, frame, ref, ref1, vxlim, vylim;
canvas = this.plot_view.canvas;
curpoint = [canvas.sx_to_vx(e.bokeh.sx), canvas.sy_to_vy(e.bokeh.sy)];
frame = this.plot_model.frame;
dims = this.model.dimensions;
ref = this.model._get_dim_limits(this._baseboint, curpoint, frame, dims), vxlim = ref[0], vylim = ref[1];
append = (ref1 = e.srcEvent.shiftKey) != null ? ref1 : false;
this._select(vxlim, vylim, true, append);
this.model.overlay.update({
left: null,
right: null,
top: null,
bottom: null
});
this._baseboint = null;
this.plot_view.push_state('box_select', {
selection: this.plot_view.get_selection()
});
return null;
};
BoxSelectToolView.prototype._select = function (arg, arg1, final, append) {
var ds, geometry, i, len, r, ref, sm, vx0, vx1, vy0, vy1;
vx0 = arg[0], vx1 = arg[1];
vy0 = arg1[0], vy1 = arg1[1];
if (append == null) {
append = false;
}
geometry = {
type: 'rect',
vx0: vx0,
vx1: vx1,
vy0: vy0,
vy1: vy1
};
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;
};
BoxSelectToolView.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['sx0'] = canvas.vx_to_sx(geometry.vx0);
geometry['sx1'] = canvas.vx_to_sx(geometry.vx1);
geometry['sy0'] = canvas.vy_to_sy(geometry.vy0);
geometry['sy1'] = canvas.vy_to_sy(geometry.vy1);
xmapper = frame.x_mappers[r.x_range_name];
ymapper = frame.y_mappers[r.y_range_name];
geometry['x0'] = xmapper.map_from_target(geometry.vx0);
geometry['x1'] = xmapper.map_from_target(geometry.vx1);
geometry['y0'] = ymapper.map_from_target(geometry.vy0);
geometry['y1'] = ymapper.map_from_target(geometry.vy1);
this.model.callback.execute(this.model, {
geometry: geometry
});
};
return BoxSelectToolView;
})(select_tool_1.SelectToolView);
DEFAULT_BOX_OVERLAY = function () {
return new box_annotation_1.BoxAnnotation({
level: "overlay",
render_mode: "css",
top_units: "screen",
left_units: "screen",
bottom_units: "screen",
right_units: "screen",
fill_color: "lightgrey",
fill_alpha: 0.5,
line_color: "black",
line_alpha: 1.0,
line_width: 2,
line_dash: [4, 4]
});
};
exports.BoxSelectTool = (function (superClass) {
extend(BoxSelectTool, superClass);
function BoxSelectTool() {
return BoxSelectTool.__super__.constructor.apply(this, arguments);
}
BoxSelectTool.prototype.default_view = exports.BoxSelectToolView;
BoxSelectTool.prototype.type = "BoxSelectTool";
BoxSelectTool.prototype.tool_name = "Box Select";
BoxSelectTool.prototype.icon = "bk-tool-icon-box-select";
BoxSelectTool.prototype.event_type = "pan";
BoxSelectTool.prototype.default_order = 30;
BoxSelectTool.define({
dimensions: [p.Dimensions, "both"],
select_every_mousemove: [p.Bool, false],
callback: [p.Instance],
overlay: [p.Instance, DEFAULT_BOX_OVERLAY]
});
BoxSelectTool.getters({
tooltip: function () {
return this._get_dim_tooltip(this.tool_name, this.dimensions);
}
});
return BoxSelectTool;
})(select_tool_1.SelectTool);