class MyColumn
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
decimals_attribute[R]
duration_format[R]
header[RW]
header_widget[RW]
list[RW]
renderer[RW]
timestamp_format[R]
Public Class Methods
new(list,header)
click to toggle source
Calls superclass method
# File lib/ListHolder/EditableList/Column.rb, line 9 def initialize(list,header) @list=list @header=header #replace our type if list has set 'ordering' attribute to us @header['type']='gtk_ordering' if list.gtk_attribute("ordering") == data @header['editable']=@header['editable']=='true' && (@header['wgrp_id'].to_i<1 || Nick.instance.ingroup_id?(@header['wgrp_id'].to_i)) attributes=Hash.new case header['type'] when 'gtk_combo' then @renderer=MyCellRendererCombo.new(self) when 'gtk_const_combo' then @renderer=MyCellRendererConstCombo.new(self) when 'gtk_text','String' then @renderer=MyCellRendererText.new(self) attributes={"text" => header['model_col']} when 'gtk_int','gtk_float','gtk_duration','gtk_timestamp','Integer','Bignum','gtk_ordering' then @renderer=MyCellRendererText.new(self) when 'gtk_pixbuf' then @renderer=MyCellRendererPixbuf.new(self) #attributes={:pixbuf => DrbImages.instance.image_of_id(header['model_col'].to_i)} when 'gtk_toggle' then @renderer=MyCellRendererToggle.new(self) attributes={"active" => header['model_col']} when 'gtk_const_text' then @renderer=MyCellRendererConstText.new(self) when 'gtk_combo_text' then @renderer=MyCellRendererComboText.new(self) when 'gtk_progress' then @renderer=MyCellRendererProgress.new(self) end super(header['header'],@renderer,attributes) set_widget(@header_widget=Gtk::Label.new(header['header']).set_visible(true)) header_widget.set_angle(gtk_attribute("header_angle").to_f) if gtk_attribute("header_angle") @list.tip.set_tip(header_widget,header['header'],'extra hint') @list.tip.enable #set color # header_widget.modify_fg(Gtk::STATE_NORMAL,Gdk::Color.new(0,35000, 0)) # header_widget.modify_fg(Gtk::STATE_PRELIGHT,Gdk::Color.new(0,35000, 0)) header_widget.modify_font(Pango::FontDescription.new(gtk_attribute("header-font")||list.gtk_attribute("list-header-font"))) @decimals_attribute=(gtk_attribute("decimals") || if header['type']=="gtk_float" then "2" else "0" end).to_i @duration_format=gtk_attribute("column-duration-format") || "%d %H:%M:%S" @timestamp_format=gtk_attribute("column-timestamp-format") || "%Y-%b-%d %H:%M:%S" case header['type'] when 'gtk_ordering' then set_cell_data_func(renderer) { |column, cell, model, iter| cell.text=path_format(iter)} when 'gtk_float' then set_cell_data_func(renderer) { |column, cell, model, iter| cell.text=number_format(iter[column.colnum],decimals_attribute)} when 'gtk_int' then set_cell_data_func(renderer) { |column, cell, model, iter| cell.text=number_format(iter[column.colnum],0)} when 'gtk_duration' then set_cell_data_func(renderer) { |column, cell, model, iter| cell.text=iter[column.colnum].strftime(@duration_format)} when 'gtk_timestamp' then set_cell_data_func(renderer) { |column, cell, model, iter| cell.text=iter[column.colnum]==0 ? "" : Time.at(iter[column.colnum]).strftime(@timestamp_format)} when 'gtk_const_text','gtk_combo_text' then set_cell_data_func(renderer) { |column, cell, model, iter| cell.text = cell.get_display(iter[column.colnum])} when 'gtk_combo','gtk_const_combo' then set_cell_data_func(renderer){ |column, cell, model, iter| cell.text = cell.get_text_from_value(iter[column.colnum])} when 'gtk_pixbuf' then if client.nil? set_cell_data_func(renderer){|column, cell, model, iter| cell.pixbuf=image_of_id(iter[column.colnum],get_conf(0,0,"list-image-size")) } else set_cell_data_func(renderer){|column, cell, model, iter| cell.pixbuf=client_image_of_id(iter[column.colnum],get_conf(0,0,"list-image-size")) } end when 'gtk_progress' then set_cell_data_func(renderer){|column, cell, model, iter| cell.set_value(iter[column.colnum])} end #query gtkattribute if header["querySQL"].length == 0 && sqlid=gtk_attribute("query") if sql=admin.qrow("select `sql` from `queries` where `id` = '#{sqlid}'")["sql"] header["querySQL"]=sql end end unless header["querySQL"].length == 0 #key gtkattribute if col_key=gtk_attribute("key") header["key"]=col_key else header["key"]="#{guess_base(header["querySQL"])}.cdata" end #display gtkattribute if col_disp=gtk_attribute("display") header["display"]=col_disp else header["display"]="#{guess_base(header["querySQL"])}.cdisplay" end end @renderer.set_column(self) #set_attributes(@renderer,attributes) @renderer.set_xalign(header['align'].to_f) set_resizable((gtk_attribute("resizable") || list.gtk_attribute("columns_resizable") || "true") == "true") set_expand(!resizable?) set_reorderable((gtk_attribute("reorderable") || list.gtk_attribute("columns_reorderable") || "false") =="true") set_spacing((list.gtk_attribute("column_spacing") || "1").to_i) set_min_width((list.default_attribute("column_min_width") || "1").to_i) #override the sorting attributes set by user if 'ordering' is set if list.gtk_attribute("ordering") #set sorting to us, and noone else if list.gtk_attribute("ordering") == data set_sort_column_id(header["model_col"]) @list.list_model.sorter.set_sort_column_id(header["model_col"]) end set_clickable(false) else set_sort_column_id(header["model_col"]) if (gtk_attribute("sortable") || list.gtk_attribute("columns_sortable") || "true") == "true" set_clickable(true) end set_alignment(header['align'].to_f) set_renderers_background set_renderers_foreground set_renderers_sensitive @renderer.set_font(get_conf(0,0,"list-cell-font")) load_config =begin signal_connect("destroy"){|me| # save_config @renderer.destroy if !@renderer.destroyed? } =end end
Public Instance Methods
colnum()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 151 def colnum header["model_col"] end
data()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 167 def data header["data"] end
data_type()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 159 def data_type list.headertypes[colnum] end
inspect()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 163 def inspect "ListColumn #{text}(#{@header['type']}:#{colnum})" end
load_config()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 135 def load_config if gtk_attribute("width") stored_width=gtk_attribute("width") else stored_width=get_conf(list.get_id,header['id'],"width") if resizable? end if stored_width set_sizing(Gtk::TreeViewColumn::FIXED) set_fixed_width(stored_width.to_i) end end
pango_ellipsize()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 198 def pango_ellipsize if gtk_attribute("ellipsize") case gtk_attribute("ellipsize") when 'NONE' then Pango::ELLIPSIZE_NONE when 'START' then Pango::ELLIPSIZE_START when 'END' then Pango::ELLIPSIZE_END when 'MIDDLE' then Pango::ELLIPSIZE_MIDDLE else Pango::ELLIPSIZE_NONE end else Pango::ELLIPSIZE_NONE end end
pango_layout_alignment()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 186 def pango_layout_alignment if alignment < 0.25 Pango::Layout::Alignment::LEFT else if alignment > 0.25 and alignment < 0.75 Pango::Layout::Alignment::CENTER else Pango::Layout::Alignment::RIGHT end end end
path_format(iter)
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 237 def path_format(iter) iter.path.indices.collect{|i| i+=1}.join(".") end
printable()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 174 def printable header['printable'] end
printable?()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 178 def printable? printable == "true" end
save_config()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 131 def save_config set_conf(list.get_id.to_s,header['id'].to_s,"width",width.to_s) if resizable? and width >0 end
set_colnum(colnum)
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 147 def set_colnum(colnum) header["model_col"]=colnum self end
set_renderers_background()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 212 def set_renderers_background unless @list.list_model.column_of_background.nil? add_attribute(@renderer,"cell-background",@list.list_model.column_of_background) edebug("#{@renderer} attribute added: background_color => #{@list.list_model.column_of_background}","list","debug") end end
set_renderers_foreground()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 218 def set_renderers_foreground unless @list.list_model.column_of_foreground.nil? unless ["MyCellRendererToggle", "MyCellRendererPixbuf", "MyCellRendererProgress"].include?(@renderer.class.name) add_attribute(@renderer,"foreground",@list.list_model.column_of_foreground) edebug("#{@renderer} attribute added: foreground_color => #{@list.list_model.column_of_foreground}","list","debug") end end end
set_renderers_sensitive()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 226 def set_renderers_sensitive unless @list.list_model.column_of_sensitive.nil? add_attribute(@renderer,"sensitive",@list.list_model.column_of_sensitive) edebug("#{@renderer} attribute added: sensitive => #{@list.list_model.column_of_sensitive}","list","debug") end end
summable?()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 182 def summable? ["gtk_duration","gtk_float","gtk_int"].include?(header['type']) end
text()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 170 def text header["header"] end
to_s()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 155 def to_s inspect end
wipe()
click to toggle source
# File lib/ListHolder/EditableList/Column.rb, line 232 def wipe save_config @renderer.destroy unless @renderer.destroyed? destroy unless destroyed? end