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,458 @@
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 MyInputHolder
6
+ include ManqodCommon
7
+ include Conf
8
+ include Observable
9
+ include GtkAttributes
10
+
11
+
12
+ def initialize(item,caller)
13
+ @item=item
14
+ @visibility=true
15
+ @caller=caller
16
+ @default_is_set=false
17
+ if parentM.runmode=="wysiwygf"
18
+ @frame_button=Gtk::Button.new
19
+ else
20
+ @frame_button=nil
21
+ end
22
+ @query_result=Hash.new
23
+ @widget=Gtk::Frame.new
24
+ @expander=Gtk::Expander.new("").set_expanded(true)
25
+ @expander.signal_connect("notify::expanded"){
26
+ set_visible
27
+ parentM.form_holder.vshrink(@widget.allocation.height)
28
+ }
29
+ @widget.set_label_widget(Gtk::HBox.new(false,10))
30
+ if frame_button
31
+ frame_button.set_image(Gtk::Image.new(Gtk::Stock::PREFERENCES,Gtk::IconSize::MENU)).set_relief(Gtk::ReliefStyle::NONE)
32
+ frame_button.signal_connect('clicked'){|me|
33
+ menuw=Gtk::Window.new(Gtk::Window::POPUP)
34
+ # menuw.set_opacity(0.5)# -- not compatible with galatea
35
+
36
+ menuw.add(menu=Gtk::Table.new(3,3))
37
+ menu.attach_defaults(go_left=Gtk::Button.new,0,1,1,2)
38
+ go_left.set_image(Gtk::Image.new(Gtk::Stock::GO_BACK,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw,self){|me,parentw,ih|
39
+ ih.item['x']=lzero(ih.item['x'].to_i-1,2)
40
+ reattach
41
+ }
42
+ menu.attach_defaults(span_left=Gtk::Button.new,0,1,0,1)
43
+ span_left.set_image(Gtk::Image.new(Gtk::Stock::GOTO_FIRST,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
44
+ ih.item['xspan']=lzero(ih.item['xspan'].to_i-1,2)
45
+ reattach
46
+ }
47
+
48
+ menu.attach_defaults(go_right=Gtk::Button.new,2,3,1,2)
49
+ go_right.set_image(Gtk::Image.new(Gtk::Stock::GO_FORWARD,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
50
+ ih.item['x']=lzero(ih.item['x'].to_i+1,2)
51
+ reattach
52
+ }
53
+ menu.attach_defaults(span_right=Gtk::Button.new,0,1,2,3)
54
+ span_right.set_image(Gtk::Image.new(Gtk::Stock::GOTO_LAST,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
55
+ ih.item['xspan']=lzero(ih.item['xspan'].to_i+1,2)
56
+ reattach
57
+ }
58
+
59
+ menu.attach_defaults(go_up=Gtk::Button.new,1,2,0,1)
60
+ go_up.set_image(Gtk::Image.new(Gtk::Stock::GO_UP,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
61
+ ih.item['y']=lzero(ih.item['y'].to_i-1,2)
62
+ reattach
63
+ }
64
+ menu.attach_defaults(span_up=Gtk::Button.new,2,3,0,1)
65
+ span_up.set_image(Gtk::Image.new(Gtk::Stock::GOTO_TOP,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
66
+ ih.item['yspan']=lzero(ih.item['yspan'].to_i-1,2)
67
+ reattach
68
+ }
69
+
70
+ menu.attach_defaults(go_down=Gtk::Button.new,1,2,2,3)
71
+ go_down.set_image(Gtk::Image.new(Gtk::Stock::GO_DOWN,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
72
+ ih.item['y']=lzero(ih.item['y'].to_i+1,2)
73
+ reattach
74
+ }
75
+ menu.attach_defaults(span_down=Gtk::Button.new,2,3,2,3)
76
+ span_down.set_image(Gtk::Image.new(Gtk::Stock::GOTO_BOTTOM,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
77
+ ih.item['yspan']=lzero(ih.item['yspan'].to_i+1,2)
78
+ reattach
79
+ }
80
+
81
+ menu.attach_defaults(go_close=Gtk::Button.new,1,2,1,2)
82
+ go_close.set_image(Gtk::Image.new(Gtk::Stock::CLOSE,Gtk::IconSize::SMALL_TOOLBAR)).set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked',menuw){|me,parentw|
83
+ parentw.hide
84
+ }
85
+
86
+ menuw.set_modal(true).set_window_position(Gtk::Window::POS_MOUSE).show_all
87
+ =begin
88
+ #disabled per current compiz is generating the leave notify event in the wrong order
89
+ =end
90
+ menuw.signal_connect('leave-notify-event'){|me,e|
91
+ me.hide if e.window == me.window
92
+ }
93
+ menuw.signal_connect("hide"){|me|
94
+ query("update gtkformitems set x='#{ih.item['x']}', y='#{ih.item['y']}',xspan='#{ih.item['xspan']}', yspan='#{ih.item['yspan']}' where id='#{ih.item['id']}'")
95
+ }
96
+ }
97
+ end
98
+
99
+ #Button in info mode is editable
100
+ item["editable"]="false" if item['gtktype']!='gtk_button' if caller.runmode == 'info'
101
+ @widget.set_border_width(1)
102
+
103
+ @widget.add(@eventbox=Gtk::EventBox.new)
104
+ set_include_in_query_building(gtk_attribute("include-in-query-building"))
105
+ repack_renderer
106
+
107
+ end
108
+ attr_reader :widget, :frame_button, :info, :caller, :eventbox, :renderer, :item, :title
109
+ attr_reader :include_in_query_building, :default_is_set, :query_result, :type_def
110
+
111
+ def repack_renderer
112
+ @item['wantnew']=target.to_i != -1
113
+ @title=if ['gtk_toggle','qbuilder'].include?(@item['gtktype']) then nil; else @item['description'];end
114
+ @widget.label_widget.each{|ch| @widget.label_widget.remove(ch)}
115
+ if gtk_attribute("expander")||'false' == 'true'
116
+ @widget.label_widget.pack_start(@expander.set_label(title))
117
+ lw=@expander
118
+ else
119
+ @widget.label_widget.pack_start(Gtk::Label.new(title))
120
+ lw=@widget.label_widget
121
+ end
122
+ #set the font
123
+ if caller.runmode == 'info' then lw.modify_font(Pango::FontDescription.new(get_conf(0,0,"info-frame-font")))
124
+ else lw.modify_font(Pango::FontDescription.new(get_conf(0,0,"form-frame-font")))
125
+ end
126
+ @widget.label_widget.pack_start(@frame_button) if frame_button
127
+ @renderer.destroy if @renderer
128
+
129
+ @renderer=case @item['gtktype']
130
+ when 'gtk_hidden' then MyRendererHidden.new(self)
131
+ when 'gtk_label' then MyRendererLabel.new(self)
132
+ when 'gtk_text'
133
+ if caller.runmode=="info" then MyRendererLabel.new(self)
134
+ else MyRendererText.new(self)
135
+ end
136
+ when 'gtk_spinbutton'
137
+ if caller.runmode=="info" then MyRendererLabel.new(self)
138
+ else MyRendererSpin.new(self)
139
+ end
140
+ when 'gtk_duration' then MyRendererDuration.new(self)
141
+ when 'gtk_hscale' then MyRendererHScale.new(self)
142
+ when 'gtk_calendar' then MyRendererCalendar.new(self)
143
+ when 'gtk_calendar_button' then MyRendererCalendarButton.new(self)
144
+ when 'gtk_timestamp' then MyRendererTimeStamp.new(self)
145
+ when 'gtk_timestamp_button' then MyRendererTimeStampButton.new(self)
146
+ when 'gtk_toggle' then MyRendererToggle.new(self)
147
+ when 'gtk_button' then MyRendererButton.new(self)
148
+ when 'gtk_color_button' then MyRendererColorButton.new(self)
149
+ when 'gtk_font_button' then MyRendererFontButton.new(self)
150
+ when 'gtk_const_radio' then MyRendererRadioGroup.new(self)
151
+ when 'gtk_password' then MyRendererPassword.new(self)
152
+ when 'gtk_combo' then MyRendererCombo.new(self)
153
+ when 'gtk_combo_wn' then MyRendererComboWithNew.new(self)
154
+ when 'gtk_const_combo' then MyRendererConstCombo.new(self)
155
+ when 'gtk_consttext' then MyRendererConstText.new(self)
156
+ when 'gtk_field_combo' then FieldCombo.new(self)
157
+ when 'gtk_field_list' then FieldList.new(self)
158
+ when 'gtk_image' then FormImage.new(self)
159
+ when 'gtk_multiline' then MyRendererMultiline.new(self)
160
+ when 'gtk_source' then
161
+ begin
162
+ MySourceView.new(self)
163
+ rescue =>err
164
+ einfo(err.message + "\n" + err.backtrace.join("\n"))
165
+ MyRendererMultiline.new(self)
166
+ end
167
+ when 'gtk_list' then MyRendererList.new(self)
168
+ when 'gtk_editable_list' then MyRendererEditableList.new(self)
169
+ when 'fileload'
170
+ @item['action']='load'
171
+ MyFileChooserButton.new(self)
172
+ when 'filesave'
173
+ @item['action']='save'
174
+ MyFileChooserButton.new(self)
175
+ when 'qbuilder'
176
+ QBuilder.new(self)
177
+ else
178
+ edebug("#{self} unknown renderer type: #{@item['gtktype']}","form","warning")
179
+ nil
180
+ end
181
+
182
+ if @renderer then
183
+ unless @renderer.class == MyRendererHidden
184
+ if caller.runmode=="info"
185
+ @renderer.modify_font(Pango::FontDescription.new(get_conf(0,0,"info-item-font")))
186
+ else
187
+ @renderer.modify_font(Pango::FontDescription.new(get_conf(0,0,"form-item-font")))
188
+ end
189
+ @renderer.set_height_request(@item['hrequest'].to_i) if @item['hrequest'].to_i>0
190
+ @renderer.set_width_request(@item['wrequest'].to_i) if @item['wrequest'].to_i>0
191
+ eventbox.add(@renderer)
192
+ end
193
+ end
194
+ set_visible(@renderer.class != MyRendererHidden)
195
+ #type_def parsing
196
+ td=@item["type_def"]
197
+ @type_def=Hash.new
198
+ if @item["type_def"].length>3
199
+ td.split("]").each{|t|
200
+ if first=t.index("[")
201
+ parts=t[first+1 .. t.length].split(":")
202
+ hkey=parts[0]
203
+ hval=parts[1]||""
204
+ hdesc=parts[2]||""
205
+ @type_def[hkey]=[hval,hdesc]
206
+ end
207
+ }
208
+ set_default(-1) if parentM.runmode=="add"
209
+ edebug("header keys: #{@type_def.inspect}","form-combo")
210
+ end
211
+ if rel=gtk_attribute('relation')
212
+ @relation=parentM.admin_qrow("select relations.* from relations where relations.id='#{rel}'").rehash
213
+ if parentM.table == @relation["dst_table"]
214
+ @relation["src_table"],@relation["src_field"]=@relation["dst_table"],@relation["dst_field"];
215
+ end
216
+ #overwrite querysql if relation attribute defined
217
+ item['querysql']=case @item["gtktype"]
218
+ when "gtk_combo","gtk_combo_wn","gtk_list" then "select * from `#{@relation["dst_table"]}`#{@relation["rel_custom"].length>2 ? " where #{@relation["rel_custom"]}" : ""}"
219
+ else "select * from `#{@relation["dst_table"]}` where `#{@relation["dst_field"]}`='\#{default}'"
220
+ end
221
+ #add order by tree_key
222
+ item["querysql"]="#{item['querysql']} order by #{gtk_attribute("tree_key")}" unless gtk_attribute("tree_key").nil?
223
+ s=""
224
+ @type_def.each_key{|key| s="#{s}, #{key}"}
225
+ item['querysql']="#{item['querysql']} #{(gtk_attribute("tree_key").nil? ? "order by":",")} #{s[2..s.length]}" if s.length>0
226
+ edebug("generated query:#{querySQL}","sql")
227
+ end
228
+ self
229
+ end
230
+
231
+ def set_shadow
232
+ shadow=case caller.runmode
233
+ when "info" then Gtk::SHADOW_ETCHED_IN
234
+ else Gtk::SHADOW_OUT
235
+ end
236
+ shadow=Gtk::SHADOW_NONE if ['gtk_button'].include?(item['gtktype'])
237
+ attr_shadow=case gtk_attribute('border-shadow')
238
+ when 'none' then Gtk::ShadowType::NONE
239
+ when 'in' then Gtk::ShadowType::IN
240
+ when 'out' then Gtk::ShadowType::OUT
241
+ when 'etched-in' then Gtk::ShadowType::ETCHED_IN
242
+ when 'etched-out' then Gtk::ShadowType::ETCHED_OUT
243
+ end
244
+ shadow=attr_shadow unless attr_shadow.nil?
245
+ shadow=Gtk::ShadowType::NONE unless @expander.expanded?
246
+ @widget.set_shadow_type(shadow) unless shadow.nil?
247
+ end
248
+
249
+ def text
250
+ renderer.text if renderer
251
+ end
252
+
253
+ def data
254
+ item['data']
255
+ end
256
+ def set_default(new_value)
257
+ item['default']=new_value
258
+ @default_is_set=true
259
+ self
260
+ end
261
+ def unset_default
262
+ @default_is_set=false
263
+ end
264
+
265
+ def default_set?
266
+ @default_is_set == true
267
+ end
268
+
269
+ def default
270
+ item['default']
271
+ end
272
+
273
+ def set_data(da)
274
+ item['data']=da
275
+ self
276
+ end
277
+
278
+ def set_visibility(vis)
279
+ @visibility=vis
280
+ @widget.set_no_show_all(!@visibility)
281
+ self
282
+ end
283
+ def set_visible(visibility=@visibility)
284
+ set_visibility(visibility)
285
+ super(@visibilty)
286
+ if @visibility
287
+ @widget.show_all
288
+ else
289
+ @widget.hide
290
+ end
291
+
292
+ if @expander
293
+ @renderer.set_visible(@expander.expanded? && visibility)
294
+ @renderer.set_no_show_all(!(@expander.expanded? && visibility))
295
+ end
296
+ set_shadow
297
+ self
298
+ end
299
+
300
+ def type
301
+ item['gtktype']
302
+ end
303
+
304
+ def initial
305
+ item["initial"]
306
+ end
307
+
308
+ def description
309
+ item['description']
310
+ end
311
+
312
+ def querySQL
313
+ item['querysql']
314
+ end
315
+
316
+ def editable
317
+ item['editable'].to_s=='true'
318
+ end
319
+
320
+ def editable?
321
+ item['editable'].to_s.upcase=='TRUE'
322
+ end
323
+
324
+ def set_editable(ed=item['editable'])
325
+ item['editable']=parentM.batch? ? ed.to_s.upcase=='TRUE' && batch? : ed.to_s
326
+ renderer.set_sensitive(self.editable?)
327
+ self
328
+ end
329
+
330
+ def set_sensitive(sensi)
331
+ renderer.set_sensitive(sensi)
332
+ self
333
+ end
334
+
335
+ def batch?
336
+ (gtk_attribute("batch") || "false").upcase == "TRUE"
337
+ end
338
+
339
+ def set_include_in_query_building(iqb=nil)
340
+ if(iqb.nil?) then
341
+ @include_in_query_building=nil
342
+ else
343
+ @include_in_query_building=(iqb.to_s.upcase=='TRUE')
344
+ end
345
+ self
346
+ end
347
+
348
+ def sefmin(l_min)
349
+ item["min"]=l_min.to_s
350
+ self
351
+ end
352
+
353
+ def set_max(l_max)
354
+ item["max"]=l_max.to_s
355
+ self
356
+ end
357
+
358
+ def get_min
359
+ item["min"]
360
+ end
361
+ def get_max
362
+ item["max"]
363
+ end
364
+
365
+ def required
366
+ item['required'].to_s=='true'
367
+ end
368
+
369
+ def set_required(req)
370
+ item['required']=req.to_s
371
+ self
372
+ end
373
+
374
+ def target
375
+ item['to_call']
376
+ end
377
+
378
+ def target_runmode
379
+ case parentM.runmode
380
+ when "info" then "info"
381
+ when "wysiwygf" then "wysiwygf"
382
+ else (text.to_i == -1 || text.to_i == 0 ? "add" : "modify" )
383
+ end
384
+ end
385
+
386
+ def target_module
387
+ item['modname']
388
+ end
389
+
390
+ def set_target(new_target)
391
+ item['to_call']=new_target
392
+ end
393
+
394
+ def parentselected
395
+ caller.parentselected
396
+ end
397
+
398
+ def update(notifier=nil,new_value=item['default'])
399
+ item['default']=new_value
400
+ edebug("Update notification from #{notifier} for #{data} = [#{new_value}]","form","info")
401
+ before=Time.now
402
+ set_editable
403
+ renderer.update(new_value) if renderer
404
+ after=Time.now
405
+ diff=after-before
406
+ edebug("#{@item['gtktype']}:#{@item['data']} updated in #{diff.to_s}","time","info")
407
+ end
408
+
409
+ def parentM
410
+ @caller
411
+ end
412
+
413
+ def multiselector?
414
+ gtk_attribute("multiselector") == "true"
415
+ end
416
+
417
+ def short_data
418
+ if i=item['data'].rindex(".")
419
+ item['data'][i+1 .. item['data'].length]
420
+ else
421
+ item['data']
422
+ end
423
+ end
424
+
425
+ def run_query
426
+ @query_result=Hash.new
427
+ return false if item['querysql'].length<5
428
+ sql=eeval("\"#{item['querysql']}\"")
429
+ edebug("runnning query: #{sql}","sql")
430
+ ret=if item['admin'].to_s == 'true' then parentM.admin_qrow(sql) else parentM.qrow(sql) end
431
+ @query_result=ret.rehash if ret
432
+ if @query_result.has_key?(short_data)
433
+ edebug("new value: #{ret[short_data]}","form")
434
+ item['default']=@query_result[short_data]
435
+ end
436
+ end
437
+
438
+ def method_missing(sym,*args)
439
+ renderer
440
+ end
441
+
442
+ def reattach
443
+ @caller.reattach(self)
444
+ end
445
+
446
+ def set_expanded(exp)
447
+ @expander.set_expanded(exp)
448
+ end
449
+
450
+ def inspect
451
+ "InputHolder of #{renderer.inspect}"
452
+ end
453
+ def to_s
454
+ inspect
455
+ end
456
+
457
+ end #end MyInputHolder
458
+