lib/fidgit/elements/combo_box.rb in fidgit-0.2.4 vs lib/fidgit/elements/combo_box.rb in fidgit-0.2.5

- old
+ new

@@ -1,114 +1,114 @@ -# encoding: utf-8 - -module Fidgit -class ComboBox < Button - extend Forwardable - - ARROW_IMAGE = "combo_arrow.png" - - def_delegators :@menu, :each - - event :changed - - def index; @menu.index(@value) end - def value; @value; end - - def value=(value) - if @value != value - @value = value - item = @menu.find(@value) - self.text = item.text - self.icon = item.icon - publish :changed, @value - end - - value - end - - def index=(index) - if index.between?(0, @menu.size - 1) - self.value = @menu[index].value - end - - index - end - - # @param (see Button#initialize) - # @option (see Button#initialize) - # @option options [] :value - def initialize(options = {}, &block) - options = { - background_color: default(:background_color), - border_color: default(:border_color), - }.merge! options - - @value = options[:value] - - @hover_index = 0 - - @menu = MenuPane.new(show: false) do - subscribe :selected do |widget, value| - self.value = value - end - end - - @@arrow ||= Gosu::Image[ARROW_IMAGE] - - super('', options) - - rect.height = [height, font.height + padding_top + padding_bottom].max - rect.width = [width, font.height * 4 + padding_left + padding_right].max - end - - def item(text, value, options = {}, &block) - item = @menu.item(text, value, options, &block) - - # Force text to be updated if the item added has the same value. - if item.value == @value - self.text = item.text - self.icon = item.icon - end - - recalc - - item - end - - def draw - super - size = height / @@arrow.width.to_f - @@arrow.draw x + width - height, y, z, size, size - end - - def clicked_left_mouse_button(sender, x, y) - @menu.x = self.x - @menu.y = self.y + height + border_thickness - $window.game_state_manager.current_game_state.show_menu @menu - - nil - end - - def clear - self.text = "" - self.icon = nil - @menu.clear - end - - protected - def layout - super - - # Max width of all items + allow size for the arrow. - rect.width = [@menu.width + height, min_width].max - - nil - end - - - protected - # Any combo-box passed a block will allow you access to its methods. - def post_init_block(&block) - with(&block) - end -end +# encoding: utf-8 + +module Fidgit +class ComboBox < Button + extend Forwardable + + ARROW_IMAGE = "combo_arrow.png" + + def_delegators :@menu, :each + + event :changed + + def index; @menu.index(@value) end + def value; @value; end + + def value=(value) + if @value != value + @value = value + item = @menu.find(@value) + self.text = item.text + self.icon = item.icon + publish :changed, @value + end + + value + end + + def index=(index) + if index.between?(0, @menu.size - 1) + self.value = @menu[index].value + end + + index + end + + # @param (see Button#initialize) + # @option (see Button#initialize) + # @option options [] :value + def initialize(options = {}, &block) + options = { + background_color: default(:background_color), + border_color: default(:border_color), + }.merge! options + + @value = options[:value] + + @hover_index = 0 + + @menu = MenuPane.new(show: false) do + subscribe :selected do |widget, value| + self.value = value + end + end + + @@arrow ||= Gosu::Image[ARROW_IMAGE] + + super('', options) + + rect.height = [height, font.height + padding_top + padding_bottom].max + rect.width = [width, font.height * 4 + padding_left + padding_right].max + end + + def item(text, value, options = {}, &block) + item = @menu.item(text, value, options, &block) + + # Force text to be updated if the item added has the same value. + if item.value == @value + self.text = item.text + self.icon = item.icon + end + + recalc + + item + end + + def draw + super + size = height / @@arrow.width.to_f + @@arrow.draw x + width - height, y, z, size, size + end + + def clicked_left_mouse_button(sender, x, y) + @menu.x = self.x + @menu.y = self.y + height + border_thickness + $window.game_state_manager.current_game_state.show_menu @menu + + nil + end + + def clear + self.text = "" + self.icon = nil + @menu.clear + end + + protected + def layout + super + + # Max width of all items + allow size for the arrow. + rect.width = [@menu.width + height, min_width].max + + nil + end + + + protected + # Any combo-box passed a block will allow you access to its methods. + def post_init_block(&block) + with(&block) + end +end end \ No newline at end of file