manqod 1.1505.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/manqod +309 -0
- data/doc/HOWTOS +11 -0
- data/doc/INSTALL +6 -0
- data/doc/LICENCE +450 -0
- data/doc/README +33 -0
- data/doc/benchmarkings/ListLoader.rb +177 -0
- data/doc/manqod.png +0 -0
- data/doc/manqod.svg +99 -0
- data/doc/server.conf.example +24 -0
- data/lib/About.rb +93 -0
- data/lib/BarMenu/BarMenuItem.rb +46 -0
- data/lib/BarMenu.rb +76 -0
- data/lib/ButtonMenu/ButtonMenuItem.rb +82 -0
- data/lib/ButtonMenu/EndSeparator.rb +14 -0
- data/lib/ButtonMenu/StartSeparator.rb +14 -0
- data/lib/ButtonMenu.rb +154 -0
- data/lib/Common/Conf.rb +119 -0
- data/lib/Common/Eprint.rb +180 -0
- data/lib/Common/EventCache.rb +41 -0
- data/lib/Common/Fixnum.rb +18 -0
- data/lib/Common/Images.rb +41 -0
- data/lib/Common/ManqodDB.rb +40 -0
- data/lib/Common/MyExec.rb +77 -0
- data/lib/Common/MyImage.rb +47 -0
- data/lib/Common/Nick.rb +25 -0
- data/lib/Common/String.rb +15 -0
- data/lib/FormHolder/Form/InputHolder/Button.rb +133 -0
- data/lib/FormHolder/Form/InputHolder/Calendar.rb +101 -0
- data/lib/FormHolder/Form/InputHolder/CalendarButton.rb +117 -0
- data/lib/FormHolder/Form/InputHolder/ColorButton.rb +54 -0
- data/lib/FormHolder/Form/InputHolder/Combo.rb +82 -0
- data/lib/FormHolder/Form/InputHolder/ComboWithNew.rb +103 -0
- data/lib/FormHolder/Form/InputHolder/Common/Model.rb +337 -0
- data/lib/FormHolder/Form/InputHolder/ConstCombo.rb +18 -0
- data/lib/FormHolder/Form/InputHolder/ConstText.rb +17 -0
- data/lib/FormHolder/Form/InputHolder/Duration.rb +73 -0
- data/lib/FormHolder/Form/InputHolder/EditableList.rb +57 -0
- data/lib/FormHolder/Form/InputHolder/FieldCombo.rb +40 -0
- data/lib/FormHolder/Form/InputHolder/FieldList.rb +40 -0
- data/lib/FormHolder/Form/InputHolder/FileChooser.rb +131 -0
- data/lib/FormHolder/Form/InputHolder/FontButton.rb +37 -0
- data/lib/FormHolder/Form/InputHolder/FormImage.rb +74 -0
- data/lib/FormHolder/Form/InputHolder/HScale.rb +44 -0
- data/lib/FormHolder/Form/InputHolder/Hidden.rb +41 -0
- data/lib/FormHolder/Form/InputHolder/Label.rb +40 -0
- data/lib/FormHolder/Form/InputHolder/List.rb +176 -0
- data/lib/FormHolder/Form/InputHolder/MultiLine.rb +63 -0
- data/lib/FormHolder/Form/InputHolder/Password.rb +41 -0
- data/lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb +269 -0
- data/lib/FormHolder/Form/InputHolder/QBuilder.rb +333 -0
- data/lib/FormHolder/Form/InputHolder/RadioGroup.rb +82 -0
- data/lib/FormHolder/Form/InputHolder/SourceView.rb +100 -0
- data/lib/FormHolder/Form/InputHolder/Spin.rb +49 -0
- data/lib/FormHolder/Form/InputHolder/Text.rb +55 -0
- data/lib/FormHolder/Form/InputHolder/TimeStamp.rb +82 -0
- data/lib/FormHolder/Form/InputHolder/TimeStampButton.rb +93 -0
- data/lib/FormHolder/Form/InputHolder/Toggle.rb +43 -0
- data/lib/FormHolder/Form/InputHolder.rb +458 -0
- data/lib/FormHolder/Form.rb +529 -0
- data/lib/FormHolder.rb +203 -0
- data/lib/Gtk.rb +101 -0
- data/lib/GtkAttributes.rb +76 -0
- data/lib/Kernel.rb +48 -0
- data/lib/ListHolder/EditableList/CellRenderers/Combo.rb +91 -0
- data/lib/ListHolder/EditableList/CellRenderers/ComboText.rb +22 -0
- data/lib/ListHolder/EditableList/CellRenderers/ConstCombo.rb +12 -0
- data/lib/ListHolder/EditableList/CellRenderers/ConstText.rb +23 -0
- data/lib/ListHolder/EditableList/CellRenderers/Pixbuf.rb +18 -0
- data/lib/ListHolder/EditableList/CellRenderers/Progress.rb +36 -0
- data/lib/ListHolder/EditableList/CellRenderers/Text.rb +51 -0
- data/lib/ListHolder/EditableList/CellRenderers/Toggle.rb +35 -0
- data/lib/ListHolder/EditableList/Column.rb +223 -0
- data/lib/ListHolder/EditableList/DrbListModel.rb +809 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb +56 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/CustomPageSetup.rb +100 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/FooterLayout.rb +26 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/HeaderLayout.rb +35 -0
- data/lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb +89 -0
- data/lib/ListHolder/EditableList/ListPrintOperation.rb +365 -0
- data/lib/ListHolder/EditableList.rb +309 -0
- data/lib/ListHolder/GanttHolder/Gantt/Rectangle.rb +290 -0
- data/lib/ListHolder/GanttHolder/Gantt.rb +317 -0
- data/lib/ListHolder/GanttHolder/GanttFooter.rb +27 -0
- data/lib/ListHolder/GanttHolder/GanttScaler.rb +60 -0
- data/lib/ListHolder/GanttHolder.rb +31 -0
- data/lib/ListHolder/HistoryWindow.rb +63 -0
- data/lib/ListHolder/ListButtonHolder/ArchiveButton.rb +37 -0
- data/lib/ListHolder/ListButtonHolder/ButtonGroup.rb +32 -0
- data/lib/ListHolder/ListButtonHolder/FilterButton.rb +28 -0
- data/lib/ListHolder/ListButtonHolder/ListButton.rb +305 -0
- data/lib/ListHolder/ListButtonHolder/OrderingButton.rb +26 -0
- data/lib/ListHolder/ListButtonHolder/SumPanelButton.rb +23 -0
- data/lib/ListHolder/ListButtonHolder.rb +94 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Combo.rb +94 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/ConstCombo.rb +11 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Text.rb +26 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Toggle.rb +41 -0
- data/lib/ListHolder/ListPanel/ListFilter/FRenderer.rb +58 -0
- data/lib/ListHolder/ListPanel/ListFilter.rb +42 -0
- data/lib/ListHolder/ListPanel/ListSum/Text.rb +32 -0
- data/lib/ListHolder/ListPanel/ListSum.rb +72 -0
- data/lib/ListHolder/ListPanel.rb +60 -0
- data/lib/ListHolder.rb +241 -0
- data/lib/LoginWindow.rb +77 -0
- data/lib/MainRouter.rb +64 -0
- data/lib/ManqodCommon.rb +295 -0
- data/lib/ManqodHelp/FormatEditor/FormatJustificationWidget.rb +76 -0
- data/lib/ManqodHelp/FormatsEditor.rb +139 -0
- data/lib/ManqodHelp/HelpBrowser/FormatTagTable/FormatTag.rb +84 -0
- data/lib/ManqodHelp/HelpBrowser/FormatTagTable.rb +39 -0
- data/lib/ManqodHelp/HelpBrowser.rb +135 -0
- data/lib/ManqodHelp/HelpIndex.rb +62 -0
- data/lib/ManqodHelp/HelpToolbar.rb +16 -0
- data/lib/ManqodHelp.rb +120 -0
- data/lib/ManqodRPC.rb +37 -0
- data/lib/Memcache.rb +82 -0
- data/lib/MyConfig.rb +93 -0
- data/lib/Print/PrintItem/TextLayout.rb +47 -0
- data/lib/Print/PrintItem.rb +240 -0
- data/lib/Print.rb +199 -0
- data/lib/PrintEditor/ItemInfo/ItemImage.rb +30 -0
- data/lib/PrintEditor/ItemInfo/ItemList.rb +44 -0
- data/lib/PrintEditor/ItemInfo/ItemTextAlignment.rb +27 -0
- data/lib/PrintEditor/ItemInfo.rb +129 -0
- data/lib/PrintEditor/PageLayout.rb +91 -0
- data/lib/PrintEditor/PrintEditorItem.rb +310 -0
- data/lib/PrintEditor.rb +195 -0
- data/lib/RelationBuilder/RTable/RField.rb +91 -0
- data/lib/RelationBuilder/RTable.rb +293 -0
- data/lib/RelationBuilder/Relation/RelationHandle.rb +70 -0
- data/lib/RelationBuilder/Relation.rb +161 -0
- data/lib/RelationBuilder/RunQuery.rb +55 -0
- data/lib/RelationBuilder/SearchWindow.rb +72 -0
- data/lib/RelationBuilder.rb +468 -0
- data/lib/SB/ListProgress.rb +150 -0
- data/lib/SB/Messaging.rb +77 -0
- data/lib/SB.rb +29 -0
- data/lib/mynotebook.rb +131 -0
- data/lib/mytouchwindow.rb +162 -0
- data/lib/mywindow.rb +134 -0
- data/lib/wysiwyg-print-label.rb +57 -0
- metadata +231 -0
@@ -0,0 +1,240 @@
|
|
1
|
+
#this file is part of manqod
|
2
|
+
#manqod is distributed under the CDDL licence
|
3
|
+
#the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
|
4
|
+
|
5
|
+
class PrintItem
|
6
|
+
include ManqodCommon
|
7
|
+
|
8
|
+
def initialize(pop,itemdata,cr)
|
9
|
+
@pop=pop
|
10
|
+
@type=itemdata["gtktype"]
|
11
|
+
@x=itemdata["x"].to_f
|
12
|
+
@y=itemdata["y"].to_f
|
13
|
+
@txt=itemdata["txt"]
|
14
|
+
@font=itemdata["font"]
|
15
|
+
@width=itemdata["width"].to_f
|
16
|
+
@height=itemdata["height"].to_f
|
17
|
+
@page=itemdata["page_number"].to_i
|
18
|
+
@text_alignment=itemdata["text_alignment"]
|
19
|
+
@item_id=itemdata["id"]
|
20
|
+
@page_shift=0
|
21
|
+
@start_iter=nil
|
22
|
+
@cr=cr
|
23
|
+
end
|
24
|
+
attr_reader :type, :x, :y, :txt, :font, :width, :height, :page, :cr, :text_alignment
|
25
|
+
attr_reader :column_width, :draw_header_cell_borders, :column_pos, :fill_header_background, :header_line_width, :row_underline
|
26
|
+
attr_reader :cell_line_width, :sum_line_width, :list, :next_iter
|
27
|
+
|
28
|
+
def draw(cr_to_draw_to)
|
29
|
+
@cr=cr_to_draw_to
|
30
|
+
edebug("drawing item","printing","debug")
|
31
|
+
case @type
|
32
|
+
when "text" then
|
33
|
+
@layout.draw(cr)
|
34
|
+
when "line" then
|
35
|
+
cr.move_to(x,y)
|
36
|
+
cr.line_to(x+width,y+height)
|
37
|
+
when "rectangle" then
|
38
|
+
cr.rectangle(x,y,width,height)
|
39
|
+
when "list" then
|
40
|
+
unless @layout.nil?
|
41
|
+
#still draw a rectangle
|
42
|
+
cr.rectangle(x,y,width,height)
|
43
|
+
@layout.draw(cr)
|
44
|
+
else
|
45
|
+
cr.set_line_width(@cell_line_width)
|
46
|
+
list.columns.each{|col|
|
47
|
+
if col.printable?
|
48
|
+
cr.move_to(@column_pos[col.data],@columns_header.y + @columns_header.height + @header_line_width)
|
49
|
+
cr.line_to(@column_pos[col.data],@sum_y) #FIXME
|
50
|
+
end
|
51
|
+
}
|
52
|
+
cr.stroke
|
53
|
+
#draw a border around the list
|
54
|
+
cr.rectangle(x,y,width,@sum_y-y+@sum_height)
|
55
|
+
cr.stroke
|
56
|
+
#lay the layouts, including header
|
57
|
+
@layouts.each{|il| il.draw(cr)}
|
58
|
+
end
|
59
|
+
when 'image' then
|
60
|
+
cr.set_source_pixbuf(@pixbuf,@x,@y)
|
61
|
+
cr.paint
|
62
|
+
else
|
63
|
+
edebug("unknown print item #{@type}","printing","warning")
|
64
|
+
end
|
65
|
+
cr.stroke
|
66
|
+
end
|
67
|
+
|
68
|
+
def update
|
69
|
+
case @type
|
70
|
+
when "text" then @layout=TextLayout.new(cr,@txt,@font,@width,@x,@y,@text_alignment)
|
71
|
+
when 'image' then
|
72
|
+
pb = if client.nil?
|
73
|
+
DrbImages.instance.image_of_id(@txt.to_i,nil)
|
74
|
+
else
|
75
|
+
MyImage.new(@txt,true).pixbuf #FIXME! use the cache
|
76
|
+
end
|
77
|
+
@pixbuf = pb.scale(@width,@height)
|
78
|
+
when "list" then
|
79
|
+
list_id=@txt
|
80
|
+
@list=@pop.caller_object.holder.notebook.moditem_by_id(list_id) unless @pop.is_test
|
81
|
+
if @pop.is_test? or list.nil?
|
82
|
+
#printing a rectangle insted
|
83
|
+
@layout=TextLayout.new(cr,
|
84
|
+
if @pop.is_test?
|
85
|
+
"list ##{list_id} is here"
|
86
|
+
else
|
87
|
+
edebug("list ##{list_id} not found","printing","warning")
|
88
|
+
"list ##{list_id} not found"
|
89
|
+
end,
|
90
|
+
@font,@width,@x,@y)
|
91
|
+
else
|
92
|
+
#building the list
|
93
|
+
@print_sums=list.gtk_attribute("print_sums")=="true"
|
94
|
+
@sum_font=list.gtk_attribute("sum_font") || "verdana bold 6"
|
95
|
+
@cell_font=list.gtk_attribute("cell_font") || "verdana 6"
|
96
|
+
@columns_header_font=list.gtk_attribute("columns_header_font") || "verdana bold 6"
|
97
|
+
@row_spacing=list.gtk_attribute("row_spacing").to_f || 1.0
|
98
|
+
@column_spacing=list.gtk_attribute("column_spacing").to_f || 1.0
|
99
|
+
@draw_header_cell_borders=list.gtk_attribute("draw_header_cell_borders")=="true"
|
100
|
+
@fill_header_background=list.gtk_attribute("fill_header_background")=="true"
|
101
|
+
@header_line_width=list.gtk_attribute("header_line_width").to_f || 1.0
|
102
|
+
@draw_header_line=list.gtk_attribute("draw_header_line") == "true"
|
103
|
+
@cell_line_width=list.gtk_attribute("cell_line_width").to_f || 0.3
|
104
|
+
@sum_line_width=list.gtk_attribute("sum_line_width").to_f || 0.6
|
105
|
+
@print_title=list.gtk_attribute("print_title")=="true"
|
106
|
+
@row_underline=(list.gtk_attribute("row_underline") || 0.0).to_f
|
107
|
+
|
108
|
+
@layouts=Array.new
|
109
|
+
@current_height=y
|
110
|
+
if @print_title
|
111
|
+
title_layout=TextLayout.new(cr,"#{list.title}",@font,@width,@x,@current_height,'center')
|
112
|
+
@layouts.push(title_layout)
|
113
|
+
@current_height+=title_layout.height
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
columns_width_sum=0.0
|
118
|
+
col_cnt=0
|
119
|
+
list.columns.each{|col|
|
120
|
+
if col.printable?
|
121
|
+
columns_width_sum+=col.width.to_f
|
122
|
+
col_cnt+=1
|
123
|
+
end
|
124
|
+
} #summ the width of all columns
|
125
|
+
|
126
|
+
eerror("no printable columns for #{list}") if columns_width_sum==0
|
127
|
+
coef=(width-col_cnt*@column_spacing)/columns_width_sum
|
128
|
+
edebug("colums width sum: #{columns_width_sum}","printing","debug")
|
129
|
+
|
130
|
+
#@column_width will store the column positions on the context
|
131
|
+
@column_width=Hash.new
|
132
|
+
@column_pos=Hash.new #column positions
|
133
|
+
@sums=Hash.new #cell value sums are calculated here
|
134
|
+
col_cur_x=@x
|
135
|
+
list.columns.each{|col|
|
136
|
+
if col.printable?
|
137
|
+
@column_pos[col.data]=col_cur_x
|
138
|
+
@column_width[col.data]=col.width.to_f*coef
|
139
|
+
col_cur_x+=@column_width[col.data]+@column_spacing
|
140
|
+
@sums[col.colnum]=0 if col.header['type']=="gtk_int" or col.header['type']=="gtk_float"
|
141
|
+
end
|
142
|
+
}
|
143
|
+
|
144
|
+
@columns_header=ColumnsHeaderLayout.new(self,cr,list.columns,@columns_header_font).set_y(@current_height)
|
145
|
+
@layouts.push(@columns_header)
|
146
|
+
@current_height += @columns_header.height + @header_line_width
|
147
|
+
|
148
|
+
@sum_y=@y+height #max y for iters, when less rows than designed, we'll have the footer @ design position
|
149
|
+
|
150
|
+
@sum_height=if @print_sums then @columns_header.height else 0 end #FIXME: calculating with header_height for sum_height
|
151
|
+
@sum_y-=@sum_height
|
152
|
+
|
153
|
+
iter=@start_iter
|
154
|
+
while true
|
155
|
+
if iter.nil?
|
156
|
+
iter=list.list_model.sorter.iter_first
|
157
|
+
else
|
158
|
+
prev_iter=iter.clone
|
159
|
+
iter=nil if !iter.next!
|
160
|
+
end
|
161
|
+
while !iter.nil? and not (iter[list.list_model.column_of_child_key].to_i == @pop.myrows[@pop.current_row][list.list_model.key_parent].to_i or (!list.list_model.column_of_child_key2.nil? and iter[list.list_model.column_of_child_key2].to_i == @pop.myrows[@pop.current_row][list.list_model.key_parent2].to_i)) do
|
162
|
+
iter=nil if !iter.next!
|
163
|
+
end
|
164
|
+
if iter.nil?
|
165
|
+
break
|
166
|
+
else
|
167
|
+
il=IterLayout.new(cr,iter,list.columns, self,@cell_font)
|
168
|
+
|
169
|
+
#extend the sublist till the bottom of page
|
170
|
+
if @current_height + il.row_height > @sum_y and !@extended
|
171
|
+
@sum_y=@pop.paper_height - @sum_height
|
172
|
+
@extended=true
|
173
|
+
edebug("forcing page_shift for list #{list}","printing","info")
|
174
|
+
end
|
175
|
+
if @current_height + il.row_height > @pop.paper_height - @sum_height
|
176
|
+
#no more space
|
177
|
+
page_full=true
|
178
|
+
@next_iter=prev_iter
|
179
|
+
edebug("breaking list #{list} to the next page","printing","info")
|
180
|
+
break
|
181
|
+
end
|
182
|
+
il.y=@current_height
|
183
|
+
@current_height+=il.row_height+@row_spacing
|
184
|
+
@layouts.push(il)
|
185
|
+
@sums.each_key{|key| @sums[key]=@sums[key]+iter[key].to_f}
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
if @print_sums
|
190
|
+
il=IterLayout.new(cr,@sums,list.columns, self,@sum_font).set_y(@sum_y).set_line_above(@print_sums)
|
191
|
+
@layouts.push(il)
|
192
|
+
end
|
193
|
+
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
|
198
|
+
self
|
199
|
+
end
|
200
|
+
def type?(to_check)
|
201
|
+
@type == to_check
|
202
|
+
end
|
203
|
+
def page?(to_check)
|
204
|
+
@page.to_i == to_check.to_i
|
205
|
+
end
|
206
|
+
def extended?
|
207
|
+
@extended == true
|
208
|
+
end
|
209
|
+
def set_page_shift(new_page_shift)
|
210
|
+
@page_shift=new_page_shift
|
211
|
+
@page+=@page_shift
|
212
|
+
self
|
213
|
+
end
|
214
|
+
|
215
|
+
def set_txt(new_txt)
|
216
|
+
@txt=new_txt
|
217
|
+
self
|
218
|
+
end
|
219
|
+
def set_start_iter(new_start_iter)
|
220
|
+
@start_iter=new_start_iter
|
221
|
+
self
|
222
|
+
end
|
223
|
+
def set_y(new_y)
|
224
|
+
@y=new_y
|
225
|
+
self
|
226
|
+
end
|
227
|
+
def set_height(new_height)
|
228
|
+
@height=new_height
|
229
|
+
self
|
230
|
+
end
|
231
|
+
|
232
|
+
def inspect
|
233
|
+
"<PrintItem: id:#{@item_id}, type:#{@type}, page:#{@page}, txt:#{@txt}>"
|
234
|
+
end
|
235
|
+
def to_s
|
236
|
+
inspect
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
240
|
+
|
data/lib/Print.rb
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
#this file is part of manqod
|
2
|
+
#manqod is distributed under the CDDL licence
|
3
|
+
#the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
|
4
|
+
|
5
|
+
class MyPrintOperation < Gtk::PrintOperation
|
6
|
+
include Conf
|
7
|
+
include ManqodCommon
|
8
|
+
|
9
|
+
def initialize(caller_object,moditemid,ids_to_print=nil)
|
10
|
+
@parentselected=nil
|
11
|
+
@is_test=ids_to_print.nil?
|
12
|
+
@caller_object=caller_object
|
13
|
+
@ids_to_print=ids_to_print
|
14
|
+
case caller_object.class.name
|
15
|
+
when 'MyEditableList' then @parentselected=caller_object.get_cursor_id
|
16
|
+
when 'WysiwygPrintEditor'
|
17
|
+
else
|
18
|
+
edebug("unknown routing: "+caller_object.class.name,"printing","error")
|
19
|
+
end
|
20
|
+
@moditemid=moditemid
|
21
|
+
if is_test?
|
22
|
+
@moditem=qrow("select moditems.*,gtkprintpages.*,queries.sql from moditems left join queries on moditems.query_sql_id = queries.id left join gtkprintpages on moditems.id = gtkprintpages.moditem_id where moditems.id='#{@moditemid}'")
|
23
|
+
else
|
24
|
+
@moditem=admin.qrow("select moditems.*,gtkprintpages.*,queries.sql from moditems left join queries on moditems.query_sql_id = queries.id left join gtkprintpages on moditems.id = gtkprintpages.moditem_id where moditems.id='#{@moditemid}'")
|
25
|
+
end
|
26
|
+
super()
|
27
|
+
set_show_progress(true)
|
28
|
+
set_use_full_page(false)
|
29
|
+
set_unit(Gtk::PaperSize::UNIT_POINTS)
|
30
|
+
|
31
|
+
set_default_page_setup(Gtk::PageSetup.new)
|
32
|
+
default_page_setup.paper_size=Gtk::PaperSize.new(@moditem["paper_size_name"])
|
33
|
+
default_page_setup.orientation=case @moditem["orientation"]
|
34
|
+
when "portrait" then Gtk::PrintSettings::PageOrientation::PORTRAIT
|
35
|
+
when "reverse_portrait" then Gtk::PrintSettings::PageOrientation::REVERSE_PORTRAIT
|
36
|
+
when "landscape" then Gtk::PrintSettings::PageOrientation::LANDSCAPE
|
37
|
+
when "reverse_landscape" then Gtk::PrintSettings::PageOrientation::REVERSE_LANDSCAPE
|
38
|
+
else Gtk::PrintSettings::PageOrientation::PORTRAIT
|
39
|
+
end
|
40
|
+
default_page_setup.set_left_margin(@moditem["left_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["left_margin"].nil?
|
41
|
+
default_page_setup.set_right_margin(@moditem["right_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["right_margin"].nil?
|
42
|
+
default_page_setup.set_top_margin(@moditem["top_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["top_margin"].nil?
|
43
|
+
default_page_setup.set_bottom_margin(@moditem["bottom_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["bottom_margin"].nil?
|
44
|
+
|
45
|
+
signal_connect("begin-print") { |pop, context|
|
46
|
+
edebug("begin print","printing","info")
|
47
|
+
cr = context.cairo_context
|
48
|
+
# page_height=pop.default_page_setup.get_page_height(Gtk::PaperSize::UNIT_POINTS)
|
49
|
+
# paper_height=pop.default_page_setup.get_paper_height(Gtk::PaperSize::UNIT_POINTS)
|
50
|
+
@paper_height = context.page_setup.get_page_height(Gtk::PaperSize::UNIT_POINTS).to_f
|
51
|
+
@paper_width = context.page_setup.get_page_width(Gtk::PaperSize::UNIT_POINTS).to_f
|
52
|
+
|
53
|
+
@item_res=if is_test? then query("select * from gtkprintitems where printid='#{@moditemid}' order by page_number,y")
|
54
|
+
else item_res=admin.query("select * from gtkprintitems where printid='#{@moditemid}' order by page_number,y") end
|
55
|
+
@items_data=Array.new
|
56
|
+
while itemdata=@item_res.fetch_hash()
|
57
|
+
@items_data.push(itemdata.rehash)
|
58
|
+
end
|
59
|
+
@items_data_iter=nil
|
60
|
+
@items=Array.new
|
61
|
+
|
62
|
+
@sql=@moditem["sql"]
|
63
|
+
@sql=@moditem["querysql"] if @moditem["querysql"].length>5
|
64
|
+
if is_test?
|
65
|
+
@sql="#{@sql} limit 1"
|
66
|
+
myres=client.query(@sql)
|
67
|
+
else
|
68
|
+
myres=query(add_where(@sql,"#{guess_base(@sql)}.id in (#{@ids_to_print})"))
|
69
|
+
end
|
70
|
+
@myrows=Hash.new
|
71
|
+
@row_num=0
|
72
|
+
while myrow=myres.fetch_hash(true)
|
73
|
+
@row_num+=1
|
74
|
+
@myrows[@row_num]=myrow.rehash
|
75
|
+
end
|
76
|
+
|
77
|
+
# set_n_pages(@myrows.size*@pages.size)
|
78
|
+
@page_n=0
|
79
|
+
@current_row=1
|
80
|
+
@current_page=0
|
81
|
+
@page_shift=0
|
82
|
+
@sublist_start_iter=nil
|
83
|
+
pop.set_n_pages(@page_n)
|
84
|
+
}
|
85
|
+
|
86
|
+
signal_connect('paginate'){|pop,context|
|
87
|
+
cr=context.cairo_context
|
88
|
+
#start iterating PrintItems here
|
89
|
+
@items_data_iter=@items_data.first if @items_data_iter.nil?
|
90
|
+
|
91
|
+
if @items_data.include?(@items_data_iter)
|
92
|
+
@items.push(i=PrintItem.new(self,@items_data_iter,cr))
|
93
|
+
|
94
|
+
#start the broken sublist at top of page
|
95
|
+
i.set_height(i.y+i.height).set_y(0) if @prev_extended and i.type?("list")
|
96
|
+
|
97
|
+
i.set_txt(text_from_mysql(@myrows[current_row],@items_data_iter["txt"])).
|
98
|
+
set_page_shift(@page_shift).
|
99
|
+
set_start_iter(@sublist_start_iter).
|
100
|
+
update
|
101
|
+
#making sure page_n is max(i.page)
|
102
|
+
@page_n=i.page if @page_n<i.page
|
103
|
+
einfo("paginated: #{i}","printing")
|
104
|
+
#list continuation
|
105
|
+
@sublist_start_iter=i.next_iter
|
106
|
+
@prev_extended=i.extended?
|
107
|
+
end
|
108
|
+
if @sublist_start_iter or i.extended?
|
109
|
+
#we continue on next page
|
110
|
+
@page_shift+=1
|
111
|
+
einfo("sublist forced page_shift: #{@page_shift}","printing")
|
112
|
+
end
|
113
|
+
unless @sublist_start_iter
|
114
|
+
#iterate through the raw data
|
115
|
+
if @items_data_iter=@items_data[@items_data.index(@items_data_iter)+1]
|
116
|
+
false
|
117
|
+
else
|
118
|
+
if @current_row<@row_num
|
119
|
+
#next mysql row
|
120
|
+
@current_row+=1
|
121
|
+
@items_data_iter=@items_data.first
|
122
|
+
@page_shift=@page_n+1
|
123
|
+
einfo("page_shift: #{@page_shift}","printing")
|
124
|
+
false
|
125
|
+
else
|
126
|
+
#finish, setting n_pages
|
127
|
+
pop.set_n_pages(@page_n+1)
|
128
|
+
edebug("finished paginating at #{pop.n_pages}","printing")
|
129
|
+
true
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
}
|
134
|
+
|
135
|
+
signal_connect('draw-page'){|pop,context,page_number|
|
136
|
+
einfo("drawing page #{page_number+1}/#{pop.n_pages})","printing")
|
137
|
+
cr = context.cairo_context
|
138
|
+
@items.each{|item|
|
139
|
+
cr.set_line_width(1)
|
140
|
+
item.draw(cr) if item.page?(page_number) and !item.type?('image')
|
141
|
+
}
|
142
|
+
|
143
|
+
#workaround for the not printing text after an image in .ps
|
144
|
+
@items.each{|item|
|
145
|
+
edebug("drawing item #{item}","printing")
|
146
|
+
item.draw(cr) if item.page?(page_number) and item.type?('image')
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
self
|
151
|
+
end
|
152
|
+
attr_accessor :caller_object, :parentselected, :moditemid, :page_setup, :is_test, :pages, :current_row
|
153
|
+
attr_reader :myrows, :paper_width, :paper_height
|
154
|
+
|
155
|
+
def run(action)
|
156
|
+
#set_n_pages(pages["page_count"].to_i)
|
157
|
+
# set_default_page_setup(page_setup)
|
158
|
+
self.print_settings=Gtk::PrintSettings.new.deserialize(get_conf(moditemid,0,'print_settings'))
|
159
|
+
run_events(@moditemid,'print-Action')
|
160
|
+
super(action,caller_object.get_ancestor(Gtk::Window))
|
161
|
+
set_conf(moditemid,0,'print_settings',print_settings.serialize)
|
162
|
+
end
|
163
|
+
|
164
|
+
def text_from_mysql(mydata,nt=text)
|
165
|
+
found=false
|
166
|
+
rett=""
|
167
|
+
while first=nt.index("{")
|
168
|
+
found=true
|
169
|
+
rett=rett+nt[0 .. first-1] if first-1>=0
|
170
|
+
if last=nt[first .. nt.length].index("}")
|
171
|
+
last=last+first
|
172
|
+
datak=nt[first+1 .. last-1]
|
173
|
+
if mydata.has_key?(datak)
|
174
|
+
rett=rett+mydata[datak].to_s
|
175
|
+
nt=nt[last+1 .. nt.length]
|
176
|
+
else
|
177
|
+
rett=rett+datak
|
178
|
+
nt=nt[last+1 .. nt.length]
|
179
|
+
end#if
|
180
|
+
else
|
181
|
+
nt=nt[first+1 .. nt.length]
|
182
|
+
rett=rett+"{"+nt
|
183
|
+
end#if
|
184
|
+
end
|
185
|
+
if found
|
186
|
+
rett=rett+nt[1 .. nt.length] if nt.length>=1
|
187
|
+
else
|
188
|
+
rett=rett+nt if !nt.nil?
|
189
|
+
end
|
190
|
+
rett
|
191
|
+
end
|
192
|
+
|
193
|
+
def to_s
|
194
|
+
"<MyPrintOperation:#{@moditem["display"]}>"
|
195
|
+
end
|
196
|
+
def is_test?
|
197
|
+
@is_test
|
198
|
+
end
|
199
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#this file is part of manqod
|
2
|
+
#manqod is distributed under the CDDL licence
|
3
|
+
#the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
|
4
|
+
|
5
|
+
class ItemImage < Gtk::ComboBox
|
6
|
+
include ManqodCommon
|
7
|
+
def initialize
|
8
|
+
super(Gtk::ListStore.new(Integer,String,Gdk::Pixbuf))
|
9
|
+
frenderer=Gtk::CellRendererText.new
|
10
|
+
irenderer=Gtk::CellRendererPixbuf.new
|
11
|
+
pack_start(frenderer,true).add_attribute(frenderer,:text,1).
|
12
|
+
pack_start(irenderer,true).add_attribute(irenderer,:pixbuf,2)
|
13
|
+
DrbImages.instance.client_each{|image_id,im|
|
14
|
+
i=model.append
|
15
|
+
i[0]=im.image_id
|
16
|
+
i[1]=im.filename
|
17
|
+
i[2]=im.resize(32)
|
18
|
+
}
|
19
|
+
signal_connect("changed"){|me| @item.set_text(me.active_iter[0].to_s) unless me.active_iter.nil? or @item.nil?}
|
20
|
+
end
|
21
|
+
attr_reader :item
|
22
|
+
def update(item)
|
23
|
+
@item=item
|
24
|
+
found=nil
|
25
|
+
model.each{|model,path,iter| found=iter if @item.text.to_i == iter[0]}
|
26
|
+
if found then set_active_iter(found) else set_active(-1) end
|
27
|
+
self
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#this file is part of manqod
|
2
|
+
#manqod is distributed under the CDDL licence
|
3
|
+
#the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
|
4
|
+
|
5
|
+
class ItemList < Gtk::ComboBox
|
6
|
+
include ManqodCommon
|
7
|
+
def initialize
|
8
|
+
@updated=false
|
9
|
+
super(Gtk::ListStore.new(String,String))
|
10
|
+
frenderer=Gtk::CellRendererText.new
|
11
|
+
pack_start(frenderer,true).add_attribute(frenderer,:text,1)
|
12
|
+
signal_connect("changed"){|me|
|
13
|
+
unless me.active_iter.nil? or @item.nil?
|
14
|
+
@item.set_text(me.active_iter[0].to_s)
|
15
|
+
@item.child.set_label(active_iter[1])
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
19
|
+
attr_reader :updated, :item
|
20
|
+
def update(item)
|
21
|
+
@item=item
|
22
|
+
rows("select moditems.id,moditems.display
|
23
|
+
from moditems
|
24
|
+
left join modules on moditems.modid = modules.id
|
25
|
+
left join buttons on buttons.moditemid = moditems.parent
|
26
|
+
where modules.modname = 'listing'
|
27
|
+
and buttons.target_moditemid = '#{@item.moditemid}'"){|sublist|
|
28
|
+
i=model.append
|
29
|
+
i[0]=sublist["id"]
|
30
|
+
i[1]=sublist["display"]
|
31
|
+
} unless @updated
|
32
|
+
@updated=true
|
33
|
+
found=nil
|
34
|
+
model.each{|model,path,iter| found=iter if @item.text.to_s == iter[0]}
|
35
|
+
if found then
|
36
|
+
set_active_iter(found)
|
37
|
+
@item.child.set_label(found[1])
|
38
|
+
else
|
39
|
+
set_active(-1)
|
40
|
+
end
|
41
|
+
self
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#this file is part of manqod
|
2
|
+
#manqod is distributed under the CDDL licence
|
3
|
+
#the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
|
4
|
+
|
5
|
+
class ItemTextAlignment < Gtk::HBox
|
6
|
+
include ManqodCommon
|
7
|
+
def initialize
|
8
|
+
super()
|
9
|
+
pack_start(@left=Gtk::RadioButton.new("left").set_draw_indicator(false))
|
10
|
+
pack_start(@center=Gtk::RadioButton.new(@left,"center").set_draw_indicator(false))
|
11
|
+
pack_start(@right=Gtk::RadioButton.new(@left,"right").set_draw_indicator(false))
|
12
|
+
@left.signal_connect("toggled"){|me| @item.set_text_alignment("left") if @left.active? }
|
13
|
+
@center.signal_connect("toggled"){|me| @item.set_text_alignment("center") if me.active? }
|
14
|
+
@right.signal_connect("toggled"){|me| @item.set_text_alignment("right") if me.active? }
|
15
|
+
end
|
16
|
+
attr_reader :updated, :item
|
17
|
+
def update(item)
|
18
|
+
@item=item
|
19
|
+
case @item.text_alignment
|
20
|
+
when "right" then @right.set_active(true)
|
21
|
+
when "center" then @center.set_active(true)
|
22
|
+
else @left.set_active(true)
|
23
|
+
end
|
24
|
+
self
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,129 @@
|
|
1
|
+
#this file is part of manqod
|
2
|
+
#manqod is distributed under the CDDL licence
|
3
|
+
#the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
|
4
|
+
|
5
|
+
class LayItemInfo < Gtk::Table
|
6
|
+
include Conf
|
7
|
+
include ManqodCommon
|
8
|
+
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
super(3,10,false)
|
12
|
+
set_border_width(1)
|
13
|
+
|
14
|
+
attach(Gtk::Frame.new("type").add(@item_type=Gtk::Label.new("none")),0,3,0,1,Gtk::FILL,Gtk::SHRINK)
|
15
|
+
|
16
|
+
attach(Gtk::Frame.new("left").add(@item_x=Gtk::SpinButton.new(0,5000,1)),0,1,1,2,Gtk::FILL,Gtk::SHRINK)
|
17
|
+
attach(Gtk::Frame.new("width").add(@item_width=Gtk::SpinButton.new(0,5000,1)),1,2,1,2,Gtk::FILL,Gtk::SHRINK)
|
18
|
+
attach(Gtk::Frame.new("right").add(@item_right=Gtk::SpinButton.new(0,5000,1)),2,3,1,2,Gtk::FILL,Gtk::SHRINK)
|
19
|
+
|
20
|
+
attach(Gtk::Frame.new("top").add(@item_y=Gtk::SpinButton.new(0,5000,1)),0,1,2,3,Gtk::FILL,Gtk::SHRINK)
|
21
|
+
attach(Gtk::Frame.new("height").add(@item_height=Gtk::SpinButton.new(0,5000,1)),1,2,2,3,Gtk::FILL,Gtk::SHRINK)
|
22
|
+
attach(Gtk::Frame.new("bottom").add(@item_bottom=Gtk::SpinButton.new(0,5000,1)),2,3,2,3,Gtk::FILL,Gtk::SHRINK)
|
23
|
+
|
24
|
+
attach(Gtk::Frame.new("page number").add(@item_pagenum=Gtk::SpinButton.new(0,10,1).set_sensitive(false)),0,3,3,4,Gtk::FILL,Gtk::SHRINK)
|
25
|
+
attach(@font_frame=Gtk::Frame.new("font").add(@item_font=Gtk::FontButton.new("")),0,3,4,5,Gtk::FILL,Gtk::SHRINK)
|
26
|
+
attach(@text_frame=Gtk::Frame.new("text").add(@item_text=Gtk::TextView.new(@buffer=Gtk::TextBuffer.new.set_text("none"))),0,3,5,6)
|
27
|
+
attach(@image_frame=Gtk::Frame.new("image").add(@item_image=ItemImage.new),0,3,6,7,Gtk::FILL,Gtk::SHRINK)
|
28
|
+
attach(@list_frame=Gtk::Frame.new("list").add(@item_list=ItemList.new),0,3,7,8,Gtk::FILL,Gtk::SHRINK)
|
29
|
+
attach(@align_frame=Gtk::Frame.new("list").add(@item_align=ItemTextAlignment.new),0,3,8,9,Gtk::FILL,Gtk::SHRINK)
|
30
|
+
|
31
|
+
attach(Gtk::Label.new("clone"),0,1,9,10,Gtk::FILL,Gtk::SHRINK)
|
32
|
+
attach(Gtk::Frame.new("left+").add(@clone_x=Gtk::SpinButton.new(0,5000,1)),1,2,9,10,Gtk::FILL,Gtk::SHRINK)
|
33
|
+
attach(Gtk::Frame.new("top+").add(@clone_y=Gtk::SpinButton.new(0,5000,1)),2,3,9,10,Gtk::FILL,Gtk::SHRINK)
|
34
|
+
|
35
|
+
|
36
|
+
attach(Gtk::Label.new,0,3,10,11)
|
37
|
+
|
38
|
+
@item_x.signal_connect('value-changed'){|me|
|
39
|
+
unless item.nil? || @item_x.value == @item.x
|
40
|
+
item.move_me(@item_x.value,@item.y)
|
41
|
+
@item_right.set_value(@item_x.value+@item_width.value)
|
42
|
+
end
|
43
|
+
}
|
44
|
+
@item_width.signal_connect('value-changed'){|me|
|
45
|
+
unless item.nil? || @item_width.value == @item.width
|
46
|
+
item.set_size_request(@item_width.value,@item.height)
|
47
|
+
@item_right.set_value(@item_x.value+@item_width.value)
|
48
|
+
end
|
49
|
+
}
|
50
|
+
|
51
|
+
@item_y.signal_connect('value-changed'){|me|
|
52
|
+
unless item.nil? || @item_y.value == @item.y
|
53
|
+
item.move_me(@item.x,@item_y.value)
|
54
|
+
@item_bottom.set_value(@item_y.value+@item_height.value)
|
55
|
+
end
|
56
|
+
}
|
57
|
+
@item_height.signal_connect('value-changed'){|me|
|
58
|
+
unless item.nil? || @item_height.value == @item.height
|
59
|
+
item.set_size_request(@item.width,@item_height.value)
|
60
|
+
@item_bottom.set_value(@item_y.value+@item_height.value)
|
61
|
+
end
|
62
|
+
}
|
63
|
+
|
64
|
+
@item_right.signal_connect('value-changed'){|me| @item_x.set_value(me.value-@item_width.value)}
|
65
|
+
@item_bottom.signal_connect('value-changed'){|me| @item_y.set_value(me.value-@item_height.value)}
|
66
|
+
|
67
|
+
@item_pagenum.signal_connect('value-changed'){|me| item.move_me(@item.x,@item.y,@item_pagenum.value) unless item.nil?}
|
68
|
+
@item_font.signal_connect("font-set"){|me| @item.modify_font(me.font_name) unless @item.nil?}
|
69
|
+
|
70
|
+
item_text.signal_connect('populate-popup'){|me,menu|
|
71
|
+
m=Gtk::ImageMenuItem.new("Insert Mysql Data Source").set_image(Gtk::Image.new(Gtk::Stock::ADD,Gtk::IconSize::IconSize::MENU))
|
72
|
+
m.submenu=Gtk::Menu.new
|
73
|
+
get_ancestor(WysiwygPrintEditor).mydata.sort.each{|h|
|
74
|
+
mm=Gtk::ImageMenuItem.new("#{h[0]}(#{h[1]})",false).set_image(Gtk::Image.new(Gtk::Stock::ADD,Gtk::IconSize::IconSize::MENU))
|
75
|
+
mm.signal_connect('activate',me.buffer,h[0],h[1]){|me,buffer,key,data|
|
76
|
+
data="N/A" if data.nil? || data == ""
|
77
|
+
unless tag = buffer.tag_table.lookup(key)
|
78
|
+
tag=Gtk::TextTag.new(key).set_foreground_gdk(Gdk::Color.new(65000,0,0))
|
79
|
+
buffer.tag_table.add(tag)
|
80
|
+
end
|
81
|
+
buffer.insert_at_cursor(data)
|
82
|
+
bounds=buffer.selection_bounds
|
83
|
+
bounds[0].backward_cursor_positions(data.length)
|
84
|
+
buffer.apply_tag(tag,bounds[0],bounds[1])
|
85
|
+
}
|
86
|
+
m.submenu.append(mm)
|
87
|
+
}
|
88
|
+
menu.append(m)
|
89
|
+
|
90
|
+
menu.show_all
|
91
|
+
}
|
92
|
+
|
93
|
+
end
|
94
|
+
attr_accessor :item_type, :item_x, :item_y, :item_width, :item_height, :item_text, :item_pagenum, :item_font, :item, :item_image, :item_list
|
95
|
+
attr_reader :clone_x, :clone_y
|
96
|
+
|
97
|
+
def update(item)
|
98
|
+
set_visible(!item.nil?)
|
99
|
+
unless item.nil?
|
100
|
+
@item=item
|
101
|
+
@item_type.set_label(item.gtk_type)
|
102
|
+
@item_x.set_value(item.x)
|
103
|
+
@item_y.set_value(item.y)
|
104
|
+
@item_width.set_value(item.width)
|
105
|
+
@item_right.set_value(@item_x.value+@item_width.value)
|
106
|
+
@item_height.set_value(item.height)
|
107
|
+
@item_bottom.set_value(@item_y.value+@item_height.value)
|
108
|
+
@item_pagenum.set_value(item.pagenum.to_f)
|
109
|
+
@text_frame.set_visible(['text','list'].include?(item.gtk_type))
|
110
|
+
@font_frame.set_visible(item.gtk_type=="text")
|
111
|
+
@align_frame.set_visible(item.gtk_type=="text")
|
112
|
+
@image_frame.set_visible(item.gtk_type=="image")
|
113
|
+
@list_frame.set_visible(item.gtk_type=="list")
|
114
|
+
case item.gtk_type
|
115
|
+
when "text"
|
116
|
+
# item_text.set_label(item.text)
|
117
|
+
item_text.set_buffer(item.child.buffer)
|
118
|
+
item_font.set_font_name(item.font)
|
119
|
+
@item_align.update(item)
|
120
|
+
when "image" then item_image.update(item)
|
121
|
+
when "list" then item_list.update(item)
|
122
|
+
else
|
123
|
+
# item_text.set_label("")
|
124
|
+
item_text.set_buffer(@buffer)
|
125
|
+
# item_font.set_label("")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|