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,119 @@
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 ConfStorage
6
+ include Singleton
7
+ include Eprint
8
+
9
+ def get_conf(i,j,k)
10
+ if !@myconf.nil?
11
+ if @myconf[i.to_s]
12
+ if @myconf[i.to_s][j.to_s]
13
+ @myconf[i.to_s][j.to_s][k.to_s]
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ def set_conf(moditem_id,item_id,variable,value,conf=@myconf)
20
+ edebug("#{moditem_id}:#{item_id}:#{variable} => #{value}","config","info")
21
+ conf[moditem_id.to_s]=Hash.new if !conf.has_key?(moditem_id.to_s)
22
+ conf[moditem_id.to_s][item_id.to_s]=Hash.new if !conf[moditem_id.to_s].has_key?(item_id.to_s)
23
+ conf[moditem_id.to_s][item_id.to_s][variable.to_s]=value.to_s
24
+ end
25
+
26
+ def conf_values
27
+ @myconf
28
+ end
29
+
30
+ def print_conf(conf=@myconf)
31
+ conf.each{|ik,iv|
32
+ iv.each{|jk,jv|
33
+ jv.each{|kk,kv|
34
+ print "[",ik,",",jk,",",kk,"]=",kv,"\n"
35
+ }
36
+ }
37
+ }
38
+ end
39
+
40
+ def save_conf
41
+ return false if Nick.instance.get_nick.nil?
42
+ edebug("saving settings for #{Nick.instance.get_nick}","config","info")
43
+ scount=0
44
+ begin
45
+ @myconf.each{|ik,iv|
46
+ iv.each{|jk,jv|
47
+ jv.each{|kk,kv|
48
+ if @myinitconf.has_key?(ik) && @myinitconf[ik].has_key?(jk) && @myinitconf[ik][jk].has_key?(kk)
49
+ needtosave=@myinitconf[ik][jk][kk] != @myconf[ik][jk][kk]
50
+ else
51
+ needtosave=true
52
+ end
53
+ if needtosave
54
+ sql="replace into conf set nick='#{Nick.instance.get_nick}', Variable='#{kk}', moditemid='#{ik}', itemid='#{jk}', Value='#{ManqodDB.instance.manqod_db.admin.escape_string(kv)}'"
55
+ ManqodDB.instance.manqod_db.admin.query(sql)
56
+ scount=scount+1
57
+ end
58
+ }
59
+ }
60
+ }
61
+ edebug("#{scount} changed settings saved","config","normal")
62
+ rescue =>err
63
+ edebug("can't save user configs, #{err}","config","error")
64
+ end
65
+ end
66
+
67
+ def load_conf
68
+ @myconf=Hash.new# if @myconf.nil?
69
+ @myinitconf=Hash.new# if @myinitconf.nil?
70
+ sql="select * from conf where nick='#{Nick.instance.get_nick}'"
71
+ ManqodDB.instance.manqod_db.admin.rows("select * from conf where nick='#{Nick.instance.get_nick}'").each{|row|
72
+ set_conf(row["moditemid"].to_s,row["itemid"].to_s,row["Variable"].to_s,row["Value"].to_s)
73
+ set_conf(row["moditemid"].to_s,row["itemid"].to_s,row["Variable"].to_s,row["Value"].to_s,@myinitconf)
74
+ if Eprint::DOMAIN.has_key?(row["Variable"].to_s)
75
+ Eprint::DOMAIN[row["Variable"]]=row["Value"]
76
+ end
77
+ }
78
+ set_conf(0,0,"button-size","gtk-small-toolbar") if !get_conf(0,0,"button-size")
79
+ set_conf(0,0,"menu-type","standard") if !get_conf(0,0,"menu-type")
80
+ set_conf(0,0,"menu-position","top") if !get_conf(0,0,"menu-position")
81
+ set_conf(0,0,"grid","both") if !get_conf(0,0,"grid")
82
+ set_conf(0,0,"form-grid","none") if !get_conf(0,0,"form-grid")
83
+ set_conf(0,0,"list-tooltip","false") if !get_conf(0,0,"list-tooltip")
84
+
85
+ set_conf(0,0,"info-frame-font","Verdana 10") if !get_conf(0,0,"info-frame-font")
86
+ set_conf(0,0,"info-item-font","Verdana Bold 10") if !get_conf(0,0,"info-item-font")
87
+ set_conf(0,0,"form-frame-font","Verdana Bold 10") if !get_conf(0,0,"form-frame-font")
88
+ set_conf(0,0,"form-item-font","Verdana 10") if !get_conf(0,0,"form-item-font")
89
+
90
+ set_conf(0,0,"list-button-font","Verdana 10") if !get_conf(0,0,"list-button-font")
91
+ set_conf(0,0,"list-cell-font","Verdana 10") if !get_conf(0,0,"list-cell-font")
92
+
93
+ set_conf(0,0,"bar-menu-font","Verdana 10") if !get_conf(0,0,"bar-menu-font")
94
+
95
+ set_conf(0,0,"confirm-exit","true") if !get_conf(0,0,"confirm-exit")
96
+ set_conf(0,0,"last-viewed-message",0) if !get_conf(0,0,"last-viewed-message")
97
+
98
+ end
99
+ end
100
+
101
+ module Conf
102
+ def save_conf
103
+ ConfStorage.instance.save_conf
104
+ end
105
+
106
+ def load_conf
107
+ ConfStorage.instance.load_conf
108
+ end
109
+
110
+ def get_conf(moditem_id, item_id, variable)
111
+ ConfStorage.instance.get_conf(moditem_id, item_id, variable)
112
+ end
113
+
114
+ def set_conf(moditem_id, item_id, variable, value)
115
+ ConfStorage.instance.set_conf(moditem_id, item_id, variable, value)
116
+ end
117
+ end
118
+
119
+
@@ -0,0 +1,180 @@
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 Eprint
6
+ LEVEL={
7
+ "critical" => 0,
8
+ "error" => 1,
9
+ "warning" => 2,
10
+ "normal" => 3,
11
+ "info" => 4,
12
+ "debug" => 5,
13
+ "code" => -1
14
+ }
15
+
16
+ DOMAIN={
17
+ "config" => "warning",
18
+ "eval" => "warning",
19
+ "events" => "warning",
20
+ "filter-toggle" => "warning",
21
+ "form" => "warning",
22
+ "info" => "warning",
23
+ "form-combo" => "warning",
24
+ "gtk_button" => "warning",
25
+ "list" => "warning",
26
+ "sub-list" => "warning",
27
+ "list-button" => "warning",
28
+ "list-list" => "warning",
29
+ "list-filter" => "warning",
30
+ "list-fieldcombo" => "warning",
31
+ "list-filechooser"=> "warning",
32
+ "main" => "normal",
33
+ "menu" => "warning",
34
+ "relation-builder" => "normal",
35
+ "sql" => "warning",
36
+ "sql-prepare" => "warning",
37
+ "sql-guesstable" => "warning",
38
+ "time" => "warning",
39
+ "touch" => "warning",
40
+ "image" => "warning",
41
+ "printing" => "warning",
42
+ "drb" => "warning"
43
+
44
+ }
45
+
46
+ def eprint(subject,debug_domain="main",level="normal")
47
+ #allow_log should be called only from the tell_exception's log statement to avoid recursivity
48
+ colour=case level
49
+ when "error" then 31
50
+ when "blue" then 34
51
+ when "info" then 32
52
+ when "debug" then 33
53
+ when "warning" then 35
54
+ when "code" then 36
55
+ when "white" then 37
56
+ when "normal" then 39
57
+ end
58
+
59
+ t=Time.now.strftime("%H:%M:%S")
60
+ if DOMAIN.has_key?(debug_domain)
61
+ if LEVEL[level] <= LEVEL[DOMAIN[debug_domain]]
62
+ print "#{t} #{debug_domain}:\e[#{colour}m#{level}\e[0m:\e[1;37m#{self}\e[#{colour}m #{subject}\e[0m\n"
63
+ end
64
+ end
65
+ end
66
+
67
+ def set_edebug(debug_domain,level)
68
+ DOMAIN[debug_domain]=level
69
+ self
70
+ end
71
+
72
+ def gtk_set_edebug
73
+ dw=Gtk::Dialog.new("Debug",nil,Gtk::Dialog::MODAL,[Gtk::Stock::APPLY,1])
74
+ #dw.realize;dw.window.set_functions(Gdk::Window::WMFunction::ALL | Gdk::Window::WMFunction::CLOSE)
75
+ dw.vbox.pack_start(Gtk::ScrolledWindow.new.add_with_viewport(t=Gtk::Table.new(1,1)).set_size_request(300,600),true,true,0)
76
+ #set up the combo model
77
+ model=Gtk::ListStore.new(String,Integer)
78
+ LEVEL.sort{|a,b|a[1]<=>b[1]}.each{|i|
79
+ iter=model.append
80
+ iter[0]=LEVEL.key(i[1])
81
+ iter[1]=LEVEL[iter[0]]
82
+ }
83
+ #set up the debug domain widgets
84
+ i=0
85
+ DOMAIN.sort.each{|key|
86
+ c=Gtk::ComboBox.new.set_model(model)
87
+ c.set_name(key[0])
88
+ c.signal_connect('changed'){|me|
89
+ DOMAIN[me.name]=me.active_iter[0]
90
+ set_conf(0,0,me.name,me.active_iter[0])
91
+ }
92
+ model.each {|model, path, iter| c.set_active(path.indices[0]) if iter[1]==LEVEL[key[1]] }
93
+ t.attach(Gtk::Label.new(key[0]).set_alignment(0,0.5),0,1,i,i+1,Gtk::EXPAND|Gtk::FILL,Gtk::EXPAND|Gtk::FILL,1,1)
94
+ t.attach(c,1,2,i,i+1,Gtk::EXPAND|Gtk::FILL,Gtk::EXPAND|Gtk::FILL,1,1)
95
+ i=i+1
96
+ }
97
+ dw.show_all.run
98
+ dw.destroy
99
+ end
100
+
101
+ def edebug(subject,debug_domain="main",level="debug",allow_log=false)
102
+ case level
103
+ when "normal" then enormal(subject,debug_domain)
104
+ when "warning" then ewarn(subject,debug_domain)
105
+ when "info" then einfo(subject,debug_domain)
106
+ when "error" then eerror(subject,debug_domain)
107
+ else eprint(subject,debug_domain,"debug")
108
+ end
109
+ end
110
+
111
+ def einfo(subject,debug_domain="main")
112
+ eprint(subject,debug_domain,"info")
113
+ end
114
+
115
+ def ewarn(subject,debug_domain="main")
116
+ eprint(subject,debug_domain,"warning")
117
+ end
118
+
119
+ def eerror(subject,debug_domain="main")
120
+ eprint(subject,debug_domain,"error")
121
+ end
122
+ def enormal(subject,debug_domain="main")
123
+ eprint(subject,debug_domain,"normal")
124
+ end
125
+ def ecode(subject,debug_domain="main")
126
+ eprint(subject,debug_domain,"code")
127
+ end
128
+
129
+ def tell_exception(subject,details=nil,debug_domain="main",level="normal",allow_log=true,canretry=false,secondary_text=nil)
130
+ edebug("#{subject}\n#{secondary_text}\n#{details}",debug_domain,level,allow_log)
131
+ begin
132
+ ret=nil
133
+ dialog=Gtk::MessageDialog.new(nil,Gtk::Dialog::Flags::MODAL,
134
+ case level
135
+ when "error" then Gtk::MessageDialog::ERROR
136
+ when "warning" then Gtk::MessageDialog::WARNING
137
+ when "normal","info" then Gtk::MessageDialog::INFO
138
+ else Gtk::MessageDialog::OTHER
139
+ end,
140
+ if canretry
141
+ Gtk::MessageDialog::ButtonsType::YES_NO
142
+ else
143
+ Gtk::MessageDialog::ButtonsType::CLOSE
144
+ end,
145
+ subject)
146
+ if secondary_text
147
+ dialog.set_secondary_text(secondary_text)
148
+ else
149
+ dialog.set_secondary_text("please report it!") if level == 'error'
150
+ end
151
+ dialog.vbox.pack_start(expander=Gtk::Expander.new("details",true).add(Gtk::ScrolledWindow.new.set_size_request(600,300).set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC).add(Gtk::TextView.new(Gtk::TextBuffer.new.set_text(details))))) unless details.nil?
152
+ dialog.vbox.pack_end(Gtk::Label.new("retry?")) if canretry
153
+ if level == 'error'
154
+ dialog.action_area.pack_start(send=Gtk::Button.new("report").set_image(Gtk::Image.new(Gtk::Stock::HELP,Gtk::IconSize::MENU)))
155
+ send.signal_connect("clicked"){|me,ev|
156
+ begin
157
+ ManqodRPC.instance.manqod_server.report_mail(subject,
158
+ :details =>details.inspect,
159
+ :more_details=>secondary_text.inspect,
160
+ :class_name => self.class.name,
161
+ :self => self.inspect
162
+ )
163
+ rescue => err
164
+ retry if warn("Reporting failed",err.backtrace.join("\n"),"server","error",false,false,err.to_s)
165
+ end
166
+ dialog.action_area.remove(me)
167
+ }
168
+ end
169
+ dialog.show_all
170
+ ret=dialog.run
171
+ dialog.destroy
172
+ ret == Gtk::Dialog::ResponseType::YES
173
+ rescue
174
+ end
175
+ end
176
+
177
+ alias_method("warn","tell_exception")
178
+
179
+ end
180
+
@@ -0,0 +1,41 @@
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 EventCache
6
+ include Singleton
7
+ include Eprint
8
+
9
+ def gtkobject_events(gtkobjectid,event_name)
10
+ goid=gtkobjectid.to_i
11
+ @events=Hash.new if @events.nil?
12
+ @events.delete(goid) if event_name.nil?
13
+ unless @events.has_key?(goid)
14
+ @events[goid]=Hash.new
15
+ #load events for object
16
+ a=ManqodDB.instance.cache.get("ev#{gtkobjectid}")
17
+ a=Hash.new unless a.class.name == "Hash"
18
+
19
+ a.each_pair{|ev_name,ev|
20
+ @events[goid][ev_name]=ev.to_a
21
+ }
22
+ einfo("loaded #{a.size} events for #{goid}","events")
23
+ end
24
+ unless @events[goid].nil? || @events[goid][event_name].nil?
25
+ einfo("serving from cache #{event_name} events for #{goid}","events")
26
+ @events[goid][event_name].each{|event_command|
27
+ yield event_command
28
+ }
29
+ end
30
+ end
31
+
32
+ def reload_events(gtkobjectid)
33
+ @events=Hash.new if @events.nil?
34
+ @events[gtkobjectid.to_i]=Hash.new unless @events.has_key?(gtkobjectid.to_i)
35
+ gtkobject_events(gtkobjectid.to_i,nil)
36
+ einfo("reloaded #{gtkobjectid}","events")
37
+ end
38
+
39
+ def to_s;"EventCache";end
40
+ end
41
+
@@ -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 Fixnum
6
+ def strftime(format)
7
+ d,r=(self.to_f).divmod(24*3600)
8
+ h,r=(r).divmod(3600)
9
+ m,s=(r).divmod(60)
10
+ ret=String.new(format)
11
+ ret.sub!("%j","#{d}")
12
+ ret.sub!("%d","#{d}")
13
+ ret.sub!("%H","#{"%02d" % h}")
14
+ ret.sub!("%M","#{"%02d" % m}")
15
+ ret.sub!("%S","#{"%02d" % s.round}")
16
+ ret
17
+ end
18
+ end
@@ -0,0 +1,41 @@
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 DrbImages
6
+ include Singleton
7
+
8
+ def load_images
9
+ @images=Hash.new if @images.nil?
10
+ @cimages=Hash.new if @cimages.nil?
11
+ if ManqodDB.instance.ccache
12
+ keys=ManqodDB.instance.ccache.get("imkeys")
13
+ keys.each{|key,addr| @cimages[key]=MyImage.new(key,true)}
14
+ end
15
+ keys=ManqodDB.instance.cache.get("imkeys")
16
+ keys.each{|key,addr| @images[key]=MyImage.new(key)}
17
+ end
18
+
19
+ def client_image_of_id(id_of_image=nil,resize=nil)
20
+ image_of_id(id_of_image, resize,true)
21
+ end
22
+ def image_of_id(id_of_image=nil,resize=nil,client=false)
23
+ imh=if client then @cimages else @images end
24
+ if !id_of_image.nil? and imh.has_key?(id_of_image.to_i)
25
+ im=imh[id_of_image.to_i]
26
+ ret=resize ? im.resize(resize) : im.pixbuf
27
+ else
28
+ ret=Gtk::Image.new(Gtk::Stock::MISSING_IMAGE,Gtk::IconSize::MENU).pixbuf
29
+ ewarn("no image found for id: #{id_of_image}!","image") unless id_of_image==0
30
+ end
31
+ ret
32
+ end
33
+
34
+ def client_each
35
+ @cimages.each{|im_id,myim|
36
+ yield im_id,myim
37
+ }
38
+ end
39
+
40
+ end
41
+
@@ -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 ManqodDB
6
+ include Singleton
7
+ @manqod_db=nil
8
+ @cache=nil
9
+ @acache=nil
10
+ @ccache=nil
11
+ attr_reader :manqod_db, :connected, :cache, :acache, :ccache
12
+
13
+ def set_manqod_db_uri(manqod_db_uri)
14
+ @manqod_db_uri=manqod_db_uri
15
+ connect_to_server
16
+ begin
17
+ @cache = Memcache.new([@manqod_db.connection['cache_host']],{:prefix_key=>@manqod_db.key_name}) if connected
18
+ @acache = Memcache.new([@manqod_db.admin.connection['cache_host']],{:prefix_key=>@manqod_db.admin.key_name}) if connected
19
+ @ccache = Memcache.new([@manqod_db.client.connection['cache_host']],{:prefix_key=>@manqod_db.client.key_name}) if connected && manqod_db.client
20
+ GtkAttributeStorage.instance.load_all
21
+ rescue => err
22
+ Eprint.eerror("connecting to cache failed: #{err}\n#{err.backtrace.join("\n")}","drb")
23
+ end
24
+
25
+ @connected
26
+ end
27
+
28
+ def connect_to_server
29
+ einfo("connecting to #{@manqod_db_uri}","drb")
30
+ @connected=false
31
+ begin
32
+ @manqod_db=DRb::DRbObject.new_with_uri(@manqod_db_uri) unless @manqod_db_uri.nil?
33
+ @connected=@manqod_db.alive?
34
+ rescue =>err
35
+ Eprint.eerror("connecting failed: #{err}\n#{err.backtrace.join("\n")}","drb")
36
+ end
37
+ @connected
38
+ end
39
+ end
40
+
@@ -0,0 +1,77 @@
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 MyExec
6
+
7
+ def myexec(filename,filedata)
8
+ ext=if last=filename.rindex(".");then filename[last+1 .. filename.length];else "";end
9
+ gettmp=true
10
+ while gettmp
11
+ if tmp=get_conf(0,0,"dir_tmp")
12
+ if !tmpok=FileTest.directory?(tmp)
13
+ begin
14
+ Dir.mkdir(tmp)
15
+ rescue SystemCallError => err
16
+ end
17
+ tmpok=FileTest.directory?(tmp)
18
+ end
19
+ end
20
+ if !tmpok
21
+ asker=Gtk::Dialog.new()
22
+ asker.set_title("tmp?")
23
+ op=Gtk::Entry.new
24
+ asker.vbox.add(op)
25
+ okebutton=asker.add_button('',0).set_image(Gtk::Image.new(Gtk::Stock::OK,Gtk::IconSize::BUTTON)).set_label('ok').set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked') do |c| asker.response(1) end
26
+ cancelbutton=asker.add_button('',0).set_image(Gtk::Image.new(Gtk::Stock::CANCEL,Gtk::IconSize::BUTTON)).set_label('megsem').set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked') do |c| asker.response(-1) end
27
+ #warner.realize;warner.window.set_functions(Gdk::Window::WMFunction::ALL | Gdk::Window::WMFunction::CLOSE)
28
+ asker.show_all
29
+ if asker.run ==1
30
+ set_conf(0,0,"dir_tmp",op.text)
31
+ gettmp=true
32
+ else
33
+ gettmp=false
34
+ end
35
+ asker.destroy
36
+ else
37
+ gettmp=false
38
+ end
39
+ end
40
+ return false if !tmpok
41
+ filepath=tmp+filename
42
+ file = File.new(filepath, "wb+")
43
+ file.write(filedata)
44
+ file.close
45
+ tryit=true
46
+ while tryit
47
+ if prog=get_conf(0,0,"file_#{ext}")
48
+ ret=system prog, filepath
49
+ end
50
+ if prog.nil? or !ret
51
+ asker=Gtk::Dialog.new()
52
+ asker.set_title("Program?")
53
+ op=Gtk::Entry.new
54
+ asker.vbox.add(op)
55
+ okebutton=asker.add_button('',0).set_image(Gtk::Image.new(Gtk::Stock::OK,Gtk::IconSize::BUTTON)).set_label('ok').set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked') do |c|
56
+ asker.response(1)
57
+ end
58
+ cancelbutton=asker.add_button('',0).set_image(Gtk::Image.new(Gtk::Stock::CANCEL,Gtk::IconSize::BUTTON)).set_label('megsem').set_relief(Gtk::ReliefStyle::NONE).signal_connect('clicked') do |c|
59
+ asker.response(-1)
60
+ end
61
+ #warner.realize;warner.window.set_functions(Gdk::Window::WMFunction::ALL | Gdk::Window::WMFunction::CLOSE)
62
+ asker.show_all
63
+ if asker.run ==1
64
+ set_conf(0,0,"file_#{ext}",op.text)
65
+ tryit=true
66
+ else
67
+ tryit=false
68
+ end
69
+ asker.destroy
70
+ else
71
+ tryit=false
72
+ end
73
+ end
74
+ File.delete(filepath)
75
+ end
76
+ end
77
+
@@ -0,0 +1,47 @@
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 MyImage < Gtk::Image
6
+ include ManqodCommon
7
+ def initialize(image_id,from_client=false)
8
+ @image_id=image_id
9
+ @filename=nil
10
+ begin
11
+ row=if from_client then ManqodDB.instance.ccache.get("im[#{image_id}]") else ManqodDB.instance.cache.get("im[#{image_id}]") end
12
+ if row
13
+ @filename=row["filename"]
14
+ a=Array.new
15
+ row['filedata'].each_byte{|v|a.push(v)}
16
+ pixdata=Gdk::Pixdata.deserialize(a)
17
+ @pb=pixdata.to_pixbuf(true)
18
+ super(pb)
19
+ else
20
+ raise
21
+ end
22
+ rescue =>e
23
+ ewarn("cannot load image #{from_client ? "client":""} #{image_id}: #{e}")
24
+ super(Gtk::Stock::MISSING_IMAGE,Gtk::IconSize::MENU)
25
+ end
26
+
27
+ end
28
+ attr_reader :image_id, :pb, :filename
29
+
30
+ def resize(icon_size_name=nil)
31
+ new_pb=nil
32
+ if storage_type==Gtk::Image::PIXBUF && icon_size_name
33
+ case icon_size_name.class.name
34
+ when 'Fixnum' then nw,nh =[ icon_size_name,icon_size_name]
35
+ when 'String' then nw,nh =Gtk::IconSize.lookup(Gtk::IconSize.from_name(icon_size_name))
36
+ end
37
+ new_pb=pb.scale(nw,nh)
38
+ end
39
+ edebug("resized from #{pixbuf.height if pb}x#{pixbuf.width if pb} to #{new_pb.height if new_pb}x#{new_pb.width if new_pb}","image")
40
+ new_pb
41
+ end
42
+
43
+ def to_s
44
+ "MyImage{id:#{image_id},name:#{filename}}"
45
+ end
46
+ end
47
+
@@ -0,0 +1,25 @@
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 Nick
6
+ include Singleton
7
+ @nick=nil
8
+ @nickid=nil
9
+
10
+ def set_nick(new_nick)
11
+ @nick=new_nick
12
+ end
13
+
14
+ def get_nick
15
+ @nick
16
+ end
17
+
18
+ def nick_id
19
+ if @nickid.nil?
20
+ @nickid=ManqodDB.instance.manqod_db.admin.qrow("select id from users where nick='#{@nick}'")["id"]
21
+ end
22
+ @nickid
23
+ end
24
+ end
25
+
@@ -0,0 +1,15 @@
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 String
6
+ def indexU(k,offset=0)
7
+ i=self.upcase.index(k.upcase,offset)
8
+ s=i ? i==0 ? 0 : self[0 .. i-1].lengthU : nil
9
+ s && s >= offset ? s : nil
10
+ end
11
+ def lengthU
12
+ self.scan(/./mu).size
13
+ end
14
+ end
15
+