From 6ba67e54078e0a4991960f2a829d08e8380d149f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Laurent?= <francois.laurent@posteo.net> Date: Wed, 8 Jan 2025 20:10:10 +0100 Subject: [PATCH] feat: delete motor program button --- src/apps/muscles/Backbone.jl | 18 +++++++++++++++++- src/apps/muscles/app.jl | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/apps/muscles/Backbone.jl b/src/apps/muscles/Backbone.jl index 21868e6..eb4758a 100644 --- a/src/apps/muscles/Backbone.jl +++ b/src/apps/muscles/Backbone.jl @@ -9,7 +9,7 @@ include("MuscleWidgets.jl") using .MuscleWidgets export hasmodel, getmodel, setmodel, newsequence, getsequence, withsequences, - exportsequence, loadsequence + exportsequence, loadsequence, deletesequence # mutable struct Backbone{W} # widget::Union{Nothing, W} @@ -150,4 +150,20 @@ function loadsequence(session_id, filepath) return sequence end +function deletesequence(session_id) + model = getmodel(session_id) + current = model.sequence[].program_name + sequences = __sequences__[session_id] + lock(sequences) do + for (ix, seq) in pairs(sequences) + if seq.program_name == current + current = ix + break + end + end + @assert current isa Int + pop!(sequences.cache, current) + end +end + end diff --git a/src/apps/muscles/app.jl b/src/apps/muscles/app.jl index b1747ff..61c0e80 100644 --- a/src/apps/muscles/app.jl +++ b/src/apps/muscles/app.jl @@ -50,6 +50,8 @@ const bonito_app = NamedApp(:inherit, Backbone.app) @out area_selected = false @out new_clipboard_item = false + @in delete_sequence_click = false + @onchange isready begin _, url = init_model(__model__) run(__model__, """ @@ -158,6 +160,7 @@ const bonito_app = NamedApp(:inherit, Backbone.app) end @onchange selected_sequence_name begin + isempty(selected_sequence_name) && return seq = getsequence(back_session_id, selected_sequence_name) if !isnothing(seq) ix = findfirst(==(selected_sequence_name), sequence_names) @@ -286,6 +289,35 @@ const bonito_app = NamedApp(:inherit, Backbone.app) @onchange area_selected begin @notify "Click inside the selected area to assign the setvalue, or press Ctrl while clicking to copy the selection" :info end + + @onbutton delete_sequence_click begin + isempty(selected_sequence_name) && return + # update the model + deletesequence(back_session_id) + popat!(sequence_names, selected_sequence_index) + if length(sequence_names) < selected_sequence_index + selected_sequence_index[!] -= 1 + end + if selected_sequence_index == 0 + n = round(Int, series_length) + stop_time = start_time + (n-1) * time_interval + time_support = start_time:time_interval:stop_time + model = getmodel(back_session_id) + muscles = model.overview + sequence = MuscleActivity("", time_support, muscles) + # update the view + selected_sequence_name = "" + # update the view + sequence_name = "" + # update the model + model.sequence[] = sequence + else + # update both the view and model + selected_sequence_name = sequence_names[selected_sequence_index] + end + # update the view + notify(sequence_names) + end end function dropdown(key, options, label; margin=true, class=nothing) @@ -330,7 +362,7 @@ function muscle_view(bonito_url=""; channel=":channel") textfield("Start time", :start_time, type="number", step="any", disable=:editmode_disable), ]), - #item(btn("Delete motor program", @click(:delete_sequence_click), color="negative")), + item(btn("Delete motor program", @click(:delete_sequence_click), color="negative")), ]) Html.div(style=col, [ -- GitLab