Class: ColumnsHeaderLayout

Inherits:
Object
  • Object
show all
Defined in:
lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb

Overview

this file is part of manqod manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint([email protected])

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pop, cr, columns, h_font) ⇒ ColumnsHeaderLayout

Returns a new instance of ColumnsHeaderLayout.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 6

def initialize(pop,cr,columns,h_font)
  @header_height=0
  @y=0
  @header_layouts=Hash.new
  @pop=pop
  columns.each{|col|
    if col.printable?
      text_cell = cr.create_pango_layout
      text_cell.set_font_description(Pango::FontDescription.new(h_font)).set_width((pop.column_width[col.data]-@pop.header_line_width*2)*Pango::SCALE)
      text_cell.set_alignment(col.pango_layout_alignment)
      text_cell.set_wrap(Pango::Layout::WRAP_WORD_CHAR).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE)
      #set_alignment(Pango::Layout::ALIGN_CENTER).
      text_cell.set_text(col.text)
      text_cell_text_height = text_cell.size[1].to_f / Pango::SCALE
      text_cell_text_width = text_cell.size[0].to_f / Pango::SCALE
      @header_height = text_cell_text_height+@pop.header_line_width*2 if @header_height < text_cell_text_height+@pop.header_line_width*2
      header_layouts[col.data]=text_cell
    end
  }
  @header_height = @header_height + @pop.header_line_width
  if pop.print_with_gantt
    @gantt=pop.list.holder.gantt.gantt
#     @[email protected]_by_id?(@iter[@pop.list.list_model.column_of_id])
    min_x=pop.column_pos[:gantt]
    gres=(@gantt.max_time-@gantt.min_time).to_f/pop.column_width[:gantt].to_f
  end

end

Instance Attribute Details

#header_heightObject (readonly)

Returns the value of attribute header_height.



34
35
36
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 34

def header_height
  @header_height
end

#header_layoutsObject (readonly)

Returns the value of attribute header_layouts.



34
35
36
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 34

def header_layouts
  @header_layouts
end

#popObject (readonly)

Returns the value of attribute pop.



34
35
36
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 34

def pop
  @pop
end

#yObject (readonly)

Returns the value of attribute y.



34
35
36
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 34

def y
  @y
end

Instance Method Details

#draw(cr) ⇒ Object



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
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 44

def draw(cr)
  #column header
  header_layouts.each_pair{|key,layout|
    if @pop.draw_header_cell_borders
      cr.set_line_width(@pop.header_line_width)
      cr.rectangle(@pop.column_pos[key],y,@pop.column_width[key],header_height)
      if @pop.fill_header_background
        cr.move_to(@pop.column_pos[key]+@pop.header_line_width+3,y+@pop.header_line_width+3)
        cr.set_source_rgb(0.9,0.9,0.9)
        cr.fill_preserve()
        cr.set_source_rgb(0,0,0)
      end
    end
    cr.move_to(@pop.column_pos[key]+@pop.header_line_width,y+@pop.header_line_width)
    cr.show_pango_layout(layout)
  cr.stroke
  }
  #gantt header/scaler
  if pop.print_with_gantt
    #border
    cr.set_line_width(@pop.header_line_width).set_source_rgb(0,0,0).set_dash(100000)
    cr.rectangle(pop.column_pos[:gantt],y,pop.column_width[:gantt].to_f,header_height)
    cr.stroke
    #points
    pl=cr.create_pango_layout
    pl.set_font_description(Pango::FontDescription.new(pop.gantt_cell_font))
    pl.set_wrap(Pango::Layout::WRAP_WORD_CHAR).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE)

    gres=(@gantt.max_time-@gantt.min_time).to_f/pop.column_width[:gantt].to_f
    start=nil
    (@gantt.min_time).step(@gantt.max_time,@gantt.scaler_step){|i| 
      point=@gantt.time_round_res(i).to_i
      start=point/gres if start.nil?

      x=pop.column_pos[:gantt] + point/gres-start
      cr.set_source_rgba(48.0/255,88.0/255,116.0/255,1).set_line_width(@pop.header_line_width)
      cr.move_to(x,y+3)
      cr.rel_line_to(0,y + header_height - 3)
      cr.stroke

      cr.set_source_rgba(48.0/255,88.0/255,116.0/255,0.8)

      pl.set_text(Time.at(point).strftime_w(@gantt.scaler_format))
      cr.move_to(x+2,y)
      cr.show_pango_layout(pl)
        
      cr.stroke
    }
  end
end

#heightObject



36
37
38
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 36

def height
  @header_height
end

#set_y(newY) ⇒ Object



39
40
41
42
# File 'lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb', line 39

def set_y(newY)
  @y=newY
  self
end