Class: Glimmer::SWT::TableItemProxy
Constant Summary
collapse
- STYLE =
<<~CSS
tr.table-item td {
padding-bottom: 0;
}
tr.table-item:nth-child(even):not(.selected) {
background: rgb(243, 244, 246);
}
CSS
Constants inherited
from WidgetProxy
WidgetProxy::DEFAULT_INITIALIZERS
Instance Attribute Summary collapse
Attributes inherited from WidgetProxy
#args, #background, #children, #disposed?, #enabled, #focus, #font, #foreground, #parent, #path, #rendered
Instance Method Summary
collapse
Methods inherited from WidgetProxy
#add_content_on_render, #add_css_class, #add_css_classes, #add_observer, #apply_property_type_converters, #build_dom, #can_handle_observation_request?, #clear_css_classes, #content, #content_on_render_blocks, #css_classes, #default_observation_request_to_event_mapping, #dispose, #dom_element, #effective_observation_request_to_event_mapping, for, #handle_observation_request, #has_style?, #id, #id=, #listener_dom_element, #listener_path, max_id_number_for, max_id_numbers, #method_missing, #name, next_id_number_for, #observation_request_to_event_mapping, #observation_requests, #parent_dom_element, #post_add_content, #post_dispose_child, #post_initialize_child, #property_type_converters, #remove_all_listeners, #remove_css_class, #remove_css_classes, #render, reset_max_id_numbers!, #selector, #set_attribute, #set_focus, #style_element, underscored_widget_name, widget_class, widget_exists?, #widget_property_listener_installers
#attribute_getter, #attribute_setter, #get_attribute, #set_attribute
Constructor Details
#initialize(parent, args, block) ⇒ TableItemProxy
Returns a new instance of TableItemProxy.
38
39
40
41
42
43
44
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 38
def initialize(parent, args, block)
super(parent, args, block)
on_widget_selected { |event|
parent.select(parent.index_of(self), event.meta?)
}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
in the class Glimmer::SWT::WidgetProxy
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
36
37
38
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 36
def data
@data
end
|
Instance Method Details
#cell_dom_element(column_index) ⇒ Object
87
88
89
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 87
def cell_dom_element(column_index)
dom_element.find("td:nth-child(#{column_index + 1})")
end
|
#data_hash ⇒ Object
75
76
77
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 75
def data_hash
@data_hash ||= {}
end
|
#dom ⇒ Object
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 160
def dom
table_item_id = id
table_item_id_style = css
table_item_css_classes = css_classes
table_item_css_classes << name
table_item_selection = parent.selection.include?(self)
if table_item_selection
table_item_css_classes << 'selected'
else
table_item_css_classes.delete('selected')
end
table_item_text_array = text_array
table_item_max_width = max_column_width(@edit_column_index) if @edit_column_index
@dom ||= html {
tr(id: table_item_id, style: table_item_id_style, class: table_item_css_classes.to_a.join(' ')) {
table_item_text_array.each_with_index do |table_item_text, column_index|
td('data-column-index' => column_index) {
if @edit_column_index == column_index
input(type: 'text', value: table_item_text, style: "max-width: #{table_item_max_width - 11}px;")
else
table_item_text
end
}
end
}
}.to_s
end
|
#edit(column_index) ⇒ Object
135
136
137
138
139
140
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 135
def edit(column_index)
return if @edit_column_index == column_index.to_i
parent.select(parent.index_of(self), false)
@edit_column_index = column_index.to_i
redraw
end
|
#element ⇒ Object
83
84
85
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 83
def element
'tr'
end
|
#get_data(key = nil) ⇒ Object
59
60
61
62
63
64
65
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 59
def get_data(key = nil)
if key.nil?
@data
else
data_hash[key]
end
end
|
#get_text(index) ⇒ Object
46
47
48
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 46
def get_text(index)
text_array[index]
end
|
#max_column_width(column_index) ⇒ Object
156
157
158
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 156
def max_column_width(column_index)
parent_dom_element.find("tr td:nth-child(#{column_index + 1})").first.width
end
|
150
151
152
153
154
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 150
def on_widget_selected(&block)
event = 'click'
delegate = $document.on(event, selector, &block)
EventListenerProxy.new(element_proxy: self, event: event, selector: selector, delegate: delegate)
end
|
#parent_path ⇒ Object
79
80
81
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 79
def parent_path
parent.items_path
end
|
#redraw ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 91
def redraw
super()
table_item_edit_handler = lambda do |event, cancel = false|
Async::Task.new do
text_value = event.target.value
edit_property = parent.column_properties[@edit_column_index]
edit_model = get_data
if !cancel && edit_model.send(edit_property) != text_value
edit_model.send("#{edit_property}=", text_value)
set_text(@edit_column_index, text_value)
end
@edit_column_index = nil
redraw
end
end
table_item_edit_cancel_handler = lambda do |event|
Async::Task.new do
table_item_edit_handler.call(event, true)
end
end
table_item_edit_key_handler = lambda do |event|
Async::Task.new do
if event.key_code == 13
table_item_edit_handler.call(event)
elsif event.key_code == 27
table_item_edit_cancel_handler.call(event)
end
end
end
if @edit_column_index
table_item_input = dom_element.find("td:nth-child(#{@edit_column_index + 1}) input")
if !table_item_input.empty?
Async::Task.new do
table_item_input.focus
table_item_input.on('keyup', &table_item_edit_key_handler)
table_item_input.on('focusout', &table_item_edit_cancel_handler)
end
end
end
end
|
#redraw_selection ⇒ Object
142
143
144
145
146
147
148
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 142
def redraw_selection
if parent.selection.include?(self)
dom_element.add_class('selected')
else
dom_element.remove_class('selected')
end
end
|
#set_data(key = nil, data_value) ⇒ Object
67
68
69
70
71
72
73
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 67
def set_data(key = nil, data_value)
if key.nil?
@data = data_value
else
data_hash[key] = data_value
end
end
|
#set_text(index, text_value) ⇒ Object
50
51
52
53
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 50
def set_text(index, text_value)
text_array[index] = text_value
redraw
end
|
#text_array ⇒ Object
55
56
57
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 55
def text_array
@text_array ||= []
end
|