ffi-tk 2009.11.29
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +748 -0
- data/MANIFEST +188 -0
- data/README.md +85 -0
- data/Rakefile +47 -0
- data/TODO.md +62 -0
- data/bin/rwish +33 -0
- data/doc/MIT_LICENSE +18 -0
- data/doc/TCL_LICENSE +39 -0
- data/example/choose_color.rb +22 -0
- data/example/choose_directory.rb +22 -0
- data/example/dialog.rb +37 -0
- data/example/hello.rb +11 -0
- data/example/message_box.rb +26 -0
- data/example/option_menu.rb +17 -0
- data/example/popup.rb +24 -0
- data/example/set_palette.rb +32 -0
- data/example/text.rb +47 -0
- data/example/tile/kroc_demo_small.rb +123 -0
- data/example/tile/kroc_rb_demo.rb +135 -0
- data/example/tile/notebook.rb +48 -0
- data/example/tile/theme_hello.rb +38 -0
- data/example/tile/treeview.rb +71 -0
- data/example/various.rb +25 -0
- data/example/wait.rb +16 -0
- data/ffi-tk.gemspec +33 -0
- data/lib/ffi-tk.rb +76 -0
- data/lib/ffi-tk/command.rb +39 -0
- data/lib/ffi-tk/command/after.rb +36 -0
- data/lib/ffi-tk/command/bell.rb +34 -0
- data/lib/ffi-tk/command/bind.rb +11 -0
- data/lib/ffi-tk/command/bindtags.rb +69 -0
- data/lib/ffi-tk/command/cget.rb +92 -0
- data/lib/ffi-tk/command/choose_color.rb +29 -0
- data/lib/ffi-tk/command/choose_directory.rb +45 -0
- data/lib/ffi-tk/command/clipboard.rb +102 -0
- data/lib/ffi-tk/command/configure.rb +88 -0
- data/lib/ffi-tk/command/destroy.rb +12 -0
- data/lib/ffi-tk/command/dialog.rb +54 -0
- data/lib/ffi-tk/command/event.rb +79 -0
- data/lib/ffi-tk/command/focus.rb +70 -0
- data/lib/ffi-tk/command/font.rb +124 -0
- data/lib/ffi-tk/command/get_open_file.rb +85 -0
- data/lib/ffi-tk/command/get_save_file.rb +83 -0
- data/lib/ffi-tk/command/grab.rb +141 -0
- data/lib/ffi-tk/command/grid.rb +246 -0
- data/lib/ffi-tk/command/image.rb +79 -0
- data/lib/ffi-tk/command/lower.rb +23 -0
- data/lib/ffi-tk/command/message_box.rb +65 -0
- data/lib/ffi-tk/command/option_menu.rb +8 -0
- data/lib/ffi-tk/command/pack.rb +99 -0
- data/lib/ffi-tk/command/place.rb +91 -0
- data/lib/ffi-tk/command/popup.rb +14 -0
- data/lib/ffi-tk/command/raise.rb +25 -0
- data/lib/ffi-tk/command/scrollable.rb +151 -0
- data/lib/ffi-tk/command/selection.rb +132 -0
- data/lib/ffi-tk/command/set_palette.rb +9 -0
- data/lib/ffi-tk/command/tk_cmd.rb +155 -0
- data/lib/ffi-tk/command/vars.rb +82 -0
- data/lib/ffi-tk/command/wait.rb +39 -0
- data/lib/ffi-tk/command/winfo.rb +668 -0
- data/lib/ffi-tk/command/wm.rb +1025 -0
- data/lib/ffi-tk/core_extensions.rb +154 -0
- data/lib/ffi-tk/event/data.rb +60 -0
- data/lib/ffi-tk/event/handler.rb +44 -0
- data/lib/ffi-tk/ffi/tcl.rb +92 -0
- data/lib/ffi-tk/ffi/tcl/cmd_proc.rb +10 -0
- data/lib/ffi-tk/ffi/tcl/eval_result.rb +148 -0
- data/lib/ffi-tk/ffi/tcl/interp.rb +95 -0
- data/lib/ffi-tk/ffi/tcl/obj.rb +89 -0
- data/lib/ffi-tk/ffi/tcl/time.rb +36 -0
- data/lib/ffi-tk/ffi/tk.rb +35 -0
- data/lib/ffi-tk/geometry.rb +32 -0
- data/lib/ffi-tk/thread_sender.rb +26 -0
- data/lib/ffi-tk/tk.rb +222 -0
- data/lib/ffi-tk/variable.rb +46 -0
- data/lib/ffi-tk/widget.rb +68 -0
- data/lib/ffi-tk/widget/button.rb +41 -0
- data/lib/ffi-tk/widget/canvas.rb +806 -0
- data/lib/ffi-tk/widget/canvas/arc.rb +18 -0
- data/lib/ffi-tk/widget/canvas/bitmap.rb +13 -0
- data/lib/ffi-tk/widget/canvas/image.rb +10 -0
- data/lib/ffi-tk/widget/canvas/item.rb +170 -0
- data/lib/ffi-tk/widget/canvas/line.rb +16 -0
- data/lib/ffi-tk/widget/canvas/oval.rb +15 -0
- data/lib/ffi-tk/widget/canvas/polygon.rb +16 -0
- data/lib/ffi-tk/widget/canvas/rectangle.rb +15 -0
- data/lib/ffi-tk/widget/canvas/text.rb +15 -0
- data/lib/ffi-tk/widget/canvas/window.rb +11 -0
- data/lib/ffi-tk/widget/checkbutton.rb +63 -0
- data/lib/ffi-tk/widget/entry.rb +208 -0
- data/lib/ffi-tk/widget/frame.rb +12 -0
- data/lib/ffi-tk/widget/label.rb +26 -0
- data/lib/ffi-tk/widget/labelframe.rb +7 -0
- data/lib/ffi-tk/widget/listbox.rb +192 -0
- data/lib/ffi-tk/widget/menu.rb +318 -0
- data/lib/ffi-tk/widget/menubutton.rb +7 -0
- data/lib/ffi-tk/widget/message.rb +36 -0
- data/lib/ffi-tk/widget/panedwindow.rb +164 -0
- data/lib/ffi-tk/widget/radiobutton.rb +43 -0
- data/lib/ffi-tk/widget/root.rb +8 -0
- data/lib/ffi-tk/widget/scale.rb +44 -0
- data/lib/ffi-tk/widget/scrollbar.rb +114 -0
- data/lib/ffi-tk/widget/spinbox.rb +198 -0
- data/lib/ffi-tk/widget/text.rb +893 -0
- data/lib/ffi-tk/widget/text/peer.rb +10 -0
- data/lib/ffi-tk/widget/tile.rb +70 -0
- data/lib/ffi-tk/widget/tile/button.rb +8 -0
- data/lib/ffi-tk/widget/tile/checkbutton.rb +8 -0
- data/lib/ffi-tk/widget/tile/combobox.rb +43 -0
- data/lib/ffi-tk/widget/tile/entry.rb +8 -0
- data/lib/ffi-tk/widget/tile/frame.rb +13 -0
- data/lib/ffi-tk/widget/tile/label.rb +9 -0
- data/lib/ffi-tk/widget/tile/labelframe.rb +8 -0
- data/lib/ffi-tk/widget/tile/menubutton.rb +8 -0
- data/lib/ffi-tk/widget/tile/notebook.rb +93 -0
- data/lib/ffi-tk/widget/tile/panedwindow.rb +9 -0
- data/lib/ffi-tk/widget/tile/progressbar.rb +59 -0
- data/lib/ffi-tk/widget/tile/radiobutton.rb +8 -0
- data/lib/ffi-tk/widget/tile/scale.rb +8 -0
- data/lib/ffi-tk/widget/tile/scrollbar.rb +41 -0
- data/lib/ffi-tk/widget/tile/separator.rb +23 -0
- data/lib/ffi-tk/widget/tile/sizegrip.rb +24 -0
- data/lib/ffi-tk/widget/tile/style.rb +114 -0
- data/lib/ffi-tk/widget/tile/treeview.rb +414 -0
- data/lib/ffi-tk/widget/toplevel.rb +14 -0
- data/spec/ffi-tk/command/bindtags.rb +18 -0
- data/spec/ffi-tk/command/clipboard.rb +18 -0
- data/spec/ffi-tk/command/font.rb +67 -0
- data/spec/ffi-tk/command/grid.rb +6 -0
- data/spec/ffi-tk/command/image.rb +26 -0
- data/spec/ffi-tk/command/pack.rb +20 -0
- data/spec/ffi-tk/command/place.rb +20 -0
- data/spec/ffi-tk/command/selection.rb +13 -0
- data/spec/ffi-tk/command/vars.rb +32 -0
- data/spec/ffi-tk/command/winfo.rb +233 -0
- data/spec/ffi-tk/command/wm.rb +185 -0
- data/spec/ffi-tk/event.rb +95 -0
- data/spec/ffi-tk/tile/button.rb +51 -0
- data/spec/ffi-tk/tile/checkbutton.rb +13 -0
- data/spec/ffi-tk/tile/combobox.rb +65 -0
- data/spec/ffi-tk/tile/entry.rb +61 -0
- data/spec/ffi-tk/tile/frame.rb +65 -0
- data/spec/ffi-tk/tile/label.rb +17 -0
- data/spec/ffi-tk/tile/labelframe.rb +13 -0
- data/spec/ffi-tk/tile/menubutton.rb +13 -0
- data/spec/ffi-tk/tile/notebook.rb +103 -0
- data/spec/ffi-tk/tile/panedwindow.rb +13 -0
- data/spec/ffi-tk/tile/progressbar.rb +78 -0
- data/spec/ffi-tk/tile/radiobutton.rb +13 -0
- data/spec/ffi-tk/tile/scale.rb +13 -0
- data/spec/ffi-tk/tile/scrollbar.rb +43 -0
- data/spec/ffi-tk/tile/separator.rb +22 -0
- data/spec/ffi-tk/tile/sizegrip.rb +13 -0
- data/spec/ffi-tk/tile/style.rb +161 -0
- data/spec/ffi-tk/tile/treeview.rb +101 -0
- data/spec/ffi-tk/variable.rb +24 -0
- data/spec/ffi-tk/widget/button.rb +22 -0
- data/spec/ffi-tk/widget/canvas.rb +169 -0
- data/spec/ffi-tk/widget/checkbutton.rb +44 -0
- data/spec/ffi-tk/widget/entry.rb +155 -0
- data/spec/ffi-tk/widget/frame.rb +8 -0
- data/spec/ffi-tk/widget/label.rb +16 -0
- data/spec/ffi-tk/widget/labelframe.rb +12 -0
- data/spec/ffi-tk/widget/listbox.rb +19 -0
- data/spec/ffi-tk/widget/menu.rb +12 -0
- data/spec/ffi-tk/widget/menubutton.rb +12 -0
- data/spec/ffi-tk/widget/message.rb +12 -0
- data/spec/ffi-tk/widget/panedwindow.rb +12 -0
- data/spec/ffi-tk/widget/radiobutton.rb +12 -0
- data/spec/ffi-tk/widget/root.rb +9 -0
- data/spec/ffi-tk/widget/scale.rb +12 -0
- data/spec/ffi-tk/widget/scrollbar.rb +12 -0
- data/spec/ffi-tk/widget/spinbox.rb +12 -0
- data/spec/ffi-tk/widget/text.rb +246 -0
- data/spec/ffi-tk/widget/toplevel.rb +12 -0
- data/spec/helper.rb +3 -0
- data/tasks/authors.rake +21 -0
- data/tasks/bacon.rake +66 -0
- data/tasks/changelog.rake +18 -0
- data/tasks/gem.rake +22 -0
- data/tasks/gem_setup.rake +113 -0
- data/tasks/grancher.rake +12 -0
- data/tasks/manifest.rake +4 -0
- data/tasks/rcov.rake +17 -0
- data/tasks/release.rake +65 -0
- data/tasks/reversion.rake +8 -0
- data/tasks/setup.rake +12 -0
- data/tasks/ycov.rake +84 -0
- 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,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
|
+
|