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}"
|
"#{bl.method.for_class.name}.#{bl.method.name}"
|
||||||
end
|
end
|
||||||
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 "status_view"
|
||||||
require_relative "file_view"
|
require_relative "file_view"
|
||||||
require_relative "blocks_view"
|
require_relative "blocks_view"
|
||||||
#require_relative "registers_view"
|
require_relative "registers_view"
|
||||||
#require_relative "object_view"
|
|
||||||
#require_relative "space_view"
|
|
||||||
|
|
||||||
class MainView < ListView
|
class MainView < ListView
|
||||||
|
|
||||||
@ -29,10 +27,11 @@ class MainView < ListView
|
|||||||
|
|
||||||
machine.run_before "Register::CallImplementation"
|
machine.run_before "Register::CallImplementation"
|
||||||
@interpreter = Interpreter::Interpreter.new
|
@interpreter = Interpreter::Interpreter.new
|
||||||
super( [ClassView.new(@interpreter) ,
|
super( [ClassView.new(@interpreter) ,
|
||||||
FileView.new ,
|
FileView.new ,
|
||||||
BlocksView.new(@interpreter) ,
|
BlocksView.new(@interpreter) ,
|
||||||
StatusView.new(@interpreter)] )
|
StatusView.new(@interpreter) ,
|
||||||
|
RegistersView.new(@interpreter) ] )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -1,38 +1,65 @@
|
|||||||
|
|
||||||
class ObjectView
|
class ObjectView
|
||||||
|
|
||||||
attr_accessor :text , :object , :attributes
|
def initialize interpreter , object_id
|
||||||
|
@object_id = object_id
|
||||||
def initialize o
|
@interpreter = interpreter
|
||||||
super()
|
@interpreter.register_event(:object_changed, self)
|
||||||
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 = {}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def short
|
def draw
|
||||||
object.class.name.split("::").last[0 .. 3]
|
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
|
end
|
||||||
|
|
||||||
def is_parfait
|
def object_changed reg
|
||||||
object.class.name.split("::").first == "Parfait"
|
reg = reg.symbol unless reg.is_a? Symbol
|
||||||
end
|
return unless reg == register
|
||||||
def set name , val
|
puts "Object changed in #{reg}"
|
||||||
@attributes[name] = val
|
calc_fields
|
||||||
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def distance to
|
def marker id
|
||||||
self.position - to.position
|
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
|
||||||
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 interpreter
|
||||||
|
@interpreter = interpreter
|
||||||
def initialize at_y
|
@interpreter.register_event(:register_changed, self)
|
||||||
super()
|
kids = []
|
||||||
@registers = {}
|
@interpreter.registers.each do |reg , val|
|
||||||
x = 0
|
kids << ValueView.new( val )
|
||||||
@@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
|
|
||||||
end
|
end
|
||||||
def draw_me
|
super(kids)
|
||||||
|
end
|
||||||
|
|
||||||
|
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
|
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