starting on register view, next up events

This commit is contained in:
Torsten Ruger 2015-08-21 19:07:27 +02:00
parent 8b743fbcd5
commit c49c73bb3d
5 changed files with 131 additions and 48 deletions

View File

@ -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

View File

@ -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
@ -29,10 +27,11 @@ class MainView < ListView
machine.run_before "Register::CallImplementation"
@interpreter = Interpreter::Interpreter.new
super( [ClassView.new(@interpreter) ,
FileView.new ,
BlocksView.new(@interpreter) ,
StatusView.new(@interpreter)] )
super( [ClassView.new(@interpreter) ,
FileView.new ,
BlocksView.new(@interpreter) ,
StatusView.new(@interpreter) ,
RegistersView.new(@interpreter) ] )
end
end

View File

@ -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 { "&nbsp;&nbsp;-------------------------"}
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

View File

@ -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
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

16
lib/value_view.rb Normal file
View 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