lib/glimmer/swt/tree_proxy.rb in glimmer-dsl-swt-4.18.4.11 vs lib/glimmer/swt/tree_proxy.rb in glimmer-dsl-swt-4.18.5.0

- old
+ new

@@ -40,31 +40,20 @@ # Performs depth first search for tree items matching block condition # If no condition block is passed, returns all tree items # Returns a Java TreeItem array to easily set as selection on org.eclipse.swt.Tree if needed def depth_first_search(&condition) found = [] - recursive_depth_first_search(swt_widget.getItems.first, found, &condition) + first_item = DisplayProxy.instance.auto_exec { swt_widget.getItems.first } + recursive_depth_first_search(first_item, found, &condition) found.to_java(TreeItem) end # Returns all tree items including descendants def all_tree_items depth_first_search end - def widget_property_listener_installers - super.merge({ - Java::OrgEclipseSwtWidgets::Tree => { - selection: lambda do |observer| - on_widget_selected { |selection_event| - observer.call(@swt_widget.getSelection) - } - end - }, - }) - end - def edit_in_progress? !!@edit_in_progress end def edit_selected_tree_item(before_write: nil, after_write: nil, after_cancel: nil) @@ -125,19 +114,25 @@ private def recursive_depth_first_search(tree_item, found, &condition) return if tree_item.nil? - found << tree_item if condition.nil? || condition.call(tree_item) - tree_item.getItems.each do |child_tree_item| + found << tree_item if condition.nil? || DisplayProxy.instance.auto_exec {condition.call(tree_item)} +# return if found.any? && !has_style?(:multi) # TODO inspect if this is a good optimization when needed + tree_items = DisplayProxy.instance.auto_exec {tree_item.getItems} + tree_items.each do |child_tree_item| recursive_depth_first_search(child_tree_item, found, &condition) end end def property_type_converters super.merge({ selection: lambda do |value| - depth_first_search {|ti| ti.getData == value} + if value.is_a?(Array) + depth_first_search {|ti| value.include?(ti.getData) } + else + depth_first_search {|ti| ti.getData == value} + end end, }) end end end