fix left view updates
This commit is contained in:
parent
2159c86a5b
commit
dbb400ac08
@ -16,6 +16,10 @@ class ListView < ElementView
|
|||||||
@elements = []
|
@elements = []
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def length
|
||||||
|
@children.length
|
||||||
|
end
|
||||||
|
|
||||||
# create a root node acording to the tag given (default div)
|
# create a root node acording to the tag given (default div)
|
||||||
# The tag name will be passed to the div function, so class and id may be set as well (see there)
|
# The tag name will be passed to the div function, so class and id may be set as well (see there)
|
||||||
# draw all children and keep the elements as @elements
|
# draw all children and keep the elements as @elements
|
||||||
|
@ -1,23 +1,22 @@
|
|||||||
require_relative "classes_view"
|
require_relative "classes_view"
|
||||||
|
|
||||||
|
# the whole of the left, ie selection, space and classes
|
||||||
class LeftView < ListView
|
class LeftView < ListView
|
||||||
def initialize( interpreter )
|
def initialize( interpreter )
|
||||||
@interpreter = interpreter
|
@interpreter = interpreter
|
||||||
init_space
|
|
||||||
super([ SelectView.new(interpreter) ,
|
super([ SelectView.new(interpreter) ,
|
||||||
@space,
|
ObjectView.new( Parfait.object_space , @interpreter , 26),
|
||||||
ClassesView.new(interpreter) ])
|
ClassesView.new(interpreter) ])
|
||||||
interpreter.register_event(:state_changed, self)
|
interpreter.register_event(:state_changed, self)
|
||||||
end
|
end
|
||||||
|
|
||||||
def init_space
|
# need to re-init when we go to running, as the objects (and the actual space) change
|
||||||
@space = ObjectView.new( Parfait.object_space , @interpreter , 26)
|
# we replace space and class view with new instances
|
||||||
end
|
|
||||||
|
|
||||||
def state_changed( old , new_s )
|
def state_changed( old , new_s )
|
||||||
return unless new_s == :running
|
return unless new_s == :running
|
||||||
init_space
|
space = ObjectView.new( Parfait.object_space , @interpreter , 26)
|
||||||
replace_at( 1 , @space )
|
replace_at( 1 , space )
|
||||||
|
replace_at( 2 , ClassesView.new(@interpreter) )
|
||||||
end
|
end
|
||||||
|
|
||||||
def draw
|
def draw
|
||||||
@ -26,6 +25,12 @@ class LeftView < ListView
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
# view for the little code select, implemented as a normal expandable menu
|
||||||
|
#
|
||||||
|
# on click calls select method
|
||||||
|
#
|
||||||
|
# derive from element, meaning we draw
|
||||||
|
# # TODO: make into listview, so code can be the next level expansion
|
||||||
class SelectView < ElementView
|
class SelectView < ElementView
|
||||||
|
|
||||||
def initialize( interpreter )
|
def initialize( interpreter )
|
||||||
@ -45,32 +50,33 @@ class SelectView < ElementView
|
|||||||
def selection_codes
|
def selection_codes
|
||||||
@codes = get_codes.keys
|
@codes = get_codes.keys
|
||||||
list = div "ul"
|
list = div "ul"
|
||||||
@codes << @codes.first if @codes.length == 1 #otherwise unselectable
|
|
||||||
@codes.each do |c|
|
@codes.each do |c|
|
||||||
code = div("li") << div("a" , c )
|
code = div("li") << div("a" , c )
|
||||||
code.style["z-index"] = 10
|
code.style["z-index"] = 10
|
||||||
code.on("click"){ select(c) }
|
code.on("click"){ select(c) }
|
||||||
list << code
|
list << code
|
||||||
end
|
end
|
||||||
@element.at_css(".code_list") << list
|
@element.at_css(".code_list") << list
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# select method set up as click handler for the codes
|
||||||
|
# restart the interpreter after compiling
|
||||||
def select( code )
|
def select( code )
|
||||||
puts "selecting #{code}"
|
puts "selecting #{code}"
|
||||||
@interpreter.set_state :stopped
|
@interpreter.set_state :stopped
|
||||||
@element.at_css(".selected").text = code
|
@element.at_css(".selected").text = code
|
||||||
ruby = get_codes[code]
|
ruby = as_main(get_codes[code])
|
||||||
linker = RubyX::RubyXCompiler.new.ruby_to_binary(as_main(ruby), :interpreter)
|
linker = RubyX::RubyXCompiler.new.ruby_to_binary(ruby, :interpreter)
|
||||||
@interpreter.start_program(linker)
|
@interpreter.start_program(linker)
|
||||||
end
|
end
|
||||||
|
|
||||||
def as_main(statements)
|
def as_main(statements)
|
||||||
"class Space ;def yielder; return yield ; end;def main(arg) ; #{statements}; end; end"
|
"class Space ;def yielder; return yield ; end;def main(arg) ; #{statements}; end; end"
|
||||||
end
|
end
|
||||||
def get_codes
|
def get_codes
|
||||||
{ while_with_calls: 'a = 0; while( 0 > a); a = 1 + a;end;return a',
|
{ while_with_calls: 'a = 2; while( 0 < a); a = a - 1;end;return a',
|
||||||
set_internal_byte: "return 'Hello'.set_internal_byte(1,75)" ,
|
set_internal_byte: "return 'Hello'.set_internal_byte(1,75)" ,
|
||||||
called_if: 'if( 10 ); return "then";else;return "else";end' ,
|
basic_if: 'if( 10 ); return "then";else;return "else";end' ,
|
||||||
plus: 'return 5 + 7' ,
|
plus: 'return 5 + 7' ,
|
||||||
yield: "a = yielder {return 15} ; return a" ,
|
yield: "a = yielder {return 15} ; return a" ,
|
||||||
return: 'return 5' ,
|
return: 'return 5' ,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user