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,56 @@
|
|
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 ColumnsHeaderLayout
|
6
|
+
def initialize(pop,cr,columns,h_font)
|
7
|
+
@header_height=0
|
8
|
+
@y=0
|
9
|
+
@header_layouts=Hash.new
|
10
|
+
@pop=pop
|
11
|
+
columns.each{|col|
|
12
|
+
if col.printable?
|
13
|
+
text_cell = cr.create_pango_layout
|
14
|
+
text_cell.set_font_description(Pango::FontDescription.new(h_font)).set_width((pop.column_width[col.data]-@pop.header_line_width*2)*Pango::SCALE)
|
15
|
+
text_cell.set_alignment(col.pango_layout_alignment)
|
16
|
+
text_cell.set_wrap(Pango::Layout::WRAP_WORD_CHAR).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE)
|
17
|
+
#set_alignment(Pango::Layout::ALIGN_CENTER).
|
18
|
+
text_cell.set_text(col.text)
|
19
|
+
text_cell_text_height = text_cell.size[1].to_f / Pango::SCALE
|
20
|
+
text_cell_text_width = text_cell.size[0].to_f / Pango::SCALE
|
21
|
+
@header_height = text_cell_text_height+@pop.header_line_width*2 if @header_height < text_cell_text_height+@pop.header_line_width*2
|
22
|
+
header_layouts[col.data]=text_cell
|
23
|
+
end
|
24
|
+
}
|
25
|
+
@header_height = @header_height + @pop.header_line_width
|
26
|
+
end
|
27
|
+
attr_accessor :header_height, :y, :header_layouts
|
28
|
+
|
29
|
+
def height
|
30
|
+
@header_height
|
31
|
+
end
|
32
|
+
def set_y(newY)
|
33
|
+
@y=newY
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
def draw(cr)
|
38
|
+
header_layouts.each_pair{|key,layout|
|
39
|
+
if @pop.draw_header_cell_borders
|
40
|
+
cr.set_line_width(@pop.header_line_width)
|
41
|
+
cr.rectangle(@pop.column_pos[key],y,@pop.column_width[key],header_height)
|
42
|
+
if @pop.fill_header_background
|
43
|
+
cr.move_to(@pop.column_pos[key]+@pop.header_line_width+3,y+@pop.header_line_width+3)
|
44
|
+
cr.set_source_rgb(0.9,0.9,0.9)
|
45
|
+
cr.fill_preserve()
|
46
|
+
cr.set_source_rgb(0,0,0)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
cr.move_to(@pop.column_pos[key]+@pop.header_line_width,y+@pop.header_line_width)
|
50
|
+
cr.show_pango_layout(layout)
|
51
|
+
cr.stroke
|
52
|
+
}
|
53
|
+
cr.stroke
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,100 @@
|
|
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 CustomPageSetup < Gtk::Table
|
6
|
+
def initialize(pop)
|
7
|
+
@pop=pop
|
8
|
+
@page_setup=@pop.default_page_setup
|
9
|
+
super(4,4,false)
|
10
|
+
set_border_width(10)
|
11
|
+
set_row_spacings(5)
|
12
|
+
set_column_spacings(5)
|
13
|
+
|
14
|
+
#orientation
|
15
|
+
ochooser=Gtk::VBox.new(true)
|
16
|
+
|
17
|
+
ochooser.pack_start(pch=Gtk::RadioButton.new(Gtk::Stock::ORIENTATION_PORTRAIT).set_active(page_setup.orientation==Gtk::PrintSettings::ORIENTATION_PORTRAIT))
|
18
|
+
pch.signal_connect("toggled"){|me| page_setup.set_orientation(Gtk::PrintSettings::ORIENTATION_PORTRAIT) if me.active?}
|
19
|
+
|
20
|
+
ochooser.pack_start(lch=Gtk::RadioButton.new(pch,Gtk::Stock::ORIENTATION_LANDSCAPE).set_active(page_setup.orientation==Gtk::PrintSettings::ORIENTATION_LANDSCAPE))
|
21
|
+
lch.signal_connect("toggled"){|me| page_setup.set_orientation(Gtk::PrintSettings::ORIENTATION_LANDSCAPE) if me.active?}
|
22
|
+
|
23
|
+
ochooser.pack_start(rlch=Gtk::RadioButton.new(pch,Gtk::Stock::ORIENTATION_REVERSE_LANDSCAPE).set_active(page_setup.orientation==Gtk::PrintSettings::ORIENTATION_REVERSE_LANDSCAPE))
|
24
|
+
rlch.signal_connect("toggled"){|me| page_setup.set_orientation(Gtk::PrintSettings::ORIENTATION_REVERSE_LANDSCAPE) if me.active?}
|
25
|
+
|
26
|
+
ochooser.pack_start(rpch=Gtk::RadioButton.new(pch,Gtk::Stock::ORIENTATION_REVERSE_PORTRAIT).set_active(page_setup.orientation==Gtk::PrintSettings::ORIENTATION_REVERSE_PORTRAIT))
|
27
|
+
rpch.signal_connect("toggled"){|me| page_setup.set_orientation(Gtk::PrintSettings::ORIENTATION_REVERSE_PORTRAIT) if me.active?}
|
28
|
+
|
29
|
+
#format
|
30
|
+
pchooser=Gtk::VBox.new(true)
|
31
|
+
pchooser.pack_start(a3=Gtk::RadioButton.new("A3").set_active(page_setup.paper_size.name==Gtk::PaperSize::A3))
|
32
|
+
a3.signal_connect("toggled"){|me| page_setup.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::A3)) if me.active?}
|
33
|
+
|
34
|
+
pchooser.pack_start(a4=Gtk::RadioButton.new(a3,"A4").set_active(page_setup.paper_size.name==Gtk::PaperSize::A4))
|
35
|
+
a4.signal_connect("toggled"){|me| page_setup.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::A4)) if me.active?}
|
36
|
+
|
37
|
+
pchooser.pack_start(a5=Gtk::RadioButton.new(a3,"A5").set_active(page_setup.paper_size.name==Gtk::PaperSize::A5))
|
38
|
+
a5.signal_connect("toggled"){|me,ps| page_setup.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::A5)) if me.active?}
|
39
|
+
|
40
|
+
pchooser.pack_start(b5=Gtk::RadioButton.new(a3,"B5").set_active(page_setup.paper_size.name==Gtk::PaperSize::B5))
|
41
|
+
b5.signal_connect("toggled"){|me| page_setup.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::B5)) if me.active?}
|
42
|
+
|
43
|
+
pchooser.pack_start(executive=Gtk::RadioButton.new(a3,"executive").set_active(page_setup.paper_size.name==Gtk::PaperSize::EXECUTIVE))
|
44
|
+
executive.signal_connect("toggled"){|me| page_setup.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::EXECUTIVE)) if me.active?}
|
45
|
+
|
46
|
+
pchooser.pack_start(legal=Gtk::RadioButton.new(a3,"legal").set_active(page_setup.paper_size.name==Gtk::PaperSize::LEGAL))
|
47
|
+
legal.signal_connect("toggled"){|me| page_setup.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::LEGAL)) if me.active?}
|
48
|
+
|
49
|
+
pchooser.pack_start(letter=Gtk::RadioButton.new(a3,"letter").set_active(page_setup.paper_size.name==Gtk::PaperSize::LETTER))
|
50
|
+
letter.signal_connect("toggled"){|me| page_setup.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::LETTER)) if me.active?}
|
51
|
+
|
52
|
+
# margins=Gtk::Table.new(2,2)
|
53
|
+
# margins.attach(topm=Gtk::SpinButton.new(0,10,0.1),0,1,0,1,Gtk::FILL,Gtk::FILL)
|
54
|
+
# topm.signal_connect("value-changed",@page_setup){|me,arg1,ps| ps.
|
55
|
+
|
56
|
+
#page_setup
|
57
|
+
page_setup_b=Gtk::Button.new("change")
|
58
|
+
page_setup_b.signal_connect("clicked"){|b|
|
59
|
+
@page_setup=Gtk::PrintOperation.run_page_setup_dialog(get_ancestor(Gtk::Window), @page_setup)
|
60
|
+
}
|
61
|
+
|
62
|
+
#custom print settings like line on header/footer
|
63
|
+
csettings=Gtk::VBox.new(false)
|
64
|
+
csettings.pack_start(draw_header_line=Gtk::CheckButton.new("draw header line").set_active(@pop.draw_header_line))
|
65
|
+
draw_header_line.signal_connect("toggled"){|me| @pop.draw_header_line=me.active?}
|
66
|
+
csettings.pack_start(draw_footer_line=Gtk::CheckButton.new("draw footer line").set_active(@pop.draw_footer_line))
|
67
|
+
draw_footer_line.signal_connect("toggled"){|me| @pop.draw_footer_line=me.active?}
|
68
|
+
csettings.pack_start(draw_header_background=Gtk::CheckButton.new("draw header background").set_active(@pop.draw_header_background))
|
69
|
+
draw_header_background.signal_connect("toggled"){|me| @pop.draw_header_background=me.active?}
|
70
|
+
csettings.pack_start(print_date=Gtk::CheckButton.new("print date").set_active(@pop.print_date))
|
71
|
+
print_date.signal_connect("toggled"){|me| @pop.print_date=me.active?}
|
72
|
+
|
73
|
+
csettings.pack_start(font_table=Gtk::Table.new(5,2,false))
|
74
|
+
font_table.attach(Gtk::Label.new("header font"),0,1,0,1).attach(header_font=Gtk::FontButton.new(@pop.header_font),1,2,0,1)
|
75
|
+
header_font.signal_connect("font-set"){|me| @pop.header_font=me.font_name}
|
76
|
+
|
77
|
+
font_table.attach(Gtk::Label.new("date font"),0,1,1,2).attach(date_font=Gtk::FontButton.new(@pop.date_font),1,2,1,2)
|
78
|
+
date_font.signal_connect("font-set"){|me| @pop.date_font=me.font_name}
|
79
|
+
|
80
|
+
font_table.attach(Gtk::Label.new("footer font"),0,1,2,3).attach(header_font=Gtk::FontButton.new(@pop.footer_font),1,2,2,3)
|
81
|
+
header_font.signal_connect("font-set"){|me| @pop.footer_font=me.font_name}
|
82
|
+
|
83
|
+
font_table.attach(Gtk::Label.new("column header font"),0,1,3,4).attach(column_header_font=Gtk::FontButton.new(@pop.column_header_font),1,2,3,4)
|
84
|
+
column_header_font.signal_connect("font-set"){|me| @pop.column_header_font=me.font_name}
|
85
|
+
|
86
|
+
font_table.attach(Gtk::Label.new("cell font"),0,1,4,5).attach(cell_font=Gtk::FontButton.new(@pop.cell_font),1,2,4,5)
|
87
|
+
cell_font.signal_connect("font-set"){|me| @pop.cell_font=me.font_name}
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
attach(Gtk::Frame.new("Orientation").set_child(ochooser).set_shadow_type(Gtk::ShadowType::NONE),0,1,0,1,Gtk::FILL,Gtk::FILL)
|
92
|
+
attach(Gtk::Frame.new("Paper size").set_child(pchooser).set_shadow_type(Gtk::ShadowType::NONE),1,2,0,1,Gtk::FILL,Gtk::FILL)
|
93
|
+
attach(Gtk::Frame.new("Print setup").set_child(page_setup_b).set_shadow_type(Gtk::ShadowType::NONE),0,1,1,2,Gtk::FILL,Gtk::FILL)
|
94
|
+
attach(Gtk::Frame.new("Custom settings").set_child(csettings).set_shadow_type(Gtk::ShadowType::NONE),1,2,1,2,Gtk::FILL,Gtk::FILL)
|
95
|
+
show_all
|
96
|
+
end
|
97
|
+
attr_accessor :page_setup
|
98
|
+
|
99
|
+
end
|
100
|
+
|
@@ -0,0 +1,26 @@
|
|
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 FooterLayout
|
6
|
+
def initialize(cr,pop)
|
7
|
+
@pop=pop
|
8
|
+
@layout=cr.create_pango_layout
|
9
|
+
layout.set_text("00").set_width(@pop.pango_width).set_alignment(Pango::Layout::ALIGN_CENTER)
|
10
|
+
@y = @pop.height-layout.size[1]/Pango::SCALE-cr.line_width-1
|
11
|
+
edebug("footer_position: #{@y}","printing","debug")
|
12
|
+
end
|
13
|
+
attr_accessor :y, :layout
|
14
|
+
|
15
|
+
def draw(cr,page_num)
|
16
|
+
layout.set_text((page_num+1).to_s + " / "+ @pop.n_pages.to_s).set_font_description(Pango::FontDescription.new(@pop.footer_font))
|
17
|
+
if @pop.draw_footer_line
|
18
|
+
cr.set_line_width(@pop.footer_line_width)
|
19
|
+
cr.move_to(0,y)
|
20
|
+
cr.line_to(@pop.width,y)
|
21
|
+
end
|
22
|
+
cr.move_to(0,y+cr.line_width+1)
|
23
|
+
cr.show_pango_layout(layout)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,35 @@
|
|
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 HeaderLayout
|
6
|
+
def initialize(cr,pop)
|
7
|
+
@pop=pop
|
8
|
+
@layout = cr.create_pango_layout
|
9
|
+
layout.set_text(pop.list.title).set_width(@pop.pango_width)
|
10
|
+
layout.set_font_description(Pango::FontDescription.new(@pop.header_font))
|
11
|
+
layout.set_wrap(Pango::Layout::WRAP_WORD).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE).set_single_paragraph_mode(true)
|
12
|
+
layout.set_alignment(Pango::Layout::Alignment::CENTER)
|
13
|
+
|
14
|
+
@tlayout = cr.create_pango_layout
|
15
|
+
tlayout.set_text(Time.new.strftime("%m/%d/%Y")).set_width(@pop.pango_width).set_alignment(Pango::Layout::ALIGN_RIGHT)
|
16
|
+
tlayout.set_font_description(Pango::FontDescription.new(@pop.date_font))
|
17
|
+
tlayout.set_wrap(Pango::Layout::WRAP_WORD).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE)
|
18
|
+
|
19
|
+
@height=2*layout.size[1]/Pango::SCALE+cr.line_width*3
|
20
|
+
end
|
21
|
+
attr_accessor :height, :layout, :tlayout
|
22
|
+
|
23
|
+
def draw(cr)
|
24
|
+
cr.move_to(0,0) #position on begining of page
|
25
|
+
cr.show_pango_layout(layout) #draw header
|
26
|
+
cr.show_pango_layout(tlayout) if @pop.print_date
|
27
|
+
if @pop.draw_header_line
|
28
|
+
cr.set_line_width(@pop.header_line_width)
|
29
|
+
cr.move_to(0,2*layout.size[1]/Pango::SCALE+cr.line_width) #move below header
|
30
|
+
cr.line_to(@pop.width,2*layout.size[1]/Pango::SCALE+cr.line_width) #draw the line
|
31
|
+
end
|
32
|
+
cr.stroke
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,89 @@
|
|
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 IterLayout
|
6
|
+
include ManqodCommon
|
7
|
+
def initialize(cr,iter,columns,pop,font)
|
8
|
+
@row_height=0
|
9
|
+
@page=0
|
10
|
+
@y=0
|
11
|
+
@pop=pop
|
12
|
+
@cell_layouts=Hash.new
|
13
|
+
@insptext=""
|
14
|
+
@cr=cr
|
15
|
+
@crlw=0
|
16
|
+
#create the layouts for the cells, and find out the highest cell
|
17
|
+
columns.each{|col|
|
18
|
+
if col.printable?
|
19
|
+
text_cell = cr.create_pango_layout
|
20
|
+
text_cell.set_font_description(Pango::FontDescription.new(font)).set_width((pop.column_width[col.data]-@pop.cell_line_width)*Pango::SCALE)
|
21
|
+
text_cell.set_alignment(col.pango_layout_alignment)
|
22
|
+
text_cell.set_wrap(Pango::Layout::WRAP_WORD_CHAR).set_ellipsize(Pango::Layout::ELLIPSIZE_NONE)
|
23
|
+
text_to_display=case col.header["type"]
|
24
|
+
when "gtk_duration" then Time.at(iter[col.colnum] || 0).strftime(col.duration_format)
|
25
|
+
when "gtk_timestamp" then Time.at(iter[col.colnum] || 0).strftime(col.timestamp_format)
|
26
|
+
when "gtk_const_text" then col.renderer.get_display(iter[col.colnum].to_s)
|
27
|
+
when "gtk_const_combo","gtk_combo" then col.renderer.get_text_from_value(iter[col.colnum].to_s)
|
28
|
+
else
|
29
|
+
case col.data_type.to_s
|
30
|
+
when "Bignum","Integer","Float" then number_format(iter[col.colnum],col.decimals_attribute)
|
31
|
+
else iter[col.colnum].to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
text_cell.set_text(text_to_display.to_s)
|
35
|
+
text_height = text_cell.size[1] / Pango::SCALE
|
36
|
+
@row_height = text_height+@pop.cell_line_width+@pop.row_underline if @row_height < text_height+@pop.cell_line_width+@pop.row_underline
|
37
|
+
cell_layouts[col.data] = text_cell
|
38
|
+
@insptext+="#{col.data_type}:#{text_cell.text}\t"
|
39
|
+
end
|
40
|
+
}
|
41
|
+
end
|
42
|
+
attr_accessor :page, :y, :pop, :cell_layouts, :row_height
|
43
|
+
|
44
|
+
def set_line_above(line_above)
|
45
|
+
if @line_above=line_above
|
46
|
+
@crlw=@pop.sum_line_width
|
47
|
+
@row_height=@row_height+@crlw*3
|
48
|
+
end
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def height
|
53
|
+
@row_height
|
54
|
+
end
|
55
|
+
def set_y(newY)
|
56
|
+
@y=newY
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def draw(cr)
|
61
|
+
min_x=60000
|
62
|
+
max_x=0
|
63
|
+
cell_layouts.each_pair{|key,layout|
|
64
|
+
min_x=pop.column_pos[key] if min_x>pop.column_pos[key]
|
65
|
+
max_x=pop.column_pos[key]+pop.column_width[key] if max_x<pop.column_pos[key]+pop.column_width[key]
|
66
|
+
cr.move_to(pop.column_pos[key]+@pop.cell_line_width,y+@crlw*3+@pop.cell_line_width)
|
67
|
+
cr.show_pango_layout(layout)
|
68
|
+
cr.stroke
|
69
|
+
}
|
70
|
+
|
71
|
+
if @line_above
|
72
|
+
cr.set_line_width(@pop.sum_line_width)
|
73
|
+
cr.move_to(min_x,y+@crlw)
|
74
|
+
cr.line_to(max_x,y+@crlw)
|
75
|
+
cr.stroke
|
76
|
+
end
|
77
|
+
if @pop.row_underline>0
|
78
|
+
cr.set_line_width(@pop.row_underline)
|
79
|
+
cr.move_to(min_x,y+@row_height)
|
80
|
+
cr.line_to(max_x,y+@row_height)
|
81
|
+
cr.stroke
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def inspect
|
86
|
+
@insptext+"\theight=#{height}\ty=#{y}\tpage=#{page}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
@@ -0,0 +1,365 @@
|
|
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
|
+
module ListPrint
|
6
|
+
class ListPrintOperation < Gtk::PrintOperation
|
7
|
+
include Conf
|
8
|
+
|
9
|
+
def initialize(list)
|
10
|
+
@list=list
|
11
|
+
@print_sums=list.gtk_attribute("print_sums") || "true" =="true"
|
12
|
+
@sum_font=list.gtk_attribute("sum_font") || "verdana bold 6"
|
13
|
+
@cell_font=list.gtk_attribute("cell_font") || "verdana 6"
|
14
|
+
@columns_header_font=list.gtk_attribute("columns_header_font") || "verdana bold 6"
|
15
|
+
@header_font=list.gtk_attribute("header_font") || "verdana bold 10"
|
16
|
+
@footer_font=list.gtk_attribute("footer_font") || "verdana 6"
|
17
|
+
@date_font=list.gtk_attribute("date_font") || "verdana 5"
|
18
|
+
@print_date=list.gtk_attribute("print_date") || "true" == "true"
|
19
|
+
@row_spacing=(list.gtk_attribute("row_spacing") || 1.0).to_f
|
20
|
+
@column_spacing=(list.gtk_attribute("column_spacing") || 1.0).to_f
|
21
|
+
@draw_footer_line=list.gtk_attribute("draw_footer_line") || "true" == "true"
|
22
|
+
@line_above_parent=list.gtk_attribute("line_above_parent") || "true" == "true"
|
23
|
+
@draw_header_line=list.gtk_attribute("draw_header_line") || "true" == "true"
|
24
|
+
@draw_header_cell_borders=list.gtk_attribute("draw_header_cell_borders") || "true" == "true"
|
25
|
+
@fill_header_background=list.gtk_attribute("fill_header_background") || "true" == "true"
|
26
|
+
@row_underline=(list.gtk_attribute("row_underline") || 0.0).to_f
|
27
|
+
|
28
|
+
if @print_with_child=list.gtk_attribute("print_with_child")
|
29
|
+
@child_list=list.child_by_id(@print_with_child.to_i)
|
30
|
+
end
|
31
|
+
@print_sub_sums=list.gtk_attribute("print_sub_sums") || "true" == "true"
|
32
|
+
@child_indent=(list.gtk_attribute("child_indent") || 100).to_f
|
33
|
+
@child_cell_font=list.gtk_attribute("child_cell_font") || "verdana 5"
|
34
|
+
@child_sum_font=list.gtk_attribute("child_sum_font") || "verdana bold 5"
|
35
|
+
@child_columns_header_font=list.gtk_attribute("child_columns_header_font") || "verdana bold 5"
|
36
|
+
|
37
|
+
@header_line_width=(list.gtk_attribute("header_line_width") || 1.0).to_f
|
38
|
+
@footer_line_width=(list.gtk_attribute("footer_line_width") || 1.0).to_f
|
39
|
+
@cell_line_width=(list.gtk_attribute("cell_line_width") || 0.3).to_f
|
40
|
+
@sum_line_width=(list.gtk_attribute("sum_line_width") || 0.6).to_f
|
41
|
+
|
42
|
+
@line_width=1
|
43
|
+
|
44
|
+
super()
|
45
|
+
set_show_progress(true)
|
46
|
+
set_use_full_page(false)
|
47
|
+
set_unit(Gtk::PaperSize::UNIT_POINTS)
|
48
|
+
|
49
|
+
# n_pages=1
|
50
|
+
|
51
|
+
|
52
|
+
signal_connect("begin-print",@list) { |pop, context,list|
|
53
|
+
edebug("begin print","printing","info")
|
54
|
+
cr = context.cairo_context
|
55
|
+
cr.set_line_width(@line_width)
|
56
|
+
@height = context.page_setup.get_page_height(Gtk::PaperSize::UNIT_POINTS).to_f
|
57
|
+
@width = context.page_setup.get_page_width(Gtk::PaperSize::UNIT_POINTS).to_f
|
58
|
+
|
59
|
+
columns_width_sum=0.0
|
60
|
+
col_cnt=0
|
61
|
+
list.columns.each{|col|
|
62
|
+
if col.printable?
|
63
|
+
columns_width_sum+=col.width.to_f
|
64
|
+
col_cnt+=1
|
65
|
+
end
|
66
|
+
} #summ the width of all columns
|
67
|
+
coef=(width-col_cnt*@column_spacing)/columns_width_sum
|
68
|
+
edebug("colums width sum: #{columns_width_sum}","printing","info")
|
69
|
+
|
70
|
+
#@column_width will store the column positions on the context
|
71
|
+
@column_width=Hash.new
|
72
|
+
@column_pos=Hash.new
|
73
|
+
col_cur_pos=0.0
|
74
|
+
list.columns.each{|col|
|
75
|
+
if col.printable?
|
76
|
+
@column_pos[col.data]=col_cur_pos
|
77
|
+
@column_width[col.data]=col.width.to_f*coef
|
78
|
+
col_cur_pos+=@column_width[col.data]+@column_spacing
|
79
|
+
end
|
80
|
+
}
|
81
|
+
if child_list
|
82
|
+
columns_width_sum=@child_indent.to_f
|
83
|
+
col_cnt=0
|
84
|
+
child_list.columns.each{|col|
|
85
|
+
if col.printable?
|
86
|
+
columns_width_sum+=col.width.to_f
|
87
|
+
col_cnt+=1
|
88
|
+
end
|
89
|
+
} #summ the width of all columns
|
90
|
+
coef=(width-col_cnt*@column_spacing)/columns_width_sum
|
91
|
+
edebug("child colums width sum: #{columns_width_sum}","printing","info")
|
92
|
+
|
93
|
+
#@column_width will store the column positions on the context
|
94
|
+
col_cur_pos=@child_indent.to_f*coef
|
95
|
+
child_list.columns.each{|col|
|
96
|
+
if col.printable?
|
97
|
+
@column_pos[col.data]=col_cur_pos
|
98
|
+
@column_width[col.data]=col.width.to_f*coef
|
99
|
+
col_cur_pos+=@column_width[col.data]+@column_spacing
|
100
|
+
end
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
@current_height=0
|
107
|
+
@header=HeaderLayout.new(cr,self)
|
108
|
+
@current_height=@current_height+@header.height
|
109
|
+
@columns_header=ColumnsHeaderLayout.new(self,cr,list.columns,@columns_header_font)
|
110
|
+
@columns_header.y=@current_height
|
111
|
+
@current_height=@current_height+@columns_header.height+@row_spacing
|
112
|
+
if child_list
|
113
|
+
@child_columns_header=ColumnsHeaderLayout.new(self,cr,child_list.columns,@child_columns_header_font) if child_list
|
114
|
+
@child_columns_header.y=@current_height
|
115
|
+
@current_height=@current_height+@child_columns_header.height+@row_spacing
|
116
|
+
end
|
117
|
+
@headers_height=@current_height
|
118
|
+
|
119
|
+
@footer=FooterLayout.new(cr,self)
|
120
|
+
|
121
|
+
@iter_layouts = []
|
122
|
+
|
123
|
+
@sums=Hash.new
|
124
|
+
list.columns.each{|col| @sums[col.colnum]=0 if col.summable?}
|
125
|
+
|
126
|
+
if child_list
|
127
|
+
if print_sub_sums
|
128
|
+
@sub_sums=Hash.new
|
129
|
+
child_list.columns.each{|col| @sub_sums[col.colnum]=0 if col.summable?}
|
130
|
+
end
|
131
|
+
@citer=nil
|
132
|
+
end
|
133
|
+
|
134
|
+
@piter=nil
|
135
|
+
#list.model.iter_first
|
136
|
+
@past_last=false
|
137
|
+
@page_n=0
|
138
|
+
}
|
139
|
+
signal_connect("paginate",@list) { |pop, context,list|
|
140
|
+
edebug("paginate: #{@page_n}","printing","info")
|
141
|
+
|
142
|
+
page_full=false
|
143
|
+
cr = context.cairo_context
|
144
|
+
while true
|
145
|
+
if @child_list
|
146
|
+
#step first on citer if citer is nil
|
147
|
+
if @citer.nil?
|
148
|
+
@citer=@child_list.list_model.data.iter_first
|
149
|
+
else
|
150
|
+
@citer=nil unless @citer.next!
|
151
|
+
end unless @piter.nil?
|
152
|
+
#go to next valid citer which meets key-relation
|
153
|
+
begin
|
154
|
+
break if @citer.nil?
|
155
|
+
go_next=false
|
156
|
+
#check for parent_key
|
157
|
+
go_next=true unless @citer[child_list.list_model.column_of_child_key] == @piter[child_list.list_model.column_of_parent_key]
|
158
|
+
#check for parent_key2
|
159
|
+
go_next=true unless @citer[child_list.list_model.column_of_child_key2] == @piter[child_list.list_model.column_of_parent_key2] if !child_list.list_model.column_of_child_key2.nil? && go_next
|
160
|
+
#check child's filters
|
161
|
+
filter_count=0
|
162
|
+
filter_hits=0
|
163
|
+
@child_list.columns.each{|column|
|
164
|
+
fl=get_conf(@child_list.get_id,column.header["id"],"filter").to_s.upcase
|
165
|
+
case column.header['type']
|
166
|
+
when 'gtk_combo', 'gtk_const_combo' then fl = (fl=="-1" or fl=="") ? "" : "=#{fl}"
|
167
|
+
end
|
168
|
+
comp=@citer[column.header["model_col"]].to_s.upcase
|
169
|
+
if fl.length>0
|
170
|
+
filter_count=filter_count+1
|
171
|
+
filter_hits=filter_hits+
|
172
|
+
if ['gtk_int','Integer','gtk_float','gtk_progress','gtk_duration','gtk_timestamp'].include? column.header['type']
|
173
|
+
case fl[0].chr
|
174
|
+
when "<" then comp.to_f < fl[1 .. fl.length].to_f ? 1: 0
|
175
|
+
when ">" then comp.to_f > fl[1 .. fl.length].to_f ? 1: 0
|
176
|
+
when "!" then comp.to_f != fl[1 .. fl.length].to_f ? 1: 0
|
177
|
+
when "=" then comp.to_f == fl[1 .. fl.length].to_f ? 1: 0
|
178
|
+
else comp.to_f == fl[1 .. fl.length].to_f ? 1: 0
|
179
|
+
end
|
180
|
+
else
|
181
|
+
case fl[0].chr
|
182
|
+
when "=" then comp == fl[1 .. fl.length] ? 1: 0
|
183
|
+
when "<" then comp < fl[1 .. fl.length] ? 1: 0
|
184
|
+
when ">" then comp > fl[1 .. fl.length] ? 1: 0
|
185
|
+
when "!" then comp != fl[1 .. fl.length] ? 1: 0
|
186
|
+
else comp.index(fl) ? 1: 0
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
}
|
191
|
+
go_next=filter_hits != filter_count unless go_next
|
192
|
+
|
193
|
+
@citer=nil if !@citer.next! if go_next
|
194
|
+
end while go_next
|
195
|
+
#if citer is nil we go to next piter
|
196
|
+
if @citer.nil?
|
197
|
+
#print sub_sums
|
198
|
+
if print_sub_sums and @sum_avail
|
199
|
+
il=IterLayout.new(cr,@sub_sums,child_list.columns, self,child_sum_font )
|
200
|
+
# print il.inspect
|
201
|
+
il.set_line_above(true)
|
202
|
+
lay_it(il)
|
203
|
+
#clear sums
|
204
|
+
@sub_sums.each_key{|key| @sub_sums[key]=0}
|
205
|
+
@sum_avail=false
|
206
|
+
end
|
207
|
+
|
208
|
+
#we print piter
|
209
|
+
if @piter.nil?
|
210
|
+
break if past_last=!@piter=list.model.iter_first
|
211
|
+
else
|
212
|
+
break if past_last=!@piter.next!
|
213
|
+
end
|
214
|
+
@sums.each_key{|key| @sums[key]=@sums[key]+@piter[key].to_f}
|
215
|
+
il=IterLayout.new(cr,@piter,list.columns, self,cell_font)
|
216
|
+
il.set_line_above(line_above_parent)
|
217
|
+
break if lay_it(il)
|
218
|
+
else
|
219
|
+
#calc sums
|
220
|
+
if print_sub_sums
|
221
|
+
@sub_sums.each_key{|key| @sub_sums[key]=@sub_sums[key]+@citer[key].to_f}
|
222
|
+
@sum_avail=true
|
223
|
+
end
|
224
|
+
# p "citer: #{@citer[child_list.column_of_id]} #{@past_last} #{il.inspect}"
|
225
|
+
#we print citer
|
226
|
+
il=IterLayout.new(cr,@citer,child_list.columns, self,child_cell_font)
|
227
|
+
break if lay_it(il)
|
228
|
+
end
|
229
|
+
|
230
|
+
else
|
231
|
+
if @piter.nil?
|
232
|
+
break if past_last=!@piter=list.model.iter_first
|
233
|
+
end
|
234
|
+
@sums.each_key{|key| @sums[key]=@sums[key]+@piter[key].to_f} if @piter
|
235
|
+
il=IterLayout.new(cr,@piter,list.columns, self,cell_font)
|
236
|
+
if lay_it(il)
|
237
|
+
#do not print it twice
|
238
|
+
past_last=!@piter.next!
|
239
|
+
break
|
240
|
+
end
|
241
|
+
break if past_last=!@piter.next!
|
242
|
+
edebug("piter: #{@piter[list.list_model.column_of_id]} #{@past_last}","printing","debug")
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
if past_last and print_sums
|
247
|
+
il=IterLayout.new(cr,@sums,list.columns, self,sum_font)
|
248
|
+
il.set_line_above(true)
|
249
|
+
lay_it(il)
|
250
|
+
end
|
251
|
+
|
252
|
+
pop.set_n_pages(@page_n+1)
|
253
|
+
einfo("paginated #{pop.n_pages} pages","printing")
|
254
|
+
past_last
|
255
|
+
} #paginate
|
256
|
+
|
257
|
+
signal_connect('draw-page'){|me,context,page_number|
|
258
|
+
edebug("draw-page: #{page_number}","printing","info")
|
259
|
+
cr = context.cairo_context
|
260
|
+
@header.draw(cr)
|
261
|
+
@columns_header.draw(cr)
|
262
|
+
@child_columns_header.draw(cr) if child_list
|
263
|
+
@footer.draw(cr,page_number)
|
264
|
+
|
265
|
+
#draw cells
|
266
|
+
@iter_layouts.each{|il|
|
267
|
+
il.draw(cr) if il.page == page_number
|
268
|
+
}
|
269
|
+
cr.stroke
|
270
|
+
}
|
271
|
+
signal_connect('status-changed'){|pop|
|
272
|
+
einfo("status:#{pop.status_string}","printing")
|
273
|
+
}
|
274
|
+
end #initialize
|
275
|
+
attr_accessor :list, :column_width, :column_pos, :height, :width, :custom_page_setup, :top, :bottom, :left, :right
|
276
|
+
attr_accessor :draw_header_line
|
277
|
+
attr_accessor :draw_footer_line
|
278
|
+
attr_accessor :line_above_parent
|
279
|
+
attr_accessor :draw_header_cell_borders
|
280
|
+
attr_accessor :print_date
|
281
|
+
attr_accessor :header_font
|
282
|
+
attr_accessor :columns_header_font
|
283
|
+
attr_accessor :child_columns_header_font
|
284
|
+
attr_accessor :footer_font
|
285
|
+
attr_accessor :date_font
|
286
|
+
attr_accessor :cell_font
|
287
|
+
attr_accessor :sum_font
|
288
|
+
attr_accessor :child_sum_font
|
289
|
+
attr_accessor :child_cell_font
|
290
|
+
attr_accessor :child_list
|
291
|
+
attr_accessor :child_indent
|
292
|
+
attr_accessor :columns
|
293
|
+
attr_accessor :print_sub_sums
|
294
|
+
attr_accessor :print_sums
|
295
|
+
attr_accessor :draw_footer_line, :footer_line_width
|
296
|
+
attr_accessor :draw_header_line
|
297
|
+
attr_accessor :fill_header_background, :header_line_width
|
298
|
+
attr_accessor :row_spacing
|
299
|
+
attr_accessor :column_spacing
|
300
|
+
attr_reader :cell_line_width, :sum_line_width, :row_underline
|
301
|
+
def lay_it(il)
|
302
|
+
if @current_height + il.row_height > @footer.y
|
303
|
+
#page full
|
304
|
+
page_full=true
|
305
|
+
einfo("page full","printing")
|
306
|
+
edebug("current_height: #{@current_height}, row.height: #{il.height}, footer_position: #{@footer.y}","printing")
|
307
|
+
@current_height=@headers_height
|
308
|
+
@page_n=@page_n+1
|
309
|
+
end
|
310
|
+
il.page=@page_n
|
311
|
+
il.y=@current_height
|
312
|
+
@current_height=@current_height+il.row_height+@row_spacing
|
313
|
+
@iter_layouts.push(il)
|
314
|
+
edebug(il.inspect,"printing")
|
315
|
+
page_full
|
316
|
+
end
|
317
|
+
|
318
|
+
def pango_width
|
319
|
+
width * Pango::SCALE
|
320
|
+
end
|
321
|
+
def pango_height
|
322
|
+
height * Pango::SCALE
|
323
|
+
end
|
324
|
+
|
325
|
+
def run_print_dialog
|
326
|
+
|
327
|
+
res = run(Gtk::PrintOperation::Action::PRINT_DIALOG, list.get_ancestor(Gtk::Window))
|
328
|
+
einfo("return: "+
|
329
|
+
case res
|
330
|
+
when RESULT_ERROR
|
331
|
+
"error"
|
332
|
+
when RESULT_CANCEL
|
333
|
+
"cancelled"
|
334
|
+
when RESULT_APPLY
|
335
|
+
"applied"
|
336
|
+
when RESULT_IN_PROGRESS
|
337
|
+
"in progress"
|
338
|
+
end,"printing")
|
339
|
+
end
|
340
|
+
def to_s;"<ListPrintOperation:#{@list.moditem["display"]}>";end
|
341
|
+
|
342
|
+
end
|
343
|
+
|
344
|
+
def gtkprint
|
345
|
+
@pop=ListPrintOperation.new(self)
|
346
|
+
ps=Gtk::PageSetup.new
|
347
|
+
case gtk_attribute("page_orientation").upcase
|
348
|
+
when "LANDSCAPE" then ps.set_orientation(Gtk::PrintSettings::PageOrientation::LANDSCAPE)
|
349
|
+
when "PORTRAIT" then ps.set_orientation(Gtk::PrintSettings::PageOrientation::PORTRAIT)
|
350
|
+
end if gtk_attribute("page_orientation")
|
351
|
+
case gtk_attribute("paper_size").upcase
|
352
|
+
when "A3" then ps.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::A3))
|
353
|
+
when "A4" then ps.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::A4))
|
354
|
+
when "A5" then ps.set_paper_size_and_default_margins(Gtk::PaperSize.new(Gtk::PaperSize::A5))
|
355
|
+
end if gtk_attribute("paper_size")
|
356
|
+
pop.set_default_page_setup(ps)
|
357
|
+
#restore saved print_settings
|
358
|
+
pop.print_settings=Gtk::PrintSettings.new.deserialize(get_conf(list_id,0,'print_settings'))
|
359
|
+
#run the dialog
|
360
|
+
pop.run_print_dialog
|
361
|
+
#save the settings
|
362
|
+
set_conf(list_id,0,'print_settings',pop.print_settings.serialize)
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|