Class: Glimmer::SWT::TableItemProxy
Constant Summary
Constants inherited
from WidgetProxy
WidgetProxy::DEFAULT_INITIALIZERS
Instance Attribute Summary collapse
Attributes inherited from WidgetProxy
#args, #background, #children, #enabled, #font, #foreground, #parent, #path
Instance Method Summary
collapse
Methods inherited from WidgetProxy
#add_child, #add_css_class, #add_css_classes, #add_observer, #apply_property_type_converters, #build_dom, #can_handle_observation_request?, #clear_css_classes, #content, #css_classes, #dispose, #dom_element, for, #handle_observation_request, #has_style?, #id, #id=, #listener_dom_element, #listener_path, max_id_number_for, max_id_numbers, #name, next_id_number_for, #observation_request_to_event_mapping, #parent_dom_element, #property_type_converters, #remove_css_class, #remove_css_classes, #render, reset_max_id_numbers!, #selector, #set_attribute, #style_element, underscored_widget_name, widget_class, widget_exists?, #widget_property_listener_installers
#attribute_getter, #attribute_setter, #get_attribute, #set_attribute
Constructor Details
Returns a new instance of TableItemProxy.
8
9
10
11
12
13
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 8
def initialize(parent, args)
super(parent, args)
on_widget_selected { |event|
parent.select(parent.index_of(self), event.meta?)
}
end
|
Instance Attribute Details
#data ⇒ Object
Returns the value of attribute data.
6
7
8
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 6
def data
@data
end
|
Instance Method Details
#data_hash ⇒ Object
44
45
46
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 44
def data_hash
@data_hash ||= {}
end
|
#dom ⇒ Object
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 117
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
100
101
102
103
104
105
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 100
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
52
53
54
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 52
def element
'tr'
end
|
#get_data(key = nil) ⇒ Object
28
29
30
31
32
33
34
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 28
def get_data(key = nil)
if key.nil?
@data
else
data_hash[key]
end
end
|
#get_text(index) ⇒ Object
15
16
17
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 15
def get_text(index)
text_array[index]
end
|
#max_column_width(column_index) ⇒ Object
113
114
115
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 113
def max_column_width(column_index)
parent_dom_element.find("tr td:nth-child(#{column_index + 1})").first.width
end
|
107
108
109
110
111
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 107
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
48
49
50
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 48
def parent_path
parent.items_path
end
|
#redraw ⇒ Object
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
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 56
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
|
#set_data(key = nil, data_value) ⇒ Object
36
37
38
39
40
41
42
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 36
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
19
20
21
22
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 19
def set_text(index, text_value)
text_array[index] = text_value
redraw
end
|
#text_array ⇒ Object
24
25
26
|
# File 'lib/glimmer/swt/table_item_proxy.rb', line 24
def text_array
@text_array ||= []
end
|