starting on register view, next up events
This commit is contained in:
parent
8b743fbcd5
commit
c49c73bb3d
@ -46,3 +46,13 @@ class BlocksView < ElementView
|
||||
"#{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
|
||||
|
@ -8,9 +8,7 @@ require_relative "class_view"
|
||||
require_relative "status_view"
|
||||
require_relative "file_view"
|
||||
require_relative "blocks_view"
|
||||
#require_relative "registers_view"
|
||||
#require_relative "object_view"
|
||||
#require_relative "space_view"
|
||||
require_relative "registers_view"
|
||||
|
||||
class MainView < ListView
|
||||
|
||||
@ -32,7 +30,8 @@ class MainView < ListView
|
||||
super( [ClassView.new(@interpreter) ,
|
||||
FileView.new ,
|
||||
BlocksView.new(@interpreter) ,
|
||||
StatusView.new(@interpreter)] )
|
||||
StatusView.new(@interpreter) ,
|
||||
RegistersView.new(@interpreter) ] )
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -1,38 +1,65 @@
|
||||
|
||||
class ObjectView
|
||||
|
||||
attr_accessor :text , :object , :attributes
|
||||
|
||||
def initialize o
|
||||
super()
|
||||
self.text = Text.new("no")
|
||||
self.text.position = Point.new( rand(1000) , rand(550))
|
||||
puts "NO O " unless o
|
||||
self.object = o
|
||||
self.text.text = short
|
||||
@attributes = {}
|
||||
def initialize interpreter , object_id
|
||||
@object_id = object_id
|
||||
@interpreter = interpreter
|
||||
@interpreter.register_event(:object_changed, self)
|
||||
end
|
||||
|
||||
def short
|
||||
object.class.name.split("::").last[0 .. 3]
|
||||
def draw
|
||||
DOM do |dom|
|
||||
dom.ul.nav! :sid => @object_id do
|
||||
dom.li do
|
||||
dom.span {class_header(@object_id)}
|
||||
end
|
||||
dom.li { " -------------------------"}
|
||||
content(@value).each do |con3|
|
||||
dom.li do
|
||||
dom.a(:href => "#") { con3[0]}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def is_parfait
|
||||
object.class.name.split("::").first == "Parfait"
|
||||
end
|
||||
def set name , val
|
||||
@attributes[name] = val
|
||||
self.text.text = short + @attributes.length.to_s
|
||||
end
|
||||
def get(name)
|
||||
@attributes[name]
|
||||
end
|
||||
def position
|
||||
#raise "NONAME" unless self.text
|
||||
self.text.position
|
||||
def object_changed reg
|
||||
reg = reg.symbol unless reg.is_a? Symbol
|
||||
return unless reg == register
|
||||
puts "Object changed in #{reg}"
|
||||
calc_fields
|
||||
end
|
||||
|
||||
def distance to
|
||||
self.position - to.position
|
||||
def marker id
|
||||
var = Virtual.machine.objects[id]
|
||||
if var.is_a? String
|
||||
str "Wo"
|
||||
else
|
||||
str = var.class.name.split("::").last[0,2]
|
||||
end
|
||||
str + " : #{id.to_s}"
|
||||
end
|
||||
|
||||
def class_header(id)
|
||||
object = Virtual.machine.objects[id]
|
||||
return "" unless object
|
||||
clazz = object.class.name.split("::").last
|
||||
"#{clazz}:#{id}"
|
||||
end
|
||||
|
||||
def content(id)
|
||||
object = Virtual.machine.objects[id]
|
||||
fields = []
|
||||
if object and ! object.is_a?(String)
|
||||
object.get_instance_variables.each do |variable|
|
||||
f = object.get_instance_variable(variable)
|
||||
fields << ["#{variable} : #{marker(f.object_id)}" , f.object_id]
|
||||
end
|
||||
end
|
||||
fields
|
||||
end
|
||||
|
||||
def is_object?( id )
|
||||
Virtual.machine.objects[id] != nil
|
||||
end
|
||||
end
|
||||
|
@ -1,21 +1,52 @@
|
||||
require_relative "object_view"
|
||||
require_relative "value_view"
|
||||
|
||||
class RegisterView
|
||||
class RegistersView < ListView
|
||||
|
||||
@@register_names = (0..8).collect {|i| "r#{i}"}
|
||||
|
||||
def initialize at_y
|
||||
super()
|
||||
@registers = {}
|
||||
x = 0
|
||||
@@register_names.each do |name|
|
||||
reg = Text.new( name )
|
||||
reg.position = Point.new x , at_y
|
||||
x += reg.width + 20
|
||||
@registers[name] = reg
|
||||
self.add_child reg
|
||||
def initialize interpreter
|
||||
@interpreter = interpreter
|
||||
@interpreter.register_event(:register_changed, self)
|
||||
kids = []
|
||||
@interpreter.registers.each do |reg , val|
|
||||
kids << ValueView.new( val )
|
||||
end
|
||||
super(kids)
|
||||
end
|
||||
def draw_me
|
||||
|
||||
def root
|
||||
"div.registers_view"
|
||||
end
|
||||
|
||||
def draw
|
||||
list = super()
|
||||
list = list.children.each do |reg|
|
||||
elem = create_element("div.register_view")
|
||||
wrap_node_with reg , elem
|
||||
end
|
||||
@container_element
|
||||
end
|
||||
|
||||
def register_changed reg , old , value
|
||||
reg = reg.symbol unless reg.is_a? Symbol
|
||||
return unless reg == register
|
||||
objects_id! value
|
||||
calc_fields
|
||||
end
|
||||
|
||||
def calc_fields
|
||||
#puts "My id #{objects_id} , #{objects_id.class}"
|
||||
object = Virtual.machine.objects[value]
|
||||
self.fields.clear
|
||||
if object and ! object.is_a?(String)
|
||||
clazz = object.class.name.split("::").last
|
||||
#puts "found #{clazz}"
|
||||
self.fields << "#{clazz}:#{object.internal_object_length}"
|
||||
self.fields << object.get_layout
|
||||
object.get_instance_variables.each do |variable|
|
||||
f = object.get_instance_variable(variable)
|
||||
self.fields << f
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
16
lib/value_view.rb
Normal file
16
lib/value_view.rb
Normal file
@ -0,0 +1,16 @@
|
||||
class ValueView < ElementView
|
||||
|
||||
def initialize value
|
||||
@value = value
|
||||
end
|
||||
|
||||
def draw
|
||||
DOM do |dom|
|
||||
dom.ul.nav! do
|
||||
dom.li do
|
||||
dom.a( :href => "#" ) { @value }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user