4 def initialize(collection, name, rel, image, x, y)
5 @collection = collection
20 @collection.part(@name, :image) do |p|
23 ["normal", "hover", "down"].each do |state|
24 s = state == "normal" ? "default" : state
26 p.description(s) do |d|
27 d.rel[0].to = d.rel[1].to = @rel
28 d.rel[0].set_offset(@x, @y)
31 d.image = "#{@image}-#{state}.png"
40 {"in" => "hover", "out" => "default"}.each do |sig, state|
41 @collection.program("#{@name}.#{sig}",
43 p.signal = "mouse,#{sig}"
47 p.targets << ProgramTarget.new(@part)
51 {"up" => "hover", "down" => "down"}.each do |sig, state|
52 @collection.program("#{@name}.#{sig}",
54 p.signal = "mouse,#{sig},1"
57 p.targets << ProgramTarget.new(@part)
63 class SignalButton < Button
64 def initialize(collection, name, rel, image, x, y, signal)
65 super(collection, name, rel, image, x, y)
67 collection.program("#{name}.clicked",
69 p.signal = "mouse,clicked,1"
71 p.emission_signal = signal
72 p.emission_source = name
78 def initialize(c, name, rel, image, x, y)
94 @c.part(@name, :image) do |p|
96 p.mouse_events = false
98 p.description("default") do |d|
100 d.color = "#ffffff00"
102 d.rel[0].to = d.rel[1].to = @rel
103 d.rel[0].set_offset(@x, @y)
106 d.image = "#{@image}.png"
109 p.description("hover") do |d|
110 d.color = "#ffffffff"
112 d.rel[0].to = d.rel[1].to = @rel
113 d.rel[0].set_offset(@x, @y)
116 d.image = "#{@image}.png"
124 {"in" => "hover", "out" => "default"}.each do |sig, state|
125 @c.program("#{@name}.#{sig}", :set_state) do |p|
126 p.signal = "mouse,#{sig}"
127 p.source = @name[0..-5] # cut '.led' suffix
129 p.mode = sig == "in" ? :accelerate : :decelerate
131 p.targets << ProgramTarget.new(@part)
140 def initialize(collection, name, rel, image, x, y, variable, signal)
158 @col.part(@name, :image) do |p|
161 ["inactive", "active"].each do |state|
162 s = state == "inactive" ? "default" : state
164 p.description(s) do |d|
165 d.rel[0].to = d.rel[1].to = @rel
166 d.rel[0].set_offset(@x, @y)
169 d.image = "#{@image}-#{state}.png"
180 emit_toggle_prg = nil
182 @col.program("#{@name}.toggle", :exec_script) do |p|
186 new i = !get_int (#{@variable});
187 set_int (#{@variable}, i);
189 set_state (PART:"#{@name}", i ? "active" : "default", 0.0);
193 @col.program("#{@name}.emit_toggle", :emit_signal) do |p|
196 p.emission_signal = @signal
197 p.emission_source = @name
200 @col.program("#{@name}.on_toggle", :base) do |p|
202 p.source = "Euphoria"
203 p.after << ProgramAfter.new(toggle_prg)
206 @col.program("#{@name}.clicked", :base) do |p|
207 p.signal = "mouse,clicked,1"
209 p.after << ProgramAfter.new(toggle_prg)
210 p.after << ProgramAfter.new(emit_toggle_prg)