Sha256: af515c77d48cc1a141ed725a4fd57d504adab9da6a56170b6dbc994ab4300e1b

Contents?: true

Size: 1.46 KB

Versions: 15

Compression:

Stored size: 1.46 KB

Contents

module Fidgit
  class Group < Packer
    attr_reader :selected

    event :changed

    def value; @selected ? @selected.value : nil; end

    # @example
    #   group do
    #     horizontal do
    #       radio_button 1, text: '1', checked: true
    #       radio_button 2, text: '2'
    #       subscribe :changed do |sender, value|
    #         puts value
    #       end
    #     end
    #   end
    #
    # @param (see Packer#initialize)
    #
    # @option (see Packer#initialize)
    def initialize(options = {}, &block)
      super(options)

      @selected = nil
      @buttons = []
    end

    def add_button(button)
      @buttons.push button
      self.value = button.value if button.checked?
      nil
    end

    def remove_button(button)
      self.value = nil if button == @selected
      @buttons.delete button
      nil
    end

    # @example
    #   @my_group = group do
    #     horizontal do
    #       radio_button(1, text: '1', checked: true)
    #       radio_button(2, text: '2')
    #     end
    #    end
    #
    #   # later
    #   @my_group.value = 2
    def value=(value)
      if value != self.value
        button = @buttons.find { |b| b.value == value }
        @selected.uncheck if @selected and @selected.checked?
        @selected = button
        @selected.check if @selected and not @selected.checked?
        publish :changed, self.value
      end

      value
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
fidgit-0.2.4 lib/fidgit/elements/group.rb
fidgit-0.2.3 lib/fidgit/elements/group.rb
fidgit-0.2.2 lib/fidgit/elements/group.rb
fidgit-0.2.1 lib/fidgit/elements/group.rb
fidgit-0.2.0 lib/fidgit/elements/group.rb
fidgit-0.1.10 lib/fidgit/elements/group.rb
fidgit-0.1.9 lib/fidgit/elements/group.rb
fidgit-0.1.8 lib/fidgit/elements/group.rb
fidgit-0.1.7 lib/fidgit/elements/group.rb
fidgit-0.1.6 lib/fidgit/elements/group.rb
fidgit-0.1.5 lib/fidgit/elements/group.rb
fidgit-0.1.4 lib/fidgit/elements/group.rb
fidgit-0.1.3 lib/fidgit/elements/group.rb
fidgit-0.1.2 lib/fidgit/elements/group.rb
fidgit-0.1.1 lib/fidgit/elements/group.rb