ffi-tk 2010.08.23 → 2018.02.20

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 (199) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +7 -0
  4. data/.rubocop_todo.yml +371 -0
  5. data/AUTHORS +4 -2
  6. data/CHANGELOG +302 -262
  7. data/Gemfile +10 -0
  8. data/Gemfile.lock +45 -0
  9. data/MANIFEST +6 -6
  10. data/README.md +1 -1
  11. data/Rakefile +12 -11
  12. data/bin/rwish +6 -5
  13. data/example/choose_color.rb +5 -4
  14. data/example/choose_directory.rb +5 -4
  15. data/example/dialog.rb +9 -8
  16. data/example/hello.rb +2 -1
  17. data/example/message_box.rb +8 -5
  18. data/example/option_menu.rb +4 -3
  19. data/example/popup.rb +4 -3
  20. data/example/set_palette.rb +5 -4
  21. data/example/text.rb +30 -30
  22. data/example/tile/kroc_demo_small.rb +51 -55
  23. data/example/tile/kroc_rb_demo.rb +74 -83
  24. data/example/tile/notebook.rb +6 -9
  25. data/example/tile/theme_hello.rb +6 -8
  26. data/example/tile/themes.rb +4 -2
  27. data/example/tile/treeview.rb +16 -14
  28. data/example/tkgo.rb +120 -88
  29. data/example/various.rb +8 -7
  30. data/example/wait.rb +3 -2
  31. data/ffi-tk.gemspec +21 -20
  32. data/gemset.nix +134 -0
  33. data/lib/ffi-tk.rb +10 -11
  34. data/lib/ffi-tk/command.rb +3 -2
  35. data/lib/ffi-tk/command/after.rb +8 -7
  36. data/lib/ffi-tk/command/bell.rb +2 -1
  37. data/lib/ffi-tk/command/bind.rb +1 -0
  38. data/lib/ffi-tk/command/bindtags.rb +1 -0
  39. data/lib/ffi-tk/command/cget.rb +31 -24
  40. data/lib/ffi-tk/command/choose_color.rb +2 -1
  41. data/lib/ffi-tk/command/choose_directory.rb +2 -1
  42. data/lib/ffi-tk/command/clipboard.rb +6 -5
  43. data/lib/ffi-tk/command/configure.rb +23 -21
  44. data/lib/ffi-tk/command/destroy.rb +2 -1
  45. data/lib/ffi-tk/command/dialog.rb +4 -3
  46. data/lib/ffi-tk/command/event.rb +1 -0
  47. data/lib/ffi-tk/command/focus.rb +2 -1
  48. data/lib/ffi-tk/command/font.rb +12 -9
  49. data/lib/ffi-tk/command/get_open_file.rb +1 -0
  50. data/lib/ffi-tk/command/get_save_file.rb +1 -0
  51. data/lib/ffi-tk/command/grab.rb +2 -1
  52. data/lib/ffi-tk/command/grid.rb +7 -6
  53. data/lib/ffi-tk/command/image.rb +5 -4
  54. data/lib/ffi-tk/command/lower.rb +1 -0
  55. data/lib/ffi-tk/command/message_box.rb +2 -1
  56. data/lib/ffi-tk/command/option_menu.rb +3 -2
  57. data/lib/ffi-tk/command/pack.rb +5 -4
  58. data/lib/ffi-tk/command/place.rb +5 -4
  59. data/lib/ffi-tk/command/popup.rb +2 -1
  60. data/lib/ffi-tk/command/raise.rb +1 -0
  61. data/lib/ffi-tk/command/scrollable.rb +7 -10
  62. data/lib/ffi-tk/command/selection.rb +4 -3
  63. data/lib/ffi-tk/command/set_palette.rb +2 -1
  64. data/lib/ffi-tk/command/tk_cmd.rb +1 -0
  65. data/lib/ffi-tk/command/vars.rb +2 -1
  66. data/lib/ffi-tk/command/wait.rb +2 -1
  67. data/lib/ffi-tk/command/winfo.rb +9 -8
  68. data/lib/ffi-tk/command/wm.rb +11 -10
  69. data/lib/ffi-tk/core_extensions.rb +5 -4
  70. data/lib/ffi-tk/event/data.rb +32 -31
  71. data/lib/ffi-tk/event/handler.rb +4 -3
  72. data/lib/ffi-tk/ffi/tcl.rb +42 -31
  73. data/lib/ffi-tk/ffi/tcl/cmd_proc.rb +2 -1
  74. data/lib/ffi-tk/ffi/tcl/eval_result.rb +47 -8
  75. data/lib/ffi-tk/ffi/tcl/interp.rb +7 -4
  76. data/lib/ffi-tk/ffi/tcl/obj.rb +7 -32
  77. data/lib/ffi-tk/ffi/tcl/time.rb +2 -1
  78. data/lib/ffi-tk/ffi/tk.rb +8 -7
  79. data/lib/ffi-tk/geometry.rb +20 -17
  80. data/lib/ffi-tk/thread_sender.rb +1 -0
  81. data/lib/ffi-tk/tk.rb +23 -23
  82. data/lib/ffi-tk/variable.rb +25 -3
  83. data/lib/ffi-tk/version.rb +1 -1
  84. data/lib/ffi-tk/widget.rb +2 -1
  85. data/lib/ffi-tk/widget/button.rb +4 -1
  86. data/lib/ffi-tk/widget/canvas.rb +18 -15
  87. data/lib/ffi-tk/widget/canvas/arc.rb +2 -1
  88. data/lib/ffi-tk/widget/canvas/bitmap.rb +2 -1
  89. data/lib/ffi-tk/widget/canvas/image.rb +2 -1
  90. data/lib/ffi-tk/widget/canvas/item.rb +4 -4
  91. data/lib/ffi-tk/widget/canvas/line.rb +2 -1
  92. data/lib/ffi-tk/widget/canvas/oval.rb +2 -1
  93. data/lib/ffi-tk/widget/canvas/polygon.rb +2 -1
  94. data/lib/ffi-tk/widget/canvas/rectangle.rb +2 -1
  95. data/lib/ffi-tk/widget/canvas/text.rb +2 -1
  96. data/lib/ffi-tk/widget/canvas/window.rb +2 -1
  97. data/lib/ffi-tk/widget/checkbutton.rb +4 -1
  98. data/lib/ffi-tk/widget/entry.rb +4 -1
  99. data/lib/ffi-tk/widget/frame.rb +4 -1
  100. data/lib/ffi-tk/widget/label.rb +4 -1
  101. data/lib/ffi-tk/widget/labelframe.rb +4 -1
  102. data/lib/ffi-tk/widget/listbox.rb +5 -2
  103. data/lib/ffi-tk/widget/menu.rb +4 -1
  104. data/lib/ffi-tk/widget/menubutton.rb +4 -1
  105. data/lib/ffi-tk/widget/message.rb +4 -1
  106. data/lib/ffi-tk/widget/panedwindow.rb +5 -2
  107. data/lib/ffi-tk/widget/radiobutton.rb +4 -1
  108. data/lib/ffi-tk/widget/root.rb +1 -0
  109. data/lib/ffi-tk/widget/scale.rb +4 -1
  110. data/lib/ffi-tk/widget/scrollbar.rb +4 -1
  111. data/lib/ffi-tk/widget/spinbox.rb +4 -1
  112. data/lib/ffi-tk/widget/text.rb +20 -16
  113. data/lib/ffi-tk/widget/text/peer.rb +1 -0
  114. data/lib/ffi-tk/widget/tile.rb +2 -1
  115. data/lib/ffi-tk/widget/tile/button.rb +4 -1
  116. data/lib/ffi-tk/widget/tile/checkbutton.rb +4 -1
  117. data/lib/ffi-tk/widget/tile/combobox.rb +5 -2
  118. data/lib/ffi-tk/widget/tile/entry.rb +4 -1
  119. data/lib/ffi-tk/widget/tile/frame.rb +4 -1
  120. data/lib/ffi-tk/widget/tile/label.rb +4 -2
  121. data/lib/ffi-tk/widget/tile/labelframe.rb +4 -1
  122. data/lib/ffi-tk/widget/tile/menubutton.rb +4 -1
  123. data/lib/ffi-tk/widget/tile/notebook.rb +4 -1
  124. data/lib/ffi-tk/widget/tile/panedwindow.rb +4 -1
  125. data/lib/ffi-tk/widget/tile/progressbar.rb +4 -2
  126. data/lib/ffi-tk/widget/tile/radiobutton.rb +4 -1
  127. data/lib/ffi-tk/widget/tile/scale.rb +4 -1
  128. data/lib/ffi-tk/widget/tile/scrollbar.rb +7 -4
  129. data/lib/ffi-tk/widget/tile/separator.rb +4 -1
  130. data/lib/ffi-tk/widget/tile/sizegrip.rb +4 -1
  131. data/lib/ffi-tk/widget/tile/style.rb +16 -17
  132. data/lib/ffi-tk/widget/tile/treeview.rb +11 -5
  133. data/lib/ffi-tk/widget/toplevel.rb +4 -1
  134. data/shell.nix +19 -0
  135. data/spec/ffi-tk/command/bind.rb +5 -4
  136. data/spec/ffi-tk/command/bindtags.rb +2 -1
  137. data/spec/ffi-tk/command/clipboard.rb +4 -3
  138. data/spec/ffi-tk/command/font.rb +20 -19
  139. data/spec/ffi-tk/command/image.rb +13 -5
  140. data/spec/ffi-tk/command/pack.rb +3 -2
  141. data/spec/ffi-tk/command/place.rb +4 -3
  142. data/spec/ffi-tk/command/selection.rb +2 -1
  143. data/spec/ffi-tk/command/vars.rb +3 -2
  144. data/spec/ffi-tk/command/winfo.rb +10 -10
  145. data/spec/ffi-tk/command/wm.rb +23 -22
  146. data/spec/ffi-tk/event.rb +23 -21
  147. data/spec/ffi-tk/tile/button.rb +8 -8
  148. data/spec/ffi-tk/tile/checkbutton.rb +1 -1
  149. data/spec/ffi-tk/tile/combobox.rb +11 -12
  150. data/spec/ffi-tk/tile/entry.rb +18 -19
  151. data/spec/ffi-tk/tile/frame.rb +13 -13
  152. data/spec/ffi-tk/tile/label.rb +2 -2
  153. data/spec/ffi-tk/tile/labelframe.rb +1 -1
  154. data/spec/ffi-tk/tile/menubutton.rb +1 -1
  155. data/spec/ffi-tk/tile/notebook.rb +22 -20
  156. data/spec/ffi-tk/tile/panedwindow.rb +1 -1
  157. data/spec/ffi-tk/tile/progressbar.rb +1 -1
  158. data/spec/ffi-tk/tile/radiobutton.rb +1 -1
  159. data/spec/ffi-tk/tile/scale.rb +1 -1
  160. data/spec/ffi-tk/tile/scrollbar.rb +1 -16
  161. data/spec/ffi-tk/tile/separator.rb +2 -2
  162. data/spec/ffi-tk/tile/sizegrip.rb +1 -1
  163. data/spec/ffi-tk/tile/style.rb +63 -65
  164. data/spec/ffi-tk/tile/treeview.rb +11 -10
  165. data/spec/ffi-tk/variable.rb +5 -4
  166. data/spec/ffi-tk/widget/button.rb +3 -2
  167. data/spec/ffi-tk/widget/canvas.rb +59 -58
  168. data/spec/ffi-tk/widget/checkbutton.rb +6 -5
  169. data/spec/ffi-tk/widget/entry.rb +112 -103
  170. data/spec/ffi-tk/widget/frame.rb +2 -1
  171. data/spec/ffi-tk/widget/label.rb +2 -1
  172. data/spec/ffi-tk/widget/labelframe.rb +1 -0
  173. data/spec/ffi-tk/widget/listbox.rb +5 -4
  174. data/spec/ffi-tk/widget/menu.rb +3 -2
  175. data/spec/ffi-tk/widget/menubutton.rb +1 -0
  176. data/spec/ffi-tk/widget/message.rb +1 -0
  177. data/spec/ffi-tk/widget/panedwindow.rb +1 -0
  178. data/spec/ffi-tk/widget/radiobutton.rb +1 -0
  179. data/spec/ffi-tk/widget/root.rb +2 -1
  180. data/spec/ffi-tk/widget/scale.rb +1 -0
  181. data/spec/ffi-tk/widget/scrollbar.rb +1 -0
  182. data/spec/ffi-tk/widget/spinbox.rb +1 -0
  183. data/spec/ffi-tk/widget/text.rb +63 -54
  184. data/spec/ffi-tk/widget/toplevel.rb +1 -0
  185. data/spec/helper.rb +3 -1
  186. data/tasks/authors.rake +3 -2
  187. data/tasks/bacon.rake +13 -11
  188. data/tasks/changelog.rake +1 -0
  189. data/tasks/gem.rake +13 -11
  190. data/tasks/manifest.rake +2 -1
  191. data/tasks/release.rake +11 -32
  192. data/tasks/reversion.rake +2 -1
  193. metadata +52 -75
  194. data/spec/ffi-tk/command/grid.rb +0 -6
  195. data/tasks/gem_setup.rake +0 -113
  196. data/tasks/grancher.rake +0 -12
  197. data/tasks/rcov.rake +0 -17
  198. data/tasks/setup.rake +0 -12
  199. data/tasks/ycov.rake +0 -84
@@ -0,0 +1,134 @@
1
+ {
2
+ ast = {
3
+ source = {
4
+ remotes = ["https://rubygems.org"];
5
+ sha256 = "0pp82blr5fakdk27d1d21xq9zchzb6vmyb1zcsl520s3ygvprn8m";
6
+ type = "gem";
7
+ };
8
+ version = "2.3.0";
9
+ };
10
+ bacon = {
11
+ source = {
12
+ remotes = ["https://rubygems.org"];
13
+ sha256 = "1f06gdj77bmwzc1k5iragl1595hbn67yc7sqvs56ca8plrr2vmai";
14
+ type = "gem";
15
+ };
16
+ version = "1.2.0";
17
+ };
18
+ coderay = {
19
+ source = {
20
+ remotes = ["https://rubygems.org"];
21
+ sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
22
+ type = "gem";
23
+ };
24
+ version = "1.1.2";
25
+ };
26
+ docile = {
27
+ source = {
28
+ remotes = ["https://rubygems.org"];
29
+ sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
30
+ type = "gem";
31
+ };
32
+ version = "1.1.5";
33
+ };
34
+ ffi = {
35
+ source = {
36
+ remotes = ["https://rubygems.org"];
37
+ sha256 = "1nkcrmxqr0vb1y4rwliclwlj2ajsi4ddpdx2gvzjy0xbkk5iqzfp";
38
+ type = "gem";
39
+ };
40
+ version = "1.9.14";
41
+ };
42
+ json = {
43
+ source = {
44
+ remotes = ["https://rubygems.org"];
45
+ sha256 = "1lhinj9vj7mw59jqid0bjn2hlfcnq02bnvsx9iv81nl2han603s0";
46
+ type = "gem";
47
+ };
48
+ version = "2.0.2";
49
+ };
50
+ method_source = {
51
+ source = {
52
+ remotes = ["https://rubygems.org"];
53
+ sha256 = "0xqj21j3vfq4ldia6i2akhn2qd84m0iqcnsl49kfpq3xk6x0dzgn";
54
+ type = "gem";
55
+ };
56
+ version = "0.9.0";
57
+ };
58
+ parser = {
59
+ dependencies = ["ast"];
60
+ source = {
61
+ remotes = ["https://rubygems.org"];
62
+ sha256 = "1nply96nqrkgx8d3jay31sfy5p4q74dg8ymln0mdazxx5cz2n8bq";
63
+ type = "gem";
64
+ };
65
+ version = "2.3.3.1";
66
+ };
67
+ powerpack = {
68
+ source = {
69
+ remotes = ["https://rubygems.org"];
70
+ sha256 = "1fnn3fli5wkzyjl4ryh0k90316shqjfnhydmc7f8lqpi0q21va43";
71
+ type = "gem";
72
+ };
73
+ version = "0.1.1";
74
+ };
75
+ pry = {
76
+ dependencies = ["coderay" "method_source"];
77
+ source = {
78
+ remotes = ["https://rubygems.org"];
79
+ sha256 = "1mh312k3y94sj0pi160wpia0ps8f4kmzvm505i6bvwynfdh7v30g";
80
+ type = "gem";
81
+ };
82
+ version = "0.11.3";
83
+ };
84
+ rainbow = {
85
+ source = {
86
+ remotes = ["https://rubygems.org"];
87
+ sha256 = "0frz90gyi5k26jx3ham1x661hpkxf82rkxb85nakcz70dna7i8ri";
88
+ type = "gem";
89
+ };
90
+ version = "2.2.1";
91
+ };
92
+ rubocop = {
93
+ dependencies = ["parser" "powerpack" "rainbow" "ruby-progressbar" "unicode-display_width"];
94
+ source = {
95
+ remotes = ["https://rubygems.org"];
96
+ sha256 = "0604qa0s0xcq0avnh9aa6iw58azpz6a7bavcs0ch61xnaz0qfl0c";
97
+ type = "gem";
98
+ };
99
+ version = "0.46.0";
100
+ };
101
+ ruby-progressbar = {
102
+ source = {
103
+ remotes = ["https://rubygems.org"];
104
+ sha256 = "1qzc7s7r21bd7ah06kskajc2bjzkr9y0v5q48y0xwh2l55axgplm";
105
+ type = "gem";
106
+ };
107
+ version = "1.8.1";
108
+ };
109
+ simplecov = {
110
+ dependencies = ["docile" "json" "simplecov-html"];
111
+ source = {
112
+ remotes = ["https://rubygems.org"];
113
+ sha256 = "0ffhyrfnq2zm2mc1742a4hqy475g3qa1zf6yfldwg1ldh5sn3qbx";
114
+ type = "gem";
115
+ };
116
+ version = "0.12.0";
117
+ };
118
+ simplecov-html = {
119
+ source = {
120
+ remotes = ["https://rubygems.org"];
121
+ sha256 = "1qni8g0xxglkx25w54qcfbi4wjkpvmb28cb7rj5zk3iqynjcdrqf";
122
+ type = "gem";
123
+ };
124
+ version = "0.10.0";
125
+ };
126
+ unicode-display_width = {
127
+ source = {
128
+ remotes = ["https://rubygems.org"];
129
+ sha256 = "0lfkyv3c6nyy96jv8wvy33x6g1gmigbm1ficpb2mzhyk07assrnr";
130
+ type = "gem";
131
+ };
132
+ version = "1.1.2";
133
+ };
134
+ }
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'thread'
2
3
  require 'ffi'
3
4
 
@@ -7,7 +8,9 @@ module Tk
7
8
  TCL_LIBPATH = ENV['TCL_LIBPATH'].to_s.split(':')
8
9
  TK_LIBPATH = ENV[ 'TK_LIBPATH'].to_s.split(':')
9
10
 
10
- if FFI::Platform.mac?
11
+ HOST_OS = RbConfig::CONFIG['host_os']
12
+
13
+ if HOST_OS =~ /darwin/
11
14
  if ENV['NO_AQUA'] || ENV['USE_X11'] # macports-x11 libtk
12
15
  TCL_LIBPATH << '/opt/local/lib/libtcl8.5.dylib'
13
16
  TK_LIBPATH << '/opt/local/lib/libtk8.5.dylib'
@@ -20,17 +23,13 @@ module Tk
20
23
  TCL_LIBPATH << 'tcl' << 'tcl86' << 'tcl85' << 'tcl8.6' << 'tcl8.5'
21
24
  TK_LIBPATH << 'tk' << 'tk86' << 'tk85' << 'tk8.6' << 'tk8.5'
22
25
 
26
+ # In some cases Tk has trouble running, this seems to happen on windows and
27
+ # OSX/TkAqua mostly.
28
+ # In these cases please use:
29
+ # module Tk; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
30
+ # before you require 'tk'
23
31
  unless const_defined?(:RUN_EVENTLOOP_ON_MAIN_THREAD)
24
- if FFI::Platform.mac?
25
- # In some cases Tk has trouble running, this seems to happen on windows and
26
- # OSX/TkAqua mostly.
27
- # In these cases please use:
28
- # module Tk; RUN_EVENTLOOP_ON_MAIN_THREAD = true; end
29
- # before you require 'tk'
30
- RUN_EVENTLOOP_ON_MAIN_THREAD = true
31
- else
32
- RUN_EVENTLOOP_ON_MAIN_THREAD = false
33
- end
32
+ RUN_EVENTLOOP_ON_MAIN_THREAD = HOST_OS =~ /darwin/
34
33
  end
35
34
 
36
35
  DONT_WAIT = 1 << 1
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  require 'ffi-tk/command/choose_color'
3
4
  require 'ffi-tk/command/choose_directory'
5
+ require 'ffi-tk/command/dialog'
4
6
  require 'ffi-tk/command/event'
5
7
  require 'ffi-tk/command/get_open_file'
6
8
  require 'ffi-tk/command/get_save_file'
@@ -19,7 +21,6 @@ module Tk
19
21
  autoload :Clipboard, 'ffi-tk/command/clipboard'
20
22
  autoload :Configure, 'ffi-tk/command/configure'
21
23
  autoload :Destroy, 'ffi-tk/command/destroy'
22
- autoload :Dialog, 'ffi-tk/command/dialog'
23
24
  autoload :Focus, 'ffi-tk/command/focus'
24
25
  autoload :Font, 'ffi-tk/command/font'
25
26
  autoload :Grab, 'ffi-tk/command/grab'
@@ -35,5 +36,5 @@ module Tk
35
36
  autoload :WM, 'ffi-tk/command/wm'
36
37
  autoload :Wait, 'ffi-tk/command/wait'
37
38
  autoload :Winfo, 'ffi-tk/command/winfo'
38
- autoload :Scrollable,'ffi-tk/command/scrollable'
39
+ autoload :Scrollable, 'ffi-tk/command/scrollable'
39
40
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  module After
3
4
  module_function
@@ -7,11 +8,11 @@ module Tk
7
8
  id = nil
8
9
  block = Proc.new
9
10
 
10
- wrap = lambda{|*args|
11
+ wrap = lambda do |*_args|
11
12
  block.call
12
13
  Tk.unregister_proc(id)
13
14
  true
14
- }
15
+ end
15
16
 
16
17
  id, command = Tk.register_proc(wrap, 'after_ms')
17
18
  Tk.execute_only(:after, ms, command)
@@ -20,14 +21,14 @@ module Tk
20
21
  end
21
22
  end
22
23
 
23
- def idle(&block)
24
+ def idle
24
25
  id = nil
25
-
26
- wrap = lambda{|*args|
27
- block.call
26
+
27
+ wrap = lambda do |*_args|
28
+ yield
28
29
  Tk.unregister_proc(id)
29
30
  true
30
- }
31
+ end
31
32
 
32
33
  id, command = Tk.register_proc(wrap, 'after_idle')
33
34
  Tk.execute_only(:after, :idle, command)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  module Bell
3
4
  # This command rings the bell on the display for window and returns an empty
@@ -31,4 +32,4 @@ module Tk
31
32
  Bell.bell(options)
32
33
  end
33
34
  end
34
- end
35
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  module Bind
3
4
  def self.bind(tag, sequence = None)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  # Determine which bindings apply to a window, and order of evaluation
3
4
  #
@@ -1,34 +1,36 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  module Cget
3
4
  CGET_MAP = {}
4
5
 
5
- insert = lambda{|type, array|
6
- array.each{|option| CGET_MAP["-#{option}"] = type } }
6
+ insert = lambda do |type, array|
7
+ array.each { |option| CGET_MAP["-#{option}"] = type }
8
+ end
7
9
 
8
- insert[:integer, %w[
10
+ insert[:integer, %w(
9
11
  height width maxundo spacing1 spacing2 spacing3 borderwidth bd
10
12
  highlightthickness insertborderwidth insertofftime insertontime
11
13
  insertwidth padx pady selectborderwidth endline startline length
12
14
  maximum
13
- ]]
14
- insert[:boolean, %w[
15
+ )]
16
+ insert[:boolean, %w(
15
17
  autoseparators blockcursor undo exportselection setgrid takefocus
16
- ]]
17
- insert[:color, %w[
18
+ )]
19
+ insert[:color, %w(
18
20
  inactiveselectbackground disabledbackground disabledforeground background
19
21
  bg foreground fg highlightbackground highlightcolor insertbackground
20
22
  selectbackground selectforeground readonlybackground
21
- ]]
22
- insert[:command, %w[
23
+ )]
24
+ insert[:command, %w(
23
25
  invalidcommand invcmd yscrollcommand xscrollcommand validatecommand
24
26
  command vcmd
25
- ]]
26
- insert[:string, %w[ tabs cursor text show default class ]]
27
- insert[:font, %w[ font ]]
28
- insert[:symbol, %w[ wrap tabstyle relief justify validate orient mode selectmode ]]
29
- insert[:variable, %w[ textvariable ]]
30
- insert[:bitmap, %w[ stipple ]]
31
- insert[:list, %w[ padding state style columns displaycolumns ]]
27
+ )]
28
+ insert[:string, %w(tabs cursor text show default class)]
29
+ insert[:font, %w(font)]
30
+ insert[:symbol, %w(wrap tabstyle relief justify validate orient mode selectmode)]
31
+ insert[:variable, %w(textvariable)]
32
+ insert[:bitmap, %w(stipple)]
33
+ insert[:list, %w(padding state style columns displaycolumns)]
32
34
 
33
35
  def cget(option)
34
36
  option = option.to_tcl_option
@@ -41,26 +43,31 @@ module Tk
41
43
  if type = CGET_MAP[name.to_tcl_option]
42
44
  type_to_ruby(type, value)
43
45
  else
44
- raise "Unknown type for %p: %p" % [name, value]
46
+ raise 'Unknown type for %p: %p' % [name, value]
45
47
  end
46
48
  end
47
49
 
48
50
  def type_to_ruby(type, value)
49
51
  case type
50
52
  when :integer
51
- value.to_i
53
+ value.respond_to?(:to_i?) ? value.to_i? : value.to_i
52
54
  when :symbol
53
- value.to_sym?
55
+ value&.to_sym
54
56
  when :boolean
55
57
  Tk.boolean(value)
56
58
  when :color, :string, :font, :bitmap
57
59
  value.respond_to?(:to_s?) ? value.to_s? : value
58
60
  when :variable
59
- if name = value.to_s?
60
- Variable.new(name)
61
- end
61
+ Variable.new(value.to_s?) if value.respond_to?(:to_s?)
62
62
  when :list
63
- value.to_a
63
+ case value
64
+ when Array
65
+ value
66
+ when String
67
+ value.split
68
+ else
69
+ value.to_a
70
+ end
64
71
  when :float
65
72
  value.to_f
66
73
  when :pathname
@@ -69,7 +76,7 @@ module Tk
69
76
  string = value.to_s
70
77
  string unless string.empty?
71
78
  else
72
- raise "Unknown type: %p: %p" % [type, value]
79
+ raise 'Unknown type: %p: %p' % [type, value]
73
80
  end
74
81
  end
75
82
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  module_function
3
4
 
@@ -26,4 +27,4 @@ module Tk
26
27
  def choose_color(options = None)
27
28
  Tk.execute(:tk_chooseColor, options.to_tcl_options?).to_s?
28
29
  end
29
- end
30
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  module_function
3
4
 
@@ -42,4 +43,4 @@ module Tk
42
43
  def choose_directory(options = None)
43
44
  Tk.execute(:tk_chooseDirectory, options.to_tcl_options?).to_s?
44
45
  end
45
- end
46
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  # Manipulate Tk clipboard
3
4
  #
@@ -13,7 +14,7 @@ module Tk
13
14
  end
14
15
 
15
16
  def clipboard_append(options = {})
16
- Clipboard.append({displayof: self}.merge(options))
17
+ Clipboard.append({ displayof: self }.merge(options))
17
18
  end
18
19
 
19
20
  def clipboard_get(type = None)
@@ -76,10 +77,10 @@ module Tk
76
77
 
77
78
  format = format.to_s.upcase if format
78
79
 
79
- args << "-displayof" << displayof if displayof
80
- args << "-format" << format.to_s.upcase if format
81
- args << "-type" << type.to_s.upcase if type
82
- args << "--" << data.to_s
80
+ args << '-displayof' << displayof if displayof
81
+ args << '-format' << format.to_s.upcase if format
82
+ args << '-type' << type.to_s.upcase if type
83
+ args << '--' << data.to_s
83
84
 
84
85
  Tk.execute_only(:clipboard, :append, *args)
85
86
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Tk
2
3
  module Configure
3
4
  # Query or modify the configuration options of the widget.
@@ -31,7 +32,7 @@ module Tk
31
32
  elsif argument.respond_to?(:to_tcl_option)
32
33
  receiver.execute(*invocation, argument.to_tcl_option)
33
34
  else
34
- raise ArgumentError, "Invalid argument: %p" % [argument]
35
+ raise ArgumentError, 'Invalid argument: %p' % [argument]
35
36
  end
36
37
 
37
38
  if result.respond_to?(:tcl_options_to_hash)
@@ -46,24 +47,25 @@ module Tk
46
47
  end
47
48
 
48
49
  def register_command(name, &block)
49
- case name
50
- when :validatecommand
51
- # %d Type of action: 1 for insert, 0 for delete, or -1 for focus, forced
52
- # or textvariable validation.
53
- # %i Index of char string to be inserted/deleted, if any, otherwise -1.
54
- # %P The value of the entry if the edit is allowed.
55
- # If you are configuring the entry widget to have a new textvariable,
56
- # this will be the value of that textvariable.
57
- # %s The current value of entry prior to editing.
58
- # %S The text string being inserted/deleted, if any, {} otherwise.
59
- # %v The type of validation currently set.
60
- # %V The type of validation that triggered the callback (key, focusin,
61
- # focusout, forced).
62
- # %W The name of the entry widget.
63
- arg = '%d %i %P %s %S %v %V %W'
64
- else
65
- arg = ''
66
- end
50
+ arg =
51
+ case name
52
+ when :validatecommand
53
+ # %d Type of action: 1 for insert, 0 for delete, or -1 for focus, forced
54
+ # or textvariable validation.
55
+ # %i Index of char string to be inserted/deleted, if any, otherwise -1.
56
+ # %P The value of the entry if the edit is allowed.
57
+ # If you are configuring the entry widget to have a new textvariable,
58
+ # this will be the value of that textvariable.
59
+ # %s The current value of entry prior to editing.
60
+ # %S The text string being inserted/deleted, if any, {} otherwise.
61
+ # %v The type of validation currently set.
62
+ # %V The type of validation that triggered the callback (key, focusin,
63
+ # focusout, forced).
64
+ # %W The name of the entry widget.
65
+ '%d %i %P %s %S %v %V %W'
66
+ else
67
+ ''
68
+ end
67
69
 
68
70
  @commands ||= {}
69
71
 
@@ -71,7 +73,7 @@ module Tk
71
73
  id, command = Tk.register_proc(block, arg)
72
74
  @commands[name] = id
73
75
 
74
- return command
76
+ command
75
77
  end
76
78
 
77
79
  def unregister_command(name, id = @commands[name])
@@ -82,7 +84,7 @@ module Tk
82
84
 
83
85
  def unregister_commands
84
86
  return unless @commands
85
- @commands.each{|name, id| unregister_command(name, id) }
87
+ @commands.each { |name, id| unregister_command(name, id) }
86
88
  end
87
89
  end
88
90
  end