Skip to content
Snippets Groups Projects
Commit a27719e0 authored by François  LAURENT's avatar François LAURENT
Browse files

improved handling of keyboard events (arrow keys) + version increment

parent 5780ecba
Branches
Tags
No related merge requests found
Pipeline #83177 passed
name = "LarvaTagger"
uuid = "8b3b36f1-dfed-446e-8561-ea19fe966a4d"
authors = ["François Laurent", "Institut Pasteur"]
version = "0.4.0"
version = "0.5.0"
[deps]
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
......
......@@ -216,6 +216,7 @@ setboundingbox!(c::LarvaController, bb) = (c.boundingbox[] = bb)
getmedianlarvasize(c) = getmedianlarvasize(gethub(c)[:larva])
getmedianlarvasize(c::LarvaController) = c.medianlarvasize
getplayer(c::AbstractAnimator) = c
getplayer(c::LarvaController) = c.player
getplayer(c) = getplayer(gethub(c))
getplayer(hub::ControllerHub) = haskey(hub, :player) ? hub[:player] : getplayer(hub[:larva])
......
......@@ -117,6 +117,24 @@ play!(controller::TimeController) = (controller.playing[] = true)
pause!(controller::TimeController) = (controller.playing[] = false)
playpause!(controller::TimeController) = (controller.playing[] = !controller.playing[])
function stepforward!(controller::TimeController)
step = controller.timestep[]
if step < controller.stepmax[]
controller.timestep[] = step + 1
elseif isplaying(controller)
pause!(controller)
end
end
function stepbackward!(controller::TimeController)
step = controller.timestep[]
if controller.stepmin[] < step
controller.timestep[] = step - 1
elseif isplaying(controller)
pause!(controller)
end
end
function timecontroller(times::Vector{Float64}; speed=1.1)
issorted(times) || throw(ArgumentError("timestamps are not sorted"))
initialstep = 1
......
......@@ -300,7 +300,8 @@ function assign_tag_to_segment!(larvaview, firststep)
flag_active_larva_as_edited(controller)
end
function setmouseevents!(scene, larva::SingleLarvaView; blocking=true, priority=Int8(10), kwargs...)
function setmouseevents!(scene, larva::SingleLarvaView;
blocking=true, priority=Int8(10), kwargs...)
# WGLMakie does not support addmouseevents! with plots as additional input args
mouseevents = Makie.addmouseevents!(scene; priority=priority)
......@@ -406,6 +407,7 @@ function Makie.plot!(plot::LarvaPlot{Tuple{SingleLarvaView}})
larva = plot[1][]
scene = plot.parent
setmouseevents!(scene, larva)
setkeyboardevents!(scene, larva)
larvaplot!(plot, larva.path, larva.outline, larva.outline_color, larva.visible)
if iseditable(larva)
lines!(plot, larva.segment; color=larva.segment_color, linewidth=6, visible=larva.segment_visible)
......@@ -413,6 +415,20 @@ function Makie.plot!(plot::LarvaPlot{Tuple{SingleLarvaView}})
end
end
setkeyboardevents!(scene::Scene, larva::SingleLarvaView) = setkeyboardevents!(scene, larva.controller)
function setkeyboardevents!(scene::Scene, controller)
player = getplayer(controller)
on(events(scene).keyboardbutton) do event
if event.action == Keyboard.press
if event.key in (Keyboard.left, Keyboard.down)
stepbackward!(player)
elseif event.key in (Keyboard.right, Keyboard.up)
stepforward!(player)
end
end
end
end
##
struct DecoratedLarva
......
......@@ -124,7 +124,8 @@ function AssayPlot(ctrl, larvae::DecoratedLarvae; size=FIGSIZE)
ax = Axis(fig.layout[1, 1], aspect=DataAspect(), xgridwidth=width, ygridwidth=width,
xgridcolor=color, ygridcolor=color)
autosize!(ax, size)
larvaplot!(ax, larvae)
plot = larvaplot!(ax, larvae)
setkeyboardevents!(plot.parent, getplayer(ctrl))
setbounds!(ax, ctrl, larvae)
button = homebutton()
on(button.click) do _
......@@ -239,10 +240,7 @@ end
function stepforwardbutton(ctrl::TimeController; kwargs...)
button = simpletrigger(StepForwardButton, with_attributes(kwargs; class=css_button))
on(button.click) do _
step = ctrl.timestep[]
if step < ctrl.stepmax[]
ctrl.timestep[] = step + 1
end
stepforward!(ctrl)
end
return button
end
......@@ -260,10 +258,7 @@ end
function stepbackwardbutton(ctrl::TimeController; kwargs...)
button = simpletrigger(StepBackwardButton, with_attributes(kwargs; class=css_button))
on(button.click) do _
step = ctrl.timestep[]
if ctrl.stepmin[] < step
ctrl.timestep[] = step - 1
end
stepbackward!(ctrl)
end
return button
end
......@@ -362,6 +357,7 @@ function JSServe.jsrender(session::Session, p::Player)
r(session, p.stepforwardbutton),
r(session, p.timeslider),
r(session, p.timelabel);
onmouseenter=js"LarvaTagger.focusOnTimeSlider(this)",
p.attributes...
))
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment