Class: Glimmer::SWT::Custom::RadioGroup
- Inherits:
-
Object
- Object
- Glimmer::SWT::Custom::RadioGroup
show all
- Includes:
- UI::CustomWidget
- Defined in:
- lib/glimmer/swt/custom/radio_group.rb
Overview
A custom widget rendering a group of radios generated via data-binding
Instance Attribute Summary
#body_root, #options, #parent, #parent_proxy, #swt_style, #swt_widget
Instance Method Summary
collapse
add_custom_widget_namespaces_for, #add_observer, after_body, #async_exec, #attribute_setter, before_body, body, #can_add_observer?, #content, current_custom_widgets, custom_widget_namespaces, def_option_attr_accessors, #disposed?, flyweight_custom_widget_classes, for, #get_attribute, #has_instance_method?, #has_style?, #initialize, keyword, #local_respond_to?, #method_missing, namespaces_for_class, #observer_registrations, option, options, #pack, #post_initialize_child, reset_custom_widget_namespaces, #respond_to?, shortcut_keyword, #sync_exec, #timer_exec
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class Glimmer::UI::CustomWidget
Instance Method Details
#can_handle_observation_request?(observation_request) ⇒ Boolean
75
76
77
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 75
def can_handle_observation_request?(observation_request)
radios.first&.can_handle_observation_request?(observation_request) || super(observation_request)
end
|
#delegate_observation_request_to_radios(observation_request, &block) ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 85
def delegate_observation_request_to_radios(observation_request, &block)
if observation_request != 'on_widget_disposed'
radios.count.times do |index|
radio = radios[index]
label = labels[index]
if observation_request == 'on_widget_selected'
radio_block = lambda do |event|
if event.widget.selection || selection_index == -1
event.widget = self.swt_widget
block.call(event)
end
end
label_block = lambda do |event|
self.selection_index = index
block.call(event)
end
radio.handle_observation_request(observation_request, &radio_block) if radio.can_handle_observation_request?(observation_request)
label.handle_observation_request('on_mouse_up', &label_block)
else
listener_block = lambda do |event|
event.widget = self.swt_widget
block.call(event)
end
radio.handle_observation_request(observation_request, &listener_block) if radio.can_handle_observation_request?(observation_request)
label.handle_observation_request(observation_request, &listener_block) if label.can_handle_observation_request?(observation_request)
end
end
end
end
|
#handle_observation_request(observation_request, &block) ⇒ Object
79
80
81
82
83
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 79
def handle_observation_request(observation_request, &block)
observation_requests << [observation_request, block]
delegate_observation_request_to_radios(observation_request, &block)
super
end
|
#has_attribute?(attribute_name, *args) ⇒ Boolean
119
120
121
122
123
124
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 119
def has_attribute?(attribute_name, *args)
(@composites.to_a + @radios.to_a + @labels.to_a).map do |widget_proxy|
return true if widget_proxy.has_attribute?(attribute_name, *args)
end
super
end
|
#items ⇒ Object
41
42
43
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 41
def items
@items || []
end
|
#items=(text_array) ⇒ Object
35
36
37
38
39
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 35
def items=(text_array)
selection_value = selection
@items = Array[*text_array]
build_radios
end
|
#labels ⇒ Object
71
72
73
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 71
def labels
@labels ||= []
end
|
#observation_requests ⇒ Object
115
116
117
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 115
def observation_requests
@observation_requests ||= Set.new
end
|
#radios ⇒ Object
67
68
69
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 67
def radios
@radios ||= []
end
|
#selection ⇒ Object
53
54
55
56
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 53
def selection
selection_value = labels[selection_index]&.text unless selection_index == -1
selection_value.to_s
end
|
#selection=(text) ⇒ Object
45
46
47
48
49
50
51
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 45
def selection=(text)
radios.count.times do |index|
radio = radios[index]
item = items[index]
radio.selection = item == text
end
end
|
#selection_index ⇒ Object
63
64
65
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 63
def selection_index
radios.index(radios.detect(&:selection)) || -1
end
|
#selection_index=(index) ⇒ Object
Also known as:
select
58
59
60
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 58
def selection_index=(index)
self.selection=(items[index])
end
|
#set_attribute(attribute_name, *args) ⇒ Object
126
127
128
129
130
131
132
133
134
|
# File 'lib/glimmer/swt/custom/radio_group.rb', line 126
def set_attribute(attribute_name, *args)
excluded_attributes = ['selection']
unless excluded_attributes.include?(attribute_name.to_s)
(@composites.to_a + @radios.to_a + @labels.to_a).each do |widget_proxy|
widget_proxy.set_attribute(attribute_name, *args) if widget_proxy.has_attribute?(attribute_name, *args)
end
end
super
end
|