manqod 1.1559.0 → 1.1570.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/Common/Fixnum.rb +1 -0
- data/lib/FormHolder/Form/InputHolder/QBuilder.rb +1 -1
- data/lib/ListHolder/EditableList/DrbListModel.rb +10 -7
- data/lib/ListHolder/EditableList/ListPrintOperation.rb +20 -4
- data/lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb +10 -5
- data/lib/ListHolder/ListButtonHolder/ListButton.rb +14 -3
- data/lib/ListHolder/ListPanel/ListSum/Text.rb +1 -1
- data/lib/Print/PrintItem.rb +9 -8
- data/lib/PrintEditor.rb +6 -2
- data/lib/PrintEditor/ItemInfo.rb +3 -3
- metadata +5 -7
data/lib/Common/Fixnum.rb
CHANGED
@@ -22,7 +22,7 @@ class QBuilder < Gtk::HPaned
|
|
22
22
|
pack_start(@info=Gtk::Table.new(2,3),false).
|
23
23
|
pack_start(Gtk::ScrolledWindow.new.set_policy(Gtk::PolicyType::AUTOMATIC,Gtk::PolicyType::AUTOMATIC).add_with_viewport(@holder=Gtk::VBox.new(false,0))).
|
24
24
|
pack_start(@controls=Gtk::VBox.new,false,true))
|
25
|
-
add2(@rb=RelationBuilder.new(
|
25
|
+
add2(@rb=RelationBuilder.new(false))
|
26
26
|
|
27
27
|
@info.attach_defaults(Gtk::Label.new("name"),0,1,0,1).attach_defaults(@name=Gtk::Entry.new,1,2,0,1).
|
28
28
|
attach_defaults(Gtk::Label.new("base"),0,1,1,2).attach_defaults(Gtk::HBox.new.pack_start(@base=Gtk::ComboBox.new(Gtk::ListStore.new(Integer,String))).pack_end(@goto_button=Gtk::Button.new.set_image(Gtk::Image.new(Gtk::Stock::JUMP_TO,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))),false,false),1,2,1,2).
|
@@ -686,6 +686,7 @@ class ListModel
|
|
686
686
|
end
|
687
687
|
|
688
688
|
def iter2csv(iter)
|
689
|
+
separator=(list.gtk_attribute("csv_field_separator") ? list.gtk_attribute("csv_field_separator") : ',')
|
689
690
|
row=""
|
690
691
|
list.columns.each{|col|
|
691
692
|
case col.header["type"]
|
@@ -698,7 +699,7 @@ class ListModel
|
|
698
699
|
else iter[col.colnum].to_s
|
699
700
|
end
|
700
701
|
end
|
701
|
-
row="#{row}#{ct.to_s}
|
702
|
+
row="#{row}#{ct.to_s}#{separator}"
|
702
703
|
}
|
703
704
|
row="#{row[0..row.length]}\n"
|
704
705
|
end
|
@@ -706,10 +707,10 @@ class ListModel
|
|
706
707
|
def to_csv(filename,ids=nil)
|
707
708
|
file = File.new(filename, "wb+")
|
708
709
|
ids=Array.new
|
709
|
-
|
710
|
+
separator=(list.gtk_attribute("csv_field_separator") ? list.gtk_attribute("csv_field_separator") : ',')
|
710
711
|
row=""
|
711
712
|
list.columns.each{|col|
|
712
|
-
row="#{row}#{col.header['header']}
|
713
|
+
row="#{row}#{col.header['header']}#{separator}"
|
713
714
|
}
|
714
715
|
file.write("#{row[0..row.length]}\n")
|
715
716
|
|
@@ -723,11 +724,14 @@ class ListModel
|
|
723
724
|
end
|
724
725
|
|
725
726
|
def from_csv(filename)
|
726
|
-
|
727
|
+
separator=(list.gtk_attribute("csv_field_separator") ? list.gtk_attribute("csv_field_separator") : ',')
|
728
|
+
skip_header_lines=(list.gtk_attribute("csv_skip_header_lines") ? list.gtk_attribute("csv_skip_header_lines").to_i : 1)
|
729
|
+
row_counter=0
|
727
730
|
ids=Array.new
|
728
731
|
IO.foreach(filename){|line|
|
729
|
-
row=line.chomp.split(
|
730
|
-
|
732
|
+
row=line.chomp.split(separator)
|
733
|
+
row_counter+=1
|
734
|
+
if row_counter > skip_header_lines && row.size>0
|
731
735
|
sql="insert into #{base} set"
|
732
736
|
comma=false
|
733
737
|
#child key auto adding
|
@@ -755,7 +759,6 @@ class ListModel
|
|
755
759
|
inserted_id=qrow("select id from #{base} order by id desc limit 1")["id"].to_i
|
756
760
|
ids.push(inserted_id)
|
757
761
|
end
|
758
|
-
header=false
|
759
762
|
}
|
760
763
|
drbmodel.rows_changed(ids,nick) if ids.size>0
|
761
764
|
edebug("csv loaded","list")
|
@@ -39,7 +39,7 @@ class ListPrintOperation < Gtk::PrintOperation
|
|
39
39
|
|
40
40
|
@header_line_width=(list.gtk_attribute("header_line_width") || 1.0).to_f
|
41
41
|
@footer_line_width=(list.gtk_attribute("footer_line_width") || 1.0).to_f
|
42
|
-
@cell_line_width=(list.gtk_attribute("cell_line_width") || 0.
|
42
|
+
@cell_line_width=(list.gtk_attribute("cell_line_width") || 0.1).to_f
|
43
43
|
@sum_line_width=(list.gtk_attribute("sum_line_width") || 0.6).to_f
|
44
44
|
|
45
45
|
@print_with_gantt=(list.gtk_attribute("print_with_gantt") || "false") == "true"
|
@@ -270,7 +270,23 @@ class ListPrintOperation < Gtk::PrintOperation
|
|
270
270
|
cr = context.cairo_context
|
271
271
|
@header.draw(cr)
|
272
272
|
@columns_header.draw(cr)
|
273
|
-
|
273
|
+
if child_list
|
274
|
+
@child_columns_header.draw(cr)
|
275
|
+
else
|
276
|
+
cr.set_line_width(@cell_line_width)
|
277
|
+
lcol=nil
|
278
|
+
list.columns.each{|col|
|
279
|
+
if col.printable?
|
280
|
+
cr.move_to(@column_pos[col.data],@columns_header.y + @columns_header.height + @header_line_width)
|
281
|
+
cr.line_to(@column_pos[col.data],@footer.y) #FIXME
|
282
|
+
lcol=col
|
283
|
+
end
|
284
|
+
}
|
285
|
+
cr.move_to(@column_pos[lcol.data]+@column_width[lcol.data],@columns_header.y + @columns_header.height + @header_line_width)
|
286
|
+
cr.line_to(@column_pos[lcol.data]+@column_width[lcol.data],@footer.y) #FIXME
|
287
|
+
cr.stroke
|
288
|
+
end
|
289
|
+
|
274
290
|
@footer.draw(cr,page_number)
|
275
291
|
|
276
292
|
#draw cells
|
@@ -319,8 +335,8 @@ class ListPrintOperation < Gtk::PrintOperation
|
|
319
335
|
@page_n=@page_n+1
|
320
336
|
end
|
321
337
|
il.set_page(@page_n)
|
322
|
-
il.set_y(@current_height)
|
323
|
-
@current_height=@current_height+il.row_height
|
338
|
+
il.set_y(@current_height).set_row_spacing(@row_spacing)
|
339
|
+
@current_height=@current_height+il.row_height+2*@row_spacing
|
324
340
|
@iter_layouts.push(il)
|
325
341
|
edebug(il.inspect,"printing")
|
326
342
|
page_full
|
@@ -8,6 +8,7 @@ class IterLayout
|
|
8
8
|
@row_height=0
|
9
9
|
@page=0
|
10
10
|
@y=0
|
11
|
+
@row_spacing=1
|
11
12
|
@pop=pop
|
12
13
|
@iter=iter.clone
|
13
14
|
@cell_layouts=Hash.new
|
@@ -23,7 +24,7 @@ class IterLayout
|
|
23
24
|
text_cell.set_alignment(col.pango_layout_alignment)
|
24
25
|
text_cell.set_wrap(Pango::Layout::WRAP_WORD_CHAR).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE)
|
25
26
|
text_to_display=case col.header["type"]
|
26
|
-
when "gtk_ordering" then col.path_format(@iter)
|
27
|
+
when "gtk_ordering" then col.path_format(@iter) if iter && iter.class.name == "Gtk::TreeIter"
|
27
28
|
when "gtk_duration" then (@iter[col.colnum] || 0).to_i.strftime(col.duration_format)
|
28
29
|
when "gtk_timestamp" then Time.at(@iter[col.colnum] || 0).strftime(col.timestamp_format)
|
29
30
|
when "gtk_const_text" then col.renderer.get_display(@iter[col.colnum].to_s)
|
@@ -72,6 +73,10 @@ class IterLayout
|
|
72
73
|
@gr.py1=@y if @gr
|
73
74
|
self
|
74
75
|
end
|
76
|
+
def set_row_spacing(ns)
|
77
|
+
@row_spacing=ns
|
78
|
+
self
|
79
|
+
end
|
75
80
|
def set_page(page)
|
76
81
|
@page=page
|
77
82
|
end
|
@@ -148,14 +153,14 @@ class IterLayout
|
|
148
153
|
cr.set_source_rgba(0.1,0.1,0.1,0.7).set_dash(100000)
|
149
154
|
if @line_above
|
150
155
|
cr.set_line_width(@pop.sum_line_width)
|
151
|
-
cr.move_to(min_x,y+@crlw)
|
152
|
-
cr.line_to(max_x,y+@crlw)
|
156
|
+
cr.move_to(min_x,y+@crlw-@row_spacing)
|
157
|
+
cr.line_to(max_x,y+@crlw-@row_spacing)
|
153
158
|
cr.stroke
|
154
159
|
end
|
155
160
|
if @pop.row_underline>0
|
156
161
|
cr.set_line_width(@pop.row_underline)
|
157
|
-
cr.move_to(min_x,y+@row_height)
|
158
|
-
cr.line_to(max_x,y+@row_height)
|
162
|
+
cr.move_to(min_x,y+@row_height+@row_spacing)
|
163
|
+
cr.line_to(max_x,y+@row_height+@row_spacing)
|
159
164
|
cr.stroke
|
160
165
|
end
|
161
166
|
end
|
@@ -12,7 +12,14 @@ class MyButton < Gtk::Button
|
|
12
12
|
@holder=holder
|
13
13
|
@show_icon=if gtk_attribute('show-mode') then gtk_attribute('show-mode') == 'icon only' || gtk_attribute('show-mode') == 'icon and text' || false else true end
|
14
14
|
@show_text=if gtk_attribute('show-mode') then gtk_attribute('show-mode') == 'text only' || gtk_attribute('show-mode') == 'icon and text' || false else true end
|
15
|
-
@column_of_sensitivity=
|
15
|
+
@column_of_sensitivity=nil
|
16
|
+
if gtk_attribute('column-of-sensitivity')
|
17
|
+
if @caller.list.list_model.headers.has_key?(gtk_attribute('column-of-sensitivity'))
|
18
|
+
@column_of_sensitivity=@caller.list.list_model.headers[gtk_attribute('column-of-sensitivity')]["model_col"]
|
19
|
+
else
|
20
|
+
warn("You need to add \"#{gtk_attribute('column-of-sensitivity')}\" as Invisible String to #{@caller.list}")
|
21
|
+
end
|
22
|
+
end
|
16
23
|
super()
|
17
24
|
set_use_underline(true)
|
18
25
|
set_relief(Gtk::ReliefStyle::NONE)
|
@@ -205,8 +212,12 @@ class MyButton < Gtk::Button
|
|
205
212
|
[Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],
|
206
213
|
[Gtk::Stock::CONVERT, Gtk::Dialog::RESPONSE_ACCEPT])
|
207
214
|
filechooser.set_filename(get_conf(@caller.list.list_id,0,"csvfilename")) unless get_conf(@caller.list.list_id,0,"csvfilename").nil?
|
208
|
-
|
209
|
-
|
215
|
+
ftype=(@caller.list.gtk_attribute("file_filter") ? @caller.list.gtk_attribute("file_filter").split(",") : ["*.csv"])
|
216
|
+
ftt=nil
|
217
|
+
ftype.each{|ft|
|
218
|
+
filechooser.add_filter(ftt=Gtk::FileFilter.new.add_pattern(ft).set_name(ft))
|
219
|
+
}
|
220
|
+
filechooser.set_filter(ftt) if ftt
|
210
221
|
|
211
222
|
if filechooser.run == Gtk::Dialog::RESPONSE_ACCEPT
|
212
223
|
set_conf(@caller.list.list_id,0,"csvfilename",filechooser.filename)
|
@@ -19,7 +19,7 @@ class SumRendererText < Gtk::Label
|
|
19
19
|
set_text(case column.header['type']
|
20
20
|
when "gtk_int" then number_format(new_value,@column.decimals_attribute)
|
21
21
|
when "gtk_float" then number_format(new_value,@column.decimals_attribute)
|
22
|
-
when "gtk_duration" then
|
22
|
+
when "gtk_duration" then new_value.to_i.strftime(column.duration_format)
|
23
23
|
end)
|
24
24
|
end
|
25
25
|
|
data/lib/Print/PrintItem.rb
CHANGED
@@ -94,14 +94,14 @@ class PrintItem
|
|
94
94
|
@sum_font=list.gtk_attribute("sum_font") || "verdana bold 6"
|
95
95
|
@cell_font=list.gtk_attribute("cell_font") || "verdana 6"
|
96
96
|
@columns_header_font=list.gtk_attribute("columns_header_font") || "verdana bold 6"
|
97
|
-
@row_spacing=list.gtk_attribute("row_spacing")
|
98
|
-
@column_spacing=list.gtk_attribute("column_spacing")
|
97
|
+
@row_spacing=(list.gtk_attribute("row_spacing") || 1.0).to_f
|
98
|
+
@column_spacing=(list.gtk_attribute("column_spacing") || 1.0).to_f
|
99
99
|
@draw_header_cell_borders=list.gtk_attribute("draw_header_cell_borders")=="true"
|
100
100
|
@fill_header_background=list.gtk_attribute("fill_header_background")=="true"
|
101
|
-
@header_line_width=list.gtk_attribute("header_line_width")
|
101
|
+
@header_line_width=(list.gtk_attribute("header_line_width") || 0.5).to_f
|
102
102
|
@draw_header_line=list.gtk_attribute("draw_header_line") == "true"
|
103
|
-
@cell_line_width=list.gtk_attribute("cell_line_width")
|
104
|
-
@sum_line_width=list.gtk_attribute("sum_line_width")
|
103
|
+
@cell_line_width=(list.gtk_attribute("cell_line_width") || 0.1).to_f
|
104
|
+
@sum_line_width=(list.gtk_attribute("sum_line_width") || 0.3).to_f
|
105
105
|
@print_title=list.gtk_attribute("print_title")=="true"
|
106
106
|
@row_underline=(list.gtk_attribute("row_underline") || 0.0).to_f
|
107
107
|
@print_with_gantt=(list.gtk_attribute("print_with_gantt") || "false") == "true"
|
@@ -144,7 +144,7 @@ class PrintItem
|
|
144
144
|
|
145
145
|
@columns_header=ColumnsHeaderLayout.new(self,cr,list.columns,@columns_header_font).set_y(@current_height)
|
146
146
|
@layouts.push(@columns_header)
|
147
|
-
@current_height += @columns_header.height + @header_line_width
|
147
|
+
@current_height += @columns_header.height + @header_line_width + @row_spacing
|
148
148
|
|
149
149
|
@sum_y=@y+height #max y for iters, when less rows than designed, we'll have the footer @ design position
|
150
150
|
|
@@ -180,9 +180,10 @@ class PrintItem
|
|
180
180
|
edebug("breaking list #{list} to the next page","printing","info")
|
181
181
|
break
|
182
182
|
end
|
183
|
-
il.set_y(@current_height)
|
184
|
-
@current_height+=il.row_height
|
183
|
+
il.set_y(@current_height).set_row_spacing(@row_spacing)
|
184
|
+
@current_height+=il.row_height+2*@row_spacing
|
185
185
|
@layouts.push(il)
|
186
|
+
edebug("row :#{il.inspect}","printing")
|
186
187
|
@sums.each_key{|key| @sums[key]=@sums[key]+iter[key].to_f}
|
187
188
|
end
|
188
189
|
end
|
data/lib/PrintEditor.rb
CHANGED
@@ -54,7 +54,11 @@ class WysiwygPrintEditor < Gtk::Window
|
|
54
54
|
buttons.append("image",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'image')) if tabs.page>-1}
|
55
55
|
buttons.append(Gtk::VSeparator.new)
|
56
56
|
buttons.append("clone",nil,nil,Gtk::Image.new(Gtk::Stock::COPY,is)){
|
57
|
-
set_focused_item(nth_page(tabs.page).
|
57
|
+
set_focused_item(nth_page(tabs.page).
|
58
|
+
put(@tabs.page,@focused_item.gtk_type,nil,@focused_item.x+@info.clone_x.value,@focused_item.y+@info.clone_y.value,@focused_item.width,@focused_item.height,@focused_item.text,@focused_item.font,@focused_item.text_alignment)) if tabs.page>-1 && @focused_item
|
59
|
+
}
|
60
|
+
buttons.append("move",nil,nil,Gtk::Image.new(Gtk::Stock::MEDIA_FORWARD,is)){
|
61
|
+
@focused_item.move_me(@focused_item.x+@info.clone_x.value,@focused_item.y+@info.clone_y.value) if tabs.page>-1 && @focused_item
|
58
62
|
}
|
59
63
|
buttons.append(Gtk::VSeparator.new)
|
60
64
|
buttons.append("remove",nil,nil,Gtk::Image.new(Gtk::Stock::DELETE,is)){
|
@@ -107,7 +111,7 @@ class WysiwygPrintEditor < Gtk::Window
|
|
107
111
|
buttons.append(Gtk::VSeparator.new)
|
108
112
|
signal_connect("destroy"){|me,ev| to_mysql}
|
109
113
|
|
110
|
-
@info=LayItemInfo.new.set_width_request(
|
114
|
+
@info=LayItemInfo.new.set_width_request(220)
|
111
115
|
|
112
116
|
tab_holder=Gtk::HPaned.new#(false,0)
|
113
117
|
tab_holder.pack1(tabs,true,true)
|
data/lib/PrintEditor/ItemInfo.rb
CHANGED
@@ -28,9 +28,9 @@ class LayItemInfo < Gtk::Table
|
|
28
28
|
attach(@list_frame=Gtk::Frame.new("list").add(@item_list=ItemList.new),0,3,7,8,Gtk::FILL,Gtk::SHRINK)
|
29
29
|
attach(@align_frame=Gtk::Frame.new("list").add(@item_align=ItemTextAlignment.new),0,3,8,9,Gtk::FILL,Gtk::SHRINK)
|
30
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(
|
33
|
-
attach(Gtk::Frame.new("top+").add(@clone_y=Gtk::SpinButton.new(
|
31
|
+
attach(Gtk::Label.new("clone\r\nor move"),0,1,9,10,Gtk::FILL,Gtk::SHRINK)
|
32
|
+
attach(Gtk::Frame.new("left+").add(@clone_x=Gtk::SpinButton.new(-5000,5000,1).set_value(0)),1,2,9,10,Gtk::FILL,Gtk::SHRINK)
|
33
|
+
attach(Gtk::Frame.new("top+").add(@clone_y=Gtk::SpinButton.new(-5000,5000,1).set_value(0)),2,3,9,10,Gtk::FILL,Gtk::SHRINK)
|
34
34
|
|
35
35
|
|
36
36
|
attach(Gtk::Label.new,0,3,10,11)
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
7
|
+
- 1570
|
8
8
|
- 0
|
9
|
-
version: 1.
|
9
|
+
version: 1.1570.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Dobai-Pataky Balint
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-08-23 00:00:00 +03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -36,13 +36,11 @@ dependencies:
|
|
36
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
37
|
none: false
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
segments:
|
42
42
|
- 0
|
43
|
-
|
44
|
-
- 7
|
45
|
-
version: 0.90.7
|
43
|
+
version: "0"
|
46
44
|
type: :runtime
|
47
45
|
version_requirements: *id002
|
48
46
|
description: Manqod is a desktop application for small companies to organize their data on an interface customised for them by themselves
|