diff --git a/lib/blocks_view.rb b/lib/blocks_view.rb index 7c7718e..0cbe012 100644 --- a/lib/blocks_view.rb +++ b/lib/blocks_view.rb @@ -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 diff --git a/lib/main_view.rb b/lib/main_view.rb index 9ac198f..109b291 100644 --- a/lib/main_view.rb +++ b/lib/main_view.rb @@ -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 diff --git a/lib/object_view.rb b/lib/object_view.rb index 41b3644..7a54ece 100644 --- a/lib/object_view.rb +++ b/lib/object_view.rb @@ -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 diff --git a/lib/registers_view.rb b/lib/registers_view.rb index 092729b..98994df 100644 --- a/lib/registers_view.rb +++ b/lib/registers_view.rb @@ -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 diff --git a/lib/value_view.rb b/lib/value_view.rb new file mode 100644 index 0000000..ed913e8 --- /dev/null +++ b/lib/value_view.rb @@ -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