knjrbfw 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +32 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +49 -0
  8. data/VERSION +1 -0
  9. data/lib/knj/.gitignore +1 -0
  10. data/lib/knj/arrayext.rb +157 -0
  11. data/lib/knj/autoload/activesupport.rb +2 -0
  12. data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
  13. data/lib/knj/autoload/backups/parsedate.rb +53 -0
  14. data/lib/knj/autoload/backups/ping.rb +64 -0
  15. data/lib/knj/autoload/cinch.rb +2 -0
  16. data/lib/knj/autoload/erubis.rb +6 -0
  17. data/lib/knj/autoload/facebooker.rb +3 -0
  18. data/lib/knj/autoload/facets_dictionary.rb +7 -0
  19. data/lib/knj/autoload/gd2.rb +2 -0
  20. data/lib/knj/autoload/gettext.rb +9 -0
  21. data/lib/knj/autoload/gtk2.rb +5 -0
  22. data/lib/knj/autoload/json_autoload.rb +7 -0
  23. data/lib/knj/autoload/magick.rb +6 -0
  24. data/lib/knj/autoload/mysql.rb +6 -0
  25. data/lib/knj/autoload/parsedate.rb +1 -0
  26. data/lib/knj/autoload/ping.rb +64 -0
  27. data/lib/knj/autoload/rexml.rb +12 -0
  28. data/lib/knj/autoload/soap.rb +3 -0
  29. data/lib/knj/autoload/sqlite3.rb +6 -0
  30. data/lib/knj/autoload/tmail.rb +6 -0
  31. data/lib/knj/autoload/twitter.rb +2 -0
  32. data/lib/knj/autoload/xmlsimple.rb +6 -0
  33. data/lib/knj/autoload/zip.rb +6 -0
  34. data/lib/knj/autoload.rb +136 -0
  35. data/lib/knj/compiler.rb +53 -0
  36. data/lib/knj/cpufreq.rb +40 -0
  37. data/lib/knj/datarow.rb +256 -0
  38. data/lib/knj/datestamp.rb +91 -0
  39. data/lib/knj/datet.rb +448 -0
  40. data/lib/knj/degulesider.rb +46 -0
  41. data/lib/knj/erb/apache_knjerb.conf +8 -0
  42. data/lib/knj/erb/cache/README +1 -0
  43. data/lib/knj/erb/erb.rb +21 -0
  44. data/lib/knj/erb/erb_1.9.rb +13 -0
  45. data/lib/knj/erb/erb_cache_clean.rb +20 -0
  46. data/lib/knj/erb/erb_fcgi.rb +44 -0
  47. data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
  48. data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
  49. data/lib/knj/erb/erb_jruby.rb +22 -0
  50. data/lib/knj/erb/include.rb +248 -0
  51. data/lib/knj/errors.rb +19 -0
  52. data/lib/knj/eruby.rb +224 -0
  53. data/lib/knj/event_filemod.rb +53 -0
  54. data/lib/knj/event_handler.rb +69 -0
  55. data/lib/knj/exchangerates.rb +39 -0
  56. data/lib/knj/ext/webrick.rb +31 -0
  57. data/lib/knj/filesystem.rb +8 -0
  58. data/lib/knj/fs/drivers/filesystem.rb +14 -0
  59. data/lib/knj/fs/drivers/ftp.rb +33 -0
  60. data/lib/knj/fs/drivers/ssh.rb +28 -0
  61. data/lib/knj/fs/fs.rb +36 -0
  62. data/lib/knj/gettext_fallback.rb +17 -0
  63. data/lib/knj/gettext_threadded.rb +77 -0
  64. data/lib/knj/google_sitemap.rb +59 -0
  65. data/lib/knj/gtk2.rb +277 -0
  66. data/lib/knj/gtk2_cb.rb +85 -0
  67. data/lib/knj/gtk2_menu.rb +57 -0
  68. data/lib/knj/gtk2_statuswindow.rb +64 -0
  69. data/lib/knj/gtk2_tv.rb +63 -0
  70. data/lib/knj/hash_methods.rb +37 -0
  71. data/lib/knj/http.rb +190 -0
  72. data/lib/knj/includes/appserver_cli.rb +39 -0
  73. data/lib/knj/ip2location.rb +22 -0
  74. data/lib/knj/ironruby-gtk2/button.rb +19 -0
  75. data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
  76. data/lib/knj/ironruby-gtk2/entry.rb +9 -0
  77. data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
  78. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
  79. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
  80. data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
  81. data/lib/knj/ironruby-gtk2/glib.rb +15 -0
  82. data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
  83. data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
  84. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
  85. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
  86. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
  87. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
  88. data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
  89. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
  90. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
  91. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
  92. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
  93. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
  94. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
  95. data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
  96. data/lib/knj/ironruby-gtk2/image.rb +15 -0
  97. data/lib/knj/ironruby-gtk2/label.rb +19 -0
  98. data/lib/knj/ironruby-gtk2/stock.rb +4 -0
  99. data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
  100. data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
  101. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
  102. data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
  103. data/lib/knj/ironruby-gtk2/window.rb +23 -0
  104. data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
  105. data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
  106. data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
  107. data/lib/knj/jruby-gtk2/builder.rb +27 -0
  108. data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
  109. data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
  110. data/lib/knj/jruby-gtk2/combobox.rb +29 -0
  111. data/lib/knj/jruby-gtk2/dialog.rb +44 -0
  112. data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
  113. data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
  114. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  115. data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
  116. data/lib/knj/jruby-gtk2/hbox.rb +10 -0
  117. data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
  118. data/lib/knj/jruby-gtk2/image.rb +10 -0
  119. data/lib/knj/jruby-gtk2/liststore.rb +56 -0
  120. data/lib/knj/jruby-gtk2/menu.rb +40 -0
  121. data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
  122. data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
  123. data/lib/knj/jruby-gtk2/stock.rb +8 -0
  124. data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
  125. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
  126. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
  127. data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
  128. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
  129. data/lib/knj/jruby-gtk2/treeview.rb +105 -0
  130. data/lib/knj/jruby-gtk2/vbox.rb +12 -0
  131. data/lib/knj/jruby-gtk2/window.rb +11 -0
  132. data/lib/knj/jruby_compiler.rb +14 -0
  133. data/lib/knj/knj.rb +19 -0
  134. data/lib/knj/knj_controller.rb +13 -0
  135. data/lib/knj/knjdb/dbtime.rb +30 -0
  136. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
  137. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
  138. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
  139. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
  140. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
  141. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
  142. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
  143. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
  144. data/lib/knj/knjdb/libknjdb.rb +438 -0
  145. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
  146. data/lib/knj/knjdb/libknjdb_row.rb +149 -0
  147. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
  148. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  149. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
  150. data/lib/knj/libqt.rb +75 -0
  151. data/lib/knj/libqt_window.rb +10 -0
  152. data/lib/knj/locale_strings.rb +3 -0
  153. data/lib/knj/locales.rb +54 -0
  154. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
  155. data/lib/knj/mail.rb +75 -0
  156. data/lib/knj/mailobj.rb +82 -0
  157. data/lib/knj/mount.rb +115 -0
  158. data/lib/knj/notify.rb +13 -0
  159. data/lib/knj/nvidia_settings.rb +45 -0
  160. data/lib/knj/objects.rb +731 -0
  161. data/lib/knj/opts.rb +38 -0
  162. data/lib/knj/os.rb +158 -0
  163. data/lib/knj/php.rb +717 -0
  164. data/lib/knj/php_parser/arguments.rb +5 -0
  165. data/lib/knj/php_parser/functions.rb +97 -0
  166. data/lib/knj/php_parser/php_parser.rb +99 -0
  167. data/lib/knj/php_parser/tests/test.rb +12 -0
  168. data/lib/knj/php_parser/tests/test_function.php +8 -0
  169. data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
  170. data/lib/knj/power_manager.rb +31 -0
  171. data/lib/knj/rand.rb +10 -0
  172. data/lib/knj/retry.rb +71 -0
  173. data/lib/knj/rhodes/mutex.rb +11 -0
  174. data/lib/knj/rhodes/rhodes.js +3 -0
  175. data/lib/knj/rhodes/rhodes.rb +11 -0
  176. data/lib/knj/rsvgbin.rb +20 -0
  177. data/lib/knj/scripts/degulesider.rb +12 -0
  178. data/lib/knj/scripts/filesearch.rb +51 -0
  179. data/lib/knj/scripts/ip2location.rb +12 -0
  180. data/lib/knj/scripts/keepalive.rb +6 -0
  181. data/lib/knj/scripts/svn_merge.rb +29 -0
  182. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
  183. data/lib/knj/sms.rb +54 -0
  184. data/lib/knj/sshrobot/sshrobot.rb +93 -0
  185. data/lib/knj/strings.rb +65 -0
  186. data/lib/knj/sysuser.rb +27 -0
  187. data/lib/knj/tests/compiler/compiler_test.rb +13 -0
  188. data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
  189. data/lib/knj/tests/test_degulesider.rb +11 -0
  190. data/lib/knj/tests/test_mount.rb +30 -0
  191. data/lib/knj/tests/test_retry.rb +30 -0
  192. data/lib/knj/thread.rb +32 -0
  193. data/lib/knj/thread2.rb +47 -0
  194. data/lib/knj/threadhandler.rb +130 -0
  195. data/lib/knj/threadpool.rb +177 -0
  196. data/lib/knj/translations.rb +139 -0
  197. data/lib/knj/unix_proc.rb +82 -0
  198. data/lib/knj/web.rb +932 -0
  199. data/lib/knj/webscripts/image.rhtml +82 -0
  200. data/lib/knj/win.rb +4 -0
  201. data/lib/knj/win_registry.rb +60 -0
  202. data/lib/knj/win_tightvnc.rb +127 -0
  203. data/lib/knj/x11vnc.rb +48 -0
  204. data/lib/knj/youtube.rb +38 -0
  205. data/lib/knjrbfw.rb +4 -0
  206. data/spec/knjrbfw_spec.rb +269 -0
  207. data/spec/spec_helper.rb +12 -0
  208. metadata +336 -0
@@ -0,0 +1,33 @@
1
+ class Knj::Fs::Ftp
2
+ def self.args
3
+ return [
4
+ {
5
+ "title" => "Hostname",
6
+ "name" => "texhost"
7
+ },
8
+ {
9
+ "title" => "Port",
10
+ "name" => "texport"
11
+ },
12
+ {
13
+ "title" => "Username",
14
+ "name" => "texusername"
15
+ },
16
+ {
17
+ "title" => "Password",
18
+ "name" => "texpassword",
19
+ "type" => "password"
20
+ },
21
+ {
22
+ "title" => "Passive?",
23
+ "name" => "chepassive",
24
+ "type" => "checkbox"
25
+ }
26
+ ]
27
+ end
28
+
29
+ def initialize(args)
30
+ @args = args
31
+ raise "Stub!"
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ class Knj::Fs::Ssh
2
+ def self.args
3
+ return [
4
+ {
5
+ "title" => "Hostname",
6
+ "name" => "texhostname"
7
+ },
8
+ {
9
+ "title" => "Port",
10
+ "name" => "texport"
11
+ },
12
+ {
13
+ "title" => "Username",
14
+ "name" => "texusername"
15
+ },
16
+ {
17
+ "title" => "Password",
18
+ "name" => "texpassword",
19
+ "type" => "password"
20
+ }
21
+ ]
22
+ end
23
+
24
+ def initialize(args)
25
+ @args = args
26
+ raise "Stub!"
27
+ end
28
+ end
data/lib/knj/fs/fs.rb ADDED
@@ -0,0 +1,36 @@
1
+ class Knj::Fs
2
+ @drivers = []
3
+ drivers_path = Knj::Php.realpath("#{File.dirname(__FILE__)}/drivers")
4
+ Dir.new(drivers_path).each do |file|
5
+ fn = "#{drivers_path}/#{file}"
6
+ next if file == "." or file == ".." or File.directory?(fn)
7
+
8
+ class_name = Knj::Php.ucwords(file.slice(0..-4)).to_sym
9
+ print "Classname: #{class_name}\n"
10
+ autoload class_name, fn
11
+
12
+ @drivers << {
13
+ :name => file.slice(0..-4),
14
+ :args => const_get(class_name).args
15
+ }
16
+ end
17
+
18
+ def self.drivers
19
+ return @drivers
20
+ end
21
+
22
+ def initialize(args = {})
23
+ @args = args
24
+ end
25
+
26
+ def spawn_driver
27
+ class_name = Knj::Php.ucwords(@args[:driver])
28
+ @driver = self.class.const_get(class_name).new(:fs => self, :args => @args)
29
+ end
30
+ end
31
+
32
+ class Knj::Fs::File
33
+ def initialize
34
+
35
+ end
36
+ end
@@ -0,0 +1,17 @@
1
+ module GetText
2
+ def self._(string)
3
+ return string
4
+ end
5
+
6
+ def _(string)
7
+ return string
8
+ end
9
+
10
+ def gettext(string)
11
+ return string
12
+ end
13
+
14
+ def bindtextdomain(temp1 = nil, temp2 = nil, temp3 = nil)
15
+ #nothing here.
16
+ end
17
+ end
@@ -0,0 +1,77 @@
1
+ class Knj::Gettext_threadded
2
+ attr_reader :langs, :args
3
+
4
+ def initialize(args = {})
5
+ @args = args
6
+ @langs = {}
7
+ @dirs = []
8
+ load_dir(@args["dir"]) if @args["dir"]
9
+ end
10
+
11
+ def load_dir(dir)
12
+ @dirs << dir
13
+ check_folders = ["LC_MESSAGES", "LC_ALL"]
14
+
15
+ Dir.new(dir).each do |file|
16
+ fn = "#{dir}/#{file}"
17
+ if File.directory?(fn) and file.match(/^[a-z]{2}_[A-Z]{2}$/)
18
+ @langs[file] = {} if !@langs[file]
19
+
20
+ check_folders.each do |fname|
21
+ fpath = "#{dir}/#{file}/#{fname}"
22
+
23
+ if File.exists?(fpath) and File.directory?(fpath)
24
+ Dir.new(fpath).each do |pofile|
25
+ if pofile.match(/\.po$/)
26
+ pofn = "#{dir}/#{file}/#{fname}/#{pofile}"
27
+ cont = File.read(pofn)
28
+ cont.scan(/msgid\s+\"(.+)\"\nmsgstr\s+\"(.+)\"\n\n/) do |match|
29
+ @langs[file][match[0]] = match[1]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ def trans(locale, str)
40
+ locale = locale.to_s
41
+ str = str.to_s
42
+
43
+ if !@langs.has_key?(locale)
44
+ raise "Locale was not found: '#{locale}' in '#{@langs.keys.join(", ")}'."
45
+ end
46
+
47
+ return str if !@langs[locale].has_key?(str)
48
+ return @langs[locale][str]
49
+ end
50
+
51
+ #This function can be used to make your string be recognized by gettext tools.
52
+ def gettext(str, locale)
53
+ return trans(locale, str)
54
+ end
55
+
56
+ def lang_opts
57
+ langs = {}
58
+ @langs.keys.sort.each do |lang|
59
+ title = nil
60
+
61
+ @dirs.each do |dir|
62
+ title_file_path = "#{dir}/#{lang}/title.txt"
63
+ if File.exists?(title_file_path)
64
+ title = File.read(title_file_path).to_s.strip
65
+ else
66
+ title = lang.strip
67
+ end
68
+
69
+ break if title
70
+ end
71
+
72
+ langs[lang] = title
73
+ end
74
+
75
+ return langs
76
+ end
77
+ end
@@ -0,0 +1,59 @@
1
+ class Knj::Google_sitemap
2
+ attr_reader :doc
3
+
4
+ def initialize(args = {})
5
+ @args = args
6
+
7
+ #used for Time.iso8601.
8
+ require "time"
9
+
10
+ @doc = REXML::Document.new
11
+ @doc << REXML::XMLDecl.new("1.0", "UTF-8")
12
+
13
+ @urlset = @doc.add_element("urlset")
14
+ @urlset.add_attributes("xmlns" => "http://www.sitemaps.org/schemas/sitemap/0.9")
15
+ end
16
+
17
+ def add_url(url_value, lastmod_value, cf_value = nil, priority_value = nil)
18
+ el = REXML::Element.new("url")
19
+
20
+ loc = el.add_element("loc")
21
+ loc.text = url_value
22
+
23
+ if !lastmod_value or lastmod_value.to_i == 0
24
+ raise sprintf("Invalid date: %1$s, url: %2$s", lastmod_value.to_s, url_value)
25
+ end
26
+
27
+ lm = el.add_element("lastmod")
28
+ if @args.has_key?(:date_min) and @args[:date_min] > lastmod_value
29
+ lastmod_value = @args[:date_min]
30
+ end
31
+
32
+ lm.text = lastmod_value.iso8601
33
+
34
+ if cf_value
35
+ cf = el.add_element("changefreq")
36
+ cf.text = cf_value
37
+ end
38
+
39
+ if priority_value
40
+ priority = el.add_element("priority")
41
+ priority.text = priority_value
42
+ end
43
+
44
+ @doc.root << el
45
+ end
46
+
47
+ def to_xml
48
+ return @doc.to_s
49
+ end
50
+
51
+ def to_s
52
+ return @doc.to_s
53
+ end
54
+
55
+ def write
56
+ writer = REXML::Formatters::Pretty.new(5)
57
+ writer.write(@doc, $stdout)
58
+ end
59
+ end
data/lib/knj/gtk2.rb ADDED
@@ -0,0 +1,277 @@
1
+ module Knj::Gtk2
2
+ autoload :Cb, "knj/gtk2_cb"
3
+ autoload :Menu, "knj/gtk2_menu"
4
+ autoload :StatusWindow, "knj/gtk2_statuswindow"
5
+ autoload :Tv, "knj/gtk2_tv"
6
+
7
+ def msgbox(p1, p2 = "warning", p3 = "Warning")
8
+ return Knj::Gtk2.msgbox(p1, p2, p3)
9
+ end
10
+
11
+ def self.msgbox(paras, type = "warning", title = nil)
12
+ if paras.is_a?(Array)
13
+ msg = paras[0]
14
+ title = paras[2]
15
+ type = paras[1]
16
+ elsif paras.is_a?(Hash)
17
+ msg = paras["msg"]
18
+ title = paras["title"]
19
+ type = paras["type"]
20
+ elsif paras.is_a?(String) or paras.is_a?(Integer)
21
+ msg = paras
22
+ else
23
+ raise "Cant handle the parameters: " + paras.class.to_s
24
+ end
25
+
26
+ type = "info" if !type
27
+
28
+ if !title
29
+ if type == "yesno"
30
+ title = "Question"
31
+ elsif type == "info"
32
+ title = "Message"
33
+ else
34
+ title = "Warning"
35
+ end
36
+ end
37
+
38
+ close_sig = "close"
39
+ cancel_sig = "cancel"
40
+ ok_sig = "ok"
41
+ yes_sig = "yes"
42
+ no_sig = "no"
43
+
44
+ box = Gtk::HBox.new
45
+
46
+ if type == "yesno"
47
+ button1 = [Gtk::Stock::YES, Gtk::Dialog::RESPONSE_YES]
48
+ button2 = [Gtk::Stock::NO, Gtk::Dialog::RESPONSE_NO]
49
+
50
+ image = Gtk::Image.new(Gtk::Stock::DIALOG_QUESTION, Gtk::IconSize::DIALOG)
51
+ elsif type == "warning"
52
+ button1 = [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK]
53
+ image = Gtk::Image.new(Gtk::Stock::DIALOG_WARNING, Gtk::IconSize::DIALOG)
54
+ elsif type == "info"
55
+ button1 = [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK]
56
+ image = Gtk::Image.new(Gtk::Stock::DIALOG_INFO, Gtk::IconSize::DIALOG)
57
+ elsif type == "list"
58
+ close_sig = false
59
+ cancel_sig = false
60
+
61
+ button1 = [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK]
62
+
63
+ tv = Gtk::TreeView.new
64
+ tv.init([_("ID"), _("Title")])
65
+ tv.columns[0].visible = false
66
+
67
+ if paras["items"].is_a?(Hash)
68
+ paras["items"].each do |key, value|
69
+ tv.append([key, value])
70
+ end
71
+ elsif paras["items"].is_a?(Array)
72
+ count = 0
73
+ paras["items"].each do |element|
74
+ if element.respond_to?("id") and element.respond_to?("title")
75
+ tv.append([count.to_s, element.title])
76
+ else
77
+ raise "Could not handle object in array: " + element.class.to_s
78
+ end
79
+
80
+ count += 1
81
+ end
82
+ else
83
+ raise "Unhandeled class: " + items.class.to_s
84
+ end
85
+
86
+ sw = Gtk::ScrolledWindow.new
87
+ sw.add(tv)
88
+
89
+ box.pack_start(sw)
90
+ else
91
+ raise "No such mode: " + type
92
+ end
93
+
94
+ if button1 and button2
95
+ dialog = Gtk::Dialog.new(title, nil, Gtk::Dialog::MODAL, button1, button2)
96
+ else
97
+ dialog = Gtk::Dialog.new(title, nil, Gtk::Dialog::MODAL, button1)
98
+ end
99
+
100
+ if image
101
+ box.pack_start(image)
102
+ end
103
+
104
+ if msg
105
+ box.pack_start(Gtk::Label.new(msg))
106
+ end
107
+
108
+ box.spacing = 15
109
+ dialog.border_width = 5
110
+ dialog.vbox.add(box)
111
+ dialog.has_separator = false
112
+ dialog.show_all
113
+
114
+ if type == "list"
115
+ dialog.set_size_request(250, 370)
116
+ tv.grab_focus
117
+ end
118
+
119
+ response = dialog.run
120
+
121
+ if type == "list"
122
+ sel = tv.sel
123
+
124
+ if sel and sel[0]
125
+ if paras["items"].is_a?(Array) and paras["items"].length > 0 and sel and sel[0]
126
+ trala = sel[0].to_i
127
+ ok_sig = paras["items"][sel[0].to_i]
128
+ else
129
+ ok_sig = sel[0]
130
+ end
131
+ else
132
+ ok_sig = false
133
+ end
134
+ end
135
+
136
+ dialog.destroy
137
+
138
+ if response == Gtk::Dialog::RESPONSE_OK
139
+ return ok_sig
140
+ elsif response == Gtk::Dialog::RESPONSE_YES
141
+ return yes_sig
142
+ elsif response == Gtk::Dialog::RESPONSE_NO
143
+ return no_sig
144
+ elsif response == Gtk::Dialog::RESPONSE_CANCEL
145
+ return cancel_sig
146
+ elsif response == Gtk::Dialog::RESPONSE_CLOSE or response == Gtk::Dialog::RESPONSE_DELETE_EVENT
147
+ return close_sig
148
+ else
149
+ raise "Unknown response: " + response.to_s
150
+ end
151
+ end
152
+
153
+ def self.translate(builderob)
154
+ builderob.objects.each do |object|
155
+ class_str = object.class.to_s
156
+
157
+ if object.is_a?(Gtk::Label) or object.is_a?(Gtk::Button)
158
+ object.label = GetText.gettext(object.label)
159
+ elsif object.is_a?(Gtk::Window)
160
+ object.title = GetText.gettext(object.title)
161
+ end
162
+ end
163
+ end
164
+
165
+ def self.form(paras)
166
+ table = Gtk::Table.new(paras.length, 2)
167
+ table.row_spacings = 4
168
+ table.column_spacings = 4
169
+ top = 0
170
+ objects = {}
171
+
172
+ paras.each do |item|
173
+ if !item["type"]
174
+ if item["name"][0..2] == "txt" or item["name"][0..2] == "tex"
175
+ item["type"] = "text"
176
+ elsif item["name"][0..2] == "sel"
177
+ item["type"] = "select"
178
+ elsif item["name"][0..2] == "che"
179
+ item["type"] = "check"
180
+ else
181
+ raise "Could not figure out type for: " + item["name"]
182
+ end
183
+ end
184
+
185
+ if item["type"] == "text" or item["type"] == "password"
186
+ label = Gtk::Label.new(item["title"])
187
+ label.xalign = 0
188
+ text = Gtk::Entry.new
189
+
190
+ if item["type"] == "password"
191
+ text.visibility = false
192
+ end
193
+
194
+ if item["default"]
195
+ text.text = item["default"]
196
+ end
197
+
198
+ table.attach(label, 0, 1, top, top + 1, Gtk::FILL, Gtk::FILL)
199
+ table.attach(text, 1, 2, top, top + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK)
200
+
201
+ objects[item["name"]] = {
202
+ "type" => "text",
203
+ "object" => text
204
+ }
205
+ elsif item["type"] == "check"
206
+ check = Gtk::CheckButton.new(item["title"])
207
+ table.attach(check, 0, 2, top, top + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK)
208
+
209
+ objects[item["name"]] = {
210
+ "type" => "check",
211
+ "object" => check
212
+ }
213
+ elsif item["type"] == "select"
214
+ label = Gtk::Label.new(item["title"])
215
+ label.xalign = 0
216
+
217
+ cb = Gtk::ComboBox.new
218
+ cb.init(item["opts"])
219
+
220
+ table.attach(label, 0, 1, top, top + 1, Gtk::FILL, Gtk::FILL)
221
+ table.attach(cb, 1, 2, top, top + 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK)
222
+
223
+ objects[item["name"]] = {
224
+ "type" => "text",
225
+ "object" => cb
226
+ }
227
+ else
228
+ raise "Unknown type: " + item["type"]
229
+ end
230
+
231
+
232
+ top += 1
233
+ end
234
+
235
+ return {
236
+ "table" => table,
237
+ "objects" => objects
238
+ }
239
+ end
240
+
241
+ def self.form_setval(object, val)
242
+ if object.is_a?(Gtk::Entry)
243
+ object.text = val.to_s
244
+ elsif object.is_a?(Gtk::CheckButton)
245
+ if (val.to_s == "1")
246
+ object.active = true
247
+ else
248
+ object.active = false
249
+ end
250
+ elsif object.is_a?(Gtk::ComboBox)
251
+ object.sel = val.to_s
252
+ end
253
+ end
254
+
255
+ def self.form_getval(object)
256
+ if object.is_a?(Gtk::Entry)
257
+ return object.text
258
+ elsif object.is_a?(Gtk::CheckButton)
259
+ if (object.active?)
260
+ return "1"
261
+ else
262
+ return "0"
263
+ end
264
+ elsif object.is_a?(Gtk::ComboBox)
265
+ sel = object.sel
266
+ return sel["text"]
267
+ else
268
+ raise "Unknown object: #{object.class.name}"
269
+ end
270
+ end
271
+ end
272
+
273
+ class Gtk::Builder
274
+ def translate
275
+ return Knj::Gtk2.translate(self)
276
+ end
277
+ end
@@ -0,0 +1,85 @@
1
+ module Knj::Gtk2::Cb
2
+ def self.init(paras)
3
+ return paras["cb"].init(paras["items"])
4
+ end
5
+
6
+ def self.sel(cb)
7
+ return cb.sel
8
+ end
9
+ end
10
+
11
+ class Gtk::ComboBox
12
+ def init(items)
13
+ @knj = {
14
+ "items" => []
15
+ }
16
+
17
+ ls = Gtk::ListStore.new(String, String)
18
+ cr = Gtk::CellRendererText.new
19
+ self.pack_start(cr, false)
20
+ self.add_attribute(cr, "text", 0)
21
+
22
+ if items.is_a?(Array)
23
+ items.each do |appendob|
24
+ iter = ls.append
25
+
26
+ if appendob.is_a?(String)
27
+ iter[0] = appendob
28
+ elsif appendob.respond_to?("is_knj?")
29
+ iter[0] = appendob.title
30
+ @knj["items"] << {
31
+ "iter" => iter,
32
+ "object" => appendob
33
+ }
34
+ end
35
+ end
36
+ else
37
+ raise "Unsupported type: " + items.class.to_s
38
+ end
39
+
40
+ self.model = ls
41
+
42
+ self.active = 0
43
+ end
44
+
45
+ def sel
46
+ iter = self.active_iter
47
+
48
+ if @knj["items"].length > 0
49
+ @knj["items"].each do |item|
50
+ if item["iter"] == iter
51
+ return item["object"]
52
+ end
53
+ end
54
+
55
+ return false
56
+ else
57
+ return {
58
+ "active" => self.active,
59
+ "text" => iter[0]
60
+ }
61
+ end
62
+ end
63
+
64
+ def sel=(actob)
65
+ if actob.respond_to?("is_knj?")
66
+ @knj["items"].each do |item|
67
+ if item["object"].id == actob.id
68
+ self.active_iter = item["iter"]
69
+ return nil
70
+ end
71
+ end
72
+ else
73
+ self.model.each do |model, path, iter|
74
+ text = self.model.get_value(iter, 0)
75
+
76
+ if text == actob
77
+ self.active_iter = iter
78
+ return nil
79
+ end
80
+ end
81
+ end
82
+
83
+ raise "Could not find such a row: " + textval
84
+ end
85
+ end
@@ -0,0 +1,57 @@
1
+ class Knj::Gtk2::Menu
2
+ def initialize(paras)
3
+ @paras = paras
4
+ @items = []
5
+ @mainmenu = Gtk::Menu.new
6
+ @signal = ""
7
+
8
+ count = 0
9
+ if @paras["items"].respond_to?("reverse")
10
+ items = @paras["items"].reverse
11
+ else
12
+ items = @paras["items"]
13
+ end
14
+
15
+ if items.is_a?(Array)
16
+ items = Knj::ArrayExt.dict(items)
17
+ end
18
+
19
+ items.each do |signal, menuitem|
20
+ if menuitem.is_a?(Array)
21
+ old_mi = menuitem
22
+ menuitem = {"text" => menuitem[0], "connect" => menuitem[1]}
23
+ end
24
+
25
+ newitem = Gtk::MenuItem.new(menuitem["text"])
26
+
27
+ if menuitem["connect"]
28
+ newitem.signal_connect("activate") do
29
+ Knj::Php.call_user_func(menuitem["connect"])
30
+ end
31
+ else
32
+ newitem.signal_connect("activate") do
33
+ on_menuitem_activate
34
+ end
35
+ end
36
+
37
+ @items[count] = {
38
+ "gtkmenuitem" => newitem,
39
+ "signal" => signal
40
+ }
41
+ @mainmenu.prepend(newitem)
42
+
43
+ count += 1
44
+ end
45
+
46
+ event = Gdk::EventButton.new(Gdk::Event::BUTTON_PRESS)
47
+
48
+ @mainmenu.show_all
49
+ @mainmenu.popup(nil, nil, event.button, event.time)
50
+ end
51
+
52
+ def on_menuitem_activate(signal)
53
+ @signal = signal
54
+ end
55
+
56
+ def signal() return @signal end
57
+ end