ffi-tk 2009.11.29

Sign up to get free protection for your applications and to get access to all the features.
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,22 @@
1
+ require 'ffi-tk'
2
+
3
+ Tk.init
4
+
5
+ label = Tk::Label.new(Tk.root, text: 'Press any key to open the dialog')
6
+ label.pack
7
+
8
+ Tk.root.bind('<Key>'){
9
+ dir = Tk.choose_color(initialcolor: 'grey', title: 'Choose a color')
10
+
11
+ label.configure text: 'Press any key to close the window'
12
+
13
+ if dir
14
+ Tk::Label.new(Tk.root, text: "Selected #{dir}").pack
15
+ else
16
+ Tk::Label.new(Tk.root, text: 'No color selected').pack
17
+ end
18
+
19
+ Tk.root.bind('<Key>'){ exit }
20
+ }
21
+
22
+ Tk.mainloop
@@ -0,0 +1,22 @@
1
+ require 'ffi-tk'
2
+
3
+ Tk.init
4
+
5
+ label = Tk::Label.new(Tk.root, text: 'Press any key to open the dialog')
6
+ label.pack
7
+
8
+ Tk.root.bind('<Key>'){
9
+ dir = Tk.choose_directory(initialdir: '~', title: 'Choose a directory')
10
+
11
+ label.configure text: 'Press any key to close the window'
12
+
13
+ if dir
14
+ Tk::Label.new(Tk.root, text: "Selected #{dir}").pack
15
+ else
16
+ Tk::Label.new(Tk.root, text: 'No directory selected').pack
17
+ end
18
+
19
+ Tk.root.bind('<Key>'){ exit }
20
+ }
21
+
22
+ Tk.mainloop
data/example/dialog.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'ffi-tk'
2
+
3
+ Tk.init
4
+
5
+ label = Tk::Label.new(Tk.root, text: 'Press any key to open the dialog')
6
+ label.pack
7
+
8
+ Tk.root.bind('<Key>'){
9
+ question = 'Do you love ruby?'
10
+ answers = ['Yes', 'No', "I'm not sure"]
11
+ reply =
12
+ Tk.dialog('.foo', 'Love is all around', question, 'questhead', 0, *answers)
13
+
14
+ label.configure text: 'Press any key to close the window'
15
+
16
+ text =
17
+ case reply
18
+ when 0
19
+ "Of course you do!"
20
+ when 1
21
+ "Your loss"
22
+ when 2
23
+ Tk::Button.new(Tk.root, text: 'Show source'){
24
+ text = Tk::Text.new(Tk.root)
25
+ text.insert :end, File.read(__FILE__)
26
+ text.pack
27
+ }.pack
28
+
29
+ "If you haven't fallen in love yet, take a look at my source."
30
+ end
31
+
32
+ Tk::Label.new(Tk.root, text: text).pack
33
+
34
+ Tk.root.bind('<Key>'){ exit }
35
+ }
36
+
37
+ Tk.mainloop
data/example/hello.rb ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/ffi-tk'
4
+
5
+ Tk.init
6
+
7
+ Tk::Button.new('.', text: 'Hello, World!') do
8
+ Tk.exit
9
+ end.pack
10
+
11
+ Tk.mainloop
@@ -0,0 +1,26 @@
1
+ require 'ffi-tk'
2
+
3
+ Tk.init
4
+
5
+ label = Tk::Label.new(Tk.root, text: 'Press any key to open the dialog')
6
+ label.pack
7
+
8
+ Tk.root.bind('<Key>'){
9
+ answer = Tk.message_box(
10
+ message: 'Really quit?',
11
+ icon: :question,
12
+ type: :yesno,
13
+ detail: 'Select "Yes" to make the application exit')
14
+
15
+ case answer
16
+ when :yes
17
+ exit
18
+ when :no
19
+ Tk.message_box(
20
+ message: 'I know you like this application!',
21
+ type: :ok)
22
+ exit
23
+ end
24
+ }
25
+
26
+ Tk.mainloop
@@ -0,0 +1,17 @@
1
+ require 'ffi-tk'
2
+
3
+ Tk.init
4
+
5
+ label = Tk::Label.new(Tk.root, text: 'Here will be the value of button displayed')
6
+ label.pack
7
+
8
+ var = Tk.option_menu('.foo', 'Yes', 'Of course', 'Maybe', 'Maybe not', 'No', 'Never')
9
+ Tk::Pack.pack('.foo')
10
+ Tk::Bind.bind('.foo', '<Configure>'){ label.configure(text: var.get) }
11
+ var.set 'Maybe' # initial option
12
+
13
+ label.configure text: var.get
14
+
15
+ Tk::Button.new(Tk.root, text: 'Exit'){ exit }.pack
16
+
17
+ Tk.mainloop
data/example/popup.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'ffi-tk'
2
+ Tk.init
3
+
4
+ command = lambda{ Tk::Bell.bell }
5
+ menu = Tk::Menu.new(Tk.root)
6
+ menu.add(:command, label: 'Example 1', command: command)
7
+ menu.add(:command, label: 'Example 2', command: command)
8
+ label = Tk::Label.new(Tk.root, text: 'Click me!').pack
9
+ label.bind('<1>'){|event| Tk.popup(menu, event.x, event.y) }
10
+
11
+ Tk::Button.new(Tk.root, text: 'Exit'){ exit }.pack
12
+
13
+ Tk.mainloop
14
+ __END__
15
+ # Create a menu
16
+ set m [menu .popupMenu]
17
+ $m add command -label "Example 1" -command bell
18
+ $m add command -label "Example 2" -command bell
19
+
20
+ # Create something to attach it to
21
+ pack [label .l -text "Click me!"]
22
+
23
+ # Arrange for the menu to pop up when the label is clicked
24
+ bind .l <1> {tk_popup .popupMenu %X %Y}
@@ -0,0 +1,32 @@
1
+ require 'ffi-tk'
2
+
3
+ Tk.init
4
+
5
+ def change_palette(background)
6
+ Tk.set_palette(background)
7
+ @exception.configure(text: '')
8
+ rescue Exception => ex
9
+ @exception.configure(text: ex.message)
10
+ end
11
+
12
+ desc = <<DESC
13
+ This example shows how Tk can calculate whole palettes from a given background color.
14
+ Simply fill the entry field with a color you would like.
15
+
16
+ For example: "black", "yellow", "#fafafa", or "#f00"
17
+
18
+ Hit Return to change the color.
19
+ DESC
20
+
21
+ Tk::Label.new(Tk.root, text: desc).pack
22
+
23
+ @exception = Tk::Label.new(Tk.root).pack
24
+ @entry = Tk::Entry.new(Tk.root).pack
25
+ @entry.bind('<Return>'){
26
+ change_palette(@entry.get)
27
+ @entry.delete(0, :end)
28
+ }
29
+
30
+ Tk::Button.new(Tk.root, text: 'Exit'){ exit }.pack
31
+
32
+ Tk.mainloop
data/example/text.rb ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/ffi-tk'
4
+
5
+ Tk.init
6
+
7
+ text = Tk::Text.new('.')
8
+ text.insert :end, 'Hello, World!'
9
+ text.pack
10
+ p text.bbox '0.1'
11
+ p text.index 'end'
12
+
13
+ %w[ autoseparators autoseparators blockcursor endline inactiveselectbackground
14
+ maxundo spacing1 spacing2 spacing3 startline state tabs tabstyle undo width wrap
15
+
16
+ background bg
17
+ borderwidth bd
18
+ cursor
19
+ exportselection
20
+ font
21
+ foreground
22
+ fg
23
+ highlightbackground
24
+ highlightcolor
25
+ highlightthickness
26
+ insertbackground
27
+ insertborderwidth
28
+ insertofftime
29
+ insertontime
30
+ insertwidth
31
+ padx
32
+ pady
33
+ relief
34
+ selectbackground
35
+ selectborderwidth
36
+ selectforeground
37
+ setgrid
38
+ takefocus
39
+ xscrollcommand
40
+ yscrollcommand
41
+ ].each do |option|
42
+ p option: text.cget(option)
43
+ end
44
+
45
+ Tk.root.bind('Control-q'){ exit }
46
+
47
+ Tk.mainloop
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../../lib/ffi-tk'
4
+
5
+ Tk.init
6
+
7
+ Tk::Tile::Style.theme_use 'alt'
8
+
9
+ THEMELIST = [
10
+ ['default', 'Default'],
11
+ ['classic', 'Classic'],
12
+ ['alt', 'Revitalized'],
13
+ ['clam', 'Clam'],
14
+ ['winnative', 'Windows native'],
15
+ ['xpnative', 'XP Native'],
16
+ ['aqua', 'Aqua'],
17
+ ]
18
+ RUBY_THEMELIST = []
19
+ RUBY_THEMELIST << ['kroc-rb', 'Kroc (by Ruby)', false]
20
+
21
+ def makeThemeControl(parent)
22
+ frame = Tk::Tile::LabelFrame.new parent, text: 'Theme'
23
+
24
+ THEMELIST.each{|theme, name|
25
+ b = Tk::Tile::RadioButton.new(frame, text: name, value: theme,
26
+ command: proc{ Tk::Tile::Style.theme_use(theme) } )
27
+
28
+ b.grid sticky: 'ew'
29
+ b.state(:disabled) unless Tk::Tile::Style.theme_names.include?(theme)
30
+ }
31
+ RUBY_THEMELIST.each{|theme, name, available|
32
+ b = Tk::Tile::RadioButton.new(frame, text: name, value: theme,
33
+ command: proc{ Tk::Tile::Style.theme_use(theme) } )
34
+
35
+ b.grid sticky: 'ew'
36
+ b.state(:disabled) unless available # ? use #ttk_state
37
+ }
38
+ frame
39
+ end
40
+
41
+ makeThemeControl(Tk.root).pack side: 'left'
42
+
43
+
44
+ BUTTONS = ['open', 'new', 'save']
45
+ TOOLBARS = []
46
+ CHECKBOXES = ['bold', 'italic']
47
+ ICON = {}
48
+
49
+ #def loadIcons(file)
50
+ # Tk.load_tclscript(file)
51
+ # img_data = TkVarAccess.new('ImgData')
52
+ # img_data.keys.each{|icon|
53
+ # $ICON[icon] = TkPhotoImage.new(:data=>img_data[icon])
54
+ # }
55
+ #end
56
+ #loadIcons(File.join(demodir, 'iconlib.tcl'))
57
+
58
+
59
+ def makeToolbars(parent)
60
+ #
61
+ # Tile toolbar:
62
+ #
63
+
64
+ tb = Tk::Tile::Frame.new(parent, :class => 'Toolbar')
65
+ #tb = Tk::Tile::Frame.new(parent)
66
+ TOOLBARS << tb
67
+ i = 0
68
+ BUTTONS.each{|icon|
69
+ i += 1
70
+ Tk::Tile::Button.new(tb, text: icon,
71
+ # :image=>$ICON[icon],
72
+ # :compound=>$V[:COMPOUND],
73
+ :style=>:Toolbutton).grid(:row=>0, :column=>i,
74
+ :sticky=>:news)
75
+ }
76
+ CHECKBOXES.each{|icon|
77
+ i += 1
78
+ Tk::Tile::CheckButton.new(tb, text: icon,
79
+ #:image=>$ICON[icon],
80
+ #:variable=>$V.ref(icon),
81
+ #:compound=>$V[:COMPOUND],
82
+ :style=>:Toolbutton).grid(:row=>0, :column=>i,
83
+ :sticky=>:news)
84
+ }
85
+
86
+ mb = Tk::Tile::MenuButton.new(tb, text: 'toolbar',
87
+ #:image=>$ICON['file'],
88
+ #:compound=>$V[:COMPOUND]
89
+ )
90
+ mb.configure menu: makeCompoundMenu(mb)
91
+
92
+ i += 1
93
+ mb.grid(row: 0, column: i, sticky: :news)
94
+
95
+ i += 1
96
+ tb.grid_columnconfigure(i, weight: 1)
97
+
98
+ return tb
99
+ end
100
+
101
+ #
102
+ # Toolbar :compound control:
103
+ #
104
+ def makeCompoundMenu(mb)
105
+ menu = Tk::Menu.new(mb)
106
+ %w(text image none top bottom left right center).each{|str|
107
+ #menu.add(:radiobutton, :label=> Tk.tk_call('string', 'totitle', str),
108
+ menu.add(:radiobutton, :label=> str,
109
+ :value=>str,
110
+ #:variable=>$V.ref(:COMPOUND),
111
+ :command=> proc{ puts "foo"; true } )
112
+ }
113
+ menu
114
+ end
115
+
116
+ makeToolbars(Tk.root)
117
+ #makeToolbars(Tk.root).pack
118
+ TOOLBARS.each { |tb| tb.pack }
119
+
120
+
121
+ #puts Tk::Tile::Style.theme_names.inspect
122
+ Tk.mainloop
123
+
@@ -0,0 +1,135 @@
1
+ #
2
+ # based on:
3
+ # >> kroc.rb - by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
4
+ # >> kroc.tcl - Copyright (C) 2004 David Zolli <kroc@kroc.tk>
5
+ #
6
+
7
+ #NOTE not ready, needs photoimage and load_images
8
+ # * some parts are used in Tile::Style specs and work as excepted
9
+
10
+ #imgdir = File.join(File.dirname(__FILE__), 'kroc', 'kroc')
11
+ #$images = Tk::Tile.load_images(imgdir, '*.gif')
12
+
13
+ def kroc_rb_settings
14
+ Tk::Tile::Style.configure('.', :background=>'#FCB64F',
15
+ :troughcolor=>'#F8C278', :borderwidth=>1)
16
+
17
+
18
+ Tk::Tile::Style.configure('.', :font=>Tk::Tile::Font::Default, :borderwidth=>1)
19
+ Tk::Tile::Style.configure(:font=>Tk::Tile::Font::Default, :borderwidth=>1)
20
+
21
+
22
+ Tk::Tile::Style.map('.', :background=>[:active, '#694418'])
23
+ Tk::Tile::Style.map(:foreground=>[:disabled, '#B2B2B2', :active, '#FFE7CB'])
24
+
25
+
26
+ Tk::Tile::Style.configure('TButton', :padding=>[10,4])
27
+
28
+ Tk::Tile::Style.configure('TNotebook.Tab',
29
+ :padding=>[10, 3], :font=>Tk::Tile::Font::Default)
30
+
31
+ Tk::Tile::Style.map('TNotebook.Tab',
32
+ :background=>[:selected, '#FCB64F', '', '#FFE6BA'],
33
+ :foreground=>['', 'black'],
34
+ :padding=>[:selected, [10, 6, 10, 3]])
35
+
36
+ # Tk::Tile::Style.map('TScrollbar',
37
+ Tk::Tile::Style.map(Tk::Tile::TScrollbar,
38
+ :background=>[:pressed, '#694418'],
39
+ :arrowcolor=>[:pressed, '#FEF7CB'],
40
+ :relief=>[:pressed, :sunken])
41
+
42
+ # Tk::Tile::Style.layout('Vertical.TScrollbar',
43
+ Tk::Tile::Style.layout(Tk::Tile.style('Vertical', Tk::Tile::TScrollbar),
44
+ ['Scrollbar.trough', {:children=>[
45
+ 'Scrollbar.uparrow', {:side=>:top},
46
+ 'Scrollbar.downarrow', {:side=>:bottom},
47
+ 'Scrollbar.uparrow', {:side=>:bottom},
48
+ 'Scrollbar.thumb', {:side=>:top, :expand=>true}
49
+ ]}
50
+ ])
51
+
52
+ # Tk::Tile::Style.layout('Horizontal.TScrollbar',
53
+ Tk::Tile::Style.layout(Tk::Tile.style('Horizontal', Tk::Tile::TScrollbar),
54
+ ['Scrollbar.trough', {:children=>[
55
+ 'Scrollbar.leftarrow', {:side=>:left},
56
+ 'Scrollbar.rightarrow', {:side=>:right},
57
+ 'Scrollbar.leftarrow', {:side=>:right},
58
+ 'Scrollbar.thumb', {:side=>:left, :expand=>true}
59
+ ]}
60
+ ])
61
+
62
+ #
63
+ # Elements:
64
+ #
65
+ Tk::Tile::Style.element_create('Button.button',
66
+ :image,
67
+ [ $images['button-n'],
68
+ :pressed, $images['button-p'],
69
+ :active, $images['button-h'],
70
+ ], :border=>3, :sticky=>:ew)
71
+
72
+ Tk::Tile::Style.element_create('Checkbutton.indicator',
73
+ :image,
74
+ [ $images['check-nu'],
75
+ [:pressed, :selected],$images['check-nc'],
76
+ :pressed, $images['check-nu'],
77
+ [:active, :selected], $images['check-hc'],
78
+ :active, $images['check-hu'],
79
+ :selected, $images['check-nc'],
80
+ ], :sticky=>:w)
81
+
82
+ Tk::Tile::Style.element_create('Radiobutton.indicator',
83
+ :image,
84
+ [ $images['radio-nu'],
85
+ [:pressed,:selected],$images['radio-nc'],
86
+ :pressed, $images['radio-nu'],
87
+ [:active,:selected], $images['radio-hc'],
88
+ :active, $images['radio-hu'],
89
+ :selected, $images['radio-nc'],
90
+ ], :sticky=>:w)
91
+
92
+
93
+ #
94
+ # Settings:
95
+ #
96
+ # Tk::Tile::Style.layout(Tk::Tile::TButton,
97
+ Tk::Tile::Style.layout('TButton', [
98
+ 'Button.button', {:children=>[
99
+ 'Button.focus', {:children=>[
100
+ 'Button.padding', {:children=>[
101
+ 'Button.label', {:expand=>true, :sticky=>''}
102
+ ]}
103
+ ]}
104
+ ]}
105
+ ])
106
+
107
+ # Tk::Tile::Style.layout(Tk::Tile::TCheckbutton,
108
+ Tk::Tile::Style.layout('TCheckbutton', [
109
+ 'Checkbutton.background', # this is not needed in tile 0.5 or later
110
+ 'Checkbutton.border', {:children=>[
111
+ 'Checkbutton.padding', {:children=>[
112
+ 'Checkbutton.indicator', {:side=>:left},
113
+ 'Checkbutton.focus', {:side=>:left, :children=>[
114
+ 'Checkbutton.label'
115
+ ]}
116
+ ]}
117
+ ]}
118
+ ])
119
+
120
+ # Tk::Tile::Style.layout(Tk::Tile::TRadiobutton,
121
+ Tk::Tile::Style.layout('TRadiobutton', [
122
+ 'Radiobutton.background', # this is not needed in tile 0.5 or later
123
+ 'Radiobutton.border', {:children=>[
124
+ 'Radiobutton.padding', {:children=>[
125
+ 'Radiobutton.indicator', {:side=>:left},
126
+ 'Radiobutton.focus', {:expand=>true, :sticky=>:w, :children=>[
127
+ 'Radiobutton.label', {:side=>:right, :expand=>true}
128
+ ]}
129
+ ]}
130
+ ]}
131
+ ])
132
+ end
133
+
134
+ Tk::Tile::Style.theme_create( 'kroc-rb', parent: 'alt', settings: proc{ kroc_rb_settings() } )
135
+