Module: VTListPane
- Defined in:
- lib/qooxview/helpers/vtlist_pane.rb
Overview
ViewType ListPane - a simple interface to use lists - rails-copy
Usage:
include VTListPane
gui_vbox do
vtlp_list :names, 'nm'
:delete
end
gui_vbox do
show_find :name
show_str :login
show_int :uid
end
This will show a list with all available names. The data_class needs to have the following methods defined (they’re already defined if “:nm” exists in data_class):
def list_nm
end
def find_nm
end
The following buttons are defined:
- new - clear the fields
- save - saves the entry, eventually adding a new field
- delete - takes away the chosen entry
Instance Method Summary collapse
- #empty_fields ⇒ Object
- #rpc_button_delete(session, data) ⇒ Object
- #rpc_button_new(session, data) ⇒ Object
- #rpc_button_save(session, data) ⇒ Object
- #rpc_list_choice_vtlistpanel(session, name, data) ⇒ Object
- #vtlp_get_entity(d) ⇒ Object
- #vtlp_list(field, method, *args) ⇒ Object
- #vtlp_list_entity(field, entity, method, *args) ⇒ Object
- #vtlp_setup(field, method, *args) ⇒ Object
- #vtlp_update_list(session, choice = nil) ⇒ Object
Instance Method Details
#empty_fields ⇒ Object
118 119 120 121 122 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 118 def empty_fields layout_recurse.select { |l| !%w(list button entity).index(l.dtype.to_s) }.collect { |l| l.name } end |
#rpc_button_delete(session, data) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 88 def (session, data) dputs(3) { "session, data: #{[session, data.inspect].join(':')}" } id = vtlp_get_entity(data) dputs(3) { "Got #{id.inspect}" } if id dputs(2) { "Deleting entry #{id}" } id.delete end vtlp_update_list(session) end |
#rpc_button_new(session, data) ⇒ Object
83 84 85 86 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 83 def (session, data) reply(:empty, empty_fields) + vtlp_update_list(session) end |
#rpc_button_save(session, data) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 100 def (session, data) field = vtlp_get_entity(data) dputs(3) { "Field is #{field.inspect}, setting data #{data.inspect}" } selection = data[@vtlp_field][0] if field field.data_set_hash(data.to_sym) else if data[@vtlp_method].to_s.length > 0 n = @data_class.create(data.to_sym) selection = n.id else dputs(0) { "Didn't have a #{@vtlp_method}" } end end dputs(3) { "vtlp_method is #{@vtlp_method} - selection is #{selection.inspect}" } vtlp_update_list(session, selection) end |
#rpc_list_choice_vtlistpanel(session, name, data) ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 124 def rpc_list_choice_vtlistpanel(session, name, data) #dputs_func ret = if @update and @update == :before rpc_update(session) else [] end dputs(3) { "rpc_list_choice with #{name} - #{data.inspect}" } if name == @vtlp_field dputs(4) { layout_recurse.collect { |l| "#{l.name}::#{l.dtype}" }.join(' - ') } dputs(4) { empty_fields.join(' - ') } ret = reply(:empty, empty_fields) item = if @vtlp_use_entity field_value = data[name].get_unique data[name] else field_value = data[name][0] dputs(4) { "replying with field_value of #{field_value}" } vtlp_get_entity(data) end dputs(4) { "item is #{item.inspect}" } if item ret += reply(:update, item.to_hash) end ret += reply(:update, {@vtlp_field.to_sym => [field_value]}) session.s_data[@vtlp_field.to_sym] = field_value end if @update and @update != :before ret += rpc_update(session) end dputs(3) { "reply is #{ret.inspect}" } ret end |
#vtlp_get_entity(d) ⇒ Object
68 69 70 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 68 def vtlp_get_entity(d) @vtlp_use_entity ? d : @data_class.get_data_instance(d[@vtlp_field][0]) end |
#vtlp_list(field, method, *args) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 48 def vtlp_list(field, method, *args) @vtlp_use_entity = false args_hash = vtlp_setup(field, method, *args) show_list_single field, "Entities.#{@data_class.class.to_s}.#{@vtlp_method_list}", args_hash.merge(:callback => true) self.class_eval <<-RUBY def rpc_list_choice_#{field}( session, data ) rpc_list_choice_vtlistpanel( session, "#{field}", data ) end RUBY end |
#vtlp_list_entity(field, entity, method, *args) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 60 def vtlp_list_entity(field, entity, method, *args) @vtlp_use_entity = true args_hash = vtlp_setup(field, method, *args) show_entity field, entity, 'single', @vtlp_method, args_hash.merge(:callback => true) end |
#vtlp_setup(field, method, *args) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 33 def vtlp_setup(field, method, *args) @vtlp_field = field.to_s @vtlp_method = method.to_s.sub(/^rev_/, "") if args.length > 0 and args[0].class == String @vtlp_method_list = args.shift else @vtlp_method_list = "listp_#{method.to_s}" end if args.length > 0 and args[0].class == Hash args.shift else {} end end |
#vtlp_update_list(session, choice = nil) ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/qooxview/helpers/vtlist_pane.rb', line 72 def vtlp_update_list(session, choice = nil) list = @data_class.send(@vtlp_method_list) newval = (list + [choice]).compact rep = reply(:empty_update, @vtlp_field => newval) if @update rep += rpc_update(session) end rep end |