@quartic/bokehjs
Version:
Interactive, novel data visualization
95 lines (74 loc) • 2.56 kB
text/coffeescript
import {HasProps} from "./has_props"
import {logger} from "./logging"
import {Selector} from "./selector"
import * as hittest from "./hittest"
import * as p from "./properties"
export class SelectionManager extends HasProps
type: 'SelectionManager'
{
source: [ p.Any ]
}
initialize: (attrs, options) ->
super(attrs, options)
= {}
= {}
= {}
select: (tool, renderer_view, geometry, final, append=false) ->
source =
if source != renderer_view.model.data_source
logger.warn('select called with mis-matched data sources')
indices = renderer_view.hit_test(geometry)
if indices?
selector =
selector.update(indices, final, append)
.selected = selector.indices
source.trigger('select')
source.trigger('select-' + renderer_view.model.id)
return not indices.is_empty()
else
return false
inspect: (tool, renderer_view, geometry, data) ->
source =
if source != renderer_view.model.data_source
logger.warn('inspect called with mis-matched data sources')
indices = renderer_view.hit_test(geometry)
if indices?
r_id = renderer_view.model.id
if indices.is_empty()
if not [r_id]?
[r_id] = false
if [r_id]
return
else
[r_id] = true
else
[r_id] = false
inspector =
inspector.update(indices, true, false, true)
.setv({inspected: inspector.indices}, {"silent": true })
source.trigger(
'inspect', indices, tool, renderer_view, source, data
)
source.trigger(
"inspect#{renderer_view.model.id}", indices, tool, renderer_view,
source, data
)
return not indices.is_empty()
else
return false
clear: (rview) ->
if rview?
selector =
selector.clear()
else
for k, s of
s.clear()
.selected = hittest.create_hit_test_result()
_get_selector_from: (rview, selectors) ->
id = rview.model.id
if selectors[id]?
return selectors[id]
else
return selectors[id] = new Selector()
_get_selector: (rview) ->
_get_inspector: (rview) ->