59 lines
1.4 KiB
Ruby
59 lines
1.4 KiB
Ruby
class BlocksView < ElementView
|
|
|
|
def initialize interpreter
|
|
@interpreter = interpreter
|
|
@interpreter.register_event(:instruction_changed, self)
|
|
end
|
|
|
|
def draw
|
|
DOM do |dom|
|
|
dom.div.block_view do
|
|
dom.div do
|
|
dom.h4 { method_name }
|
|
dom.h4 {"Block:#{block_name}" }
|
|
end
|
|
blocks.each do |b|
|
|
dom.div do
|
|
dom.span do # class="{{b._class_name}}">
|
|
b.name
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def blocks
|
|
return [] unless @interpreter.instruction
|
|
codes = @interpreter.block.codes.dup
|
|
slice = codes.index(@interpreter.instruction) #- 1
|
|
codes.shift( slice ) if slice >= 0
|
|
codes.pop while(codes.length > 4)
|
|
codes
|
|
end
|
|
|
|
def instruction_changed
|
|
puts "Should have done something here to redraw (blocks)"
|
|
end
|
|
|
|
def block_name
|
|
@interpreter.block ? @interpreter.block.name : ""
|
|
end
|
|
def method_name
|
|
bl = @interpreter.block
|
|
return "" unless bl
|
|
return bl.method if bl.method.is_a? String
|
|
"#{bl.method.for_class.name}.#{bl.method.name}"
|
|
end
|
|
end
|
|
class BlocksModel #< Volt::ArrayModel
|
|
|
|
def instruction_changed old , ins
|
|
self.last._class_name = "inactive" if( self.length > 0)
|
|
self << { :name => ins.to_s , :class_name => "bright" }
|
|
#puts "block #{self.length}"
|
|
self.delete_at(0) if( self.length > 5)
|
|
end
|
|
|
|
end
|