Class: PrintEditorItem

Inherits:
Gtk::EventBox
  • Object
show all
Includes:
ManqodCommon
Defined in:
lib/PrintEditor/PrintEditorItem.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(page_layout, page_num, id, x, y, width, height, gtk_type, text, font, text_alignment = "left") ⇒ PrintEditorItem

Returns a new instance of PrintEditorItem.



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
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
94
95
96
# File 'lib/PrintEditor/PrintEditorItem.rb', line 7

def initialize(page_layout,page_num,id,x,y,width,height,gtk_type,text,font,text_alignment="left")
	@id=id
	@x=x
	@y=y
	@pagenum=page_num
	@page_layout=page_layout
	@gtk_type=gtk_type
	@editable=true
	@width=width
	@height=height
	@text=text
	@font=font
	@dragging=false
	@resizing=false
	super()
	@child=case gtk_type
		when 'line','rectange' then Gtk::DrawingArea.new
		when 'text' then Gtk::TextView.new#.set_editable(true).set_sensitive(true)
		when 'list' then Gtk::Frame.new("list")
		when 'image' then Gtk::Image.new(Gtk::Stock::MISSING_IMAGE,Gtk::IconSize::DIALOG)
		else Gtk::Label.new("unknown object")
	end
	modify_font
	@child.modify_base(Gtk::StateType::PRELIGHT,Gdk::Color.parse("#EFEFEF"))
	@child.modify_base(Gtk::StateType::NORMAL,Gdk::Color.parse("#FBFBFB"))
	set_text_alignment(text_alignment)
	add(@child)
	set_size_request(width,height)
	set_can_focus(true)
	set_visible_window(true)
	set_border_width(0)
	set_above_child(true)# unless @gtk_type == "text"
	show_all
	@child.signal_connect('expose-event'){|me,event|
		case gtk_type
			when 'line'
				cr=me.window.create_cairo_context
				cr.scale(print_editor.zoom,print_editor.zoom)
				cr.move_to(0,0).line_to(@width,@height)
				cr.stroke
			when 'rectangle'
				cr=me.window.create_cairo_context
				cr.scale(print_editor.zoom,print_editor.zoom)
				cr.rectangle(0,0,@width,@height)
				cr.stroke
			when 'text',"list","image"
 			else
				edebug("unknown print-type: #{gtk_type}","printing","warning")
		end
	}
	signal_connect('button-press-event'){|me,event|
		if event.event_type == Gdk::Event::BUTTON2_PRESS then
			set_above_child(false) if @gtk_type == "text"
		else
			print_editor.set_focused_item(self)
			if event.state.control_mask?
				@xshift=event.x
				@yshift=event.y
				@owidth=@width*zoom
				@oheight=@height*zoom
				@pX,@pY=parent.pointer
				case event.button
					when 1 then @dragging=true
					when 2 then @resizing=true
				end
			end
		end
		true
	}
	signal_connect('motion-notify-event'){|me,event|
	snap=5
		if @dragging or @resizing
			pe=print_editor
			pe.set_focused_item(self)
			px=parent.pointer[0]
			py=parent.pointer[1]
			if @dragging
				info.item_x.set_value(((px-@xshift)/zoom/snap).round*snap)
				info.item_y.set_value(((py-@yshift)/zoom/snap).round*snap)
			end
			if @resizing
				info.item_width.set_value(((@owidth+px-@pX)/zoom/snap).round*snap)
				info.item_height.set_value(((@oheight+py-@pY)/zoom/snap).round*snap)
			end
		
		end
	}
	signal_connect('button-release-event'){|me,event| @dragging=false;@resizing=false;}

end

Instance Attribute Details

#draggingObject (readonly)

Returns the value of attribute dragging.



98
99
100
# File 'lib/PrintEditor/PrintEditorItem.rb', line 98

def dragging
  @dragging
end

#drawingObject (readonly)

Returns the value of attribute drawing.



98
99
100
# File 'lib/PrintEditor/PrintEditorItem.rb', line 98

def drawing
  @drawing
end

#editableObject (readonly)

Returns the value of attribute editable.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def editable
  @editable
end

#fontObject (readonly)

Returns the value of attribute font.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def font
  @font
end

#gtk_typeObject (readonly)

Returns the value of attribute gtk_type.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def gtk_type
  @gtk_type
end

#heightObject (readonly)

Returns the value of attribute height.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def height
  @height
end

#idObject (readonly)

Returns the value of attribute id.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def id
  @id
end

#page_layoutObject (readonly)

Returns the value of attribute page_layout.



98
99
100
# File 'lib/PrintEditor/PrintEditorItem.rb', line 98

def page_layout
  @page_layout
end

#pagenumObject (readonly)

Returns the value of attribute pagenum.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def pagenum
  @pagenum
end

#text_alignmentObject (readonly)

Returns the value of attribute text_alignment.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def text_alignment
  @text_alignment
end

#widthObject (readonly)

Returns the value of attribute width.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def width
  @width
end

#xObject (readonly)

Returns the value of attribute x.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def x
  @x
end

#yObject (readonly)

Returns the value of attribute y.



97
98
99
# File 'lib/PrintEditor/PrintEditorItem.rb', line 97

def y
  @y
end

Instance Method Details

#infoObject



100
101
102
# File 'lib/PrintEditor/PrintEditorItem.rb', line 100

def info
	print_editor.info
end

#modify_font(new_font = @font) ⇒ Object



158
159
160
161
162
163
164
165
166
# File 'lib/PrintEditor/PrintEditorItem.rb', line 158

def modify_font(new_font=@font)
 	if @gtk_type=="text"
		@font=new_font
		edebug("setting font :"+@font,"printing","info")
		fontdesc=Pango::FontDescription.new(@font)
		@child.modify_font(fontdesc) unless fontdesc.nil?
	end
  self
end

#moditemidObject



219
220
221
# File 'lib/PrintEditor/PrintEditorItem.rb', line 219

def moditemid
	print_editor.moditemid
end

#move_me(newx = @x, newy = @y, new_page = @page_num) ⇒ Object



111
112
113
114
115
116
# File 'lib/PrintEditor/PrintEditorItem.rb', line 111

def move_me(newx=@x,newy=@y,new_page=@page_num)
	@x=newx
	@y=newy
	@page_num=new_page
	page_layout.move(self)
end


223
224
225
# File 'lib/PrintEditor/PrintEditorItem.rb', line 223

def print_editor
	@page_layout.print_editor
end

#remove_from_mysqlObject



214
215
216
217
# File 'lib/PrintEditor/PrintEditorItem.rb', line 214

def remove_from_mysql
	query("delete from gtkprintitems where id='#{id}'")
	edebug("deleted","printing","info")
end

#set_editable(editable) ⇒ Object



150
151
152
153
154
155
156
# File 'lib/PrintEditor/PrintEditorItem.rb', line 150

def set_editable(editable)
	if @gtk_type=="text"
		@child.set_editable(editable)
		@child.set_sensitive(editable)
	end
	self
end

#set_size_request(new_width = @width, new_height = @height) ⇒ Object



118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/PrintEditor/PrintEditorItem.rb', line 118

def set_size_request(new_width=@width,new_height=@height)
	if @gtk_type == "image" and !@image_iter.nil?
		#image keep aspect ratio
		im=DrbImages.instance.client_image_of_id(@image_iter[0])
		if @width != new_width then
			@width=new_width
			@height=im.height*@width / im.width
			info.item_height.set_value(@height)
			else
			@height=new_height
			@width=im.width*@height / im.height
			info.item_width.set_value(@width)
		end
		super(width*zoom,height*zoom)
		@child.set_pixbuf(im.scale(@width*zoom,@height*zoom))
		page_layout.print_editor.tips.set_tip(self,"#{im.width}x#{im.height} (#{sprintf('%.2f',@width / im.width)})",'extra hint')
		else
		#not image
		@width=new_width
		@height=new_height
		super(width*zoom,height*zoom)
	end
end

#set_text(newtext = @text) ⇒ Object



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# File 'lib/PrintEditor/PrintEditorItem.rb', line 180

def set_text(newtext=@text)
	@text=newtext
	case @gtk_type
		when "text" then text_from_mysql(@text)
		when "image" then 
			@image_iter=nil
			info.item_image.model.each{|model,path,iter|
					@image_iter=iter if @text.to_i == iter[0]
			}
			if @image_iter.nil?
				@child=Gtk::Image.new(Gtk::Stock::MISSING_IMAGE,Gtk::IconSize::DIALOG)
			else
				@child.set_pixbuf(DrbImages.instance.client_image_of_id(@image_iter[0]).scale(@width,@height))
			end
	end
	self
end

#set_text_alignment(na = "left") ⇒ Object



167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/PrintEditor/PrintEditorItem.rb', line 167

def set_text_alignment(na="left")
	@text_alignment=na
	if @gtk_type == "text"
		@child.set_justification(
			case na
				when "right" then Gtk::Justification::RIGHT
				when "center" then Gtk::Justification::CENTER
				else Gtk::Justification::LEFT
			end
		)
	end
end

#textObject



142
143
144
145
146
147
148
# File 'lib/PrintEditor/PrintEditorItem.rb', line 142

def text
	case @gtk_type
		when "text" then @text=text_to_mysql
		when "list","image" then @text
		else ""
	end
end

#text_from_mysql(nt = text) ⇒ Object



227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/PrintEditor/PrintEditorItem.rb', line 227

def text_from_mysql(nt=text)
	if @gtk_type=="text"
		ont=nt.clone
		mydata=get_ancestor(WysiwygPrintEditor).mydata
		found=false
		while first=nt.index("{")
			found=true
			@child.buffer.insert_at_cursor(nt[0 .. first-1]) if first >= 1
			if last=nt[first .. nt.length].index("}")
				last=last+first
				datak=nt[first+1 .. last-1]
				if mydata.has_key?(datak)
					mydata[datak]="N/A" if mydata[datak].nil? || mydata[datak] == ""
					edebug("has key: [#{datak}] -> [#{mydata[datak]}]","printing","debug")
					unless tag = @child.buffer.tag_table.lookup(datak)
						tag=Gtk::TextTag.new(datak).set_foreground_gdk(Gdk::Color.new(65000,0,0))
						@child.buffer.tag_table.add(tag)
					end
					@child.buffer.insert_at_cursor(mydata[datak])
					bounds=@child.buffer.selection_bounds
					bounds[0].backward_cursor_positions(mydata[datak].length)
					@child.buffer.apply_tag(tag,bounds[0],bounds[1])
					nt=nt[last+1 .. nt.length+1]
				else
					edebug("no key: #{datak}","printing","debug")
					@child.buffer.insert_at_cursor(datak)		  
					nt=nt[last+1 .. nt.length+1]
				end
			else
				nt=nt[first+1 .. nt.length+1]
				@child.buffer.insert_at_cursor("{"+nt)
			end
		end

		@child.buffer.insert_at_cursor(nt) if nt.length>0
		edebug("from_mysql: [#{ont.inspect}] -> buffer: [#{@child.buffer.text}]","printing","debug")
	end
end

#text_to_mysqlObject



266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
# File 'lib/PrintEditor/PrintEditorItem.rb', line 266

def text_to_mysql
	if @gtk_type=="text"
		i=@child.buffer.bounds[0]
		tag="start"
		plast=nil
		while !tag.nil?
			tag=nil
			first=nil
			if i.begins_tag?(nil) then 
				first=i.offset;
				tag=i.toggled_tags(true)[0]
			else
				if i.forward_to_tag_toggle(nil) then
					first=i.offset
					tag=i.toggled_tags(true)[0]
				end
			end
			if tag and i.forward_to_tag_toggle(tag) then last=i.offset;end
			unless tag.nil?
				if plast.nil?
					ret=@child.buffer.get_text(@child.buffer.bounds[0],@child.buffer.get_iter_at_offset(first))
					else
					ret="#{ret}#{@child.buffer.get_text(@child.buffer.get_iter_at_offset(plast),@child.buffer.get_iter_at_offset(first))}"
				end
				ret="#{ret}{#{tag.name}}"
				plast=last
			end
		end
		if plast.nil?
			ret=@child.buffer.text
		else
			ret="#{ret}#{@child.buffer.get_text(@child.buffer.get_iter_at_offset(plast),@child.buffer.bounds[1])}"
		end
		edebug("to_mysql: [#{@child.buffer.text}] -> [#{ret}]","printing","debug")
	else
		ret=text
	end
	ret
end

#to_mysqlObject



205
206
207
208
209
210
211
212
# File 'lib/PrintEditor/PrintEditorItem.rb', line 205

def to_mysql
	if id.nil?
		query("insert into gtkprintitems set printid='#{moditemid}', gtktype='#{gtk_type}', page_number='#{pagenum}', x='#{x}', y='#{y}',  width='#{width}', height='#{height}', txt='#{text_to_mysql}', font='#{font}', text_alignment='#{text_alignment}'")
	else
		query("update gtkprintitems set printid='#{moditemid}', gtktype='#{gtk_type}', page_number='#{pagenum}', x='#{x}', y='#{y}',  width='#{width}', height='#{height}', txt='#{text_to_mysql}', font='#{font}', text_alignment='#{text_alignment}' where id='#{id}'")
	end
	edebug("saved","printing","info")
end

#to_sObject



306
307
308
# File 'lib/PrintEditor/PrintEditorItem.rb', line 306

def to_s
	"PrintItem{#{@gtk_type},id:#{id}}"
end

#unfocusObject



198
199
200
201
202
203
# File 'lib/PrintEditor/PrintEditorItem.rb', line 198

def unfocus
	@dragging=false
	set_state(Gtk::STATE_NORMAL)
	set_above_child(true)
	edebug("deselected","printing","info")
end

#zoomObject



107
108
109
# File 'lib/PrintEditor/PrintEditorItem.rb', line 107

def zoom
	print_editor.zoom
end

#zoomedObject



103
104
105
106
# File 'lib/PrintEditor/PrintEditorItem.rb', line 103

def zoomed
	move_me
	set_size_request
end