change position event code to use util
general purpose event fireing can then be used for several event types
This commit is contained in:
parent
2544bc5a85
commit
21a9c56ba9
@ -1,6 +1,10 @@
|
|||||||
|
require "util/eventable"
|
||||||
|
|
||||||
module Risc
|
module Risc
|
||||||
module Position
|
module Position
|
||||||
class ObjectPosition
|
class ObjectPosition
|
||||||
|
include Util::Eventable
|
||||||
|
|
||||||
attr_reader :at , :object
|
attr_reader :at , :object
|
||||||
|
|
||||||
def initialize( object, at)
|
def initialize( object, at)
|
||||||
@ -33,25 +37,6 @@ module Risc
|
|||||||
@at = pos
|
@at = pos
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
# Register a handler position change event.
|
|
||||||
# The object calls position_changed on the handler object
|
|
||||||
#
|
|
||||||
# obj.position_changed( changed_position )
|
|
||||||
#
|
|
||||||
# @param [Object] object handling position_changed
|
|
||||||
def register_listener( handler)
|
|
||||||
@listeners << handler
|
|
||||||
end
|
|
||||||
|
|
||||||
def unregister_listener(handler)
|
|
||||||
@listeners.delete handler
|
|
||||||
end
|
|
||||||
|
|
||||||
# Trigger position change and pass self to position_changed
|
|
||||||
def trigger()
|
|
||||||
@listeners.each { |handler| handler.position_changed( self ) }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -53,21 +53,21 @@ module Risc
|
|||||||
@position = ObjectPosition.new(self,0)
|
@position = ObjectPosition.new(self,0)
|
||||||
end
|
end
|
||||||
def test_has_register
|
def test_has_register
|
||||||
assert @position.register_listener(self)
|
assert @position.register_event(:position_changed , self)
|
||||||
end
|
end
|
||||||
def test_can_unregister
|
def test_can_unregister
|
||||||
assert @position.register_listener(self)
|
assert @position.register_event(:position_changed ,self)
|
||||||
assert @position.unregister_listener(self)
|
assert @position.unregister_event(:position_changed ,self)
|
||||||
end
|
end
|
||||||
def test_fires
|
def test_fires
|
||||||
@position.register_listener(self)
|
@position.register_event(:position_changed ,self)
|
||||||
@position.trigger
|
@position.trigger(:position_changed , @position)
|
||||||
assert_equal @position , @trigger
|
assert_equal @position , @trigger
|
||||||
end
|
end
|
||||||
def test_no_fire_after_unregister
|
def test_no_fire_after_unregister
|
||||||
assert @position.register_listener(self)
|
assert @position.register_event(:position_changed ,self)
|
||||||
assert @position.unregister_listener(self)
|
assert @position.unregister_event(:position_changed ,self)
|
||||||
@position.trigger
|
@position.trigger(:position_changed , @position)
|
||||||
assert_nil @trigger
|
assert_nil @trigger
|
||||||
end
|
end
|
||||||
def position_changed(pos)
|
def position_changed(pos)
|
||||||
|
Loading…
Reference in New Issue
Block a user