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,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
|
+
|