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,91 @@
|
|
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
|
+
|
6
|
+
class PageLayout < Gtk::ScrolledWindow
|
7
|
+
include ManqodCommon
|
8
|
+
include Conf
|
9
|
+
|
10
|
+
def initialize(print_editor)
|
11
|
+
@print_editor=print_editor
|
12
|
+
super()
|
13
|
+
@widget=Gtk::Layout.new
|
14
|
+
@widget.set_size_request(
|
15
|
+
@print_editor.page_setup.get_page_width(Gtk::PaperSize::UNIT_POINTS).to_f*@print_editor.zoom,
|
16
|
+
@print_editor.page_setup.get_page_height(Gtk::PaperSize::UNIT_POINTS).to_f*@print_editor.zoom
|
17
|
+
)
|
18
|
+
add_with_viewport(@eb=Gtk::EventBox.new.add(@widget))
|
19
|
+
#.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC)
|
20
|
+
# @widget.modify_bg(Gtk::StateType::NORMAL,Gdk::Color.parse("#0FFFFF"))
|
21
|
+
@eb.set_visible_window(false)
|
22
|
+
@eb.set_border_width(0)
|
23
|
+
|
24
|
+
@widget.signal_connect('expose-event'){|me,event|
|
25
|
+
return false if @print_editor.page_setup.nil?
|
26
|
+
cr=me.bin_window.create_cairo_context
|
27
|
+
cr.scale(@print_editor.zoom,@print_editor.zoom)
|
28
|
+
cr.set_line_width(0.2)
|
29
|
+
cr.set_source_rgba(0,0,1,1)
|
30
|
+
|
31
|
+
ps=@print_editor.page_setup
|
32
|
+
paper_height = ps.get_page_height(Gtk::PaperSize::UNIT_POINTS).to_f
|
33
|
+
paper_width = ps.get_page_width(Gtk::PaperSize::UNIT_POINTS).to_f
|
34
|
+
|
35
|
+
cr.rectangle(0,0,paper_width,paper_height)
|
36
|
+
|
37
|
+
cr.rectangle(
|
38
|
+
ps.get_left_margin(Gtk::PaperSize::UNIT_POINTS),
|
39
|
+
ps.get_top_margin(Gtk::PaperSize::UNIT_POINTS),
|
40
|
+
paper_width-ps.get_left_margin(Gtk::PaperSize::UNIT_POINTS)-ps.get_right_margin(Gtk::PaperSize::UNIT_POINTS),
|
41
|
+
paper_height-ps.get_top_margin(Gtk::PaperSize::UNIT_POINTS)-ps.get_bottom_margin(Gtk::PaperSize::UNIT_POINTS)
|
42
|
+
)
|
43
|
+
cr.stroke_preserve
|
44
|
+
cr.set_source_rgba(1,1,1,0.5)
|
45
|
+
cr.fill(true)
|
46
|
+
# cr.move_to(paper_width/2,paper_height/2)
|
47
|
+
# cr.fill
|
48
|
+
cr.stroke
|
49
|
+
}
|
50
|
+
@eb.signal_connect('button-press-event'){|me,event| @print_editor.set_focused_item(nil)}
|
51
|
+
end
|
52
|
+
attr_accessor :print_editor
|
53
|
+
|
54
|
+
def inc_size(w,h)
|
55
|
+
@widget.set_width_request(w.to_i*print_editor.zoom+10) if @widget.allocation.width < w.to_i*print_editor.zoom+10
|
56
|
+
@widget.set_height_request(h.to_i*print_editor.zoom+10) if @widget.allocation.height < h.to_i*print_editor.zoom+10
|
57
|
+
end
|
58
|
+
|
59
|
+
def put(page_num,gtk_type,id=nil,x=0,y=0,width=100,height=100,text='',font="",ta="left")
|
60
|
+
l=PrintEditorItem.new(self,page_num,id,x,y,width,height,gtk_type,text,font,ta)
|
61
|
+
inc_size(x+width,y+height)
|
62
|
+
@widget.put(l,l.x*print_editor.zoom,l.y*print_editor.zoom)
|
63
|
+
l.text_from_mysql(text)
|
64
|
+
show_all
|
65
|
+
l
|
66
|
+
end
|
67
|
+
|
68
|
+
def move(ch)
|
69
|
+
inc_size(ch.x+ch.width,ch.y+ch.height)
|
70
|
+
@widget.move(ch,ch.x*print_editor.zoom,ch.y*print_editor.zoom)
|
71
|
+
end
|
72
|
+
def remove(item)
|
73
|
+
@widget.remove(item)
|
74
|
+
end
|
75
|
+
|
76
|
+
def to_mysql
|
77
|
+
@widget.each{|ch| ch.to_mysql}
|
78
|
+
end
|
79
|
+
|
80
|
+
def clear
|
81
|
+
unless @widget.window.nil?
|
82
|
+
@widget.each{|ch| ch.zoomed}
|
83
|
+
@widget.window.invalidate(Gdk::Rectangle.new(0,0,@widget.allocation.width,@widget.allocation.height),true)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def to_s
|
88
|
+
"Page of #{@print_editor}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
@@ -0,0 +1,310 @@
|
|
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 PrintEditorItem < Gtk::EventBox
|
6
|
+
include ManqodCommon
|
7
|
+
def initialize(page_layout,page_num,id,x,y,width,height,gtk_type,text,font,text_alignment="left")
|
8
|
+
@id=id
|
9
|
+
@x=x
|
10
|
+
@y=y
|
11
|
+
@pagenum=page_num
|
12
|
+
@page_layout=page_layout
|
13
|
+
@gtk_type=gtk_type
|
14
|
+
@editable=true
|
15
|
+
@width=width
|
16
|
+
@height=height
|
17
|
+
@text=text
|
18
|
+
@font=font
|
19
|
+
@dragging=false
|
20
|
+
@resizing=false
|
21
|
+
super()
|
22
|
+
@child=case gtk_type
|
23
|
+
when 'line','rectange' then Gtk::DrawingArea.new
|
24
|
+
when 'text' then Gtk::TextView.new#.set_editable(true).set_sensitive(true)
|
25
|
+
when 'list' then Gtk::Frame.new("list")
|
26
|
+
when 'image' then Gtk::Image.new(Gtk::Stock::MISSING_IMAGE,Gtk::IconSize::DIALOG)
|
27
|
+
else Gtk::Label.new("unknown object")
|
28
|
+
end
|
29
|
+
modify_font
|
30
|
+
@child.modify_base(Gtk::StateType::PRELIGHT,Gdk::Color.parse("#EFEFEF"))
|
31
|
+
@child.modify_base(Gtk::StateType::NORMAL,Gdk::Color.parse("#FBFBFB"))
|
32
|
+
set_text_alignment(text_alignment)
|
33
|
+
add(@child)
|
34
|
+
set_size_request(width,height)
|
35
|
+
set_can_focus(true)
|
36
|
+
set_visible_window(true)
|
37
|
+
set_border_width(0)
|
38
|
+
set_above_child(true)# unless @gtk_type == "text"
|
39
|
+
show_all
|
40
|
+
@child.signal_connect('expose-event'){|me,event|
|
41
|
+
case gtk_type
|
42
|
+
when 'line'
|
43
|
+
cr=me.window.create_cairo_context
|
44
|
+
cr.scale(print_editor.zoom,print_editor.zoom)
|
45
|
+
cr.move_to(0,0).line_to(@width,@height)
|
46
|
+
cr.stroke
|
47
|
+
when 'rectangle'
|
48
|
+
cr=me.window.create_cairo_context
|
49
|
+
cr.scale(print_editor.zoom,print_editor.zoom)
|
50
|
+
cr.rectangle(0,0,@width,@height)
|
51
|
+
cr.stroke
|
52
|
+
when 'text',"list","image"
|
53
|
+
else
|
54
|
+
edebug("unknown print-type: #{gtk_type}","printing","warning")
|
55
|
+
end
|
56
|
+
}
|
57
|
+
signal_connect('button-press-event'){|me,event|
|
58
|
+
if event.event_type == Gdk::Event::BUTTON2_PRESS then
|
59
|
+
set_above_child(false) if @gtk_type == "text"
|
60
|
+
else
|
61
|
+
print_editor.set_focused_item(self)
|
62
|
+
if event.state.control_mask?
|
63
|
+
@xshift=event.x
|
64
|
+
@yshift=event.y
|
65
|
+
@owidth=@width*zoom
|
66
|
+
@oheight=@height*zoom
|
67
|
+
@pX,@pY=parent.pointer
|
68
|
+
case event.button
|
69
|
+
when 1 then @dragging=true
|
70
|
+
when 2 then @resizing=true
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
true
|
75
|
+
}
|
76
|
+
signal_connect('motion-notify-event'){|me,event|
|
77
|
+
snap=5
|
78
|
+
if @dragging or @resizing
|
79
|
+
pe=print_editor
|
80
|
+
pe.set_focused_item(self)
|
81
|
+
px=parent.pointer[0]
|
82
|
+
py=parent.pointer[1]
|
83
|
+
if @dragging
|
84
|
+
info.item_x.set_value(((px-@xshift)/zoom/snap).round*snap)
|
85
|
+
info.item_y.set_value(((py-@yshift)/zoom/snap).round*snap)
|
86
|
+
end
|
87
|
+
if @resizing
|
88
|
+
info.item_width.set_value(((@owidth+px-@pX)/zoom/snap).round*snap)
|
89
|
+
info.item_height.set_value(((@oheight+py-@pY)/zoom/snap).round*snap)
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
}
|
94
|
+
signal_connect('button-release-event'){|me,event| @dragging=false;@resizing=false;}
|
95
|
+
|
96
|
+
end
|
97
|
+
attr_reader :id, :x, :y, :width, :height, :gtk_type, :pagenum, :font, :editable, :text_alignment
|
98
|
+
attr_reader :page_layout, :dragging, :drawing
|
99
|
+
|
100
|
+
def info
|
101
|
+
print_editor.info
|
102
|
+
end
|
103
|
+
def zoomed
|
104
|
+
move_me
|
105
|
+
set_size_request
|
106
|
+
end
|
107
|
+
def zoom
|
108
|
+
print_editor.zoom
|
109
|
+
end
|
110
|
+
|
111
|
+
def move_me(newx=@x,newy=@y,new_page=@page_num)
|
112
|
+
@x=newx
|
113
|
+
@y=newy
|
114
|
+
@page_num=new_page
|
115
|
+
page_layout.move(self)
|
116
|
+
end
|
117
|
+
|
118
|
+
def set_size_request(new_width=@width,new_height=@height)
|
119
|
+
if @gtk_type == "image" and !@image_iter.nil?
|
120
|
+
#image keep aspect ratio
|
121
|
+
im=DrbImages.instance.client_image_of_id(@image_iter[0])
|
122
|
+
if @width != new_width then
|
123
|
+
@width=new_width
|
124
|
+
@height=im.height*@width / im.width
|
125
|
+
info.item_height.set_value(@height)
|
126
|
+
else
|
127
|
+
@height=new_height
|
128
|
+
@width=im.width*@height / im.height
|
129
|
+
info.item_width.set_value(@width)
|
130
|
+
end
|
131
|
+
super(width*zoom,height*zoom)
|
132
|
+
@child.set_pixbuf(im.scale(@width*zoom,@height*zoom))
|
133
|
+
page_layout.print_editor.tips.set_tip(self,"#{im.width}x#{im.height} (#{sprintf('%.2f',@width / im.width)})",'extra hint')
|
134
|
+
else
|
135
|
+
#not image
|
136
|
+
@width=new_width
|
137
|
+
@height=new_height
|
138
|
+
super(width*zoom,height*zoom)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def text
|
143
|
+
case @gtk_type
|
144
|
+
when "text" then @text=text_to_mysql
|
145
|
+
when "list","image" then @text
|
146
|
+
else ""
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def set_editable(editable)
|
151
|
+
if @gtk_type=="text"
|
152
|
+
@child.set_editable(editable)
|
153
|
+
@child.set_sensitive(editable)
|
154
|
+
end
|
155
|
+
self
|
156
|
+
end
|
157
|
+
|
158
|
+
def modify_font(new_font=@font)
|
159
|
+
if @gtk_type=="text"
|
160
|
+
@font=new_font
|
161
|
+
edebug("setting font :"+@font,"printing","info")
|
162
|
+
fontdesc=Pango::FontDescription.new(@font)
|
163
|
+
@child.modify_font(fontdesc) unless fontdesc.nil?
|
164
|
+
end
|
165
|
+
self
|
166
|
+
end
|
167
|
+
def set_text_alignment(na="left")
|
168
|
+
@text_alignment=na
|
169
|
+
if @gtk_type == "text"
|
170
|
+
@child.set_justification(
|
171
|
+
case na
|
172
|
+
when "right" then Gtk::Justification::RIGHT
|
173
|
+
when "center" then Gtk::Justification::CENTER
|
174
|
+
else Gtk::Justification::LEFT
|
175
|
+
end
|
176
|
+
)
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def set_text(newtext=@text)
|
181
|
+
@text=newtext
|
182
|
+
case @gtk_type
|
183
|
+
when "text" then text_from_mysql(@text)
|
184
|
+
when "image" then
|
185
|
+
@image_iter=nil
|
186
|
+
info.item_image.model.each{|model,path,iter|
|
187
|
+
@image_iter=iter if @text.to_i == iter[0]
|
188
|
+
}
|
189
|
+
if @image_iter.nil?
|
190
|
+
@child=Gtk::Image.new(Gtk::Stock::MISSING_IMAGE,Gtk::IconSize::DIALOG)
|
191
|
+
else
|
192
|
+
@child.set_pixbuf(DrbImages.instance.client_image_of_id(@image_iter[0]).scale(@width,@height))
|
193
|
+
end
|
194
|
+
end
|
195
|
+
self
|
196
|
+
end
|
197
|
+
|
198
|
+
def unfocus
|
199
|
+
@dragging=false
|
200
|
+
set_state(Gtk::STATE_NORMAL)
|
201
|
+
set_above_child(true)
|
202
|
+
edebug("deselected","printing","info")
|
203
|
+
end
|
204
|
+
|
205
|
+
def to_mysql
|
206
|
+
if id.nil?
|
207
|
+
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}'")
|
208
|
+
else
|
209
|
+
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}'")
|
210
|
+
end
|
211
|
+
edebug("saved","printing","info")
|
212
|
+
end
|
213
|
+
|
214
|
+
def remove_from_mysql
|
215
|
+
query("delete from gtkprintitems where id='#{id}'")
|
216
|
+
edebug("deleted","printing","info")
|
217
|
+
end
|
218
|
+
|
219
|
+
def moditemid
|
220
|
+
print_editor.moditemid
|
221
|
+
end
|
222
|
+
|
223
|
+
def print_editor
|
224
|
+
@page_layout.print_editor
|
225
|
+
end
|
226
|
+
|
227
|
+
def text_from_mysql(nt=text)
|
228
|
+
if @gtk_type=="text"
|
229
|
+
ont=nt.clone
|
230
|
+
mydata=get_ancestor(WysiwygPrintEditor).mydata
|
231
|
+
found=false
|
232
|
+
while first=nt.index("{")
|
233
|
+
found=true
|
234
|
+
@child.buffer.insert_at_cursor(nt[0 .. first-1]) if first >= 1
|
235
|
+
if last=nt[first .. nt.length].index("}")
|
236
|
+
last=last+first
|
237
|
+
datak=nt[first+1 .. last-1]
|
238
|
+
if mydata.has_key?(datak)
|
239
|
+
mydata[datak]="N/A" if mydata[datak].nil? || mydata[datak] == ""
|
240
|
+
edebug("has key: [#{datak}] -> [#{mydata[datak]}]","printing","debug")
|
241
|
+
unless tag = @child.buffer.tag_table.lookup(datak)
|
242
|
+
tag=Gtk::TextTag.new(datak).set_foreground_gdk(Gdk::Color.new(65000,0,0))
|
243
|
+
@child.buffer.tag_table.add(tag)
|
244
|
+
end
|
245
|
+
@child.buffer.insert_at_cursor(mydata[datak])
|
246
|
+
bounds=@child.buffer.selection_bounds
|
247
|
+
bounds[0].backward_cursor_positions(mydata[datak].length)
|
248
|
+
@child.buffer.apply_tag(tag,bounds[0],bounds[1])
|
249
|
+
nt=nt[last+1 .. nt.length+1]
|
250
|
+
else
|
251
|
+
edebug("no key: #{datak}","printing","debug")
|
252
|
+
@child.buffer.insert_at_cursor(datak)
|
253
|
+
nt=nt[last+1 .. nt.length+1]
|
254
|
+
end
|
255
|
+
else
|
256
|
+
nt=nt[first+1 .. nt.length+1]
|
257
|
+
@child.buffer.insert_at_cursor("{"+nt)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
@child.buffer.insert_at_cursor(nt) if nt.length>0
|
262
|
+
edebug("from_mysql: [#{ont}] -> buffer: [#{@child.buffer.text}]","printing","debug")
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
def text_to_mysql
|
267
|
+
if @gtk_type=="text"
|
268
|
+
i=@child.buffer.bounds[0]
|
269
|
+
tag="start"
|
270
|
+
plast=nil
|
271
|
+
while !tag.nil?
|
272
|
+
tag=nil
|
273
|
+
first=nil
|
274
|
+
if i.begins_tag?(nil) then
|
275
|
+
first=i.offset;
|
276
|
+
tag=i.toggled_tags(true)[0]
|
277
|
+
else
|
278
|
+
if i.forward_to_tag_toggle(nil) then
|
279
|
+
first=i.offset
|
280
|
+
tag=i.toggled_tags(true)[0]
|
281
|
+
end
|
282
|
+
end
|
283
|
+
if tag and i.forward_to_tag_toggle(tag) then last=i.offset;end
|
284
|
+
unless tag.nil?
|
285
|
+
if plast.nil?
|
286
|
+
ret=@child.buffer.get_text(@child.buffer.bounds[0],@child.buffer.get_iter_at_offset(first))
|
287
|
+
else
|
288
|
+
ret="#{ret}#{@child.buffer.get_text(@child.buffer.get_iter_at_offset(plast),@child.buffer.get_iter_at_offset(first))}"
|
289
|
+
end
|
290
|
+
ret="#{ret}{#{tag.name}}"
|
291
|
+
plast=last
|
292
|
+
end
|
293
|
+
end
|
294
|
+
if plast.nil?
|
295
|
+
ret=@child.buffer.text
|
296
|
+
else
|
297
|
+
ret="#{ret}#{@child.buffer.get_text(@child.buffer.get_iter_at_offset(plast),@child.buffer.bounds[1])}"
|
298
|
+
end
|
299
|
+
edebug("to_mysql: [#{@child.buffer.text}] -> [#{ret}]","printing","debug")
|
300
|
+
else
|
301
|
+
ret=text
|
302
|
+
end
|
303
|
+
ret
|
304
|
+
end
|
305
|
+
|
306
|
+
def to_s
|
307
|
+
"PrintItem{#{@gtk_type},id:#{id}}"
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
data/lib/PrintEditor.rb
ADDED
@@ -0,0 +1,195 @@
|
|
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
|
+
|
6
|
+
|
7
|
+
class WysiwygPrintEditor < Gtk::Window
|
8
|
+
include ManqodCommon
|
9
|
+
include Conf
|
10
|
+
def initialize(caller,moditemid)
|
11
|
+
@zoom=1
|
12
|
+
@caller=caller
|
13
|
+
@focused_item=nil
|
14
|
+
@moditemid=moditemid
|
15
|
+
@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}'")
|
16
|
+
@sql=@moditem["sql"]
|
17
|
+
@sql=@moditem["querysql"] if @moditem["querysql"].length>5
|
18
|
+
# lastwhere=@sql.rindex("where")-1 or @sql.length
|
19
|
+
# @sql=@sql[0 .. lastwhere]+" order by id desc limit 1"
|
20
|
+
@sql="#{@sql} limit 1"
|
21
|
+
myres=client.query(@sql)
|
22
|
+
|
23
|
+
@mydata=if myres then myres.fetch_hash(true) else Hash.new end
|
24
|
+
@mydata=Hash.new if @mydata.nil?
|
25
|
+
|
26
|
+
@page_setup=Gtk::PageSetup.new
|
27
|
+
page_setup.paper_size=Gtk::PaperSize.new(@moditem["paper_size_name"])
|
28
|
+
page_setup.orientation=case @moditem["orientation"]
|
29
|
+
when "portrait" then Gtk::PrintSettings::PageOrientation::PORTRAIT
|
30
|
+
when "reverse_portrait" then Gtk::PrintSettings::PageOrientation::REVERSE_PORTRAIT
|
31
|
+
when "landscape" then Gtk::PrintSettings::PageOrientation::LANDSCAPE
|
32
|
+
when "reverse_landscape" then Gtk::PrintSettings::PageOrientation::REVERSE_LANDSCAPE
|
33
|
+
else Gtk::PrintSettings::PageOrientation::PORTRAIT
|
34
|
+
end
|
35
|
+
page_setup.set_left_margin(@moditem["left_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["left_margin"].nil?
|
36
|
+
page_setup.set_right_margin(@moditem["right_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["right_margin"].nil?
|
37
|
+
page_setup.set_top_margin(@moditem["top_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["top_margin"].nil?
|
38
|
+
page_setup.set_bottom_margin(@moditem["bottom_margin"].to_f,Gtk::PaperSize::UNIT_MM) if !@moditem["bottom_margin"].nil?
|
39
|
+
super()
|
40
|
+
realize
|
41
|
+
@tips=Gtk::Tooltips.new.enable
|
42
|
+
set_title("WYSIWYG Print Editor - "+@moditem["display"])
|
43
|
+
maximize
|
44
|
+
@tabs=Gtk::Notebook.new
|
45
|
+
|
46
|
+
is=Gtk::IconSize.from_name(get_conf(0,0,"button-size"))
|
47
|
+
#item buttons
|
48
|
+
buttons=Gtk::Toolbar.new
|
49
|
+
buttons.append(Gtk::VSeparator.new)
|
50
|
+
buttons.append("text",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'text')) if tabs.page>-1}
|
51
|
+
buttons.append("line",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'line')) if tabs.page>-1}
|
52
|
+
buttons.append("rectangle",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'rectangle')) if tabs.page>-1}
|
53
|
+
buttons.append("list",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){set_focused_item(nth_page(tabs.page).put(@tabs.page,'list')) if tabs.page>-1}
|
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
|
+
buttons.append(Gtk::VSeparator.new)
|
56
|
+
buttons.append("clone",nil,nil,Gtk::Image.new(Gtk::Stock::COPY,is)){
|
57
|
+
set_focused_item(nth_page(tabs.page).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
|
58
|
+
}
|
59
|
+
buttons.append(Gtk::VSeparator.new)
|
60
|
+
buttons.append("remove",nil,nil,Gtk::Image.new(Gtk::Stock::DELETE,is)){
|
61
|
+
unless focused_item.nil?
|
62
|
+
edebug("removing #{focused_item}","printing","info")
|
63
|
+
focused_item.remove_from_mysql
|
64
|
+
focused_item.page_layout.remove(focused_item)
|
65
|
+
set_focused_item(nil)
|
66
|
+
end
|
67
|
+
}
|
68
|
+
buttons.append(Gtk::VSeparator.new)
|
69
|
+
|
70
|
+
#page buttons
|
71
|
+
buttons.append("page",nil,nil,Gtk::Image.new(Gtk::Stock::ADD,is)){
|
72
|
+
tabs.append_page(lay=PageLayout.new(self),Gtk::Label.new("page "+(tabs.n_pages+1).to_s))
|
73
|
+
tabs.show_all
|
74
|
+
}
|
75
|
+
buttons.append("page",nil,nil,Gtk::Image.new(Gtk::Stock::REMOVE,is)){
|
76
|
+
tabs.remove_page(tabs.page)
|
77
|
+
}
|
78
|
+
|
79
|
+
buttons.append('setup',nil,nil,Gtk::Image.new(Gtk::Stock::PRINT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))){
|
80
|
+
@page_setup=Gtk::PrintOperation.run_page_setup_dialog(self.get_ancestor(Gtk::Window), page_setup)
|
81
|
+
nth_page(tabs.page).clear
|
82
|
+
}
|
83
|
+
buttons.append(Gtk::VSeparator.new)
|
84
|
+
#common buttons
|
85
|
+
buttons.append("20%",nil,nil,Gtk::Image.new(Gtk::Stock::ZOOM_IN,is)){
|
86
|
+
@zoom+=0.2 unless @zoom>5
|
87
|
+
@tabs.each{|page| page.clear}
|
88
|
+
}
|
89
|
+
buttons.append("100%",nil,nil,Gtk::Image.new(Gtk::Stock::ZOOM_100,is)){
|
90
|
+
@zoom=1
|
91
|
+
@tabs.each{|page| page.clear}
|
92
|
+
}
|
93
|
+
buttons.append("20%",nil,nil,Gtk::Image.new(Gtk::Stock::ZOOM_OUT,is)){
|
94
|
+
@zoom-=0.2 unless @zoom<0.5
|
95
|
+
@tabs.each{|page| page.clear}
|
96
|
+
}
|
97
|
+
|
98
|
+
buttons.append('preview',nil,nil,Gtk::Image.new(Gtk::Stock::PRINT,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))){
|
99
|
+
to_mysql
|
100
|
+
if testp=MyPrintOperation.new(self,moditemid)
|
101
|
+
testp.run(Gtk::PrintOperation::ACTION_PREVIEW)
|
102
|
+
end
|
103
|
+
}
|
104
|
+
buttons.append('close',nil,nil,Gtk::Image.new(Gtk::Stock::CLOSE,Gtk::IconSize.from_name(get_conf(0,0,"button-size")))){
|
105
|
+
self.destroy
|
106
|
+
}
|
107
|
+
buttons.append(Gtk::VSeparator.new)
|
108
|
+
signal_connect("destroy"){|me,ev| to_mysql}
|
109
|
+
|
110
|
+
@info=LayItemInfo.new.set_width_request(200)
|
111
|
+
|
112
|
+
tab_holder=Gtk::HPaned.new#(false,0)
|
113
|
+
tab_holder.pack1(tabs,true,true)
|
114
|
+
tab_holder.pack2(info,false,false)
|
115
|
+
|
116
|
+
holder=Gtk::VBox.new(false,1)
|
117
|
+
holder.pack_start(tab_holder,true,true,0)
|
118
|
+
holder.pack_end(buttons,false,false,0)
|
119
|
+
|
120
|
+
add(holder)
|
121
|
+
self
|
122
|
+
end
|
123
|
+
attr_accessor :caller
|
124
|
+
attr_accessor :tabs
|
125
|
+
attr_accessor :focused_item
|
126
|
+
attr_accessor :mydata
|
127
|
+
attr_accessor :moditemid
|
128
|
+
attr_accessor :page_setup
|
129
|
+
attr_accessor :info, :zoom, :tips
|
130
|
+
|
131
|
+
def set_focused_item(item)
|
132
|
+
return if focused_item == item
|
133
|
+
focused_item.unfocus unless focused_item.nil?
|
134
|
+
@focused_item=item
|
135
|
+
if focused_item.nil?
|
136
|
+
set_focus_child(nil)
|
137
|
+
else
|
138
|
+
focused_item.set_state(Gtk::STATE_PRELIGHT)
|
139
|
+
focused_item.set_editable(true)
|
140
|
+
focused_item.set_has_focus(true)
|
141
|
+
set_focus_child(focused_item)
|
142
|
+
edebug(focused_item.text+" selected","printing","info")
|
143
|
+
end
|
144
|
+
info.update(focused_item)
|
145
|
+
focused_item
|
146
|
+
end
|
147
|
+
|
148
|
+
def run
|
149
|
+
item_res=query("select * from gtkprintitems where printid='#{@moditemid}' order by page_number,gtktype")
|
150
|
+
page_num=0
|
151
|
+
while itemdata=item_res.fetch_hash()
|
152
|
+
while nth_page(itemdata["page_number"].to_i).nil?
|
153
|
+
page_num+=1
|
154
|
+
page=tabs.append_page(lay=PageLayout.new(self),Gtk::Label.new("page #{page_num}"))
|
155
|
+
end
|
156
|
+
nth_page(itemdata["page_number"].to_i).put(itemdata["page_number"],itemdata["gtktype"],itemdata["id"],itemdata["x"].to_i,itemdata["y"].to_i,itemdata["width"].to_i,itemdata["height"].to_i,itemdata["txt"],itemdata["font"],itemdata["text_alignment"])
|
157
|
+
end
|
158
|
+
show_all
|
159
|
+
info.update(focused_item)
|
160
|
+
end
|
161
|
+
|
162
|
+
def nth_page(page_no)
|
163
|
+
ret=tabs.get_nth_page(page_no.to_i)
|
164
|
+
end
|
165
|
+
|
166
|
+
def to_mysql
|
167
|
+
#=Gtk::PaperSize.new(@moditem["paper_size_name"])
|
168
|
+
$sql="replace into gtkprintpages set moditem_id='#{moditemid}', paper_size_name='#{page_setup.paper_size.name}', orientation='#{
|
169
|
+
case page_setup.orientation
|
170
|
+
when Gtk::PrintSettings::PageOrientation::PORTRAIT then "portrait"
|
171
|
+
when Gtk::PrintSettings::PageOrientation::REVERSE_PORTRAIT then "reverse_portrait"
|
172
|
+
when Gtk::PrintSettings::PageOrientation::LANDSCAPE then "landscape"
|
173
|
+
when Gtk::PrintSettings::PageOrientation::REVERSE_LANDSCAPE then "reverse_landscape"
|
174
|
+
else "portrait"
|
175
|
+
end}',
|
176
|
+
left_margin='#{page_setup.get_left_margin(Gtk::PaperSize::UNIT_MM)}',"+
|
177
|
+
"right_margin='#{page_setup.get_right_margin(Gtk::PaperSize::UNIT_MM)}',"+
|
178
|
+
"top_margin='#{page_setup.get_top_margin(Gtk::PaperSize::UNIT_MM)}',"+
|
179
|
+
"bottom_margin='#{page_setup.get_bottom_margin(Gtk::PaperSize::UNIT_MM)}'"
|
180
|
+
query($sql)
|
181
|
+
edebug("saved","printing","info")
|
182
|
+
page_num=0
|
183
|
+
tabs.each{|tab|
|
184
|
+
nth_page(page_num).to_mysql unless nth_page(page_num).nil?
|
185
|
+
page_num+=1
|
186
|
+
}
|
187
|
+
end
|
188
|
+
|
189
|
+
def to_s
|
190
|
+
"WysiwygPrintEditor"
|
191
|
+
end
|
192
|
+
def inspect
|
193
|
+
to_s
|
194
|
+
end
|
195
|
+
end
|
@@ -0,0 +1,91 @@
|
|
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 RField < Gtk::ToggleButton
|
6
|
+
def initialize(table,field=nil)
|
7
|
+
@table=table
|
8
|
+
super("",false)
|
9
|
+
remove(child)
|
10
|
+
@label=Gtk::Label.new
|
11
|
+
set_child(@index_holder=Gtk::Table.new(5,2))
|
12
|
+
set_field(field)
|
13
|
+
signal_connect("toggled"){|me,ev| @table.parentM.changed(self)}
|
14
|
+
signal_connect('button-press-event'){|me,ev|
|
15
|
+
if ev.button == 3
|
16
|
+
@table.parentM.set_focused_item(@table)
|
17
|
+
menu=Gtk::Menu.new
|
18
|
+
menu.signal_connect("deactivate",self){|menu,table| @table.parentM.set_focused_item(nil)}
|
19
|
+
menu.append(pr=Gtk::ImageMenuItem.new("`#{field_name}` properties").set_image(Gtk::Image.new(Gtk::Stock::PROPERTIES,Gtk::IconSize::MENU)))
|
20
|
+
pr.signal_connect("activate"){|me| @table.alter_field(@field)}
|
21
|
+
if @table.parentM.rel_ed_status == :start
|
22
|
+
menu.append(re=Gtk::ImageMenuItem.new("finish add relation here `#{field_name}`").set_image(Gtk::Image.new(Gtk::Stock::CONNECT,Gtk::IconSize::MENU)))
|
23
|
+
re.signal_connect("activate"){|me| @table.parentM.rel_edit(self,:finish)}
|
24
|
+
menu.append(rc=Gtk::ImageMenuItem.new("cancel relation").set_image(Gtk::Image.new(Gtk::Stock::CANCEL,Gtk::IconSize::MENU)))
|
25
|
+
rc.signal_connect("activate"){|me| @table.parentM.rel_edit(self,:cancel)}
|
26
|
+
else
|
27
|
+
menu.append(re=Gtk::ImageMenuItem.new("start add relation here `#{field_name}`").set_image(Gtk::Image.new(Gtk::Stock::CONNECT,Gtk::IconSize::MENU)))
|
28
|
+
re.signal_connect("activate"){|me| @table.parentM.rel_edit(self,:start)}
|
29
|
+
end
|
30
|
+
menu.append(rf=Gtk::ImageMenuItem.new("remove field `#{field_name}`").set_image(Gtk::Image.new(Gtk::Stock::REMOVE,Gtk::IconSize::MENU)))
|
31
|
+
rf.signal_connect("activate"){|me| @table.remove_field(field_name)}
|
32
|
+
menu.append(afa=Gtk::ImageMenuItem.new("append field after `#{field_name}`").set_image(Gtk::Image.new(Gtk::Stock::ADD,Gtk::IconSize::MENU)))
|
33
|
+
afa.signal_connect("activate"){|me| @table.alter_field(nil,field_name)}
|
34
|
+
menu.show_all
|
35
|
+
menu.popup(nil,nil,ev.button,ev.time)
|
36
|
+
true
|
37
|
+
else
|
38
|
+
false
|
39
|
+
end
|
40
|
+
}
|
41
|
+
end
|
42
|
+
attr_reader :field, :table
|
43
|
+
|
44
|
+
def set_field(field)
|
45
|
+
@field=field
|
46
|
+
@label.set_label(field["Field"])
|
47
|
+
if f=@field["Type"].index("(")
|
48
|
+
@field["Size"]=field["Type"][f+1 .. field["Type"].index(")") -1]
|
49
|
+
@field["Type"]=field["Type"][0 .. f-1]
|
50
|
+
end
|
51
|
+
|
52
|
+
#set style
|
53
|
+
set_style(@table.parentM.field_style[@field["Type"]]) if @table.parentM.field_style.has_key?(@field["Type"])
|
54
|
+
#remove old images
|
55
|
+
@index_holder.children.each{|ch| @index_holder.remove(ch)}
|
56
|
+
#read label
|
57
|
+
@index_holder.attach(@label,0,1,0,2)
|
58
|
+
#add images
|
59
|
+
@table.indexes.each{|index|
|
60
|
+
n=@index_holder.children.size-1
|
61
|
+
if index["field"]==@field["Field"]
|
62
|
+
@index_holder.attach(Gtk::Image.new(if index["name"]=="PRIMARY"
|
63
|
+
then @table.parentM.img_primary.scale(10,10)
|
64
|
+
else if index["unique"]
|
65
|
+
then @table.parentM.img_unique.scale(10,10)
|
66
|
+
else @table.parentM.img_index.scale(10,10)
|
67
|
+
end
|
68
|
+
end),1+n/2,1+n/2+1,n%2,n%2+1,Gtk::SHRINK)
|
69
|
+
end
|
70
|
+
}
|
71
|
+
show_all
|
72
|
+
end
|
73
|
+
|
74
|
+
def field_name
|
75
|
+
@field["Field"] || "undefined"
|
76
|
+
end
|
77
|
+
def table_name
|
78
|
+
@table.table
|
79
|
+
end
|
80
|
+
def table_width
|
81
|
+
@table.widget.allocation.width
|
82
|
+
end
|
83
|
+
|
84
|
+
def inspect
|
85
|
+
"RField:#{field_name} of #{table}"
|
86
|
+
end
|
87
|
+
def to_s
|
88
|
+
inspect
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|