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