manqod 1.1505.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. data/bin/manqod +309 -0
  2. data/doc/HOWTOS +11 -0
  3. data/doc/INSTALL +6 -0
  4. data/doc/LICENCE +450 -0
  5. data/doc/README +33 -0
  6. data/doc/benchmarkings/ListLoader.rb +177 -0
  7. data/doc/manqod.png +0 -0
  8. data/doc/manqod.svg +99 -0
  9. data/doc/server.conf.example +24 -0
  10. data/lib/About.rb +93 -0
  11. data/lib/BarMenu/BarMenuItem.rb +46 -0
  12. data/lib/BarMenu.rb +76 -0
  13. data/lib/ButtonMenu/ButtonMenuItem.rb +82 -0
  14. data/lib/ButtonMenu/EndSeparator.rb +14 -0
  15. data/lib/ButtonMenu/StartSeparator.rb +14 -0
  16. data/lib/ButtonMenu.rb +154 -0
  17. data/lib/Common/Conf.rb +119 -0
  18. data/lib/Common/Eprint.rb +180 -0
  19. data/lib/Common/EventCache.rb +41 -0
  20. data/lib/Common/Fixnum.rb +18 -0
  21. data/lib/Common/Images.rb +41 -0
  22. data/lib/Common/ManqodDB.rb +40 -0
  23. data/lib/Common/MyExec.rb +77 -0
  24. data/lib/Common/MyImage.rb +47 -0
  25. data/lib/Common/Nick.rb +25 -0
  26. data/lib/Common/String.rb +15 -0
  27. data/lib/FormHolder/Form/InputHolder/Button.rb +133 -0
  28. data/lib/FormHolder/Form/InputHolder/Calendar.rb +101 -0
  29. data/lib/FormHolder/Form/InputHolder/CalendarButton.rb +117 -0
  30. data/lib/FormHolder/Form/InputHolder/ColorButton.rb +54 -0
  31. data/lib/FormHolder/Form/InputHolder/Combo.rb +82 -0
  32. data/lib/FormHolder/Form/InputHolder/ComboWithNew.rb +103 -0
  33. data/lib/FormHolder/Form/InputHolder/Common/Model.rb +337 -0
  34. data/lib/FormHolder/Form/InputHolder/ConstCombo.rb +18 -0
  35. data/lib/FormHolder/Form/InputHolder/ConstText.rb +17 -0
  36. data/lib/FormHolder/Form/InputHolder/Duration.rb +73 -0
  37. data/lib/FormHolder/Form/InputHolder/EditableList.rb +57 -0
  38. data/lib/FormHolder/Form/InputHolder/FieldCombo.rb +40 -0
  39. data/lib/FormHolder/Form/InputHolder/FieldList.rb +40 -0
  40. data/lib/FormHolder/Form/InputHolder/FileChooser.rb +131 -0
  41. data/lib/FormHolder/Form/InputHolder/FontButton.rb +37 -0
  42. data/lib/FormHolder/Form/InputHolder/FormImage.rb +74 -0
  43. data/lib/FormHolder/Form/InputHolder/HScale.rb +44 -0
  44. data/lib/FormHolder/Form/InputHolder/Hidden.rb +41 -0
  45. data/lib/FormHolder/Form/InputHolder/Label.rb +40 -0
  46. data/lib/FormHolder/Form/InputHolder/List.rb +176 -0
  47. data/lib/FormHolder/Form/InputHolder/MultiLine.rb +63 -0
  48. data/lib/FormHolder/Form/InputHolder/Password.rb +41 -0
  49. data/lib/FormHolder/Form/InputHolder/QBuilder/QObject.rb +269 -0
  50. data/lib/FormHolder/Form/InputHolder/QBuilder.rb +333 -0
  51. data/lib/FormHolder/Form/InputHolder/RadioGroup.rb +82 -0
  52. data/lib/FormHolder/Form/InputHolder/SourceView.rb +100 -0
  53. data/lib/FormHolder/Form/InputHolder/Spin.rb +49 -0
  54. data/lib/FormHolder/Form/InputHolder/Text.rb +55 -0
  55. data/lib/FormHolder/Form/InputHolder/TimeStamp.rb +82 -0
  56. data/lib/FormHolder/Form/InputHolder/TimeStampButton.rb +93 -0
  57. data/lib/FormHolder/Form/InputHolder/Toggle.rb +43 -0
  58. data/lib/FormHolder/Form/InputHolder.rb +458 -0
  59. data/lib/FormHolder/Form.rb +529 -0
  60. data/lib/FormHolder.rb +203 -0
  61. data/lib/Gtk.rb +101 -0
  62. data/lib/GtkAttributes.rb +76 -0
  63. data/lib/Kernel.rb +48 -0
  64. data/lib/ListHolder/EditableList/CellRenderers/Combo.rb +91 -0
  65. data/lib/ListHolder/EditableList/CellRenderers/ComboText.rb +22 -0
  66. data/lib/ListHolder/EditableList/CellRenderers/ConstCombo.rb +12 -0
  67. data/lib/ListHolder/EditableList/CellRenderers/ConstText.rb +23 -0
  68. data/lib/ListHolder/EditableList/CellRenderers/Pixbuf.rb +18 -0
  69. data/lib/ListHolder/EditableList/CellRenderers/Progress.rb +36 -0
  70. data/lib/ListHolder/EditableList/CellRenderers/Text.rb +51 -0
  71. data/lib/ListHolder/EditableList/CellRenderers/Toggle.rb +35 -0
  72. data/lib/ListHolder/EditableList/Column.rb +223 -0
  73. data/lib/ListHolder/EditableList/DrbListModel.rb +809 -0
  74. data/lib/ListHolder/EditableList/ListPrintOperation/ColumnsHeaderLayout.rb +56 -0
  75. data/lib/ListHolder/EditableList/ListPrintOperation/CustomPageSetup.rb +100 -0
  76. data/lib/ListHolder/EditableList/ListPrintOperation/FooterLayout.rb +26 -0
  77. data/lib/ListHolder/EditableList/ListPrintOperation/HeaderLayout.rb +35 -0
  78. data/lib/ListHolder/EditableList/ListPrintOperation/IterLayout.rb +89 -0
  79. data/lib/ListHolder/EditableList/ListPrintOperation.rb +365 -0
  80. data/lib/ListHolder/EditableList.rb +309 -0
  81. data/lib/ListHolder/GanttHolder/Gantt/Rectangle.rb +290 -0
  82. data/lib/ListHolder/GanttHolder/Gantt.rb +317 -0
  83. data/lib/ListHolder/GanttHolder/GanttFooter.rb +27 -0
  84. data/lib/ListHolder/GanttHolder/GanttScaler.rb +60 -0
  85. data/lib/ListHolder/GanttHolder.rb +31 -0
  86. data/lib/ListHolder/HistoryWindow.rb +63 -0
  87. data/lib/ListHolder/ListButtonHolder/ArchiveButton.rb +37 -0
  88. data/lib/ListHolder/ListButtonHolder/ButtonGroup.rb +32 -0
  89. data/lib/ListHolder/ListButtonHolder/FilterButton.rb +28 -0
  90. data/lib/ListHolder/ListButtonHolder/ListButton.rb +305 -0
  91. data/lib/ListHolder/ListButtonHolder/OrderingButton.rb +26 -0
  92. data/lib/ListHolder/ListButtonHolder/SumPanelButton.rb +23 -0
  93. data/lib/ListHolder/ListButtonHolder.rb +94 -0
  94. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Combo.rb +94 -0
  95. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/ConstCombo.rb +11 -0
  96. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Text.rb +26 -0
  97. data/lib/ListHolder/ListPanel/ListFilter/FRenderer/Toggle.rb +41 -0
  98. data/lib/ListHolder/ListPanel/ListFilter/FRenderer.rb +58 -0
  99. data/lib/ListHolder/ListPanel/ListFilter.rb +42 -0
  100. data/lib/ListHolder/ListPanel/ListSum/Text.rb +32 -0
  101. data/lib/ListHolder/ListPanel/ListSum.rb +72 -0
  102. data/lib/ListHolder/ListPanel.rb +60 -0
  103. data/lib/ListHolder.rb +241 -0
  104. data/lib/LoginWindow.rb +77 -0
  105. data/lib/MainRouter.rb +64 -0
  106. data/lib/ManqodCommon.rb +295 -0
  107. data/lib/ManqodHelp/FormatEditor/FormatJustificationWidget.rb +76 -0
  108. data/lib/ManqodHelp/FormatsEditor.rb +139 -0
  109. data/lib/ManqodHelp/HelpBrowser/FormatTagTable/FormatTag.rb +84 -0
  110. data/lib/ManqodHelp/HelpBrowser/FormatTagTable.rb +39 -0
  111. data/lib/ManqodHelp/HelpBrowser.rb +135 -0
  112. data/lib/ManqodHelp/HelpIndex.rb +62 -0
  113. data/lib/ManqodHelp/HelpToolbar.rb +16 -0
  114. data/lib/ManqodHelp.rb +120 -0
  115. data/lib/ManqodRPC.rb +37 -0
  116. data/lib/Memcache.rb +82 -0
  117. data/lib/MyConfig.rb +93 -0
  118. data/lib/Print/PrintItem/TextLayout.rb +47 -0
  119. data/lib/Print/PrintItem.rb +240 -0
  120. data/lib/Print.rb +199 -0
  121. data/lib/PrintEditor/ItemInfo/ItemImage.rb +30 -0
  122. data/lib/PrintEditor/ItemInfo/ItemList.rb +44 -0
  123. data/lib/PrintEditor/ItemInfo/ItemTextAlignment.rb +27 -0
  124. data/lib/PrintEditor/ItemInfo.rb +129 -0
  125. data/lib/PrintEditor/PageLayout.rb +91 -0
  126. data/lib/PrintEditor/PrintEditorItem.rb +310 -0
  127. data/lib/PrintEditor.rb +195 -0
  128. data/lib/RelationBuilder/RTable/RField.rb +91 -0
  129. data/lib/RelationBuilder/RTable.rb +293 -0
  130. data/lib/RelationBuilder/Relation/RelationHandle.rb +70 -0
  131. data/lib/RelationBuilder/Relation.rb +161 -0
  132. data/lib/RelationBuilder/RunQuery.rb +55 -0
  133. data/lib/RelationBuilder/SearchWindow.rb +72 -0
  134. data/lib/RelationBuilder.rb +468 -0
  135. data/lib/SB/ListProgress.rb +150 -0
  136. data/lib/SB/Messaging.rb +77 -0
  137. data/lib/SB.rb +29 -0
  138. data/lib/mynotebook.rb +131 -0
  139. data/lib/mytouchwindow.rb +162 -0
  140. data/lib/mywindow.rb +134 -0
  141. data/lib/wysiwyg-print-label.rb +57 -0
  142. metadata +231 -0
@@ -0,0 +1,337 @@
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 MyRendererModel < Gtk::TreeModelFilter
6
+ include ManqodCommon
7
+ class Filterer < Gtk::Window
8
+ def initialize(model)
9
+ @model=model
10
+ super(Gtk::Window::POPUP)
11
+ add(Gtk::VBox.new)
12
+ child.pack_start(Gtk::Label.new("filter: #{model.pc.item['description']}"))
13
+ child.pack_start(@entry=Gtk::Entry.new.set_can_focus(true).set_can_default(true))
14
+ set_destroy_with_parent(true)
15
+ set_modal(true)
16
+ set_decorated(false)
17
+ set_window_position(Gtk::Window::POS_CENTER_ON_PARENT)
18
+ entry.signal_connect('activate'){|me|
19
+ @old_text=@entry.text
20
+ hide
21
+ }
22
+ entry.signal_connect("key-release-event",self){|me,ev,filterer|
23
+ if ev.keyval == Gdk::Keyval::GDK_KEY_Escape
24
+ #set the old filter back
25
+ model.typed=@old_text
26
+ @entry.set_text(@old_text)
27
+ model.refilter
28
+ filterer.hide
29
+ else
30
+ #filter
31
+ model.typed=me.text
32
+ model.refilter
33
+ end
34
+ }
35
+ end
36
+ attr_accessor :entry, :model
37
+
38
+ def run(parent_window)
39
+ @old_text=@entry.text
40
+ set_transient_for(parent_window.get_ancestor(Gtk::Window))
41
+ show_all
42
+ end
43
+ end
44
+
45
+ def initialize(pc)
46
+ @idx=Hash.new
47
+ @pc=pc
48
+ @typed=""
49
+ td=item["type_def"]
50
+ ta=Hash.new
51
+ @desc=Hash.new
52
+ @filterer=Filterer.new(self)
53
+ @column_order=Array.new
54
+
55
+ if multiselector?
56
+ ta[:multiselector]=:multiselector
57
+ column_order.push(:multiselector)
58
+ end
59
+
60
+ td.split("]").each{|t|
61
+ if first=t.index("[")
62
+ parts=t[first+1 .. t.length].split(":")
63
+ hkey=parts[0]
64
+ hval=parts[1]||""
65
+ hdesc=parts[2]||""
66
+ ta[hkey]=hval
67
+ @desc[hkey]=hdesc
68
+ column_order.push(hkey)
69
+ edebug("header keys: |#{hkey}|=>|#{ta[hkey]}|(#{@desc[hkey]})","form-combo")
70
+ end
71
+ }
72
+
73
+ if ta.empty?
74
+ @type_def={'cdisplay'=>"text"}
75
+ column_order.push('cdisplay')
76
+ else
77
+ @type_def=ta
78
+ end
79
+
80
+ @header_types=Array.new.push(String) #for id?
81
+ @renderers=Hash.new
82
+ # set_wrap_width(1)
83
+ i=1
84
+ # type_def.each_pair{|key,val|
85
+ column_order.each{|key|
86
+ case type_def[key]
87
+ when :multiselector
88
+ if pc.class.name == "MyRendererList::List"
89
+ renderer=Gtk::CellRendererToggle.new.set_activatable(true)
90
+ column=Gtk::TreeViewColumn.new("",renderer, {:active => i})
91
+ pc.append_column(column)
92
+ renderer.signal_connect("toggled",i,self){|me,path,col,fmodel|
93
+ iter=fmodel.convert_iter_to_child_iter(fmodel.get_iter(path))
94
+ iter[col]=!iter[col]
95
+ }
96
+
97
+ header_types.push(TrueClass)
98
+ renderers[key]=renderer
99
+ pc.parentM.set_multiselector(self)
100
+ else
101
+ ewarn("multiselector attribute can only be interpreted on a List Form item")
102
+ end
103
+ when "text"
104
+ renderer=Gtk::CellRendererText.new
105
+ # renderer.set_width(20)
106
+ case pc.class.name
107
+ when "MyRendererCombo","MyRendererConstCombo", "FieldCombo"
108
+ pc.pack_start(renderer,true)
109
+ pc.add_attribute(renderer,:text,i)
110
+ when "MyRendererList::List"
111
+ column=Gtk::TreeViewColumn.new(@desc[key]||"",renderer, {:text => i})
112
+ pc.append_column(column)
113
+ else
114
+ edebug("unknown parent widget for this model!","form-combo","error")
115
+ end
116
+ header_types.push(String)
117
+ renderers[key]=renderer
118
+ when "pixbuf"
119
+ renderer=Gtk::CellRendererPixbuf.new
120
+ case pc.class.name
121
+ when "MyRendererCombo"
122
+ pc.pack_start(renderer,true)
123
+ pc.add_attribute(renderer,:pixbuf,i)
124
+ when "MyRendererList"
125
+ column=Gtk::TreeViewColumn.new(header,renderer, {:pixbuf => i})
126
+ pc.append_column(column)
127
+ end
128
+ header_types.push(Gdk::Pixbuf)
129
+ renderers[key]=renderer
130
+
131
+ when "toggle"
132
+ renderer=Gtk::CellRendererToggle.new
133
+ # renderer.set_width(20)
134
+ case pc.class.name
135
+ when "MyRendererCombo","MyRendererConstCombo", "FieldCombo"
136
+ pc.pack_start(renderer,true)
137
+ pc.add_attribute(renderer,:active,i)
138
+ when "MyRendererList::List"
139
+ column=Gtk::TreeViewColumn.new(key,renderer, {:active => i})
140
+ # column.set_cell_data_func(renderer) { |column, cell, model, iter,col_num| cell.active=iter[i]=='true'}
141
+ pc.append_column(column)
142
+ else
143
+ edebug("unknown parent widget for this model!","form-combo","error")
144
+ end
145
+ header_types.push(TrueClass)
146
+ renderers[key]=renderer
147
+ when "hidden"
148
+ header_types.push(String)
149
+ renderer=nil
150
+ else
151
+ renderer=nil
152
+ end
153
+ i=i+1 if renderer
154
+ }
155
+ @tree_key=pc.gtk_attribute("tree_key")
156
+ @tree=!@tree_key.nil?
157
+ header_types.push(TrueClass)#visible
158
+ @column_of_visible=header_types.size-1
159
+ @mymodel=if @tree then Gtk::TreeStore.new(*header_types) else Gtk::ListStore.new(*header_types) end
160
+
161
+ super(mymodel)
162
+ set_visible_column(@column_of_visible)
163
+ # pc.set_has_frame(false)
164
+ pc.set_model(self)
165
+ pc.set_row_separator_func{|model, iter|
166
+ iter[0]=='separator' or iter[1]=='---'
167
+ }
168
+ end
169
+ attr_accessor :pc
170
+ attr_accessor :mymodel
171
+ attr_accessor :typed
172
+ attr_accessor :header_types
173
+ attr_accessor :type_def
174
+ attr_accessor :column_order
175
+ attr_accessor :renderers
176
+ attr_accessor :filterer
177
+
178
+ def item
179
+ pc.item
180
+ end
181
+
182
+ def update
183
+ pc.set_model(nil)
184
+ mymodel.clear
185
+ @idx.clear
186
+ #query gtkattribute
187
+ if item["querysql"].length == 0 && sqlid=pc.gtk_attribute("query")
188
+ if sql=parentM.admin.qrow("select `sql` from `queries` where `id` = '#{sqlid}'")["sql"]
189
+ item["querysql"]=sql
190
+ end
191
+ end
192
+ if item['wantnew']
193
+ iter=if @tree then mymodel.append(nil) else mymodel.append end
194
+ iter[0]='-1';iter[@column_of_visible]=true
195
+ iter=if @tree then mymodel.append(nil) else mymodel.append end
196
+ iter[0]='separator';iter[@column_of_visible]=true
197
+ end
198
+ @max_col_widths=Hash.new
199
+ if item['field']
200
+ client_fields(item['querysql']){|field|
201
+ row=Hash.new
202
+ row['name']=field["name"]
203
+ row['id']=row["name"]
204
+ row['type']="#{field['type']}(#{field['length']}"+if field.has_key?("decimals") then "/#{field['decimals']}" else "" end + ")"
205
+ add_iter(row)
206
+ }
207
+ else
208
+ begin
209
+ if item['admin']
210
+ parentM.admin.rows(eeval("\"#{item['querysql']}\"")).each{|row| add_iter(row);}
211
+ else
212
+ parentM.rows(eeval("\"#{item['querysql']}\"")).each{|row| add_iter(row);}
213
+ end
214
+ rescue => err
215
+ retry if tell_exception("query error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
216
+ end
217
+ end if item['querysql'].length>5
218
+
219
+ @max_col_widths.each_pair{|key,col_width| renderers[key].set_width_chars(col_width) if renderers.has_key?(key)}
220
+
221
+ pc.set_model(self)
222
+ end
223
+
224
+ def add_iter(row)
225
+ iter=if @tree then mymodel.append(if row[@tree_key].to_i == -1 then nil else find_iter_by_id(row[@tree_key])end) else mymodel.append end
226
+ iter[0]=row['id'] if row.has_key?("id")
227
+ iter[0]=row['cdata'] if row.has_key?("cdata")
228
+ @idx[row['id']]=iter.clone if row.has_key?("id")
229
+
230
+ i=0
231
+ column_order.each{|key|
232
+ if type_def.has_key?(key) #key!="id" and key!="cdata" and
233
+ i=i+1
234
+ case type_def[key]
235
+ when "text","hidden"
236
+ iter[i]=row[key].to_s
237
+ if row.has_key?(key) and !row[key].nil?
238
+ @max_col_widths[key]=row[key].to_s.length unless @max_col_widths.has_key?(key)
239
+ @max_col_widths[key]=row[key].to_s.length unless @max_col_widths[key] > row[key].to_s.length
240
+ end
241
+ when "pixbuf"
242
+ if row[key].class.name == "String"
243
+ if row[key].length > 3
244
+ a=Array.new
245
+ row[key].each_byte{|v|a.push(v)}
246
+ begin
247
+ if pixdata=Gdk::Pixdata.deserialize(a) then iter[i]=pixdata.to_pixbuf(true);end
248
+ rescue Gdk::PixbufError => err
249
+ end
250
+ else
251
+ iter[i]=client_image_of_id(row[key],"gtk-menu")
252
+ end
253
+ end
254
+ when 'toggle'
255
+ iter[i]=row[key] == 'true'
256
+ end
257
+ end
258
+ }
259
+ iter[@column_of_visible]=true
260
+ end
261
+
262
+ def refilter
263
+ mymodel.each{|model,path,iter|
264
+ if typed.nil? || typed == "" || iter[0] == 'separator' || iter[0] == '-1' then
265
+ iter[@column_of_visible]=true
266
+ else
267
+ j=0
268
+ model.n_columns.downto(1){|i|
269
+ if iter[i-1].class.name=="String"
270
+ j+=1 if iter[i-1].upcase.index(typed.upcase)
271
+ end
272
+ }
273
+ if j>0
274
+ i=iter.clone
275
+ while i=i.parent
276
+ i[@column_of_visible]=true
277
+ end
278
+ iter[@column_of_visible]=true
279
+ else
280
+ iter[@column_of_visible]=false
281
+ end
282
+ end
283
+ }
284
+ end
285
+
286
+ def cell_value(col,iter_id=pc.text)
287
+ fiter=nil
288
+ ret=nil
289
+ each {|model, path, iter| fiter=iter if iter[0].to_s==iter_id.to_s }
290
+ if fiter and c=column_order.index(col)
291
+ ret=fiter[c+1]
292
+ end
293
+ ret
294
+ end
295
+
296
+ def find_iter_by_id(iter_id)
297
+ @idx[iter_id]
298
+ end
299
+
300
+ def toggled_ids
301
+ ti=Array.new
302
+ each {|model, path, iter| ti.push(iter[0]) if iter[1] == true} if multiselector?
303
+
304
+ ti
305
+ end
306
+
307
+ def multiselector?
308
+ pc.class.name == "MyRendererList::List" && pc.pc.pc.multiselector?
309
+ end
310
+
311
+ def header_descriptions?
312
+ c=0
313
+ @desc.each_value{|h| c+=1 if h.length>0}
314
+ c!=0
315
+ end
316
+
317
+ def to_s
318
+ "model of #{pc}"
319
+ end
320
+
321
+ def parentM
322
+ pc.parentM
323
+ end
324
+ def parentselected
325
+ pc.parentselected
326
+ end
327
+ def admin
328
+ parentM.admin
329
+ end
330
+ def my
331
+ parentM.my
332
+ end
333
+ def default
334
+ item["default"]
335
+ end
336
+ end
337
+
@@ -0,0 +1,18 @@
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 MyRendererConstCombo < MyRendererCombo
6
+ include ManqodCommon
7
+ include GtkAttributes
8
+ def initialize(pc)
9
+ @pc=pc
10
+ item['admin']=true
11
+ item['type_def']="[cdisplay:text][description:text]" if item['type_def'].length<5
12
+ item['querysql']="select cdata,cdisplay,description from scv where combo='#{item['data']}' order by cdata"
13
+ super(pc)
14
+ end
15
+ attr_accessor :pc
16
+
17
+ def to_s;"ConstCombo(#{item["description"]})";end
18
+ end
@@ -0,0 +1,17 @@
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 MyRendererConstText < MyRendererLabel
6
+ def initialize(pc)
7
+ @pc=pc
8
+ item['admin']=true
9
+ odata=item["data"]
10
+ if i=item["data"].rindex(".")
11
+ item['data']=item["data"][i+1 .. item["data"].length]
12
+ end
13
+ item['querysql']="select cdisplay as #{item['data']},description from scv where combo='#{odata}' and cdata='#{pc.default}' order by cdata"
14
+ super(pc)
15
+ end
16
+ end
17
+
@@ -0,0 +1,73 @@
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 MyRendererDuration < Gtk::Table #Gtk::HBox
6
+ include ManqodCommon
7
+ def initialize(pc)
8
+ @pc=pc
9
+ super(4,2)
10
+ attach_defaults(Gtk::Label.new("day"),0,1,0,1)
11
+ attach_defaults(Gtk::Label.new("hour"),1,2,0,1)
12
+ attach_defaults(Gtk::Label.new("min"),2,3,0,1)
13
+ attach_defaults(Gtk::Label.new("sec"),3,4,0,1)
14
+
15
+ attach_defaults(@dw=Gtk::SpinButton.new(0,5*365,1).set_has_frame(false).set_numeric(true).set_increments(1,10).set_digits(0),0,1,1,2)
16
+ attach_defaults(@hw=Gtk::SpinButton.new(0,23,1).set_has_frame(false).set_numeric(true).set_increments(1,10).set_digits(0),1,2,1,2)
17
+ attach_defaults(@mw=Gtk::SpinButton.new(0,59,1).set_has_frame(false).set_numeric(true).set_increments(1,10).set_digits(0),2,3,1,2)
18
+ attach_defaults(@sw=Gtk::SpinButton.new(0,59,1).set_has_frame(false).set_numeric(true).set_increments(1,10).set_digits(0),3,4,1,2)
19
+ @sw.signal_connect('value_changed'){|me| changed}
20
+ @mw.signal_connect('value_changed'){|me| changed}
21
+ @hw.signal_connect('value_changed'){|me| changed}
22
+ @dw.signal_connect('value_changed'){|me| changed}
23
+ end
24
+ attr_accessor :pc
25
+
26
+ def item
27
+ @pc.item
28
+ end
29
+
30
+ def update(new_value=item['default'])
31
+ item['default']=new_value.to_f
32
+ run_events(item['id'],'form_item-BeforeUpdate')
33
+ pc.run_query
34
+ duration_to_wg(item['default'].to_f) if item['default']
35
+ # set_sensitive(item['editable']=="true")
36
+ run_events(item['id'],'form_item-AfterUpdate')
37
+ end
38
+
39
+ def wg_to_duration
40
+ (@dw.value*24*3600+@hw.value*3600+@mw.value*60+@sw.value).round
41
+ end
42
+ def duration_to_wg(d)
43
+ d,r=(d.to_f).divmod(24*3600)
44
+ h,r=(r).divmod(3600)
45
+ m,s=(r).divmod(60)
46
+ @dw.set_value(d)
47
+ @hw.set_value(h)
48
+ @mw.set_value(m)
49
+ @sw.set_value(s.round)
50
+ end
51
+
52
+ def text
53
+ wg_to_duration.to_s
54
+ end
55
+
56
+ def parentselected
57
+ @pc.parentselected
58
+ end
59
+
60
+ def parentM
61
+ @pc.parentM
62
+ end
63
+ def changed
64
+ edebug("#{self} changed to #{wg_to_duration}","form","debug")
65
+ pc.changed
66
+ pc.notify_observers(self)
67
+ edebug("#{self} emiting 'changed' to observers","form","debug")
68
+ run_events(item['id'],'form_item-Action')
69
+ end
70
+ def to_s;"Duration(#{item["description"]})";end
71
+
72
+ end
73
+
@@ -0,0 +1,57 @@
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 MyRendererEditableList < Mylist::MyListHolder
6
+ include ManqodCommon
7
+ def initialize(pc)
8
+ @pc=pc
9
+ super(pc.parentM.parentM)
10
+ set_parentM(pc.parentM.parentM)
11
+ list.set_id(pc.target) unless @pc.parentM.wysiwygf?
12
+ @pc.set_include_in_query_building(false)
13
+
14
+ # set_has_frame(false)
15
+ =begin
16
+ signal_connect('activate'){|me|
17
+ edebug(inspect+" '#{item['data']}' changed to item #{me.active.inspect}","form","debug")
18
+ pc.changed
19
+ pc.notify_observers(self)
20
+ edebug("'#{item['data']}' emiting 'changed' to observers","form","debug")
21
+ run_events(item['id'],'form_item-Action')
22
+ }
23
+ =end
24
+ end
25
+ attr_accessor :pc
26
+
27
+ def text
28
+ list.get_cursor_id.to_s
29
+ end
30
+
31
+ def item
32
+ @pc.item
33
+ end
34
+
35
+ def update(new_value=item['default'])
36
+ item['default']=new_value
37
+ run_events(item['id'],'form_item-BeforeUpdate')
38
+ pc.run_query
39
+ # set_text(item['default'].to_s) if item['default']
40
+ pc.set_editable(pc.parentM.runmode != "add")
41
+ super(pc.parentM.parentM) unless @pc.parentM.wysiwygf?
42
+ run_events(item['id'],'form_item-AfterUpdate')
43
+ end
44
+
45
+ def parentselected
46
+ @pc.parentselected
47
+ end
48
+
49
+ def method_missing(sym,*args)
50
+ text
51
+ end
52
+ def inspect
53
+ "Text(#{item["description"]})"
54
+ end
55
+ def to_s;inspect;end
56
+
57
+ end #MyRendererText
@@ -0,0 +1,40 @@
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 FieldCombo < MyRendererCombo
6
+ def initialize(pc)
7
+ @pc=pc
8
+ item['field']=true
9
+ item['type_def']="[name:text][type:text]"
10
+ item['querysql']=""
11
+ # item['querysql']="select cdata,cdisplay,description from scv where combo='#{item['data']}' order by cdisplay"
12
+ #parentM should be an admin Form
13
+ #parentM.parentM should be an EditableList of Formsitems or Listheaders or Forms(in wysiwyg FormEditor)
14
+ if ppid=pc.parentM.parentM.parentselected
15
+ if attr_row=qrow("select data from gtkattributes where gtkobjectid='#{ppid}' and gtkobjecttype='form' and `attribute`='table'") and table=attr_row["data"]
16
+ item['querysql']="select * from `#{table}` limit 1"
17
+ else
18
+ if row=parentM.qrow("select moditems.querysql,queries.sql from moditems left join queries on queries.id = moditems.query_sql_id where moditems.id='#{ppid}'")
19
+ querysql=row['sql'] if !row["sql"].nil? and row["sql"].length>5
20
+ querysql=row['querysql'] if row["querysql"].length>5
21
+ item['querysql']="#{querysql} limit 1"
22
+ end
23
+ end
24
+ end
25
+ super(pc)
26
+ end
27
+ attr_accessor :pc
28
+
29
+ def item
30
+ pc.item
31
+ end
32
+ def inspect
33
+ "FieldCombo #{item["description"]}"
34
+ end
35
+ def to_s
36
+ inspect
37
+ end
38
+
39
+ end
40
+
@@ -0,0 +1,40 @@
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 FieldList < MyRendererList
6
+ def initialize(pc)
7
+ @pc=pc
8
+ item['field']=true
9
+ item['type_def']="[name:text:Field][type:text:Type]"
10
+ item['querysql']=""
11
+ # item['querysql']="select cdata,cdisplay,description from scv where combo='#{item['data']}' order by cdisplay"
12
+ #parentM should be an admin Form
13
+ #parentM.parentM should be an EditableList of Formsitems or Listheaders or Forms(in wysiwyg FormEditor)
14
+ if ppid=pc.parentM.parentM.parentselected
15
+ if attr_row=parentM.qrow("select data from gtkattributes where gtkobjectid='#{ppid}' and gtkobjecttype='form' and `attribute`='table'") and table=attr_row["data"]
16
+ item['querysql']="select * from `#{table}` limit 1"
17
+ else
18
+ if row=parentM.qrow("select moditems.querysql,queries.sql from moditems left join queries on queries.id = moditems.query_sql_id where moditems.id='#{ppid}'")
19
+ querysql=row['sql'] if !row["sql"].nil? and row["sql"].length>5
20
+ querysql=row['querysql'] if row["querysql"].length>5
21
+ item['querysql']="#{querysql} limit 1"
22
+ end
23
+ end
24
+ end
25
+ super(pc)
26
+ end
27
+ attr_accessor :pc
28
+
29
+ def item
30
+ pc.item
31
+ end
32
+ def inspect
33
+ "FieldList #{item["description"]}"
34
+ end
35
+ def to_s
36
+ inspect
37
+ end
38
+
39
+ end
40
+