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,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
+