Skip to content

Instantly share code, notes, and snippets.

@jkrumbiegel
Created May 23, 2022 12:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jkrumbiegel/99c92e781fbb5898afc608d775ce2139 to your computer and use it in GitHub Desktop.
Save jkrumbiegel/99c92e781fbb5898afc608d775ce2139 to your computer and use it in GitHub Desktop.
Mockup of an observable with multiple entries
mutable struct Multiobservable
value::NamedTuple
listeners::Vector
end
Multiobservable(nt) = Multiobservable(nt, [])
function Makie.Observables.on(f, m::Multiobservable, syms::Symbol...)
push!(m.listeners, f)
f
end
function trigger!(m::Multiobservable, syms::Set{Symbol})
for l in m.listeners
l(m.value, syms)
end
end
function Base.push!(m::Multiobservable; kwargs...)
m.value = typeof(m.value)(map(keys(m.value), m.value) do key, value
get(kwargs, key, value)
end)
trigger!(m, Set{Symbol}(keys(kwargs)))
end
m = Multiobservable((a = 1, b = 'b', c = 3.0))
on(m) do nt, syms
println("Update received")
for sym in syms
println(" - ", sym, " was updated to ", nt[sym])
end
end
push!(m, a = 2, b = 'c')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment