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