@quartic/bokehjs
Version:
Interactive, novel data visualization
83 lines (68 loc) • 2.36 kB
text/coffeescript
import {GestureTool, GestureToolView} from "./gesture_tool"
import {GlyphRenderer} from "../../renderers/glyph_renderer"
import {logger} from "core/logging"
import * as p from "core/properties"
import {clone} from "core/util/object"
export class SelectToolView extends GestureToolView
_keyup: (e) ->
if e.keyCode == 27
for r in .computed_renderers
ds = r.data_source
sm = ds.selection_manager
sm.clear()
_save_geometry: (geometry, final, append) ->
g = clone(geometry)
xm = .frame.x_mappers['default']
ym = .frame.y_mappers['default']
switch g.type
when 'point'
g.x = xm.map_from_target(g.vx)
g.y = ym.map_from_target(g.vy)
when 'rect'
g.x0 = xm.map_from_target(g.vx0)
g.y0 = ym.map_from_target(g.vy0)
g.x1 = xm.map_from_target(g.vx1)
g.y1 = ym.map_from_target(g.vy1)
when 'poly'
g.x = new Array(g.vx.length)
g.y = new Array(g.vy.length)
for i in [0...g.vx.length]
g.x[i] = xm.map_from_target(g.vx[i])
g.y[i] = ym.map_from_target(g.vy[i])
else
logger.debug("Unrecognized selection geometry type: '#{g.type}'")
if final
tool_events = .plot.tool_events
if append
geoms = tool_events.geometries
geoms.push(g)
else
geoms = [g]
tool_events.geometries = geoms
return null
export class SelectTool extends GestureTool
{
renderers: [ p.Array, [] ]
names: [ p.Array, [] ]
}
{
multi_select_modifier: [ p.String, "shift" ]
}
initialize: (attrs, options) ->
super(attrs, options)
('computed_renderers',
() ->
renderers =
names =
if renderers.length == 0
all_renderers = .renderers
renderers = (r for r in all_renderers when r instanceof GlyphRenderer)
if names.length > 0
renderers = (r for r in renderers when names.indexOf(r.name) >= 0)
return renderers
, true)
('computed_renderers', this, ['renderers', 'names', 'plot'])
('computed_renderers', , ['renderers'])
{
computed_renderers: () -> ('computed_renderers')
}