Class: IterLayout

Inherits:
Object
  • Object
show all
Includes:
ManqodCommon
Defined in:
lib/ListHolder/EditableList/ListPrintOperation/IterLayout.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])

Constant Summary

Constants included from ManqodCommon

ManqodCommon::CRITICAL, ManqodCommon::DEBUG, ManqodCommon::ERROR, ManqodCommon::INFO, ManqodCommon::NORMAL, ManqodCommon::WARNING

Constants included from Eprint

Eprint::DOMAIN, Eprint::LEVEL

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ManqodCommon

#add_where, #admin, #admin_cache, #admin_qrow, #admin_rows, #backtrace_to_debug, #cache, #changed_ids_of_base, #client, #client_fields, #client_image_of_id, #client_qrow, #client_query, #client_rows, #eeval, #escape_string, #getBinding, #guess_base, #guess_table, #image_of_id, #lzero, #manqod_db, #measure, #myexec, #nick, #nick_id, #number_format, #qrow, #query, #reconnect_manqod_db, #rows, #run_events, #send_message, #sendmail, #set_manqod_db_uri, #set_nick

Methods included from Eprint

#ecode, #edebug, #eerror, #einfo, #enormal, #eprint, #ewarn, #gtk_set_edebug, #set_edebug, #tell_exception

Constructor Details

#initialize(cr, iter, columns, pop, font) ⇒ IterLayout

Returns a new instance of IterLayout.



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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 7

def initialize(cr,iter,columns,pop,font)
	@row_height=0
	@page=0
	@y=0
	@row_spacing=1
	@pop=pop
	@iter=iter.clone
	@cell_layouts=Hash.new
	@insptext=""
	@cr=cr
	@crlw=0
	@gr=nil
	#create the layouts for the cells, and find out the highest cell
	columns.each{|col| 
		if col.printable?
			text_cell = cr.create_pango_layout
			text_cell.set_font_description(Pango::FontDescription.new(font)).set_width((pop.column_width[col.data]-@pop.cell_line_width)*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)
			text_to_display=case col.header["type"]
				when "gtk_ordering" then col.path_format(@iter) if iter && iter.class.name == "Gtk::TreeIter"
				when "gtk_duration" then (@iter[col.colnum] || 0).to_i.strftime(col.duration_format)
				when "gtk_timestamp" then Time.at(@iter[col.colnum] || 0).strftime(col.timestamp_format)
				when "gtk_const_text" then col.renderer.get_display(@iter[col.colnum].to_s)
				when "gtk_const_combo","gtk_combo" then col.renderer.get_text_from_value(@iter[col.colnum].to_s)
				else
				case col.data_type.to_s
						when "Bignum","Integer","Float" then number_format(@iter[col.colnum],col.decimals_attribute)
						else @iter[col.colnum].to_s
				end
			end
			text_cell.set_text(text_to_display.to_s)
			text_height = text_cell.size[1] / Pango::SCALE
			@row_height = text_height+@pop.cell_line_width+@pop.row_underline if @row_height < text_height+@pop.cell_line_width+@pop.row_underline
			cell_layouts[col.data] = text_cell
			@insptext+="#{col.data_type}:#{text_cell.text}\t"
		end
	}
	  if pop.print_with_gantt
	  	@gantt=pop.list.holder.gantt.gantt
	  	@gr=@gantt.rectangle_by_id?(@iter[@pop.list.list_model.column_of_id])
	  	min_x=pop.column_pos[:gantt]
	  end
	  if @gr
		gres=(@gantt.max_time-@gantt.min_time).to_f/pop.column_width[:gantt].to_f
		@gr.px1=min_x+(@gr.start-@gantt.min_time)/gres
		@gr.pwidth=@gr.dur/gres
		@gr.pheight=height
		@gr.py1=@y
  end
end

Instance Attribute Details

#cell_layoutsObject (readonly)

Returns the value of attribute cell_layouts.



58
59
60
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 58

def cell_layouts
  @cell_layouts
end

#pageObject (readonly)

Returns the value of attribute page.



58
59
60
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 58

def page
  @page
end

#popObject (readonly)

Returns the value of attribute pop.



58
59
60
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 58

def pop
  @pop
end

#row_heightObject (readonly)

Returns the value of attribute row_height.



58
59
60
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 58

def row_height
  @row_height
end

#yObject (readonly)

Returns the value of attribute y.



58
59
60
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 58

def y
  @y
end

Instance Method Details

#draw(cr) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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
158
159
160
161
162
163
164
165
166
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 84

def draw(cr)
	min_x=60000
	max_x=0
	cr.set_line_width(1).set_source_rgb(0,0,0).set_dash(100000).set_line_cap(Cairo::LineCap::ROUND)
	cell_layouts.each_pair{|key,layout|
		min_x=pop.column_pos[key] if min_x>pop.column_pos[key]
		max_x=pop.column_pos[key]+pop.column_width[key] if max_x<pop.column_pos[key]+pop.column_width[key]
		cr.move_to(pop.column_pos[key]+@pop.cell_line_width,y+@crlw*3+@pop.cell_line_width)
		cr.show_pango_layout(layout)
	  	cr.stroke
	  }
	  if @gr
		if @gr.has_child? then
			#draw a parent
			cr.set_line_width(1).set_source_rgba(0.1,0.1,0.1,0.9).set_dash(100000)
			cr.move_to(@gr.px1,@gr.py2).line_to(@gr.px1,@gr.py).line_to(@gr.px2,@gr.py).line_to(@gr.px2,@gr.py2)
		else
			#fill rectangle
			cr.set_line_width(0.3).set_dash(100000).set_source_rgba(0.1,0.1,0.1,0.04)
			cr.rounded_rectangle(@gr.px1,@gr.py1+1,@gr.pwidth,@gr.pheight-2,2)
			cr.fill
			cr.stroke
			#draw rectangle
			cr.set_source_rgba(0.1,0.1,0.9,0.7)
			cr.rounded_rectangle(@gr.px1,@gr.py1+1,@gr.pwidth,@gr.pheight-2,2)
			cr.stroke
			max_x=@gr.px2 if max_x<@gr.px2
		end
		cr.stroke
		#successors arrow
		@gr.successors.each_value{|pred|
			if pred && pred.px1
				cr.set_line_width(0.3).set_source_rgba(0.1,0.1,0.9,0.7).set_dash(100000)
				xx1=[@gr.px1+10,@gr.px2].min
				yy4=if @gr.py<pred.py1 then pred.py1-1 else pred.py2+1 end
				yya=if @gr.py<pred.py then -2 else 2 end
				cr.move_to(xx1,@gr.py)
				cr.curve_to(pred.px,@gr.py,pred.px,@gr.py,pred.px,yy4)
				#arrow
				cr.move_to(pred.px,yy4).rel_line_to(-2,yya)
				cr.move_to(pred.px,yy4).rel_line_to(2,yya)
				cr.stroke
			end
		}
		#start text
		cr.set_source_rgba(0,0,0,0.9)
		scell = cr.create_pango_layout.
	  		set_font_description(Pango::FontDescription.new(pop.gantt_cell_font)).
	  		set_text(@gr.fstart)
	  	sheight = scell.size[1] / Pango::SCALE
	  	swidth = scell.size[0] / Pango::SCALE
	  	if @gr.px1-(swidth+2) > pop.column_pos[:gantt]
 	  	cr.move_to(@gr.px1-(swidth+2),@gr.py-sheight/2)
			cr.show_pango_layout(scell)
 	  	cr.stroke
 	  end
		#finish text
		fcell = cr.create_pango_layout.
	  		set_font_description(Pango::FontDescription.new(pop.gantt_cell_font)).
	  		set_text(@gr.ffinish)
	  	fheight = scell.size[1] / Pango::SCALE
	  	fwidth = scell.size[0] / Pango::SCALE
	  	if @gr.px2+(fwidth+2) < pop.column_pos[:gantt] + pop.column_width[:gantt]
 	  	cr.move_to(@gr.px2+2,@gr.py-sheight/2)
			cr.show_pango_layout(fcell)
 	  	cr.stroke
 	  end
	end

	cr.set_source_rgba(0.1,0.1,0.1,0.7).set_dash(100000)
	if @line_above
		cr.set_line_width(@pop.sum_line_width)
		cr.move_to(min_x,y+@crlw-@row_spacing)
		cr.line_to(max_x,y+@crlw-@row_spacing)
	  	cr.stroke
	end
	if @pop.row_underline>0
		cr.set_line_width(@pop.row_underline)
		cr.move_to(min_x,y+@row_height+@row_spacing)
		cr.line_to(max_x,y+@row_height+@row_spacing)
	  	cr.stroke
	end
end

#heightObject



68
69
70
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 68

def height
	@row_height
end

#inspectObject



168
169
170
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 168

def inspect
	@insptext+"\theight=#{height}\ty=#{y}\tpage=#{page}"
end

#set_line_above(line_above) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 60

def set_line_above(line_above)
	if @line_above=line_above
		@crlw=@pop.sum_line_width
		@row_height=@row_height+@crlw*3
	end
	self
end

#set_page(page) ⇒ Object



80
81
82
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 80

def set_page(page)
	@page=page
end

#set_row_spacing(ns) ⇒ Object



76
77
78
79
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 76

def set_row_spacing(ns)
	@row_spacing=ns
	self
end

#set_y(newY) ⇒ Object



71
72
73
74
75
# File 'lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb', line 71

def set_y(newY)
	@y=newY
	@gr.py1=@y if @gr
	self
end