lib/tk_component/base.rb in tk_component-0.1.0 vs lib/tk_component/base.rb in tk_component-0.1.1
- old
+ new
@@ -8,10 +8,12 @@
attr_accessor :parent
attr_accessor :parent_node
attr_accessor :children
attr_accessor :node
+ include BasicComponent
+
def initialize(options = {})
@parent = options[:parent]
@parent_node = options[:parent_node]
@children = []
end
@@ -25,36 +27,80 @@
@node.prepare_option_events(self)
@node.prepare_grid
@node = @node.sub_nodes.first # Get rid of the dummy top node
end
+ def parse_nodes(parent_node, options = {})
+ old_sub_nodes = parent_node.sub_nodes.dup
+ yield(parent_node)
+ new_sub_nodes = parent_node.sub_nodes - old_sub_nodes
+ new_sub_nodes.each { |n| n.prepare_option_events(self) }
+ parent_node.prepare_grid
+ new_sub_nodes
+ end
+
def build(parent_component)
@node.build(@parent_node, parent_component)
component_did_build
children.each do |c|
c.build(self)
+ TkGrid.columnconfigure c.parent_node.tk_item.native_item, 0, weight: 1
+ TkGrid.rowconfigure c.parent_node.tk_item.native_item, 0, weight: 1
+ TkGrid.columnconfigure c.node.tk_item.native_item, 0, weight: 1
+ TkGrid.rowconfigure c.node.tk_item.native_item, 0, weight: 1
end
end
def regenerate
old_node = @node
+ old_children = @children
+ @children = []
generate(parent)
rebuild(old_node)
- children.each do |c|
- c.regenerate
+ @children.each do |c|
+ c.generate(self)
+ c.build(self)
end
end
+ def regenerate_from_node(node, parent_node, options = {}, &block)
+ regenerate_from_index(parent_node, parent_node.sub_nodes.index(node), options, &block)
+ end
+
+ def regenerate_after_node(node, parent_node, options = {}, &block)
+ return if parent_node.sub_nodes.index(node).nil?
+ regenerate_from_index(parent_node, parent_node.sub_nodes.index(node) + 1, options, &block)
+ end
+
+ def regenerate_from_index(parent_node, index, options = {}, &block)
+ old_children = @children.dup
+ to_remove = parent_node.sub_nodes.slice!(index..-1)
+ to_remove.each do |n|
+ n.remove
+ end
+ new_sub_nodes = parse_nodes(parent_node, options, &block)
+ new_children = @children - old_children
+ new_sub_nodes.each do |n|
+ n.build(parent_node, self)
+ end
+ new_children.each do |c|
+ c.generate(self)
+ c.build(self)
+ end
+ parent_node.apply_grid
+ parent_node.built
+ end
+
def rebuild(old_node)
build(parent)
end
def name
self.class.name
end
def emit(event_name)
- TkComponent::Builder::Event.emit('ParamChanged', parent_node.native_item, self.object_id)
+ TkComponent::Builder::Event.emit(event_name, parent_node.native_item, self.object_id)
end
def component_did_build
end