Class: Glimmer::SWT::TreeProxy
- Inherits:
-
WidgetProxy
- Object
- WidgetProxy
- Glimmer::SWT::TreeProxy
- Includes:
- Glimmer
- Defined in:
- lib/glimmer/swt/tree_proxy.rb
Constant Summary
Constants included from Glimmer
Constants inherited from WidgetProxy
WidgetProxy::DEFAULT_INITIALIZERS, WidgetProxy::DEFAULT_STYLES
Instance Attribute Summary collapse
-
#tree_editor ⇒ Object
readonly
Returns the value of attribute tree_editor.
-
#tree_editor_text_proxy ⇒ Object
readonly
Returns the value of attribute tree_editor_text_proxy.
-
#tree_properties ⇒ Object
Returns the value of attribute tree_properties.
Attributes inherited from WidgetProxy
Instance Method Summary collapse
-
#all_tree_items ⇒ Object
Returns all tree items including descendants.
-
#depth_first_search(&condition) ⇒ Object
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.
- #edit_in_progress? ⇒ Boolean
- #edit_selected_tree_item(before_write: nil, after_write: nil, after_cancel: nil) ⇒ Object
- #edit_tree_item(tree_item, before_write: nil, after_write: nil, after_cancel: nil) ⇒ Object
-
#initialize(underscored_widget_name, parent, args) ⇒ TreeProxy
constructor
A new instance of TreeProxy.
- #widget_property_listener_installers ⇒ Object
Methods included from Glimmer
Methods inherited from WidgetProxy
#add_observer, #async_exec, #can_add_observer?, #can_handle_observation_request?, #content, #dispose, #extract_args, #get_attribute, #handle_observation_request, #has_attribute?, #has_style?, #pack_same_size, #remove_observer, #set_attribute, swt_widget_class_for, #sync_exec, widget_exists?
Methods included from DataBinding::ObservableWidget
Constructor Details
#initialize(underscored_widget_name, parent, args) ⇒ TreeProxy
Returns a new instance of TreeProxy.
11 12 13 14 15 16 17 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 11 def initialize(, parent, args) super @tree_editor = TreeEditor.new() @tree_editor.horizontalAlignment = SWTProxy[:left] @tree_editor.grabHorizontal = true @tree_editor.minimumHeight = 20 end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Glimmer
Instance Attribute Details
#tree_editor ⇒ Object (readonly)
Returns the value of attribute tree_editor.
8 9 10 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 8 def tree_editor @tree_editor end |
#tree_editor_text_proxy ⇒ Object (readonly)
Returns the value of attribute tree_editor_text_proxy.
8 9 10 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 8 def tree_editor_text_proxy @tree_editor_text_proxy end |
#tree_properties ⇒ Object
Returns the value of attribute tree_properties.
9 10 11 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 9 def tree_properties @tree_properties end |
Instance Method Details
#all_tree_items ⇒ Object
Returns all tree items including descendants
29 30 31 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 29 def all_tree_items depth_first_search end |
#depth_first_search(&condition) ⇒ Object
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
22 23 24 25 26 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 22 def depth_first_search(&condition) found = [] recursive_depth_first_search(.getItems.first, found, &condition) found.to_java(TreeItem) end |
#edit_in_progress? ⇒ Boolean
45 46 47 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 45 def edit_in_progress? !!@edit_in_progress end |
#edit_selected_tree_item(before_write: nil, after_write: nil, after_cancel: nil) ⇒ Object
49 50 51 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 49 def edit_selected_tree_item(before_write: nil, after_write: nil, after_cancel: nil) edit_tree_item(.getSelection.first, before_write: before_write, after_write: after_write, after_cancel: after_cancel) end |
#edit_tree_item(tree_item, before_write: nil, after_write: nil, after_cancel: nil) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 53 def edit_tree_item(tree_item, before_write: nil, after_write: nil, after_cancel: nil) return if tree_item.nil? content { @tree_editor_text_proxy = text { focus true text tree_item.getText action_taken = false cancel = lambda { @tree_editor_text_proxy..dispose @tree_editor_text_proxy = nil after_cancel&.call @edit_in_progress = false } action = lambda { |event| if !action_taken && !@edit_in_progress action_taken = true @edit_in_progress = true new_text = @tree_editor_text_proxy..getText if new_text == tree_item.getText cancel.call else before_write&.call tree_item.setText(new_text) model = tree_item.getData model.send("#{tree_properties[:text]}=", new_text) # makes tree update itself, so must search for selected tree item again edited_tree_item = depth_first_search { |ti| ti.getData == model }.first .showItem(edited_tree_item) @tree_editor_text_proxy..dispose @tree_editor_text_proxy = nil after_write&.call(edited_tree_item) @edit_in_progress = false end end } on_focus_lost(&action) on_key_pressed { |key_event| if key_event.keyCode == swt(:cr) action.call(key_event) elsif key_event.keyCode == swt(:esc) cancel.call end } } @tree_editor_text_proxy..selectAll } @tree_editor.setEditor(@tree_editor_text_proxy., tree_item); end |
#widget_property_listener_installers ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/glimmer/swt/tree_proxy.rb', line 33 def super.merge({ Java::OrgEclipseSwtWidgets::Tree => { selection: lambda do |observer| { |selection_event| observer.call(@swt_widget.getSelection) } end }, }) end |