Class: Lore::GUI::Form_Generator
- Inherits:
-
Object
- Object
- Lore::GUI::Form_Generator
- Defined in:
- lib/lore/gui/form_generator.rb
Overview
Usage:
generator = Form_Generator.new(Table_Accessor, Lang, :readonly | :mutable)
form = generator.generate
See documentation of Cuba::GUI::Form for usage of form instances.
Instance Method Summary collapse
-
#generate ⇒ Object
Returns instance of Cuba::GUI::Form configured for klass passed in constructor:.
-
#initialize(klass = nil, labels = {}, mode = :mutable, custom_elements = {}) ⇒ Form_Generator
constructor
{{{.
Constructor Details
#initialize(klass = nil, labels = {}, mode = :mutable, custom_elements = {}) ⇒ Form_Generator
{{{
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/lore/gui/form_generator.rb', line 17 def initialize(klass=nil, labels={}, mode=:mutable, custom_elements={}) # {{{ @logger = Lore.logger @form = Form.new() @labels = labels @klass = klass @custom_elements = custom_elements Textarea.reset_counter @logger.debug('CUSTOM ELEMENTS: ' << @custom_elements.inspect) if @klass.nil? then return end @logger.debug('GET_ATTRIBUTES: ' << @klass.inspect) @logger.debug('GET_ATTRIBUTES: ' << @klass.get_attributes.inspect) @klass.get_attributes.each_pair { |table, attributes| # handle attributes passed via attrib_setup: attributes.each { |attrib| label_tag = table.gsub('.','--') << '--' << attrib if(@labels[label_tag].to_s != '' && @labels[label_tag] != label_tag) then label = @labels[label_tag] else label = attrib.gsub('_',' ').capitalize end # @custom_elements is a hash mapping attribute names to # Custom_Element instances. if ((@custom_elements[table]) and (@custom_elements[table][attrib])) then form_element = @custom_elements[table][attrib].new(table, attrib, label) form_element.mode = mode @form.add(form_element) elsif (@klass.get_primary_keys[table].nil? or !@klass.get_primary_keys[table].include? attrib) and (@klass.get_implicit_attributes[table].nil? or !@klass.get_implicit_attributes[table].include? attrib) and (@klass.get_has_a_klasses.nil? or @klass.get_has_a_klasses[table+'.'+attrib].nil?) and (@klass.get_hidden_attributes[table].nil? or !@klass.get_hidden_attributes[table].include? attrib) then case @klass.get_attribute_types[table][attrib] when Lore::PG_BOOL form_element = Radio.new(table, attrib, label, ['t','f']) when Lore::PG_SMALLINT || Lore::PG_INT form_element = Text.new(table, attrib, label, nil) when Lore::PG_VARCHAR form_element = Text.new(table, attrib, label, nil, nil) if (!@klass.get_maxlength.nil? && !@klass.get_maxlength[table].nil? && !@klass.get_maxlength[table][attrib.intern].nil?) then form_element.set_length(@klass.get_maxlength[table][attrib.intern]) end when Lore::PG_TEXT form_element = Textarea.new(table, attrib, label, nil, nil) if (!@klass.get_maxlength.nil? && !@klass.get_maxlength[table].nil? && !@klass.get_maxlength[table][attrib.intern].nil?) then form_element.set_length(@klass.get_maxlength[table][attrib.intern]) end when Lore::PG_TIMESTAMP_TIMEZONE form_element = Date.new(table, attrib, label, nil) when Lore::PG_DATE form_element = Date.new(table, attrib, label, nil) else form_element = Text.new(table, attrib, label, nil) end form_element.set_mode(mode) @form.add(form_element) elsif (!@klass.get_has_a_klasses.nil? and !@klass.get_has_a_klasses[table+'.'+attrib].nil?) then foreign_klass = @klass.get_has_a_klasses[table+'.'+attrib] foreign_table = foreign_klass.table_name form_element = Klass_Select.new(foreign_klass, table, attrib, label) form_element.set_mode(mode) @form.add(form_element) elsif (!@klass.get_aggregate_klasses.nil? and !@klass.get_aggregate_klasses[table+'.'+attrib].nil?) then foreign_klass = @klass.get_aggregate_klasses[table+'.'+attrib] foreign_table = foreign_klass.table_name form_element = Klass_Select.new(foreign_klass, table, attrib, label) form_element.set_mode(mode) @form.add(form_element) # Attribute is explixit (expected/required) but not # catched before -> Add attribute as hidden field: elsif (!@klass.get_explicit_attributes[table].nil? and @klass.get_explicit_attributes[table].include? attrib) then form_element = Hidden.new(table, attrib) @form.add(form_element) elsif (!@klass.get_implicit_attributes[table].nil? and @klass.get_implicit_attributes[table].include? attrib) then @logger.debug(attrib+' is implicit') end } } end |
Instance Method Details
#generate ⇒ Object
Returns instance of Cuba::GUI::Form configured for klass passed in constructor:
142 143 144 |
# File 'lib/lore/gui/form_generator.rb', line 142 def generate() # {{{ return @form end |