knjrbfw 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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