class MyRendererModel
this file is part of manqod manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
Attributes
column_order[RW]
filterer[RW]
header_types[RW]
mymodel[RW]
pc[RW]
renderers[RW]
type_def[RW]
typed[RW]
Public Class Methods
new(pc)
click to toggle source
Calls superclass method
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 45 def initialize(pc) @idx=Hash.new @pc=pc @typed="" td=item["type_def"] ta=Hash.new @desc=Hash.new @filterer=Filterer.new(self) @column_order=Array.new if multiselector? ta[:multiselector]=:multiselector column_order.push(:multiselector) end td.split("]").each{|t| if first=t.index("[") parts=t[first+1 .. t.length].split(":") hkey=parts[0] hval=parts[1]||"" hdesc=parts[2]||"" ta[hkey]=hval @desc[hkey]=hdesc column_order.push(hkey) edebug("header keys: |#{hkey}|=>|#{ta[hkey]}|(#{@desc[hkey]})","form-combo") end } if ta.empty? @type_def={'cdisplay'=>"text"} column_order.push('cdisplay') else @type_def=ta end @header_types=Array.new.push(String) #for id? @renderers=Hash.new # set_wrap_width(1) i=1 # type_def.each_pair{|key,val| column_order.each{|key| case type_def[key] when :multiselector if pc.class.name == "MyRendererList::List" renderer=Gtk::CellRendererToggle.new.set_activatable(true) column=Gtk::TreeViewColumn.new("",renderer, {:active => i}) pc.append_column(column) renderer.signal_connect("toggled",i,self){|me,path,col,fmodel| iter=fmodel.convert_iter_to_child_iter(fmodel.get_iter(path)) iter[col]=!iter[col] } header_types.push(TrueClass) renderers[key]=renderer pc.parentM.set_multiselector(self) else ewarn("multiselector attribute can only be interpreted on a List Form item") end when "text" renderer=Gtk::CellRendererText.new # renderer.set_width(20) case pc.class.name when "MyRendererCombo","MyRendererConstCombo", "FieldCombo" pc.pack_start(renderer,true) pc.add_attribute(renderer,:text,i) when "MyRendererList::List" column=Gtk::TreeViewColumn.new(@desc[key]||"",renderer, {:text => i}) pc.append_column(column) else edebug("unknown parent widget for this model!","form-combo","error") end header_types.push(String) renderers[key]=renderer when "pixbuf" renderer=Gtk::CellRendererPixbuf.new case pc.class.name when "MyRendererCombo" pc.pack_start(renderer,true) pc.add_attribute(renderer,:pixbuf,i) when "MyRendererList" column=Gtk::TreeViewColumn.new(header,renderer, {:pixbuf => i}) pc.append_column(column) end header_types.push(Gdk::Pixbuf) renderers[key]=renderer when "toggle" renderer=Gtk::CellRendererToggle.new # renderer.set_width(20) case pc.class.name when "MyRendererCombo","MyRendererConstCombo", "FieldCombo" pc.pack_start(renderer,true) pc.add_attribute(renderer,:active,i) when "MyRendererList::List" column=Gtk::TreeViewColumn.new(key,renderer, {:active => i}) # column.set_cell_data_func(renderer) { |column, cell, model, iter,col_num| cell.active=iter[i]=='true'} pc.append_column(column) else edebug("unknown parent widget for this model!","form-combo","error") end header_types.push(TrueClass) renderers[key]=renderer when "hidden" header_types.push(String) renderer=nil else renderer=nil end i=i+1 if renderer } @tree_key=pc.gtk_attribute("tree_key") @tree=!@tree_key.nil? header_types.push(TrueClass)#visible @column_of_visible=header_types.size-1 @mymodel=if @tree then Gtk::TreeStore.new(*header_types) else Gtk::ListStore.new(*header_types) end super(mymodel) set_visible_column(@column_of_visible) # pc.set_has_frame(false) pc.set_model(self) pc.set_row_separator_func{|model, iter| iter[0]=='separator' or iter[1]=='---' } end
Public Instance Methods
add_iter(row)
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 224 def add_iter(row) iter=if @tree then mymodel.append(if row[@tree_key].to_i == -1 then nil else find_iter_by_id(row[@tree_key])end) else mymodel.append end iter[0]=row['id'] if row.has_key?("id") iter[0]=row['cdata'] if row.has_key?("cdata") @idx[row['id']]=iter.clone if row.has_key?("id") i=0 column_order.each{|key| if type_def.has_key?(key) #key!="id" and key!="cdata" and i=i+1 case type_def[key] when "text","hidden" iter[i]=row[key].to_s if row.has_key?(key) and !row[key].nil? @max_col_widths[key]=row[key].to_s.length unless @max_col_widths.has_key?(key) @max_col_widths[key]=row[key].to_s.length unless @max_col_widths[key] > row[key].to_s.length end when "pixbuf" if row[key].class.name == "String" if row[key].length > 3 a=Array.new row[key].each_byte{|v|a.push(v)} begin if pixdata=Gdk::Pixdata.deserialize(a) then iter[i]=pixdata.to_pixbuf(true);end rescue Gdk::PixbufError => err end else iter[i]=client_image_of_id(row[key],"gtk-menu") end end when 'toggle' iter[i]=row[key] == 'true' end end } iter[@column_of_visible]=true end
admin()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 327 def admin parentM.admin end
cell_value(col,iter_id=pc.text)
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 286 def cell_value(col,iter_id=pc.text) fiter=nil ret=nil each {|model, path, iter| fiter=iter if iter[0].to_s==iter_id.to_s } if fiter and c=column_order.index(col) ret=fiter[c+1] end ret end
default()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 333 def default item["default"] end
find_iter_by_id(iter_id)
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 296 def find_iter_by_id(iter_id) @idx[iter_id] end
header_descriptions?()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 311 def header_descriptions? c=0 @desc.each_value{|h| c+=1 if h.length>0} c!=0 end
item()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 178 def item pc.item end
multiselector?()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 307 def multiselector? pc.class.name == "MyRendererList::List" && pc.pc.pc.multiselector? end
my()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 330 def my parentM.my end
parentM()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 321 def parentM pc.parentM end
parentselected()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 324 def parentselected pc.parentselected end
refilter()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 262 def refilter mymodel.each{|model,path,iter| if typed.nil? || typed == "" || iter[0] == 'separator' || iter[0] == '-1' then iter[@column_of_visible]=true else j=0 model.n_columns.downto(1){|i| if iter[i-1].class.name=="String" j+=1 if iter[i-1].upcase.index(typed.upcase) end } if j>0 i=iter.clone while i=i.parent i[@column_of_visible]=true end iter[@column_of_visible]=true else iter[@column_of_visible]=false end end } end
to_s()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 317 def to_s "model of #{pc}" end
toggled_ids()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 300 def toggled_ids ti=Array.new each {|model, path, iter| ti.push(iter[0]) if iter[1] == true} if multiselector? ti end
update()
click to toggle source
# File lib/FormHolder/Form/InputHolder/Common/Model.rb, line 182 def update pc.set_model(nil) mymodel.clear @idx.clear #query gtkattribute if item["querysql"].length == 0 && sqlid=pc.gtk_attribute("query") if sql=parentM.admin.qrow("select `sql` from `queries` where `id` = '#{sqlid}'")["sql"] item["querysql"]=sql end end if item['wantnew'] iter=if @tree then mymodel.append(nil) else mymodel.append end iter[0]='-1';iter[@column_of_visible]=true iter=if @tree then mymodel.append(nil) else mymodel.append end iter[0]='separator';iter[@column_of_visible]=true end @max_col_widths=Hash.new if item['field'] client_fields(item['querysql']){|field| row=Hash.new row['name']=field["name"] row['id']=row["name"] row['type']="#{field['type']}(#{field['length']}"+if field.has_key?("decimals") then "/#{field['decimals']}" else "" end + ")" add_iter(row) } else begin if item['admin'] parentM.admin.rows(eeval("\"#{item['querysql']}\"")).each{|row| add_iter(row);} else parentM.rows(eeval("\"#{item['querysql']}\"")).each{|row| add_iter(row);} end rescue => err retry if tell_exception("query error",backtrace_to_debug(err),"server","error",false,true,err.to_s) end end if item['querysql'].length>5 @max_col_widths.each_pair{|key,col_width| renderers[key].set_width_chars(col_width) if renderers.has_key?(key)} pc.set_model(self) end