ffi-tk 2009.11.29

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 (189) hide show
  1. data/CHANGELOG +748 -0
  2. data/MANIFEST +188 -0
  3. data/README.md +85 -0
  4. data/Rakefile +47 -0
  5. data/TODO.md +62 -0
  6. data/bin/rwish +33 -0
  7. data/doc/MIT_LICENSE +18 -0
  8. data/doc/TCL_LICENSE +39 -0
  9. data/example/choose_color.rb +22 -0
  10. data/example/choose_directory.rb +22 -0
  11. data/example/dialog.rb +37 -0
  12. data/example/hello.rb +11 -0
  13. data/example/message_box.rb +26 -0
  14. data/example/option_menu.rb +17 -0
  15. data/example/popup.rb +24 -0
  16. data/example/set_palette.rb +32 -0
  17. data/example/text.rb +47 -0
  18. data/example/tile/kroc_demo_small.rb +123 -0
  19. data/example/tile/kroc_rb_demo.rb +135 -0
  20. data/example/tile/notebook.rb +48 -0
  21. data/example/tile/theme_hello.rb +38 -0
  22. data/example/tile/treeview.rb +71 -0
  23. data/example/various.rb +25 -0
  24. data/example/wait.rb +16 -0
  25. data/ffi-tk.gemspec +33 -0
  26. data/lib/ffi-tk.rb +76 -0
  27. data/lib/ffi-tk/command.rb +39 -0
  28. data/lib/ffi-tk/command/after.rb +36 -0
  29. data/lib/ffi-tk/command/bell.rb +34 -0
  30. data/lib/ffi-tk/command/bind.rb +11 -0
  31. data/lib/ffi-tk/command/bindtags.rb +69 -0
  32. data/lib/ffi-tk/command/cget.rb +92 -0
  33. data/lib/ffi-tk/command/choose_color.rb +29 -0
  34. data/lib/ffi-tk/command/choose_directory.rb +45 -0
  35. data/lib/ffi-tk/command/clipboard.rb +102 -0
  36. data/lib/ffi-tk/command/configure.rb +88 -0
  37. data/lib/ffi-tk/command/destroy.rb +12 -0
  38. data/lib/ffi-tk/command/dialog.rb +54 -0
  39. data/lib/ffi-tk/command/event.rb +79 -0
  40. data/lib/ffi-tk/command/focus.rb +70 -0
  41. data/lib/ffi-tk/command/font.rb +124 -0
  42. data/lib/ffi-tk/command/get_open_file.rb +85 -0
  43. data/lib/ffi-tk/command/get_save_file.rb +83 -0
  44. data/lib/ffi-tk/command/grab.rb +141 -0
  45. data/lib/ffi-tk/command/grid.rb +246 -0
  46. data/lib/ffi-tk/command/image.rb +79 -0
  47. data/lib/ffi-tk/command/lower.rb +23 -0
  48. data/lib/ffi-tk/command/message_box.rb +65 -0
  49. data/lib/ffi-tk/command/option_menu.rb +8 -0
  50. data/lib/ffi-tk/command/pack.rb +99 -0
  51. data/lib/ffi-tk/command/place.rb +91 -0
  52. data/lib/ffi-tk/command/popup.rb +14 -0
  53. data/lib/ffi-tk/command/raise.rb +25 -0
  54. data/lib/ffi-tk/command/scrollable.rb +151 -0
  55. data/lib/ffi-tk/command/selection.rb +132 -0
  56. data/lib/ffi-tk/command/set_palette.rb +9 -0
  57. data/lib/ffi-tk/command/tk_cmd.rb +155 -0
  58. data/lib/ffi-tk/command/vars.rb +82 -0
  59. data/lib/ffi-tk/command/wait.rb +39 -0
  60. data/lib/ffi-tk/command/winfo.rb +668 -0
  61. data/lib/ffi-tk/command/wm.rb +1025 -0
  62. data/lib/ffi-tk/core_extensions.rb +154 -0
  63. data/lib/ffi-tk/event/data.rb +60 -0
  64. data/lib/ffi-tk/event/handler.rb +44 -0
  65. data/lib/ffi-tk/ffi/tcl.rb +92 -0
  66. data/lib/ffi-tk/ffi/tcl/cmd_proc.rb +10 -0
  67. data/lib/ffi-tk/ffi/tcl/eval_result.rb +148 -0
  68. data/lib/ffi-tk/ffi/tcl/interp.rb +95 -0
  69. data/lib/ffi-tk/ffi/tcl/obj.rb +89 -0
  70. data/lib/ffi-tk/ffi/tcl/time.rb +36 -0
  71. data/lib/ffi-tk/ffi/tk.rb +35 -0
  72. data/lib/ffi-tk/geometry.rb +32 -0
  73. data/lib/ffi-tk/thread_sender.rb +26 -0
  74. data/lib/ffi-tk/tk.rb +222 -0
  75. data/lib/ffi-tk/variable.rb +46 -0
  76. data/lib/ffi-tk/widget.rb +68 -0
  77. data/lib/ffi-tk/widget/button.rb +41 -0
  78. data/lib/ffi-tk/widget/canvas.rb +806 -0
  79. data/lib/ffi-tk/widget/canvas/arc.rb +18 -0
  80. data/lib/ffi-tk/widget/canvas/bitmap.rb +13 -0
  81. data/lib/ffi-tk/widget/canvas/image.rb +10 -0
  82. data/lib/ffi-tk/widget/canvas/item.rb +170 -0
  83. data/lib/ffi-tk/widget/canvas/line.rb +16 -0
  84. data/lib/ffi-tk/widget/canvas/oval.rb +15 -0
  85. data/lib/ffi-tk/widget/canvas/polygon.rb +16 -0
  86. data/lib/ffi-tk/widget/canvas/rectangle.rb +15 -0
  87. data/lib/ffi-tk/widget/canvas/text.rb +15 -0
  88. data/lib/ffi-tk/widget/canvas/window.rb +11 -0
  89. data/lib/ffi-tk/widget/checkbutton.rb +63 -0
  90. data/lib/ffi-tk/widget/entry.rb +208 -0
  91. data/lib/ffi-tk/widget/frame.rb +12 -0
  92. data/lib/ffi-tk/widget/label.rb +26 -0
  93. data/lib/ffi-tk/widget/labelframe.rb +7 -0
  94. data/lib/ffi-tk/widget/listbox.rb +192 -0
  95. data/lib/ffi-tk/widget/menu.rb +318 -0
  96. data/lib/ffi-tk/widget/menubutton.rb +7 -0
  97. data/lib/ffi-tk/widget/message.rb +36 -0
  98. data/lib/ffi-tk/widget/panedwindow.rb +164 -0
  99. data/lib/ffi-tk/widget/radiobutton.rb +43 -0
  100. data/lib/ffi-tk/widget/root.rb +8 -0
  101. data/lib/ffi-tk/widget/scale.rb +44 -0
  102. data/lib/ffi-tk/widget/scrollbar.rb +114 -0
  103. data/lib/ffi-tk/widget/spinbox.rb +198 -0
  104. data/lib/ffi-tk/widget/text.rb +893 -0
  105. data/lib/ffi-tk/widget/text/peer.rb +10 -0
  106. data/lib/ffi-tk/widget/tile.rb +70 -0
  107. data/lib/ffi-tk/widget/tile/button.rb +8 -0
  108. data/lib/ffi-tk/widget/tile/checkbutton.rb +8 -0
  109. data/lib/ffi-tk/widget/tile/combobox.rb +43 -0
  110. data/lib/ffi-tk/widget/tile/entry.rb +8 -0
  111. data/lib/ffi-tk/widget/tile/frame.rb +13 -0
  112. data/lib/ffi-tk/widget/tile/label.rb +9 -0
  113. data/lib/ffi-tk/widget/tile/labelframe.rb +8 -0
  114. data/lib/ffi-tk/widget/tile/menubutton.rb +8 -0
  115. data/lib/ffi-tk/widget/tile/notebook.rb +93 -0
  116. data/lib/ffi-tk/widget/tile/panedwindow.rb +9 -0
  117. data/lib/ffi-tk/widget/tile/progressbar.rb +59 -0
  118. data/lib/ffi-tk/widget/tile/radiobutton.rb +8 -0
  119. data/lib/ffi-tk/widget/tile/scale.rb +8 -0
  120. data/lib/ffi-tk/widget/tile/scrollbar.rb +41 -0
  121. data/lib/ffi-tk/widget/tile/separator.rb +23 -0
  122. data/lib/ffi-tk/widget/tile/sizegrip.rb +24 -0
  123. data/lib/ffi-tk/widget/tile/style.rb +114 -0
  124. data/lib/ffi-tk/widget/tile/treeview.rb +414 -0
  125. data/lib/ffi-tk/widget/toplevel.rb +14 -0
  126. data/spec/ffi-tk/command/bindtags.rb +18 -0
  127. data/spec/ffi-tk/command/clipboard.rb +18 -0
  128. data/spec/ffi-tk/command/font.rb +67 -0
  129. data/spec/ffi-tk/command/grid.rb +6 -0
  130. data/spec/ffi-tk/command/image.rb +26 -0
  131. data/spec/ffi-tk/command/pack.rb +20 -0
  132. data/spec/ffi-tk/command/place.rb +20 -0
  133. data/spec/ffi-tk/command/selection.rb +13 -0
  134. data/spec/ffi-tk/command/vars.rb +32 -0
  135. data/spec/ffi-tk/command/winfo.rb +233 -0
  136. data/spec/ffi-tk/command/wm.rb +185 -0
  137. data/spec/ffi-tk/event.rb +95 -0
  138. data/spec/ffi-tk/tile/button.rb +51 -0
  139. data/spec/ffi-tk/tile/checkbutton.rb +13 -0
  140. data/spec/ffi-tk/tile/combobox.rb +65 -0
  141. data/spec/ffi-tk/tile/entry.rb +61 -0
  142. data/spec/ffi-tk/tile/frame.rb +65 -0
  143. data/spec/ffi-tk/tile/label.rb +17 -0
  144. data/spec/ffi-tk/tile/labelframe.rb +13 -0
  145. data/spec/ffi-tk/tile/menubutton.rb +13 -0
  146. data/spec/ffi-tk/tile/notebook.rb +103 -0
  147. data/spec/ffi-tk/tile/panedwindow.rb +13 -0
  148. data/spec/ffi-tk/tile/progressbar.rb +78 -0
  149. data/spec/ffi-tk/tile/radiobutton.rb +13 -0
  150. data/spec/ffi-tk/tile/scale.rb +13 -0
  151. data/spec/ffi-tk/tile/scrollbar.rb +43 -0
  152. data/spec/ffi-tk/tile/separator.rb +22 -0
  153. data/spec/ffi-tk/tile/sizegrip.rb +13 -0
  154. data/spec/ffi-tk/tile/style.rb +161 -0
  155. data/spec/ffi-tk/tile/treeview.rb +101 -0
  156. data/spec/ffi-tk/variable.rb +24 -0
  157. data/spec/ffi-tk/widget/button.rb +22 -0
  158. data/spec/ffi-tk/widget/canvas.rb +169 -0
  159. data/spec/ffi-tk/widget/checkbutton.rb +44 -0
  160. data/spec/ffi-tk/widget/entry.rb +155 -0
  161. data/spec/ffi-tk/widget/frame.rb +8 -0
  162. data/spec/ffi-tk/widget/label.rb +16 -0
  163. data/spec/ffi-tk/widget/labelframe.rb +12 -0
  164. data/spec/ffi-tk/widget/listbox.rb +19 -0
  165. data/spec/ffi-tk/widget/menu.rb +12 -0
  166. data/spec/ffi-tk/widget/menubutton.rb +12 -0
  167. data/spec/ffi-tk/widget/message.rb +12 -0
  168. data/spec/ffi-tk/widget/panedwindow.rb +12 -0
  169. data/spec/ffi-tk/widget/radiobutton.rb +12 -0
  170. data/spec/ffi-tk/widget/root.rb +9 -0
  171. data/spec/ffi-tk/widget/scale.rb +12 -0
  172. data/spec/ffi-tk/widget/scrollbar.rb +12 -0
  173. data/spec/ffi-tk/widget/spinbox.rb +12 -0
  174. data/spec/ffi-tk/widget/text.rb +246 -0
  175. data/spec/ffi-tk/widget/toplevel.rb +12 -0
  176. data/spec/helper.rb +3 -0
  177. data/tasks/authors.rake +21 -0
  178. data/tasks/bacon.rake +66 -0
  179. data/tasks/changelog.rake +18 -0
  180. data/tasks/gem.rake +22 -0
  181. data/tasks/gem_setup.rake +113 -0
  182. data/tasks/grancher.rake +12 -0
  183. data/tasks/manifest.rake +4 -0
  184. data/tasks/rcov.rake +17 -0
  185. data/tasks/release.rake +65 -0
  186. data/tasks/reversion.rake +8 -0
  187. data/tasks/setup.rake +12 -0
  188. data/tasks/ycov.rake +84 -0
  189. metadata +261 -0
@@ -0,0 +1,65 @@
1
+ require_relative '../../helper'
2
+
3
+ Tk.init
4
+
5
+ describe Tk::Tile::Frame do
6
+ Style = Tk::Tile::Style
7
+ Frame = Tk::Tile::Frame
8
+
9
+ it 'creates a new frame with layout_style' do
10
+ layout_style = [
11
+ 'Button.button', {:children=>[
12
+ 'Button.focus', {:children=>[
13
+ 'Button.padding', {:children=>[
14
+ 'Button.label', {:expand=>true, :sticky=>''}
15
+ ]}
16
+ ]}
17
+ ]}
18
+ ]
19
+
20
+ frame = Frame.new(Tk.root)
21
+ frame.style(layout_style).should == true
22
+ end
23
+
24
+ it 'sets borderwidth default 0' do
25
+ frame = Frame.new(Tk.root)
26
+ frame.cget(:borderwidth).should == 0
27
+
28
+ frame = Frame.new(Tk.root, borderwidth: 10)
29
+ frame.cget(:borderwidth).should == 10
30
+
31
+ frame.configure borderwidth: 20
32
+ frame.cget(:borderwidth).should == 20
33
+ end
34
+
35
+ # One of the standard Tk border styles:
36
+ # flat, groove, raised, ridge, solid, or sunken. Defaults to flat.
37
+ it 'sets relief default :flat' do
38
+ frame = Frame.new(Tk.root)
39
+ frame.cget(:relief).should == :flat
40
+
41
+ frame = Frame.new(Tk.root, relief: 'groove')
42
+ frame.cget(:relief).should == :groove
43
+ end
44
+
45
+ it 'sets cursor' do
46
+ frame = Frame.new(Tk.root)
47
+ frame.cget(:cursor).should == nil
48
+
49
+ lambda {
50
+ Frame.new(Tk.root, cursor: '.s.s.s.s')
51
+ }.should.raise RuntimeError
52
+ end
53
+
54
+ it 'sets additional padding to include inside the border' do
55
+ frame = Frame.new(Tk.root)
56
+ frame.cget(:padding).should == []
57
+
58
+ frame = Frame.new(Tk.root, padding: 10)
59
+ frame.cget(:padding).should == [ '10' ]
60
+
61
+ frame.configure padding: [10, 20]
62
+ frame.cget(:padding).should == ['10', '20']
63
+ end
64
+ end
65
+
@@ -0,0 +1,17 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::Label do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::Label.new
6
+ instance.class.should == Tk::Tile::Label
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'assigns a value' do
11
+ label = Tk::Tile::Label.new
12
+ label.value.should == nil
13
+ label.value = 'Hello, World!'
14
+ label.value.should == 'Hello, World!'
15
+ end
16
+ end
17
+
@@ -0,0 +1,13 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::LabelFrame do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::LabelFrame.new
6
+ instance.class.should == Tk::Tile::LabelFrame
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'needs more specs' do
11
+ end
12
+ end
13
+
@@ -0,0 +1,13 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::MenuButton do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::MenuButton.new
6
+ instance.class.should == Tk::Tile::MenuButton
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'needs more specs' do
11
+ end
12
+ end
13
+
@@ -0,0 +1,103 @@
1
+ require_relative '../../helper'
2
+
3
+ Tk.init
4
+
5
+ describe Tk::Tile::Notebook do
6
+ it 'initializes' do
7
+ instance = Tk::Tile::Notebook.new
8
+ instance.class.should == Tk::Tile::Notebook
9
+ instance.tk_parent.should == Tk.root
10
+ end
11
+
12
+ it 'adds a new tab' do
13
+ f0 = Tk::Tile::Frame.new
14
+ nb = Tk::Tile::Notebook.new
15
+
16
+ nb.add( f0, text: 'first tab' ).should == true
17
+ end
18
+
19
+ it 'selects the specified tab' do
20
+ f0 = Tk::Tile::Frame.new
21
+ f1 = Tk::Tile::Frame.new
22
+
23
+ nb = Tk::Tile::Notebook.new
24
+ nb.add( f0, text: 'first tab' ).should == true
25
+ nb.add( f1, text: 'second tab' ).should == true
26
+
27
+ nb.select(f1).should == f1.tk_pathname
28
+ nb.select(f0).should == f0.tk_pathname
29
+ end
30
+
31
+ it 'return index of tabs' do
32
+ f0 = Tk::Tile::Frame.new
33
+ f1 = Tk::Tile::Frame.new
34
+
35
+ nb = Tk::Tile::Notebook.new
36
+ nb.add( f0, text: 'first tab' ).should == true
37
+ nb.add( f1, text: 'second tab' ).should == true
38
+
39
+ nb.index(f1).should == 1
40
+ nb.index(f0).should == 0
41
+ nb.index('end').should == 2 # total number of tabs
42
+ nb.index('current').should == 0
43
+ end
44
+
45
+ it 'return a list of managed tabs' do
46
+ f2 = Tk::Tile::Frame.new
47
+ nb = Tk::Tile::Notebook.new
48
+
49
+ nb.tabs.should == []
50
+ nb.add( f2, text: 'first tab' ).should == true
51
+ nb.tabs.should == [ f2.tk_pathname ]
52
+ end
53
+
54
+ it 'inserts a new tab at position' do
55
+ f0 = Tk::Tile::Frame.new
56
+ f1 = Tk::Tile::Frame.new
57
+ nb = Tk::Tile::Notebook.new
58
+
59
+ nb.add( f0, text: 'first tab' ).should == true
60
+ nb.insert( 0, f1, text: 'first tab' ).should == true
61
+
62
+ nb.tabs.should == [ f1.tk_pathname, f0.tk_pathname ]
63
+ end
64
+
65
+ it 'set tab options' do
66
+ f2 = Tk::Tile::Frame.new
67
+ nb = Tk::Tile::Notebook.new
68
+
69
+ nb.add(f2, text: 'first tab' ).should == true
70
+
71
+ nb.tab(f2, state: :disabled ).should == true
72
+ nb.tab(f2).should.include 'disabled'
73
+ end
74
+
75
+ it 'forgets the specified tab' do
76
+ f2 = Tk::Tile::Frame.new
77
+ nb = Tk::Tile::Notebook.new
78
+
79
+ nb.add( f2, text: 'first tab' ).should == true
80
+ nb.tabs.should == [ f2.tk_pathname ]
81
+
82
+ nb.forget(f2).should == true
83
+ nb.tabs.should == [ ]
84
+ end
85
+
86
+ it 'hides a specified tab' do
87
+ f2 = Tk::Tile::Frame.new
88
+ nb = Tk::Tile::Notebook.new
89
+
90
+ nb.add( f2, text: 'first tab' ).should == true
91
+
92
+ nb.hide(f2).should == true
93
+ nb.tabs.should == [ f2.tk_pathname ]
94
+ end
95
+
96
+ it 'enables traversal' do
97
+ nb = Tk::Tile::Notebook.new
98
+ nb.enable_traversal.should == true
99
+
100
+ Tk::Tile::Notebook.enable_traversal(nb).should == true
101
+ end
102
+ end
103
+
@@ -0,0 +1,13 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::PanedWindow do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::PanedWindow.new
6
+ instance.class.should == Tk::Tile::PanedWindow
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'needs more specs' do
11
+ end
12
+ end
13
+
@@ -0,0 +1,78 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::Progressbar do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::Progressbar.new
6
+ instance.class.should == Tk::Tile::Progressbar
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'start progress step with interval' do
11
+ pbar = Tk::Tile::Progressbar.new
12
+ pbar.start.should == true
13
+ pbar.start(12).should == true
14
+ end
15
+
16
+ it 'stop progress stepping' do
17
+ pbar = Tk::Tile::Progressbar.new
18
+ pbar.stop.should == true
19
+ end
20
+
21
+ it '#step increments value' do
22
+ var = Tk::Variable.new('somevar')
23
+ var.set 0.0
24
+ pbar = Tk::Tile::Progressbar.new(Tk.root, variable: var)
25
+
26
+ 3.times { pbar.step.should == true }
27
+ var.to_f.should == 3.0
28
+
29
+ pbar.step(10).should == true
30
+ var.to_f.should == 13.0
31
+ end
32
+
33
+ it 'get progress value' do
34
+ pbar = Tk::Tile::Progressbar.new(Tk.root)
35
+ pbar.step
36
+ pbar.value.should == 1.0
37
+ pbar.step(98)
38
+ pbar.value.should == 99.0
39
+ pbar.step(1)
40
+ pbar.value.should == 0.0
41
+ end
42
+
43
+ it 'sets mode' do
44
+ pbar = Tk::Tile::Progressbar.new(Tk.root)
45
+ pbar.cget(:mode).should == :determinate
46
+
47
+ pbar = Tk::Tile::Progressbar.new(Tk.root, mode: :indeterminate)
48
+ pbar.cget(:mode).should == :indeterminate
49
+ end
50
+
51
+ it 'sets length' do
52
+ pbar = Tk::Tile::Progressbar.new(Tk.root)
53
+ pbar.cget(:length).should == 100
54
+
55
+ pbar = Tk::Tile::Progressbar.new(Tk.root, length: 200)
56
+ pbar.cget(:length).should == 200
57
+ end
58
+
59
+ it 'sets maximum' do
60
+ pbar = Tk::Tile::Progressbar.new(Tk.root)
61
+ pbar.cget(:maximum).should == 100
62
+
63
+ pbar = Tk::Tile::Progressbar.new(Tk.root, maximum: 90)
64
+ pbar.cget(:maximum).should == 90
65
+ end
66
+
67
+ it 'gets phase value' do
68
+ Tk::Tile::Progressbar.new(Tk.root).phase.should == 0
69
+ end
70
+
71
+ it 'sets orientation' do
72
+ pbar = Tk::Tile::Progressbar.new
73
+ pbar.orient.should == :horizontal
74
+ pbar.orient :vertical
75
+ pbar.orient.should == :vertical
76
+ end
77
+ end
78
+
@@ -0,0 +1,13 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::RadioButton do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::RadioButton.new
6
+ instance.class.should == Tk::Tile::RadioButton
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'needs more specs' do
11
+ end
12
+ end
13
+
@@ -0,0 +1,13 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::Scale do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::Scale.new
6
+ instance.class.should == Tk::Tile::Scale
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'needs more specs' do
11
+ end
12
+ end
13
+
@@ -0,0 +1,43 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::Scrollbar do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::Scrollbar.new
6
+ instance.class.should == Tk::Tile::Scrollbar
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'sets orientation' do
11
+ s = Tk::Tile::YScrollbar.new
12
+ s.orient.should == :vertical
13
+ s.orient :horizontal
14
+ s.orient.should == :horizontal
15
+ end
16
+ end
17
+
18
+ describe Tk::Tile::YScrollbar do
19
+ it 'initializes' do
20
+ instance = Tk::Tile::YScrollbar.new
21
+ instance.class.should == Tk::Tile::YScrollbar
22
+ instance.tk_parent.should == Tk.root
23
+ end
24
+
25
+ it 'sets orientation' do
26
+ s = Tk::Tile::YScrollbar.new
27
+ s.cget(:orient).should == :vertical
28
+ end
29
+ end
30
+
31
+ describe Tk::Tile::XScrollbar do
32
+ it 'initializes' do
33
+ instance = Tk::Tile::XScrollbar.new
34
+ instance.class.should == Tk::Tile::XScrollbar
35
+ instance.tk_parent.should == Tk.root
36
+ end
37
+
38
+ it 'sets orientation' do
39
+ s = Tk::Tile::XScrollbar.new
40
+ s.cget(:orient).should == :horizontal
41
+ end
42
+ end
43
+
@@ -0,0 +1,22 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::Separator do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::Separator.new
6
+ instance.class.should == Tk::Tile::Separator
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'sets orientation' do
11
+ s = Tk::Tile::Separator.new
12
+ s.orient.should == :horizontal
13
+ s.orient :vertical
14
+ s.orient.should == :vertical
15
+ end
16
+
17
+ it 'sets identify' do
18
+ s = Tk::Tile::Separator.new
19
+ s.identify(0,0).should == true
20
+ end
21
+ end
22
+
@@ -0,0 +1,13 @@
1
+ require_relative '../../helper'
2
+
3
+ describe Tk::Tile::Sizegrip do
4
+ it 'initializes' do
5
+ instance = Tk::Tile::Sizegrip.new
6
+ instance.class.should == Tk::Tile::Sizegrip
7
+ instance.tk_parent.should == Tk.root
8
+ end
9
+
10
+ it 'needs more specs' do
11
+ end
12
+ end
13
+
@@ -0,0 +1,161 @@
1
+ require_relative '../../helper'
2
+
3
+ Tk.init
4
+
5
+ describe Tk::Tile::Style do
6
+ Style = Tk::Tile::Style
7
+
8
+ it '#theme_names returns a list of all known themes' do
9
+ names = Style.theme_names
10
+
11
+ names.should.kind_of? Array
12
+ names.should.not.be.empty?
13
+ names.all?{|i| i.kind_of?(String) }
14
+ names.should == ["clam", "alt", "default", "classic"]
15
+ end
16
+
17
+ it '#theme_use sets the current theme' do
18
+ Style.theme_use('default').should == 'default'
19
+ Style.theme_use('unkown-theme-').should.be.nil?
20
+ end
21
+
22
+ it '#element_names returns the list of elements defined in the current theme' do
23
+ names = Style.element_names
24
+
25
+ names.should.kind_of? Array
26
+ names.should.not.be.empty?
27
+ names.all?{|i| i.kind_of?(String) }
28
+ %w{label focus image text textarea}.each {|i| names.should.include? i }
29
+ end
30
+
31
+ it '#element_options returns the list of elements options' do
32
+ name = 'text'
33
+ options = %w{-text -font -foreground -underline -width -anchor -justify -wraplength -embossed}
34
+
35
+ Style.element_options(name).should.kind_of? Array
36
+ Style.element_options(name).should.not.be.empty?
37
+ Style.element_options(name).should == options
38
+
39
+ Style.element_options('unkown-element').should == nil
40
+ end
41
+
42
+ it '#lookup returns the value specified for -option in style style' do
43
+ Style.lookup('label', 'font').should == 'TkDefaultFont'
44
+ Style.lookup('label', 'foreground').should == 'black'
45
+ Style.lookup('label', :foreground).should == 'black'
46
+ end
47
+
48
+ it '#configure sets the default value of the specified option(s) in style' do
49
+ # configure one element option
50
+ Style.configure('label', foreground: 'gray' ).should == true
51
+ Style.lookup('label', 'foreground').should == 'gray'
52
+
53
+ # configure a hash of element options
54
+ Style.configure('label', {foreground: 'gray', background: 'blue'} ).should == true
55
+ Style.lookup('label', 'foreground').should == 'gray'
56
+ Style.lookup('label', 'background').should == 'blue'
57
+
58
+ Style.configure('label', foreground: 'black').should == true
59
+
60
+ # configure other element..
61
+ Style.configure('Button.label', foreground: :red ).should == true
62
+ Style.lookup('Button.label', 'foreground').should == 'red'
63
+
64
+ Style.configure('Button.label', foreground: :blue ).should == true
65
+ Style.lookup('Button.label', 'foreground').should == 'blue'
66
+
67
+ # element origin is still black
68
+ Style.lookup('label', 'foreground').should == 'black'
69
+ end
70
+
71
+ it '#map sets dynamic values of the specified option(s) in style' do
72
+ Style.map('label', :background=>[:active, '#694418']).should == true
73
+ Style.map(:foreground=>[:disabled, '#B2B2B2', :active, '#FFE7CB']).should == true
74
+ end
75
+
76
+ it '#layout defines the widget layout for style' do
77
+ Style.layout('TButton', [
78
+ 'Button.button', {:children=>[
79
+ 'Button.focus', {:children=>[
80
+ 'Button.padding', {:children=>[
81
+ 'Button.label', {:expand=>true, :sticky=>''}
82
+ ]}
83
+ ]}
84
+ ]}
85
+ ]).should == true
86
+
87
+ module Tk::Tile::TScrollbar; end
88
+ style_name = Tk::Tile.style('Vertical', Tk::Tile::TScrollbar)
89
+ style_name.should == 'Vertical.TScrollbar'
90
+
91
+ Style.layout(style_name, [
92
+ 'Checkbutton.background', # this is not needed in tile 0.5 or later
93
+ 'Checkbutton.border', {:children=>[
94
+ 'Checkbutton.padding', {:children=>[
95
+ 'Checkbutton.indicator', {:side=>:left},
96
+ 'Checkbutton.focus', {:side=>:left, :children=>[
97
+ 'Checkbutton.label'
98
+ ]}
99
+ ]}
100
+ ]}
101
+ ]).should == true
102
+ end
103
+
104
+
105
+ it '#element_create creates a new element in the current theme' do
106
+ Style.element_create('someElement','label').should == nil
107
+ Style.element_names.should.not.include? "someElement"
108
+
109
+ assets = {}
110
+ assets['button-n'] = Tk::Image.create('photo').to_s
111
+ assets['button-p'] = Tk::Image.create('photo').to_s
112
+ assets['button-h'] = Tk::Image.create('photo').to_s
113
+
114
+ Style.element_create('Button.button', :image,
115
+ [ assets['button-n'],
116
+ :pressed, assets['button-p'],
117
+ :active, assets['button-h'],
118
+ ], :border=>3, :sticky=>:ew)
119
+
120
+ Tk::Image.delete *assets.each_value
121
+ Tk::Image.names.size.should == 0
122
+ end
123
+
124
+ it '#theme_settings configure in the context of a theme' do
125
+
126
+ res = Style.theme_settings 'alt' do
127
+ Style.configure('label', foreground: :green ).should == true
128
+ Style.lookup('label', 'foreground').should == 'green'
129
+ end
130
+ res.should == 'alt'
131
+
132
+ # current theme stays untouched
133
+ Style.lookup('label', 'foreground').should == 'black'
134
+ end
135
+
136
+ it '#theme_create creates a new theme' do
137
+ # Creates a new theme. It is an error if themeName already exists.
138
+ lambda { Style.theme_create('default') }.should.raise ArgumentError
139
+
140
+ #
141
+ Style.theme_create('spec-theme').should == true
142
+ Style.theme_names.should.include? 'spec-theme'
143
+
144
+ # If -parent is specified, the new theme will inherit styles, elements, and
145
+ # layouts from the parent theme basedon.
146
+ Style.theme_create('spec-theme2', parent: 'default').should == true
147
+
148
+ # If -settings is present, script is evaluated in the context of the new theme
149
+ res = Style.theme_create('spec-theme-block', parent: 'default') do
150
+ Style.configure('.', :background=>'#FCB64F',
151
+ :troughcolor=>'#F8C278', :borderwidth=>1)
152
+ Style.configure(:font=>Tk::Tile::Font::Default, :borderwidth=>1)
153
+
154
+ Style.map('.', :background=>[:active, '#694418'])
155
+ Style.map(:foreground=>[:disabled, '#B2B2B2', :active, '#FFE7CB'])
156
+ end
157
+ res.should == true
158
+
159
+ end
160
+
161
+ end