Class: SKUI::Listbox
Overview
Instance Attribute Summary
Attributes inherited from Control
#rect
Attributes inherited from Base
#properties, #window
Instance Method Summary
collapse
Methods inherited from Control
#enabled, #left, #name, #position, #release, #stretch, #tab_index, #tooltip, #visible, #width, #z_index
Methods inherited from Base
#background_color, #font, #foreground_color, #inspect, #parent, #release, #to_js, #typename, #ui_id
Methods included from Events
#add_event_handler, included, #release_events, #trigger_event
Constructor Details
#initialize(list = []) ⇒ Listbox
Returns a new instance of Listbox.
27
28
29
30
31
32
33
34
35
36
37
|
# File 'src/SKUI/listbox.rb', line 27
def initialize( list = [] )
unless list.is_a?( Array )
raise( ArgumentError, 'Not an array.' )
end
super()
@properties[ :items ] = list.dup
@properties[ :multiple ] = false @properties[ :size ] = 1 end
|
Instance Method Details
#add_item(string, ...) ⇒ Integer
#add_item(array) ⇒ Integer
48
49
50
51
52
53
54
55
|
# File 'src/SKUI/listbox.rb', line 48
def add_item( *args )
args = args[0] if args.size == 1 && args[0].is_a?( Array )
@properties[ :items ].concat( args )
for string in args
window.bridge.call( 'UI.Listbox.add_item', ui_id, string )
end
args.length
end
|
#clear ⇒ Nil
59
60
61
62
63
|
# File 'src/SKUI/listbox.rb', line 59
def clear
@properties[ :items ].clear
window.bridge.call( 'UI.Listbox.clear', ui_id )
nil
end
|
#insert(index, string, ...) ⇒ Integer
70
71
72
73
74
75
76
77
78
79
|
# File 'src/SKUI/listbox.rb', line 70
def insert( index, *args )
unless index.is_a?(Integer)
raise( ArgumentError, 'Index must be an integer.' )
end
for string in args.reverse
@properties[ :items ].insert( index, string )
window.bridge.call( 'UI.Listbox.add_item', ui_id, string, index )
end
args.length
end
|
#items ⇒ Array<String>
11
|
# File 'src/SKUI/listbox.rb', line 11
prop_reader( :items )
|
#move_selected_down ⇒ Boolean
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'src/SKUI/listbox.rb', line 102
def move_selected_down
return false if items.empty?
cache_value = self.value
return false unless cache_value
values = cache_value.is_a?( Array ) ? cache_value : [cache_value]
values.sort! { |a, b| items.index(a) <=> items.index(b) }
values.reverse!
values.each { |value|
index = items.index( value )
return false if index >= items.length - 1
new_index = index + 2
insert( new_index, value )
remove_item( index )
}
self.value = cache_value
true
end
|
#move_selected_up ⇒ Boolean
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'src/SKUI/listbox.rb', line 83
def move_selected_up
return false if items.empty?
cache_value = self.value
return false unless cache_value
values = cache_value.is_a?( Array ) ? cache_value : [cache_value]
values.sort! { |a, b| items.index(a) <=> items.index(b) }
values.each { |value|
index = items.index( value )
return false if index == 0
new_index = index - 1
remove_item( index )
insert( new_index, value )
}
self.value = cache_value
true
end
|
#multiple ⇒ Boolean
15
|
# File 'src/SKUI/listbox.rb', line 15
prop_reader_bool( :multiple, &TypeCheck::BOOLEAN )
|
#multiple=(value) ⇒ Boolean
124
125
126
127
128
129
130
131
132
133
|
# File 'src/SKUI/listbox.rb', line 124
def multiple=( value )
value = TypeCheck::BOOLEAN.call( value )
if value && self.size < 2
raise( ArgumentError,
'Can only select multiple when size is greater than 1.' )
end
@properties[ :multiple ] = value
update_properties( :multiple )
value
end
|
#remove_item(string) ⇒ Nil
#remove_item(index) ⇒ Nil
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# File 'src/SKUI/listbox.rb', line 143
def remove_item( arg )
if arg.is_a?( String )
index = @properties[ :items ].index( arg )
unless index
raise( ArgumentError, 'Invalid item.' )
end
elsif arg.is_a?( Integer )
index = arg
else
raise( ArgumentError, 'Invalid argument.' )
end
if index < 0 || index >= @properties[ :items ].length
raise( ArgumentError, 'Index out of range.' )
end
@properties[ :items ].delete_at( index )
window.bridge.call( 'UI.Listbox.remove_item', ui_id, index )
nil
end
|
#rename(index, value) ⇒ Boolean
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
# File 'src/SKUI/listbox.rb', line 167
def rename( index, value )
unless index.is_a?(Integer)
raise( ArgumentError, 'Index must be an integer.' )
end
unless value.is_a?(String)
raise( ArgumentError, 'Value must be a string.' )
end
puts "rename"
if index > 0 && index < @properties[ :items ].size
@properties[ :items ][ index ] = value
window.bridge.call( 'UI.Listbox.rename', ui_id, index, value )
true
else
false
end
end
|
#size=(value) ⇒ Integer
188
189
190
191
192
193
194
195
196
197
198
199
|
# File 'src/SKUI/listbox.rb', line 188
def size=( value )
value = TypeCheck::INTEGER.call( value )
if value < 2
@properties[ :size ] = value
@properties[ :multiple ] = false
update_properties( :size, :multiple )
else
@properties[ :size ] = value
update_properties( :size )
end
value
end
|
#value ⇒ String
203
204
205
206
207
|
# File 'src/SKUI/listbox.rb', line 203
def value
data = window.bridge.get_value( "##{ui_id} select" )
@properties[ :value ] = data
data
end
|
#value=(string) ⇒ String
#value=(string, ...) ⇒ Array<String>
#value=(strings) ⇒ Array<String>
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
|
# File 'src/SKUI/listbox.rb', line 221
def value=( *args )
if args.size == 1 && args[0].is_a?( Array )
return send( :value=, *args[0] )
end
unless args.all? { |item| item.is_a?( String ) }
raise( ArgumentError, 'Arguments must be strings.' )
end
if !self.multiple? && args.size > 1
raise( ArgumentError, 'Not configured to select multiple items.' )
end
items = @properties[ :items ]
unless (items | args).length == items.length
not_in_list = (args - items).join(', ')
raise( ArgumentError, "'#{not_in_list}' not valid values in list." )
end
@properties[ :value ] = args.dup
update_properties( :value )
args
end
|