1 # $Id: button.rb 26 2005-06-22 20:19:41Z tilman $
6 def initialize(collection, name, rel, image, x, y)
7 @collection = collection
22 @collection.part(@name, :image) do |p|
25 ["normal", "hover", "down"].each do |state|
26 s = state == "normal" ? "default" : state
28 p.description(s) do |d|
29 d.rel[0].to = d.rel[1].to = @rel
30 d.rel[0].set_offset(@x, @y)
33 d.image = "#{@image}-#{state}.png"
42 {"in" => "hover", "out" => "default"}.each do |sig, state|
43 @collection.program("#{@name}.#{sig}",
45 p.signal = "mouse,#{sig}"
49 p.targets << ProgramTarget.new(@part)
53 {"up" => "hover", "down" => "down"}.each do |sig, state|
54 @collection.program("#{@name}.#{sig}",
56 p.signal = "mouse,#{sig},1"
59 p.targets << ProgramTarget.new(@part)
65 class SignalButton < Button
66 def initialize(collection, name, rel, image, x, y, signal)
67 super(collection, name, rel, image, x, y)
69 collection.program("#{name}.clicked",
71 p.signal = "mouse,clicked,1"
73 p.emission_signal = signal
74 p.emission_source = name
80 def initialize(c, name, rel, image, x, y)
96 @c.part(@name, :image) do |p|
98 p.mouse_events = false
100 p.description("default") do |d|
102 d.color = "#ffffff00"
104 d.rel[0].to = d.rel[1].to = @rel
105 d.rel[0].set_offset(@x, @y)
108 d.image = "#{@image}.png"
111 p.description("hover") do |d|
112 d.color = "#ffffffff"
114 d.rel[0].to = d.rel[1].to = @rel
115 d.rel[0].set_offset(@x, @y)
118 d.image = "#{@image}.png"
126 {"in" => "hover", "out" => "default"}.each do |sig, state|
127 @c.program("#{@name}.#{sig}", :set_state) do |p|
128 p.signal = "mouse,#{sig}"
129 p.source = @name[0..-5] # cut '.led' suffix
131 p.mode = sig == "in" ? :accelerate : :decelerate
133 p.targets << ProgramTarget.new(@part)
142 def initialize(collection, name, rel, image, x, y, variable, signal)
160 @col.part(@name, :image) do |p|
163 ["inactive", "active"].each do |state|
164 s = state == "inactive" ? "default" : state
166 p.description(s) do |d|
167 d.rel[0].to = d.rel[1].to = @rel
168 d.rel[0].set_offset(@x, @y)
171 d.image = "#{@image}-#{state}.png"
182 emit_toggle_prg = nil
184 @col.program("#{@name}.toggle", :exec_script) do |p|
188 new i = !get_int (#{@variable});
189 set_int (#{@variable}, i);
191 set_state (PART:"#{@name}", i ? "active" : "default", 0.0);
195 @col.program("#{@name}.emit_toggle", :emit_signal) do |p|
198 p.emission_signal = @signal
199 p.emission_source = @name
202 @col.program("#{@name}.on_toggle", :base) do |p|
204 p.source = "Euphoria"
205 p.after << ProgramAfter.new(toggle_prg)
208 @col.program("#{@name}.clicked", :base) do |p|
209 p.signal = "mouse,clicked,1"
211 p.after << ProgramAfter.new(toggle_prg)
212 p.after << ProgramAfter.new(emit_toggle_prg)