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,529 @@
|
|
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 Myform
|
6
|
+
include ManqodCommon
|
7
|
+
class MyForm < Gtk::Notebook
|
8
|
+
include Observable
|
9
|
+
include ManqodCommon
|
10
|
+
include GtkAttributes
|
11
|
+
include Conf
|
12
|
+
|
13
|
+
def initialize(caller,form_id,runmode)
|
14
|
+
@caller=caller
|
15
|
+
@table=nil
|
16
|
+
@parentselected=nil
|
17
|
+
@new_parentselected=nil
|
18
|
+
@querySQL=""
|
19
|
+
@runmode=runmode
|
20
|
+
@additional_on_update=""
|
21
|
+
@additional_on_insert=""
|
22
|
+
@batch=nil
|
23
|
+
@batch_support=false
|
24
|
+
set_id(form_id)
|
25
|
+
@items=Array.new
|
26
|
+
@tips=Gtk::Tooltips.new.enable
|
27
|
+
@tmp=Hash.new
|
28
|
+
@built=false
|
29
|
+
@multiselector=nil
|
30
|
+
super()
|
31
|
+
@tabs.sort{|a,b| a[1]['minX'].to_f <=> b[1]['minX'].to_f}.each{|t|
|
32
|
+
tab=t[0]
|
33
|
+
@tabs[tab]["widget"]=Gtk::Table.new(0,0,false)
|
34
|
+
@tabs[tab]["widget"].set_border_width(0)
|
35
|
+
@tabs[tab]["widget"].set_resize_mode(Gtk::ResizeMode::PARENT)
|
36
|
+
@tabs[tab]["widget"].resize(1+ @tabs[tab]['maxY'].to_i-@tabs[tab]['minY'].to_i,1+ @tabs[tab]['maxX'].to_i-@tabs[tab]['minX'].to_i)
|
37
|
+
|
38
|
+
append_page(@tabs[tab]["widget"],Gtk::Label.new(@tabs[tab]["title"]))
|
39
|
+
}
|
40
|
+
|
41
|
+
set_show_tabs(@tabs.size>1)
|
42
|
+
set_show_border(@tabs.size>1)
|
43
|
+
set_tab_pos(case gtk_attribute("tab-position")
|
44
|
+
when "BOTTOM" then Gtk::PositionType::BOTTOM
|
45
|
+
when "RIGHT" then Gtk::PositionType::RIGHT
|
46
|
+
when "LEFT" then Gtk::PositionType::LEFT
|
47
|
+
else Gtk::PositionType::TOP
|
48
|
+
end
|
49
|
+
)
|
50
|
+
set_enable_popup(false)
|
51
|
+
set_scrollable(true)
|
52
|
+
|
53
|
+
signal_connect('destroy'){|me| set_conf(get_id,0,"page",page)}
|
54
|
+
|
55
|
+
@is_embedded=nil
|
56
|
+
end
|
57
|
+
|
58
|
+
attr_accessor :id,:title, :batch
|
59
|
+
attr_accessor :runmode
|
60
|
+
attr_accessor :querySQL
|
61
|
+
attr_accessor :moditem
|
62
|
+
attr_accessor :parentselected
|
63
|
+
attr_accessor :new_parentselected
|
64
|
+
attr_accessor :ag
|
65
|
+
attr_reader :table, :tmp
|
66
|
+
attr_accessor :is_embedded, :additional_on_insert, :additional_on_update
|
67
|
+
|
68
|
+
def is_embedded
|
69
|
+
@is_embedded
|
70
|
+
end
|
71
|
+
def embedd?
|
72
|
+
if @moditem && @moditem['on_embed'].length >0
|
73
|
+
eeval(@moditem['on_embed'],self)
|
74
|
+
else
|
75
|
+
true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
def wysiwygf?
|
79
|
+
form_holder.runmode == "wysiwygf"
|
80
|
+
end
|
81
|
+
|
82
|
+
def form_holder
|
83
|
+
@caller
|
84
|
+
end
|
85
|
+
|
86
|
+
def admin
|
87
|
+
if wysiwygf?
|
88
|
+
ManqodDB.instance.manqod_db
|
89
|
+
else
|
90
|
+
ManqodDB.instance.manqod_db.admin
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def client
|
95
|
+
if wysiwygf?
|
96
|
+
ManqodDB.instance.manqod_db.client
|
97
|
+
else
|
98
|
+
ManqodDB.instance.manqod_db
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def cache
|
103
|
+
if wysiwygf?
|
104
|
+
ManqodDB.instance.ccache
|
105
|
+
else
|
106
|
+
ManqodDB.instance.cache
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def set_ag(ag)
|
111
|
+
@ag=ag
|
112
|
+
ag.connect(Gdk::Keyval::GDK_KEY_space, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE){
|
113
|
+
focused=@caller.holder.focus.parent
|
114
|
+
if focused and focused.class.name=="MySourceView"
|
115
|
+
ret=focused.test_content
|
116
|
+
if ret
|
117
|
+
tell_exception("query is ok","fields: #{ret.num_fields}\n rows: #{ret.num_rows}","sql","normal",false)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
}
|
121
|
+
ag.connect(Gdk::Keyval::GDK_KEY_f, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE){
|
122
|
+
unless @caller.holder.focus.nil?
|
123
|
+
if (focused=@caller.holder.focus.parent) && focused.class.name == "MySourceView" then
|
124
|
+
focused.run_search(self)
|
125
|
+
end
|
126
|
+
if (focused=@caller.holder.focus.parent) && ["MyRendererComboWithNew","MyRendererCombo","MyRendererConstCombo","FieldCombo"].include?(focused.class.name) then
|
127
|
+
focused.model.filterer.run(self)
|
128
|
+
end
|
129
|
+
if (focused=@caller.holder.focus.parent.parent) && focused.class.name == "MyRendererList" then
|
130
|
+
focused.model.filterer.run(self)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
}
|
134
|
+
end
|
135
|
+
|
136
|
+
def set_multiselector(widget)
|
137
|
+
@multiselector=widget
|
138
|
+
end
|
139
|
+
|
140
|
+
def query(sql)
|
141
|
+
if wysiwygf?
|
142
|
+
begin
|
143
|
+
ret=ManqodDB.instance.manqod_db.client.query(sql)
|
144
|
+
tell_exception("Database Error","Duplicate entry","sql","error") if ret == -1
|
145
|
+
ret
|
146
|
+
rescue =>err
|
147
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
148
|
+
end
|
149
|
+
else
|
150
|
+
begin
|
151
|
+
ret=ManqodDB.instance.manqod_db.query(sql)
|
152
|
+
tell_exception("Database Error","Duplicate entry","sql","error") if ret == -1
|
153
|
+
ret
|
154
|
+
rescue =>err
|
155
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
def qrow(sql,with_table=false)
|
161
|
+
if wysiwygf?
|
162
|
+
begin
|
163
|
+
ManqodDB.instance.manqod_db.client.qrow(sql,with_table)
|
164
|
+
rescue =>err
|
165
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
166
|
+
end
|
167
|
+
else
|
168
|
+
begin
|
169
|
+
ManqodDB.instance.manqod_db.qrow(sql,with_table)
|
170
|
+
rescue =>err
|
171
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def admin_qrow(sql,with_table=false)
|
177
|
+
if wysiwygf?
|
178
|
+
begin
|
179
|
+
ManqodDB.instance.manqod_db.qrow(sql,with_table)
|
180
|
+
rescue =>err
|
181
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
182
|
+
end
|
183
|
+
else
|
184
|
+
begin
|
185
|
+
ManqodDB.instance.manqod_db.admin.qrow(sql,with_table)
|
186
|
+
rescue =>err
|
187
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def rows(sql)
|
193
|
+
if wysiwygf?
|
194
|
+
begin
|
195
|
+
ManqodDB.instance.manqod_db.client.rows(sql){|row| yield row}
|
196
|
+
rescue =>err
|
197
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
198
|
+
end
|
199
|
+
else
|
200
|
+
begin
|
201
|
+
ManqodDB.instance.manqod_db.rows(sql){|row| yield row}
|
202
|
+
rescue =>err
|
203
|
+
retry if tell_exception("error in server connection",backtrace_to_debug(err),"server","error",false,true,"#{err}")
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def batch_support?
|
209
|
+
@batch_support
|
210
|
+
end
|
211
|
+
|
212
|
+
def batch?
|
213
|
+
batch_support? && batch.class == Array
|
214
|
+
end
|
215
|
+
|
216
|
+
def get_id
|
217
|
+
@form_id
|
218
|
+
end
|
219
|
+
def set_id(form_id)
|
220
|
+
@form_id=form_id
|
221
|
+
begin
|
222
|
+
@moditem=cache.get("#{get_id}moditem")
|
223
|
+
moditem_attributes=cache.get("#{get_id}attributes")
|
224
|
+
@querySQL=moditem_attributes[:querySQL]
|
225
|
+
@table=moditem_attributes[:table]
|
226
|
+
@tabs=moditem_attributes[:tabs]
|
227
|
+
@title=@moditem['display']
|
228
|
+
@batch_support=moditem_attributes[:batch]
|
229
|
+
rescue => err
|
230
|
+
retry if warn("can't load form: id=[#{@form_id}]",err,nil,"error",nil,true,backtrace_to_debug(err))
|
231
|
+
end
|
232
|
+
self
|
233
|
+
end
|
234
|
+
def set_runmode(runmode)
|
235
|
+
@runmode=runmode
|
236
|
+
self
|
237
|
+
end
|
238
|
+
def parentM
|
239
|
+
@caller.parentM
|
240
|
+
end
|
241
|
+
def items
|
242
|
+
@items
|
243
|
+
end
|
244
|
+
def findItem(data)
|
245
|
+
ret=nil
|
246
|
+
@items.each{ |item| ret=item if item.data == data or item.data == "#{@table}.#{data}"}
|
247
|
+
warn("form item: #{data} not found","tried [#{data}], [#{@table}.#{data}]","form",ERROR) if ret.nil?
|
248
|
+
ret
|
249
|
+
end
|
250
|
+
|
251
|
+
def method_missing(sym,*args)
|
252
|
+
findItem(sym.to_s)
|
253
|
+
end
|
254
|
+
|
255
|
+
def itemValue(data)
|
256
|
+
item=findItem(data)
|
257
|
+
ret=""
|
258
|
+
ret=item.text if item and item.text
|
259
|
+
edebug("itemValue: #{data.inspect} : #{item.inspect} text:#{item.text unless item.nil?} return: #{ret}","form")
|
260
|
+
ret
|
261
|
+
end
|
262
|
+
alias item_value itemValue
|
263
|
+
|
264
|
+
def to_s
|
265
|
+
"Form id:#{get_id}(#{@title}[#{runmode}#{@multiselector ? "|multiselector":""}:#{@parentselected}])"
|
266
|
+
end
|
267
|
+
|
268
|
+
def update(notifier, pid=@parentselected,rm=@runmode)
|
269
|
+
einfo("notification from #{notifier} for [#{pid}]")
|
270
|
+
@items.each{|i| i.unset_default} if @runmode!=rm && @built
|
271
|
+
@runmode=rm
|
272
|
+
@parentselected=pid
|
273
|
+
case notifier.class.name
|
274
|
+
when 'MyEditableList'
|
275
|
+
# @parentselected=notifier.get_cursor_id
|
276
|
+
@list_key=parentM.list_model.list_key
|
277
|
+
if ['add','modify'].include?(runmode)
|
278
|
+
@runmode='add'
|
279
|
+
@runmode='modify' if @parentselected and @parentselected.to_i>=0
|
280
|
+
end
|
281
|
+
when 'MyButton'
|
282
|
+
@list_key="id" #FIXME
|
283
|
+
# @runmode=notifier.function
|
284
|
+
# @parentselected=notifier.parentselected
|
285
|
+
when 'MyRendererComboWithNew','MyRendererList', 'MyRendererButton'
|
286
|
+
@list_key="id" #FIXME
|
287
|
+
# @parentselected=notifier.text
|
288
|
+
when 'MyTouchWindow'
|
289
|
+
@runmode='add'
|
290
|
+
when 'NilClass'
|
291
|
+
#we just run, currently known to call MyForm.update(nil) is from the Touchscreen stuff, kinda reinitialize
|
292
|
+
when 'BarMenuItem', 'ButtonMenuItem'
|
293
|
+
# @runmode='dry'
|
294
|
+
## set_id(notifier.target)
|
295
|
+
else
|
296
|
+
edebug("unknown routing: "+notifier.class.name,"form","warning")
|
297
|
+
end
|
298
|
+
|
299
|
+
|
300
|
+
unless @built
|
301
|
+
edebug("building","form")
|
302
|
+
if @runmode then
|
303
|
+
@items.each{ |item| remove(item)} #destroy previous items
|
304
|
+
if @caller.holder.class.name=='Gtk::Dialog'
|
305
|
+
@caller.holder.title=@title
|
306
|
+
pw=@caller.get_ancestor(MyWindow)
|
307
|
+
if pw.class.name=="MyWindow"
|
308
|
+
@caller.holder.set_icon(pw.mymenu.last.image.pixbuf)
|
309
|
+
else
|
310
|
+
@caller.holder.set_icon(pw.icon)
|
311
|
+
end
|
312
|
+
end
|
313
|
+
@additional_on_update=String.new(@moditem['additional_on_update'])
|
314
|
+
@additional_on_insert=String.new(@moditem['additional_on_insert'])
|
315
|
+
|
316
|
+
|
317
|
+
@items.clear
|
318
|
+
i=cache.get("#{get_id}items")
|
319
|
+
i.each{|itemp|
|
320
|
+
item=MyInputHolder.new(itemp,self)
|
321
|
+
@tips.set_tip(item.eventbox,itemp['hint'],'extra hint')
|
322
|
+
attach(item)
|
323
|
+
@items << item
|
324
|
+
}
|
325
|
+
|
326
|
+
#setting observers, dependency tree built from itemVaule()-s in the SQLs
|
327
|
+
@items.each{|item|
|
328
|
+
q=String.new(item.querySQL)
|
329
|
+
while first=q.index("itemValue(")
|
330
|
+
var_first=first+"itemValue(".length
|
331
|
+
q=q[var_first .. q.length]
|
332
|
+
last=q.index(")")-1
|
333
|
+
dep=q[0 .. last].gsub("'","")
|
334
|
+
if driverItem=findItem(dep)
|
335
|
+
edebug(item.data+" depends on "+driverItem.data,"form","info")
|
336
|
+
driverItem.add_observer(item)
|
337
|
+
end
|
338
|
+
q=q[last .. q.length]
|
339
|
+
end
|
340
|
+
}
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
#if modify or copy than we load the default items' data
|
345
|
+
case @runmode
|
346
|
+
when 'modify','copy','info' then
|
347
|
+
itemdata=qrow(eeval("\"#{@querySQL}\""),true)
|
348
|
+
end
|
349
|
+
@items.each{|i|
|
350
|
+
default_data=nil
|
351
|
+
if itemdata then
|
352
|
+
default_data=itemdata[i.data] if itemdata.has_key?(i.data)
|
353
|
+
default_data=itemdata["#{@table}.#{i.data}"] if itemdata.has_key?("#{@table}.#{i.data}")
|
354
|
+
else
|
355
|
+
case i.type
|
356
|
+
when 'gtk_combo','gtk_combo_wn','gtk_const_combo' then default_data="-1"
|
357
|
+
else default_data=""
|
358
|
+
end
|
359
|
+
end
|
360
|
+
i.item["initial"]=default_data
|
361
|
+
}
|
362
|
+
|
363
|
+
run_events(get_id,'form-OnUpdate')
|
364
|
+
|
365
|
+
@items.each{|i| i.update(self,i.default_set? ? i.default : i.initial )}
|
366
|
+
@built=true
|
367
|
+
|
368
|
+
show_all
|
369
|
+
set_page(get_conf(get_id,0,"page").to_i) if get_conf(get_id,0,"page")
|
370
|
+
end #update
|
371
|
+
|
372
|
+
def apply_changes(caller)
|
373
|
+
s="";
|
374
|
+
#check if required items are filled
|
375
|
+
@items.each { |item| if item.editable && item.required && (item.text==nil || (item.text!=nil && (item.text.length==0 || (item.text=="-1" && ['gtk_const_combo','gtk_combo','gtk_combo_wn','gtk_list'].include?(item.type))))) then s=s+item.description+"?\n";end}
|
376
|
+
if s.length >0
|
377
|
+
#there were some unfilled but required form items
|
378
|
+
warner=Gtk::MessageDialog.new(get_ancestor(Gtk::Window),Gtk::Dialog::DESTROY_WITH_PARENT,Gtk::MessageDialog::QUESTION,Gtk::MessageDialog::BUTTONS_OK,s)
|
379
|
+
warner.set_image(Gtk::Image.new(Gtk::Stock::FIND_AND_REPLACE,Gtk::IconSize::DIALOG))
|
380
|
+
warner.show_all.run
|
381
|
+
warner.destroy
|
382
|
+
return -1
|
383
|
+
else
|
384
|
+
run_events(get_id,'form-OnApply-beforeSQL')
|
385
|
+
#/event OnApply
|
386
|
+
if @runmode
|
387
|
+
items_to_update=0
|
388
|
+
isql=""
|
389
|
+
#build the query
|
390
|
+
if @multiselector && @multiselector.toggled_ids.size > 0
|
391
|
+
sql="insert into #{@table} (#{@multiselector.item['data']},"
|
392
|
+
@items.each { |item|
|
393
|
+
sql="#{sql}#{item.data}," if item.text && (item.include_in_query_building || (item.include_in_query_building.nil? && item.editable?)) && !item.multiselector?
|
394
|
+
}
|
395
|
+
sql=sql[0 .. sql.rindex(',')-1] unless sql.rindex(',').nil? #strip last ,
|
396
|
+
autoadd_child_key=(parentM.class.name == "MyEditableList" && parentM.list_model.key_child && !(sql.index(" #{parentM.list_model.key_child} ")))
|
397
|
+
#adding child_key/parent_key
|
398
|
+
if autoadd_child_key
|
399
|
+
begin
|
400
|
+
sql="#{sql}, #{parentM.list_model.key_child}"
|
401
|
+
rescue =>err
|
402
|
+
eerror("can't auto-add child_key: #{parentM.list_model.key_child} => #{err}","form")
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
406
|
+
sql="#{sql}) values "
|
407
|
+
|
408
|
+
@multiselector.toggled_ids.each{|tid|
|
409
|
+
isql="(#{tid},"
|
410
|
+
@items.each { |item|
|
411
|
+
isql="#{isql} '#{escape_string(item.text)}'," if item.text && (item.include_in_query_building || (item.include_in_query_building.nil? && item.editable?)) && !item.multiselector?
|
412
|
+
}
|
413
|
+
isql=isql[0 .. isql.rindex(',')-1] unless isql.rindex(',').nil? #strip last ,
|
414
|
+
if autoadd_child_key
|
415
|
+
begin
|
416
|
+
isql="#{isql}, '#{parentM.list_model.parentM.iter_at_cursor[parentM.list_model.column_of_parent_key]}'" if parentM.list_model.key_child.index(".")==nil || parentM.list_model.key_child.index("#{@table}.")
|
417
|
+
rescue => err
|
418
|
+
eerror("can't auto-add child_key: #{parentM.list_model.key_child} => #{err}","form")
|
419
|
+
end
|
420
|
+
end
|
421
|
+
isql="#{isql})"
|
422
|
+
sql="#{sql} #{isql},"
|
423
|
+
}
|
424
|
+
sql=sql[0 .. sql.rindex(',')-1] unless sql.rindex(',').nil? #strip last ,
|
425
|
+
else
|
426
|
+
@items.each { |item|
|
427
|
+
if item.text && (item.include_in_query_building || (item.include_in_query_building.nil? && item.editable?))
|
428
|
+
isql="#{isql} #{item.data} = '#{escape_string(item.text)}' ,"
|
429
|
+
items_to_update+=1
|
430
|
+
end
|
431
|
+
}
|
432
|
+
end
|
433
|
+
if (items_to_update != 0) or (@runmode=='remove')
|
434
|
+
isql=isql[0 .. isql.rindex(',')-1] if !isql.rindex(',').nil?
|
435
|
+
case @runmode
|
436
|
+
when 'add','copy'
|
437
|
+
sql="insert into #{@table} set #{isql}";
|
438
|
+
sql=sql+", "+eeval("\"#{@additional_on_insert}\"") if @additional_on_insert.length>0
|
439
|
+
#auto-adding child_key
|
440
|
+
if parentM.class.name == "MyEditableList"
|
441
|
+
#adding child_key/parent_key
|
442
|
+
if parentM.list_model.key_child # and ck=parentM.list_model.key_child[parentM.list_model.key_child.rindex(".")+1 .. parentM.list_model.key_child.length]
|
443
|
+
unless sql.index(" #{parentM.list_model.key_child} ")
|
444
|
+
begin
|
445
|
+
sql="#{sql}, #{parentM.list_model.key_child} ='#{parentM.list_model.parentM.iter_at_cursor[parentM.list_model.column_of_parent_key]}'" if parentM.list_model.key_child.index(".")==nil || parentM.list_model.key_child.index("#{@table}.")
|
446
|
+
rescue =>err
|
447
|
+
eerror("can't auto-add child_key: #{parentM.list_model.key_child} => #{err}","form")
|
448
|
+
end
|
449
|
+
end
|
450
|
+
end
|
451
|
+
#adding child_key2/parent_key2
|
452
|
+
if parentM.list_model.key_child2 # and ck=parentM.list_model.key_child2[parentM.list_model.key_child2.rindex(".")+1 .. parentM.list_model.key_child2.length]
|
453
|
+
unless sql.index(" #{parentM.list_model.key_child2} ")
|
454
|
+
begin
|
455
|
+
sql="#{sql}, #{parentM.list_model.key_child2} ='#{parentM.list_model.parentM.iter_at_cursor[parentM.list_model.column_of_parent_key2]}'" if parentM.list_model.key_child2.index(".")==nil || parentM.list_model.key_child2.index("#{@table}.")
|
456
|
+
rescue =>err
|
457
|
+
eerror("can't auto-add child_key2: #{err}","form")
|
458
|
+
end
|
459
|
+
end
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
when 'modify'
|
464
|
+
sql="update `#{@table}` set #{isql}";
|
465
|
+
sql="#{sql}, "+eeval("\"#{@additional_on_update}\"") if @additional_on_update.length>0;
|
466
|
+
sql="#{sql} where #{@list_key} #{batch? ? "in (#{batch.join(",")})": "= '#{@parentselected}'"}"
|
467
|
+
when 'remove'
|
468
|
+
sql="delete from `#{@table}` where #{@list_key}='#{@parentselected}'"
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
einfo(sql,"form")
|
473
|
+
ret=if sql && query(sql) then
|
474
|
+
-1 #error unless nil?
|
475
|
+
else
|
476
|
+
if @runmode == 'modify' then
|
477
|
+
@new_parentselected=@parentselected
|
478
|
+
else
|
479
|
+
@new_parentselected=qrow("select #{@list_key} from #{table} order by #{@list_key} desc limit 1")[@list_key]
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
483
|
+
run_events(get_id,'form-OnApply-afterSQL')
|
484
|
+
@parentselected=new_parentselected
|
485
|
+
ret=@parentselected if ret.nil?
|
486
|
+
|
487
|
+
if @multiselector && @multiselector.toggled_ids.size>0
|
488
|
+
new_ids=Array.new
|
489
|
+
rows("select #{@list_key} from #{table} order by #{@list_key} desc limit #{@multiselector.toggled_ids.size}").each{|newid| new_ids.push(newid[@list_key].to_i)}
|
490
|
+
changed_ids_of_base(table,new_ids)
|
491
|
+
else
|
492
|
+
if batch?
|
493
|
+
batch.each{|b| changed_ids_of_base(table,b.to_i)}
|
494
|
+
else
|
495
|
+
changed_ids_of_base(table,@parentselected.to_i)
|
496
|
+
end
|
497
|
+
end
|
498
|
+
changed
|
499
|
+
notify_observers(self)
|
500
|
+
|
501
|
+
return ret.to_i
|
502
|
+
end
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
def reattach(wg)
|
507
|
+
@tabs[wg.item["tab"]]["widget"].remove(wg.widget)
|
508
|
+
attach(wg)
|
509
|
+
end
|
510
|
+
def attach(wg)
|
511
|
+
yshrink=wg.gtk_attribute('vertical-shrink') == 'true'
|
512
|
+
yfill=yexpand=['gtk_timestamp','gtk_calendar','gtk_const_radio','gtk_field_list','gtk_multiline','gtk_source','gtk_list','gtk_editable_list','filesave','fileload','qbuilder'].include?(wg.item['gtktype'])
|
513
|
+
yfill=wg.gtk_attribute('vertical-fill') == 'true' if wg.gtk_attribute('vertical-fill')
|
514
|
+
yexpand=wg.gtk_attribute('vertical-expand') == 'true' if wg.gtk_attribute('vertical-expand')
|
515
|
+
yopts=(yfill ? Gtk::FILL : 0)|(yexpand ? Gtk::EXPAND : 0)|(yshrink ? Gtk::SHRINK : 0)
|
516
|
+
xexpand=(wg.gtk_attribute('horizontal-expand')||'true') == 'true'
|
517
|
+
xfill=(wg.gtk_attribute('horizontal-fill')||'true') == 'true'
|
518
|
+
xshrink=(wg.gtk_attribute('horizontal-shrink')||'false') == 'true'
|
519
|
+
xopts=(xfill ? Gtk::AttachOptions::FILL : 0)|(xexpand ? Gtk::AttachOptions::EXPAND : 0)|(xshrink ? Gtk::AttachOptions::SHRINK : 0)
|
520
|
+
wg.item['x']='0' if wg.item['x'].to_i<0
|
521
|
+
wg.item['y']='0' if wg.item['y'].to_i<0
|
522
|
+
wg.item['xspan']='1' if wg.item['xspan'].to_i<1
|
523
|
+
wg.item['yspan']='1' if wg.item['yspan'].to_i<1
|
524
|
+
@tabs[wg.item["tab"]]["widget"].attach(wg.widget,wg.item['x'].to_i,wg.item['x'].to_i+wg.item['xspan'].to_i,wg.item['y'].to_i,wg.item['y'].to_i+wg.item['yspan'].to_i,xopts,yopts)
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
528
|
+
end
|
529
|
+
|