Class: MiniGL::DropDownList
Overview
This class represents a “drop-down list” form component, here composed of a group of Button
objects.
Instance Attribute Summary collapse
-
#open ⇒ Object
readonly
Whether the list of options is currently visible.
-
#options ⇒ Object
An array containing all the options (each of them Strings) that can be selected in the drop-down list.
-
#value ⇒ Object
The selected value in the drop-down list.
Attributes inherited from Component
#anchor, #anchor_offset_x, #anchor_offset_y, #enabled, #h, #panel, #params, #text, #visible, #w, #x, #y
Instance Method Summary collapse
-
#draw(alpha = 0xff, z_index = 0, color = 0xffffff, over_color = 0xcccccc) ⇒ Object
Draws the drop-down list.
-
#enabled=(value) ⇒ Object
:nodoc:.
-
#initialize(x, y = nil, font = nil, img = nil, opt_img = nil, options = nil, option = 0, text_margin = 0, width = nil, height = nil, text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &on_changed) ⇒ DropDownList
constructor
Creates a new drop-down list.
- #set_position(x, y) ⇒ Object
-
#update ⇒ Object
Updates the control.
Constructor Details
#initialize(x, y = nil, font = nil, img = nil, opt_img = nil, options = nil, option = 0, text_margin = 0, width = nil, height = nil, text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &on_changed) ⇒ DropDownList
Creates a new drop-down list.
Parameters:
- x
-
The x-coordinate of the object.
- y
-
The y-coordinate of the object.
- font
-
Font to be used by the buttons that compose the drop-down list.
- img
-
Image of the main button, i.e., the one at the top, that toggles visibility of the other buttons (the “option” buttons).
- opt_img
-
Image for the “option” buttons, as described above.
- options
-
Array of available options for this control (+String+s).
- option
-
Index of the firstly selected option.
- text_margin
-
Left margin of the text inside the buttons (vertically, the text will always be centered).
- width
-
Width of the control, used when no image is provided.
- height
-
Height of the control, used when no image is provided.
- text_color
-
Used as the
text_color
parameter in the constructor of the buttons. - disabled_text_color
-
Analogous to
text_color
. - over_text_color
-
Same as above.
- down_text_color
-
Same as above.
- retro
-
Whether the images should be loaded with the ‘retro’ option set (see
Gosu::Image
for details). If the value is omitted, theRes.retro_images
value will be used. - scale_x
-
Horizontal scale to draw the component with.
- scale_y
-
Vertical scale to draw the component with.
- anchor
-
See parameter with the same name in
Panel#initialize
for details. - on_changed
-
Action performed when the value of the dropdown is changed. It must be a block with two parameters, which will receive the old and the new value, respectively.
Obs.: This method accepts named parameters, but x
, y
, font
and options
are mandatory (also, img
and opt_img
are mandatory when width
and height
are not provided, and vice-versa).
1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 |
# File 'lib/minigl/forms.rb', line 1321 def initialize(x, y = nil, font = nil, img = nil, opt_img = nil, = nil, option = 0, text_margin = 0, width = nil, height = nil, text_color = 0, disabled_text_color = 0, over_text_color = 0, down_text_color = 0, retro = nil, scale_x = 1, scale_y = 1, anchor = nil, &on_changed) if x.is_a? Hash y = x[:y] font = x[:font] img = x[:img] opt_img = x[:opt_img] = x[:options] option = x.fetch(:option, 0) text_margin = x.fetch(:text_margin, 0) width = x.fetch(:width, nil) height = x.fetch(:height, nil) text_color = x.fetch(:text_color, 0) disabled_text_color = x.fetch(:disabled_text_color, 0) over_text_color = x.fetch(:over_text_color, 0) down_text_color = x.fetch(:down_text_color, 0) retro = x.fetch(:retro, nil) scale_x = x.fetch(:scale_x, 1) scale_y = x.fetch(:scale_y, 1) anchor = x.fetch(:anchor, nil) x = x[:x] end @img = img @opt_img = opt_img @options = @value = @options[option] @open = false @buttons = [] @buttons.push( Button.new(x, y, font, @value, img, text_color, disabled_text_color, over_text_color, down_text_color, false, true, text_margin, 0, width, height, nil, retro, scale_x, scale_y) { toggle } ) @scale_x = scale_x @scale_y = scale_y @w = @buttons[0].w @h = @buttons[0].h @max_h = (@options.size + 1) * @h @anchor_offset_x = x; @anchor_offset_y = y @anchor, x, y = FormUtils.check_anchor(anchor, x, y, @w, @h) super x, y, font, [option], text_color, disabled_text_color @buttons[0].set_position(x, y) @options.each_with_index do |o, i| b = Button.new(x, y + (i+1) * @h, font, o, opt_img, text_color, disabled_text_color, over_text_color, down_text_color, false, true, text_margin, 0, width, height, nil, retro, scale_x, scale_y) { old = @value @value = @buttons[0].text = o @on_changed.call(old, o) if @on_changed toggle } b.visible = false @buttons.push b end @on_changed = on_changed end |
Instance Attribute Details
#open ⇒ Object (readonly)
Whether the list of options is currently visible.
1282 1283 1284 |
# File 'lib/minigl/forms.rb', line 1282 def open @open end |
#options ⇒ Object
An array containing all the options (each of them Strings) that can be selected in the drop-down list.
1286 1287 1288 |
# File 'lib/minigl/forms.rb', line 1286 def @options end |
#value ⇒ Object
The selected value in the drop-down list. This is one of the options
.
1279 1280 1281 |
# File 'lib/minigl/forms.rb', line 1279 def value @value end |
Instance Method Details
#draw(alpha = 0xff, z_index = 0, color = 0xffffff, over_color = 0xcccccc) ⇒ Object
Draws the drop-down list.
Parameters:
- alpha
-
(
Fixnum
) The opacity with which the drop-down list will be drawn. Allowed values vary between 0 (fully transparent) and 255 (fully opaque). - z_index
-
(
Fixnum
) The z-order to draw the object. Objects with larger z-orders will be drawn on top of the ones with smaller z-orders. - color
-
Color of the buttons, if no image was provided, or color to apply a filter to the images.
- over_color
-
Color of the buttons when the mouse is over them (when no image was provided).
1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 |
# File 'lib/minigl/forms.rb', line 1427 def draw(alpha = 0xff, z_index = 0, color = 0xffffff, over_color = 0xcccccc) return unless @visible unless @img bottom = @y + (@open ? @max_h : @h) + @scale_y b_color = (alpha << 24) G.window.draw_quad @x - @scale_x, @y - @scale_y, b_color, @x + @w + @scale_x, @y - @scale_y, b_color, @x + @w + @scale_x, bottom, b_color, @x - @scale_x, bottom, b_color, z_index @buttons.each do |b| c = (alpha << 24) | (b.state == :over ? over_color : color) G.window.draw_quad b.x, b.y, c, b.x + b.w, b.y, c, b.x + b.w, b.y + b.h, c, b.x, b.y + b.h, c, z_index + 1 if b.visible end end @buttons[0].draw(alpha, z_index, color) @buttons[1..-1].each { |b| b.draw alpha, z_index + 1, color } end |
#enabled=(value) ⇒ Object
:nodoc:
1404 1405 1406 1407 1408 |
# File 'lib/minigl/forms.rb', line 1404 def enabled=(value) # :nodoc: toggle if @open @buttons[0].enabled = value @enabled = value end |
#set_position(x, y) ⇒ Object
1410 1411 1412 1413 |
# File 'lib/minigl/forms.rb', line 1410 def set_position(x, y) @x = x; @y = y @buttons.each_with_index { |b, i| b.set_position(x, y + i * @h) } end |