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,295 @@
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 ManqodCommon
6
+ include Eprint
7
+
8
+ CRITICAL = "critical"
9
+ ERROR = "error"
10
+ WARNING = "warning"
11
+ NORMAL = "normal"
12
+ INFO = "info"
13
+ DEBUG = "debug"
14
+
15
+
16
+ def backtrace_to_debug(c)
17
+ r="#{c}\n"
18
+ c.backtrace.each{|i| r=r+"\t#{i}\n"}
19
+ r
20
+ end
21
+
22
+ def measure(d="",color="default")
23
+ c=case color
24
+ when "red" then 31
25
+ when "blue" then 34
26
+ when "green" then 32
27
+ when "yellow" then 33
28
+ when "magenta" then 35
29
+ when "cyan" then 36
30
+ when "white" then 37
31
+ when "default" then 39
32
+ end
33
+ before_=Time.now
34
+ yield
35
+ time_diff=Time.now.to_f-before_.to_f;edebug("\e[#{c}m#{self} #{d} measured: "+sprintf("%.2fs",time_diff)+"\e[0m","time","normal")
36
+ end
37
+
38
+ def lzero(s,n)
39
+ while s.to_s.length<n
40
+ s="0#{s}"
41
+ end
42
+ s
43
+ end
44
+
45
+ def number_format(f,d)
46
+ s=f.to_s
47
+ if i=s.index(".")
48
+ p1=s[0 .. i-1]
49
+ p2=(s+"0000")[i .. i+d]
50
+ else
51
+ p1=s
52
+ p2=".0000"
53
+ end
54
+ if d==0
55
+ p1.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,")
56
+ else
57
+ p1.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,") + p2
58
+ end
59
+ end
60
+
61
+ def eeval(command,context=self)
62
+ ret=nil
63
+ begin
64
+ edebug("Running: #{command}","eval","debug")
65
+ if context and b=context.getBinding then
66
+ ret=eval(command, b)
67
+ else
68
+ ret=eval(command)
69
+ end
70
+ rescue SyntaxError, NameError => err
71
+ tell_exception("Syntax error: #{command}",backtrace_to_debug(err),"eval","error",true,false)
72
+ rescue => err
73
+ # edebug("String doesn't run: #{command}\n"+backtrace_to_debug(b),"eval","error")
74
+ tell_exception("String doesn't run: #{command}",backtrace_to_debug(err),"eval","error",true,false)
75
+ end
76
+ ret
77
+ end
78
+
79
+ def getBinding
80
+ binding
81
+ end
82
+
83
+ def run_events(gtkobjectid,event_name)
84
+ edebug("Running events #{event_name} for #{gtkobjectid}","events","debug")
85
+ EventCache.instance.gtkobject_events(gtkobjectid,event_name){|event_command| eeval(event_command,self)}
86
+ # edebug("Running events #{event_name} for #{gtkobjectid} finished.","events","debug")
87
+ end
88
+
89
+ def myexec(filename,filedata)
90
+ Myexec.instance.myexec(filename,filedata)
91
+ end
92
+
93
+ def nick
94
+ Nick.instance.get_nick
95
+ end
96
+
97
+ def nick_id
98
+ Nick.instance.nick_id
99
+ end
100
+
101
+ def set_nick(new_nick)
102
+ Nick.instance.set_nick(new_nick)
103
+ end
104
+
105
+ def set_manqod_db_uri(uri)
106
+ ManqodDB.instance.set_manqod_db_uri(uri)
107
+ end
108
+
109
+ def reconnect_manqod_db
110
+ ManqodDB.instance.connect_to_server
111
+ end
112
+
113
+ def manqod_db
114
+ begin
115
+ ManqodDB.instance.manqod_db
116
+ rescue =>err
117
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
118
+ end
119
+ end
120
+ def cache
121
+ ManqodDB.instance.cache
122
+ end
123
+ def admin_cache
124
+ ManqodDB.instance.acache
125
+ end
126
+
127
+ # def prep_sql(isql)
128
+ # ManqodDB.instance.manqod_db.client.escape_string(isql)
129
+ # end
130
+
131
+ def client
132
+ begin
133
+ ManqodDB.instance.manqod_db.client
134
+ rescue =>err
135
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
136
+ end
137
+ end
138
+
139
+ def client_query(sql)
140
+ begin
141
+ einfo("Client query: #{sql}","sql")
142
+ ManqodDB.instance.manqod_db.client.query(sql)
143
+ rescue =>err
144
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
145
+ end
146
+ end
147
+
148
+ def client_fields(sql)
149
+ begin
150
+ ManqodDB.instance.manqod_db.client.fields(sql).each{|row| yield row}
151
+ rescue =>err
152
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
153
+ end
154
+ end
155
+
156
+ def client_qrow(sql)
157
+ begin
158
+ ManqodDB.instance.manqod_db.client.qrow(sql)
159
+ rescue =>err
160
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
161
+ end
162
+ end
163
+
164
+ def client_rows(sql)
165
+ begin
166
+ ManqodDB.instance.manqod_db.client.rows(sql).each{|row| yield row}
167
+ rescue =>err
168
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
169
+ end
170
+ end
171
+
172
+ def admin
173
+ begin
174
+ ManqodDB.instance.manqod_db.admin
175
+ rescue =>err
176
+ retry if warn("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
177
+ end
178
+ end
179
+
180
+ def query(sql)
181
+ begin
182
+ einfo("query: #{sql}","sql")
183
+ ret=ManqodDB.instance.manqod_db.query(sql)
184
+ tell_exception("Database Error","Duplicate entry","sql","error") if ret == -1
185
+ ret
186
+ rescue =>err
187
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
188
+ end
189
+ end
190
+
191
+ def add_where(sql,where)
192
+ begin
193
+ ret=ManqodDB.instance.manqod_db.add_where(sql,where)
194
+ tell_exception("Database Error","Duplicate entry","sql","error") if ret == -1
195
+ ret
196
+ rescue =>err
197
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
198
+ end
199
+ end
200
+
201
+ def qrow(sql,with_table=false)
202
+ begin
203
+ ManqodDB.instance.manqod_db.qrow(sql,with_table)
204
+ rescue =>err
205
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
206
+ end
207
+ end
208
+
209
+ def rows(sql,with_table=false)
210
+ begin
211
+ i=ManqodDB.instance.manqod_db.rows(sql,with_table).each{|row| yield row}
212
+ rescue =>err
213
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
214
+ end
215
+ end
216
+
217
+ def admin_rows(sql,with_table=false)
218
+ # ecode("#{sql}")
219
+ begin
220
+ ManqodDB.instance.manqod_db.admin.rows(sql,with_table).each{|row| yield row}
221
+ rescue =>err
222
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
223
+ end
224
+ end
225
+
226
+ def admin_qrow(sql,with_table=false)
227
+ begin
228
+ ManqodDB.instance.manqod_db.admin.qrow(sql,with_table)
229
+ rescue =>err
230
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
231
+ end
232
+ end
233
+
234
+ def guess_table(sql,field)
235
+ begin
236
+ ManqodDB.instance.manqod_db.guess_table(sql,field)
237
+ rescue =>err
238
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
239
+ end
240
+ end
241
+ def guess_base(sql)
242
+ begin
243
+ ManqodDB.instance.manqod_db.guess_base(sql)
244
+ rescue =>err
245
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
246
+ end
247
+ end
248
+ def escape_string(sql)
249
+ begin
250
+ ManqodDB.instance.manqod_db.escape_string(sql)
251
+ rescue =>err
252
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
253
+ end
254
+ end
255
+
256
+ def image_of_id(image_id=nil,resize=nil)
257
+ begin
258
+ DrbImages.instance.image_of_id(image_id,resize)
259
+ rescue =>err
260
+ ewarn(backtrace_to_debug(err))
261
+ end
262
+ end
263
+ def client_image_of_id(image_id=nil,resize=nil)
264
+ begin
265
+ DrbImages.instance.image_of_id(image_id,resize,true)
266
+ rescue =>err
267
+ ewarn(backtrace_to_debug(err))
268
+ end
269
+ end
270
+
271
+
272
+ def changed_ids_of_base(base,ids)
273
+ begin
274
+ ManqodDB.instance.manqod_db.changed_ids_of_base(base,ids,nick)
275
+ rescue =>err
276
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
277
+ end
278
+ end
279
+
280
+ def sendmail(*args)
281
+ begin
282
+ ManqodDB.instance.manqod_db.sendmail(*args)
283
+ rescue =>err
284
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
285
+ end
286
+ end
287
+ def send_message(*args)
288
+ begin
289
+ ManqodDB.instance.manqod_db.send_message(*args)
290
+ rescue =>err
291
+ retry if tell_exception("RunTime error",backtrace_to_debug(err),"server","error",false,true,err.to_s)
292
+ end
293
+ end
294
+ end
295
+
@@ -0,0 +1,76 @@
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 FormatJustificationWidget < Gtk::HBox
6
+ def initialize(fe)
7
+ @fe=fe
8
+ super()
9
+ pack_start(@fill=Gtk::ToggleButton.new(Gtk::Stock::JUSTIFY_FILL))
10
+ pack_start(@left=Gtk::ToggleButton.new(Gtk::Stock::JUSTIFY_LEFT))
11
+ pack_start(@center=Gtk::ToggleButton.new(Gtk::Stock::JUSTIFY_CENTER))
12
+ pack_start(@right=Gtk::ToggleButton.new(Gtk::Stock::JUSTIFY_RIGHT))
13
+
14
+ @fill.signal_connect('toggled'){|me|
15
+ if me.active?
16
+ @left.set_active(false)
17
+ @center.set_active(false)
18
+ @right.set_active(false)
19
+ if tag=@fe.current_tag
20
+ tag.set_justification(Gtk::Justification::FILL).set_justification_set(true)
21
+ @fe.help.browser.save_current_item
22
+ end
23
+ end
24
+ }
25
+ @left.signal_connect('toggled'){|me|
26
+ if me.active?
27
+ @fill.set_active(false)
28
+ @center.set_active(false)
29
+ @right.set_active(false)
30
+ if tag=@fe.current_tag
31
+ tag.set_justification(Gtk::Justification::LEFT).set_justification_set(true)
32
+ @fe.help.browser.save_current_item
33
+ end
34
+ end
35
+ }
36
+ @center.signal_connect('toggled'){|me|
37
+ if me.active?
38
+ @left.set_active(false)
39
+ @fill.set_active(false)
40
+ @right.set_active(false)
41
+ if tag=@fe.current_tag
42
+ tag.set_justification(Gtk::Justification::CENTER).set_justification_set(true)
43
+ @fe.help.browser.save_current_item
44
+ end
45
+ end
46
+ }
47
+ @right.signal_connect('toggled'){|me|
48
+ if me.active?
49
+ @left.set_active(false)
50
+ @center.set_active(false)
51
+ @fill.set_active(false)
52
+ if tag=@fe.current_tag
53
+ tag.set_justification(Gtk::Justification::RIGHT).set_justification_set(true)
54
+ @fe.help.browser.save_current_item
55
+ end
56
+ end
57
+ }
58
+ add_events(Gdk::Event::Mask::ALL_EVENTS_MASK)
59
+ end
60
+ def set_value(val)
61
+ case val
62
+ when Gtk::Justification::FILL then @fill.set_active(true)
63
+ when Gtk::Justification::LEFT then @left.set_active(true)
64
+ when Gtk::Justification::CENTER then @center.set_active(true)
65
+ when Gtk::Justification::RIGHT then @right.set_active(true)
66
+ end
67
+ end
68
+ def value
69
+ val=nil
70
+ val=Gtk::Justification::FILL if @fill.active?
71
+ val=Gtk::Justification::LEFT if @left.active?
72
+ val=Gtk::Justification::CENTER if @center.active?
73
+ val=Gtk::Justification::RIGHT if @right.active?
74
+ end
75
+ end
76
+
@@ -0,0 +1,139 @@
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 FormatsEditor < Gtk::Window
6
+ def initialize(help)
7
+ @help=help
8
+ super()
9
+ set_transient_for(help)
10
+ set_modal(true)
11
+ add(Gtk::VBox.new.
12
+ pack_start(Gtk::HBox.new.pack_start(@names=Gtk::ComboBox.new).
13
+ pack_start(@new_format=Gtk::Button.new(Gtk::Stock::NEW),false,false).
14
+ pack_start(@remove_format=Gtk::Button.new(Gtk::Stock::REMOVE),false,false)
15
+ ).
16
+ pack_start(@props=Gtk::Table.new(2,1))
17
+ )
18
+ append_widget("Name(unique):",@name=Gtk::Entry.new)
19
+ append_widget("Code(regexp escaped):",@code=Gtk::Entry.new)
20
+ append_widget("Font:",@font=Gtk::FontButton.new)
21
+ append_widget("Foreground:",Gtk::HBox.new.pack_start(@foreground=Gtk::ColorButton.new).pack_start(@foreground_set=Gtk::ToggleButton.new("set"),false,false))
22
+ append_widget("Background:",Gtk::HBox.new.pack_start(@background=Gtk::ColorButton.new).pack_start(@background_set=Gtk::ToggleButton.new("set"),false,false))
23
+ append_widget("Justification:",@justification=FormatJustificationWidget.new(self))
24
+ append_widget(nil,Gtk::HBox.new.pack_start(@underline=Gtk::ToggleButton.new(Gtk::Stock::UNDERLINE)).pack_start(@strikethrough=Gtk::ToggleButton.new(Gtk::Stock::STRIKETHROUGH)))
25
+
26
+ @code.signal_connect('changed'){|me|
27
+ if tag=tag_table.lookup(@names.active_text)
28
+ tag.set_code(me.text).save
29
+ end
30
+ }
31
+ @font.signal_connect("font-set"){|me|
32
+ if tag=tag_table.lookup(@names.active_text)
33
+ tag.set_font(me.font_name).save
34
+ end
35
+ }
36
+ @foreground.signal_connect("color-set"){|me|
37
+ if tag=tag_table.lookup(@names.active_text)
38
+ tag.set_foreground_gdk(me.color).save
39
+ end
40
+ }
41
+ @foreground_set.signal_connect('toggled'){|me|
42
+ if tag=tag_table.lookup(@names.active_text)
43
+ tag.set_foreground_set(me.active?).save
44
+ end
45
+ }
46
+ @background.signal_connect("color-set"){|me|
47
+ if tag=tag_table.lookup(@names.active_text)
48
+ tag.set_background_gdk(me.color).set_background_set(true).save
49
+ end
50
+ }
51
+ @background_set.signal_connect('toggled'){|me|
52
+ if tag=tag_table.lookup(@names.active_text)
53
+ tag.set_background_set(me.active?).save
54
+ end
55
+ }
56
+ @underline.signal_connect("toggled"){|me|
57
+ if tag=tag_table.lookup(@names.active_text)
58
+ tag.set_underline(me.active? ? Pango::AttrUnderline::SINGLE : Pango::AttrUnderline::NONE).set_underline_set(me.active?).save
59
+ end
60
+ }
61
+ @strikethrough.signal_connect("toggled"){|me|
62
+ if tag=tag_table.lookup(@names.active_text)
63
+ tag.set_strikethrough(me.active?).set_strikethrough_set(me.active?).save
64
+ end
65
+ }
66
+
67
+ set_width_request(500)
68
+ @names.signal_connect("changed"){|me|
69
+ populate
70
+ }
71
+ @new_format.signal_connect('clicked',self){|me,fe|
72
+ w=Gtk::Dialog.new("New format name",fe,Gtk::Dialog::MODAL|Gtk::Dialog::DESTROY_WITH_PARENT,[Gtk::Stock::NEW,Gtk::Dialog::RESPONSE_ACCEPT],[Gtk::Stock::CANCEL,Gtk::Dialog::RESPONSE_REJECT]).set_default_response(Gtk::Dialog::RESPONSE_ACCEPT)
73
+ w.vbox.pack_start(Gtk::Label.new("Format Name(only use names that can't be links):"),false,false).pack_start(e=Gtk::Entry.new,false,false)
74
+ w.show_all.run{|response|
75
+ if response == Gtk::Dialog::RESPONSE_ACCEPT
76
+ tag_table.add({"name"=>e.text})
77
+ populate_names(e.text)
78
+ tag=tag_table.lookup(e.text)
79
+ ManqodDB.instance.manqod_db.save_help_format(e.text,tag.export)
80
+ end
81
+ w.destroy
82
+ }
83
+ }
84
+ @remove_format.signal_connect('clicked'){|me|
85
+ if tag=tag_table.lookup(@names.active_text)
86
+ tag_table.remove(tag)
87
+ populate_names
88
+ ManqodDB.instance.manqod_db.remove_help_format(@names.active_text)
89
+ end
90
+ }
91
+ end
92
+ attr_reader :help
93
+
94
+ def tag_table
95
+ @help.browser.buffer.tag_table
96
+ end
97
+ def current_tag
98
+ tag_table.lookup(@names.active_text)
99
+ end
100
+
101
+ def populate_names(active=nil)
102
+ @names.model.clear
103
+ tag_table.each{|tag|
104
+ @names.append_text(tag.name) unless tag.link
105
+ }
106
+ i=nil
107
+ while (i ? i.next! : i=@names.model.iter_first)
108
+ @names.set_active_iter(i) if i[0] == active
109
+ end
110
+ end
111
+
112
+ def populate
113
+ # {"name"=>"_header","code"=>Regexp.escape("[h1]"),"font"=>"Sans Bold 20"}
114
+ if @names.active_text && tag=tag_table.lookup(@names.active_text)
115
+ @name.set_text(tag.name)
116
+ @code.set_text(tag.code.to_s)
117
+ @font.set_font_name(tag.font)
118
+ @foreground.set_color(tag.foreground_gdk)
119
+ @background.set_color(tag.background_gdk)
120
+ @foreground_set.set_active(tag.foreground_set?)
121
+ @background_set.set_active(tag.background_set?)
122
+ @justification.set_value(tag.justification)
123
+ @underline.set_active(tag.underline == Pango::AttrUnderline::SINGLE)
124
+ @strikethrough.set_active(tag.strikethrough?)
125
+ end
126
+ end
127
+ def append_widget(text,widget)
128
+ r=@props.n_rows
129
+ @props.n_rows=@props.n_rows+1
130
+ @props.attach_defaults(Gtk::Label.new(text),0,1,r,r+1)
131
+ @props.attach_defaults(widget,1,2,r,r+1)
132
+ end
133
+ def run
134
+ populate_names
135
+ populate
136
+ show_all
137
+ end
138
+ end
139
+
@@ -0,0 +1,84 @@
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 FormatTag < Gtk::TextTag
6
+ def initialize(table,arg=nil)
7
+ @tag_table=table
8
+ @link=nil
9
+ @code=nil
10
+ case arg.class.name
11
+ when "String"
12
+ @link=arg
13
+ super(@link)
14
+ set_foreground("#0000BB")
15
+ set_background("white")
16
+ signal_connect("event"){|tag,text_view,ev,iter|
17
+ if ev.event_type == Gdk::Event::Type::BUTTON_PRESS
18
+ @tag_table.browser.help.index.set_cursor(@link)
19
+ end
20
+ }
21
+ when "Hash"
22
+ if arg.has_key?("name")
23
+ super(arg["name"])
24
+ arg.delete("name")
25
+ import(arg)
26
+ end
27
+ else
28
+ p "unalble to create tag:#{arg.inspect}"
29
+ super()
30
+ end
31
+ end
32
+ attr_reader :code, :link
33
+
34
+ def set_code(c)
35
+ @code=c
36
+ self
37
+ end
38
+
39
+ def export
40
+ unless @link
41
+ e={"name"=>name,
42
+ "code"=>@code ? Regexp.escape(@code) : "\\.",
43
+ "foreground"=>foreground_gdk.to_a,
44
+ "foreground_set"=>foreground_set?,
45
+ "background"=>background_gdk.to_a,
46
+ "background_set"=>background_set?,
47
+ "justification"=>case justification
48
+ when Gtk::Justification::LEFT then 0
49
+ when Gtk::Justification::RIGHT then 1
50
+ when Gtk::Justification::CENTER then 2
51
+ when Gtk::Justification::FILL then 3
52
+ else 0
53
+ end,
54
+ "font"=>font,
55
+ "underline"=>case underline
56
+ when Pango::AttrUnderline::Underline::SINGLE then 1
57
+ when Pango::AttrUnderline::Underline::NONE then 0
58
+ else 0
59
+ end,
60
+ "strikethrough"=>strikethrough?
61
+ }
62
+ return e
63
+ end
64
+ end
65
+ def import(arg)
66
+ @code=arg["code"]
67
+ set_foreground_gdk(Gdk::Color.new(arg["foreground"][0],arg["foreground"][1],arg["foreground"][2])) if arg["foreground"]
68
+ set_foreground_set(arg["foreground_set"] == true)
69
+ set_background_gdk(Gdk::Color.new(arg["background"][0],arg["background"][1],arg["background"][2])) if arg["background"]
70
+ set_background_set(arg["background_set"] == true)
71
+ if arg["justification"]
72
+ set_justification(arg["justification"]).set_justification_set(true)
73
+ else
74
+ set_justification_set(false)
75
+ end
76
+ set_underline(arg["underline"]).set_underline_set(true) if arg["underline"]
77
+ set_font(arg["font"]) if arg["font"]
78
+ end
79
+
80
+ def save
81
+ ManqodDB.instance.manqod_db.save_help_format(name,export)
82
+ end
83
+ end
84
+
@@ -0,0 +1,39 @@
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 FormatTagTable < Gtk::TextTagTable
6
+ def initialize(browser)
7
+ @browser=browser
8
+ super()
9
+ end
10
+ attr_reader :browser
11
+
12
+ def add(arg)
13
+ tag=FormatTag.new(self,arg)
14
+ super(tag) if tag.name
15
+ tag
16
+ end
17
+
18
+ def markup_regexp
19
+ r=""
20
+ each{|tag| r=r+tag.code+"|" if tag.code && tag.code.length>1}
21
+ r[r.length-1]="" if r.length>0 #remove the last |
22
+ Regexp.compile(r)
23
+ end
24
+
25
+ def lookup_by_code(str)
26
+ found=nil
27
+ each{|tag| found=tag if tag.code == Regexp.escape(str)}
28
+ found
29
+ end
30
+ def lookup(name)
31
+ name.nil? ? nil : super(name)
32
+ end
33
+ def clear
34
+ a=Array.new
35
+ each{|tag| a.push(tag)}
36
+ a.each{|tag| remove(tag)}
37
+ end
38
+ end
39
+