Sha256: aa0fef830d6635e8f36ec92d07ae0e4b3076b99a7bd3af62fa43be338727019f

Contents?: true

Size: 1.97 KB

Versions: 64

Compression:

Stored size: 1.97 KB

Contents

require 'glimmer-dsl-libui'
require 'facets'

include Glimmer

Address = Struct.new(:street, :p_o_box, :city, :state, :zip_code)

def form_field(model, property)
  property = property.to_s
  entry { |e|
    label property.underscore.split('_').map(&:capitalize).join(' ')
    text model.send(property).to_s

    on_changed do
      model.send("#{property}=", e.text)
    end
  }
end

def address_form(address_model)
  form {
    form_field(address_model, :street)
    form_field(address_model, :p_o_box)
    form_field(address_model, :city)
    form_field(address_model, :state)
    form_field(address_model, :zip_code)
  }
end

def label_pair(model, attribute, value)
  name_label = nil
  value_label = nil
  horizontal_box {
    name_label = label(attribute.to_s.underscore.split('_').map(&:capitalize).join(' '))
    value_label = label(value.to_s)
  }
  observe(model, attribute) do
    value_label.text = model.send(attribute)
  end
end

def address_view(address_model)
  vertical_box {
    address_model.each_pair do |attribute, value|
      label_pair(address_model, attribute, value)
    end
  }
end

address1 = Address.new('123 Main St', '23923', 'Denver', 'Colorado', '80014')
address2 = Address.new('2038 Park Ave', '83272', 'Boston', 'Massachusetts', '02101')

window('Method-Based Custom Controls') {
  margined true
  
  horizontal_box {
    vertical_box {
      label('Address 1') {
        stretchy false
      }
      
      address_form(address1)
      
      horizontal_separator {
        stretchy false
      }
      
      label('Address 1 (Saved)') {
        stretchy false
      }
      
      address_view(address1)
    }
    
    vertical_separator {
      stretchy false
    }
    
    vertical_box {
      label('Address 2') {
        stretchy false
      }
      
      address_form(address2)
      
      horizontal_separator {
        stretchy false
      }
      
      label('Address 2 (Saved)') {
        stretchy false
      }
      
      address_view(address2)
    }
  }
}.show

Version data entries

64 entries across 64 versions & 1 rubygems

Version Path
glimmer-dsl-libui-0.6.0 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.6.0.pre.3 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.6.0.pre.2 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.6.0.pre.1 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.6.0.pre.0 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.24 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.23 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.22 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.21 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.20 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.19 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.18 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.17 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.16 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.15 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.14 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.13 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.12 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.11 examples/method_based_custom_controls2.rb
glimmer-dsl-libui-0.5.10 examples/method_based_custom_controls2.rb