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
data/lib/Common/Conf.rb
ADDED
@@ -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
|
+
|
data/lib/Common/Nick.rb
ADDED
@@ -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
|
+
|