tk-win 0.2.0-x86-mingw32
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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/lib/tcltk.rb +367 -0
- data/lib/tk.rb +5682 -0
- data/lib/tk/after.rb +6 -0
- data/lib/tk/autoload.rb +760 -0
- data/lib/tk/bgerror.rb +29 -0
- data/lib/tk/bindtag.rb +138 -0
- data/lib/tk/button.rb +31 -0
- data/lib/tk/canvas.rb +816 -0
- data/lib/tk/canvastag.rb +459 -0
- data/lib/tk/checkbutton.rb +32 -0
- data/lib/tk/clipboard.rb +75 -0
- data/lib/tk/clock.rb +71 -0
- data/lib/tk/composite.rb +484 -0
- data/lib/tk/console.rb +52 -0
- data/lib/tk/dialog.rb +326 -0
- data/lib/tk/encodedstr.rb +187 -0
- data/lib/tk/entry.rb +120 -0
- data/lib/tk/event.rb +562 -0
- data/lib/tk/font.rb +2351 -0
- data/lib/tk/frame.rb +132 -0
- data/lib/tk/grid.rb +279 -0
- data/lib/tk/image.rb +275 -0
- data/lib/tk/itemconfig.rb +1222 -0
- data/lib/tk/itemfont.rb +327 -0
- data/lib/tk/kinput.rb +71 -0
- data/lib/tk/label.rb +22 -0
- data/lib/tk/labelframe.rb +31 -0
- data/lib/tk/listbox.rb +284 -0
- data/lib/tk/macpkg.rb +80 -0
- data/lib/tk/menu.rb +718 -0
- data/lib/tk/menubar.rb +137 -0
- data/lib/tk/menuspec.rb +456 -0
- data/lib/tk/message.rb +24 -0
- data/lib/tk/mngfocus.rb +33 -0
- data/lib/tk/msgcat.rb +296 -0
- data/lib/tk/namespace.rb +551 -0
- data/lib/tk/optiondb.rb +377 -0
- data/lib/tk/optionobj.rb +212 -0
- data/lib/tk/pack.rb +107 -0
- data/lib/tk/package.rb +143 -0
- data/lib/tk/palette.rb +55 -0
- data/lib/tk/panedwindow.rb +260 -0
- data/lib/tk/place.rb +128 -0
- data/lib/tk/radiobutton.rb +73 -0
- data/lib/tk/root.rb +95 -0
- data/lib/tk/scale.rb +112 -0
- data/lib/tk/scrollable.rb +82 -0
- data/lib/tk/scrollbar.rb +183 -0
- data/lib/tk/scrollbox.rb +39 -0
- data/lib/tk/selection.rb +86 -0
- data/lib/tk/spinbox.rb +144 -0
- data/lib/tk/tagfont.rb +43 -0
- data/lib/tk/text.rb +1604 -0
- data/lib/tk/textimage.rb +88 -0
- data/lib/tk/textmark.rb +204 -0
- data/lib/tk/texttag.rb +321 -0
- data/lib/tk/textwindow.rb +154 -0
- data/lib/tk/timer.rb +669 -0
- data/lib/tk/toplevel.rb +264 -0
- data/lib/tk/ttk_selector.rb +98 -0
- data/lib/tk/txtwin_abst.rb +39 -0
- data/lib/tk/validation.rb +397 -0
- data/lib/tk/variable.rb +1799 -0
- data/lib/tk/virtevent.rb +139 -0
- data/lib/tk/winfo.rb +392 -0
- data/lib/tk/winpkg.rb +156 -0
- data/lib/tk/wm.rb +552 -0
- data/lib/tk/xim.rb +122 -0
- data/lib/tkafter.rb +4 -0
- data/lib/tkbgerror.rb +4 -0
- data/lib/tkcanvas.rb +4 -0
- data/lib/tkclass.rb +47 -0
- data/lib/tkconsole.rb +4 -0
- data/lib/tkdialog.rb +4 -0
- data/lib/tkentry.rb +4 -0
- data/lib/tkextlib/ICONS.rb +13 -0
- data/lib/tkextlib/ICONS/icons.rb +129 -0
- data/lib/tkextlib/ICONS/setup.rb +8 -0
- data/lib/tkextlib/SUPPORT_STATUS +198 -0
- data/lib/tkextlib/blt.rb +189 -0
- data/lib/tkextlib/blt/barchart.rb +79 -0
- data/lib/tkextlib/blt/bitmap.rb +112 -0
- data/lib/tkextlib/blt/busy.rb +83 -0
- data/lib/tkextlib/blt/component.rb +2218 -0
- data/lib/tkextlib/blt/container.rb +28 -0
- data/lib/tkextlib/blt/cutbuffer.rb +23 -0
- data/lib/tkextlib/blt/dragdrop.rb +269 -0
- data/lib/tkextlib/blt/eps.rb +32 -0
- data/lib/tkextlib/blt/graph.rb +67 -0
- data/lib/tkextlib/blt/htext.rb +112 -0
- data/lib/tkextlib/blt/setup.rb +8 -0
- data/lib/tkextlib/blt/spline.rb +23 -0
- data/lib/tkextlib/blt/stripchart.rb +74 -0
- data/lib/tkextlib/blt/table.rb +412 -0
- data/lib/tkextlib/blt/tabnotebook.rb +110 -0
- data/lib/tkextlib/blt/tabset.rb +504 -0
- data/lib/tkextlib/blt/ted.rb +68 -0
- data/lib/tkextlib/blt/tile.rb +25 -0
- data/lib/tkextlib/blt/tile/button.rb +16 -0
- data/lib/tkextlib/blt/tile/checkbutton.rb +17 -0
- data/lib/tkextlib/blt/tile/frame.rb +16 -0
- data/lib/tkextlib/blt/tile/label.rb +16 -0
- data/lib/tkextlib/blt/tile/radiobutton.rb +17 -0
- data/lib/tkextlib/blt/tile/scrollbar.rb +16 -0
- data/lib/tkextlib/blt/tile/toplevel.rb +16 -0
- data/lib/tkextlib/blt/tree.rb +1058 -0
- data/lib/tkextlib/blt/treeview.rb +1287 -0
- data/lib/tkextlib/blt/unix_dnd.rb +141 -0
- data/lib/tkextlib/blt/vector.rb +256 -0
- data/lib/tkextlib/blt/watch.rb +175 -0
- data/lib/tkextlib/blt/win_printer.rb +61 -0
- data/lib/tkextlib/blt/winop.rb +107 -0
- data/lib/tkextlib/bwidget.rb +153 -0
- data/lib/tkextlib/bwidget/arrowbutton.rb +21 -0
- data/lib/tkextlib/bwidget/bitmap.rb +21 -0
- data/lib/tkextlib/bwidget/button.rb +31 -0
- data/lib/tkextlib/bwidget/buttonbox.rb +90 -0
- data/lib/tkextlib/bwidget/combobox.rb +62 -0
- data/lib/tkextlib/bwidget/dialog.rb +194 -0
- data/lib/tkextlib/bwidget/dragsite.rb +31 -0
- data/lib/tkextlib/bwidget/dropsite.rb +39 -0
- data/lib/tkextlib/bwidget/dynamichelp.rb +63 -0
- data/lib/tkextlib/bwidget/entry.rb +43 -0
- data/lib/tkextlib/bwidget/label.rb +41 -0
- data/lib/tkextlib/bwidget/labelentry.rb +80 -0
- data/lib/tkextlib/bwidget/labelframe.rb +52 -0
- data/lib/tkextlib/bwidget/listbox.rb +361 -0
- data/lib/tkextlib/bwidget/mainframe.rb +132 -0
- data/lib/tkextlib/bwidget/messagedlg.rb +192 -0
- data/lib/tkextlib/bwidget/notebook.rb +166 -0
- data/lib/tkextlib/bwidget/pagesmanager.rb +73 -0
- data/lib/tkextlib/bwidget/panedwindow.rb +42 -0
- data/lib/tkextlib/bwidget/panelframe.rb +67 -0
- data/lib/tkextlib/bwidget/passwddlg.rb +44 -0
- data/lib/tkextlib/bwidget/progressbar.rb +20 -0
- data/lib/tkextlib/bwidget/progressdlg.rb +58 -0
- data/lib/tkextlib/bwidget/scrollableframe.rb +40 -0
- data/lib/tkextlib/bwidget/scrolledwindow.rb +48 -0
- data/lib/tkextlib/bwidget/scrollview.rb +25 -0
- data/lib/tkextlib/bwidget/selectcolor.rb +73 -0
- data/lib/tkextlib/bwidget/selectfont.rb +91 -0
- data/lib/tkextlib/bwidget/separator.rb +20 -0
- data/lib/tkextlib/bwidget/setup.rb +8 -0
- data/lib/tkextlib/bwidget/spinbox.rb +98 -0
- data/lib/tkextlib/bwidget/statusbar.rb +62 -0
- data/lib/tkextlib/bwidget/titleframe.rb +33 -0
- data/lib/tkextlib/bwidget/tree.rb +500 -0
- data/lib/tkextlib/bwidget/widget.rb +129 -0
- data/lib/tkextlib/itcl.rb +13 -0
- data/lib/tkextlib/itcl/incr_tcl.rb +178 -0
- data/lib/tkextlib/itcl/setup.rb +13 -0
- data/lib/tkextlib/itk.rb +13 -0
- data/lib/tkextlib/itk/incr_tk.rb +446 -0
- data/lib/tkextlib/itk/setup.rb +13 -0
- data/lib/tkextlib/iwidgets.rb +94 -0
- data/lib/tkextlib/iwidgets/buttonbox.rb +121 -0
- data/lib/tkextlib/iwidgets/calendar.rb +125 -0
- data/lib/tkextlib/iwidgets/canvasprintbox.rb +53 -0
- data/lib/tkextlib/iwidgets/canvasprintdialog.rb +38 -0
- data/lib/tkextlib/iwidgets/checkbox.rb +130 -0
- data/lib/tkextlib/iwidgets/combobox.rb +104 -0
- data/lib/tkextlib/iwidgets/dateentry.rb +20 -0
- data/lib/tkextlib/iwidgets/datefield.rb +58 -0
- data/lib/tkextlib/iwidgets/dialog.rb +20 -0
- data/lib/tkextlib/iwidgets/dialogshell.rb +121 -0
- data/lib/tkextlib/iwidgets/disjointlistbox.rb +50 -0
- data/lib/tkextlib/iwidgets/entryfield.rb +185 -0
- data/lib/tkextlib/iwidgets/extbutton.rb +40 -0
- data/lib/tkextlib/iwidgets/extfileselectionbox.rb +46 -0
- data/lib/tkextlib/iwidgets/extfileselectiondialog.rb +33 -0
- data/lib/tkextlib/iwidgets/feedback.rb +35 -0
- data/lib/tkextlib/iwidgets/fileselectionbox.rb +46 -0
- data/lib/tkextlib/iwidgets/fileselectiondialog.rb +33 -0
- data/lib/tkextlib/iwidgets/finddialog.rb +42 -0
- data/lib/tkextlib/iwidgets/hierarchy.rb +365 -0
- data/lib/tkextlib/iwidgets/hyperhelp.rb +50 -0
- data/lib/tkextlib/iwidgets/labeledframe.rb +39 -0
- data/lib/tkextlib/iwidgets/labeledwidget.rb +45 -0
- data/lib/tkextlib/iwidgets/mainwindow.rb +67 -0
- data/lib/tkextlib/iwidgets/menubar.rb +212 -0
- data/lib/tkextlib/iwidgets/messagebox.rb +93 -0
- data/lib/tkextlib/iwidgets/messagedialog.rb +20 -0
- data/lib/tkextlib/iwidgets/notebook.rb +175 -0
- data/lib/tkextlib/iwidgets/optionmenu.rb +92 -0
- data/lib/tkextlib/iwidgets/panedwindow.rb +134 -0
- data/lib/tkextlib/iwidgets/promptdialog.rb +131 -0
- data/lib/tkextlib/iwidgets/pushbutton.rb +35 -0
- data/lib/tkextlib/iwidgets/radiobox.rb +121 -0
- data/lib/tkextlib/iwidgets/scopedobject.rb +24 -0
- data/lib/tkextlib/iwidgets/scrolledcanvas.rb +353 -0
- data/lib/tkextlib/iwidgets/scrolledframe.rb +59 -0
- data/lib/tkextlib/iwidgets/scrolledhtml.rb +58 -0
- data/lib/tkextlib/iwidgets/scrolledlistbox.rb +207 -0
- data/lib/tkextlib/iwidgets/scrolledtext.rb +568 -0
- data/lib/tkextlib/iwidgets/scrolledwidget.rb +20 -0
- data/lib/tkextlib/iwidgets/selectionbox.rb +102 -0
- data/lib/tkextlib/iwidgets/selectiondialog.rb +92 -0
- data/lib/tkextlib/iwidgets/setup.rb +8 -0
- data/lib/tkextlib/iwidgets/shell.rb +38 -0
- data/lib/tkextlib/iwidgets/spindate.rb +48 -0
- data/lib/tkextlib/iwidgets/spinint.rb +30 -0
- data/lib/tkextlib/iwidgets/spinner.rb +169 -0
- data/lib/tkextlib/iwidgets/spintime.rb +48 -0
- data/lib/tkextlib/iwidgets/tabnotebook.rb +181 -0
- data/lib/tkextlib/iwidgets/tabset.rb +145 -0
- data/lib/tkextlib/iwidgets/timeentry.rb +25 -0
- data/lib/tkextlib/iwidgets/timefield.rb +58 -0
- data/lib/tkextlib/iwidgets/toolbar.rb +112 -0
- data/lib/tkextlib/iwidgets/watch.rb +56 -0
- data/lib/tkextlib/pkg_checker.rb +184 -0
- data/lib/tkextlib/setup.rb +8 -0
- data/lib/tkextlib/tcllib.rb +105 -0
- data/lib/tkextlib/tcllib/autoscroll.rb +158 -0
- data/lib/tkextlib/tcllib/ctext.rb +160 -0
- data/lib/tkextlib/tcllib/cursor.rb +97 -0
- data/lib/tkextlib/tcllib/datefield.rb +57 -0
- data/lib/tkextlib/tcllib/dialog.rb +84 -0
- data/lib/tkextlib/tcllib/getstring.rb +134 -0
- data/lib/tkextlib/tcllib/history.rb +73 -0
- data/lib/tkextlib/tcllib/ico.rb +146 -0
- data/lib/tkextlib/tcllib/ip_entry.rb +75 -0
- data/lib/tkextlib/tcllib/panelframe.rb +78 -0
- data/lib/tkextlib/tcllib/plotchart.rb +1404 -0
- data/lib/tkextlib/tcllib/ruler.rb +65 -0
- data/lib/tkextlib/tcllib/screenruler.rb +68 -0
- data/lib/tkextlib/tcllib/scrollwin.rb +61 -0
- data/lib/tkextlib/tcllib/setup.rb +8 -0
- data/lib/tkextlib/tcllib/style.rb +61 -0
- data/lib/tkextlib/tcllib/superframe.rb +51 -0
- data/lib/tkextlib/tcllib/swaplist.rb +150 -0
- data/lib/tkextlib/tcllib/tablelist.rb +28 -0
- data/lib/tkextlib/tcllib/tablelist_core.rb +1072 -0
- data/lib/tkextlib/tcllib/tablelist_tile.rb +43 -0
- data/lib/tkextlib/tcllib/tkpiechart.rb +314 -0
- data/lib/tkextlib/tcllib/tooltip.rb +104 -0
- data/lib/tkextlib/tcllib/widget.rb +82 -0
- data/lib/tkextlib/tclx.rb +13 -0
- data/lib/tkextlib/tclx/setup.rb +8 -0
- data/lib/tkextlib/tclx/tclx.rb +74 -0
- data/lib/tkextlib/tile.rb +449 -0
- data/lib/tkextlib/tile/dialog.rb +102 -0
- data/lib/tkextlib/tile/setup.rb +8 -0
- data/lib/tkextlib/tile/sizegrip.rb +32 -0
- data/lib/tkextlib/tile/style.rb +336 -0
- data/lib/tkextlib/tile/tbutton.rb +34 -0
- data/lib/tkextlib/tile/tcheckbutton.rb +38 -0
- data/lib/tkextlib/tile/tcombobox.rb +55 -0
- data/lib/tkextlib/tile/tentry.rb +49 -0
- data/lib/tkextlib/tile/tframe.rb +34 -0
- data/lib/tkextlib/tile/tlabel.rb +34 -0
- data/lib/tkextlib/tile/tlabelframe.rb +38 -0
- data/lib/tkextlib/tile/tmenubutton.rb +38 -0
- data/lib/tkextlib/tile/tnotebook.rb +147 -0
- data/lib/tkextlib/tile/tpaned.rb +245 -0
- data/lib/tkextlib/tile/tprogressbar.rb +57 -0
- data/lib/tkextlib/tile/tradiobutton.rb +38 -0
- data/lib/tkextlib/tile/treeview.rb +1306 -0
- data/lib/tkextlib/tile/tscale.rb +56 -0
- data/lib/tkextlib/tile/tscrollbar.rb +63 -0
- data/lib/tkextlib/tile/tseparator.rb +34 -0
- data/lib/tkextlib/tile/tsquare.rb +30 -0
- data/lib/tkextlib/tkDND.rb +18 -0
- data/lib/tkextlib/tkDND/setup.rb +8 -0
- data/lib/tkextlib/tkDND/shape.rb +125 -0
- data/lib/tkextlib/tkDND/tkdnd.rb +182 -0
- data/lib/tkextlib/tkHTML.rb +13 -0
- data/lib/tkextlib/tkHTML/htmlwidget.rb +453 -0
- data/lib/tkextlib/tkHTML/setup.rb +8 -0
- data/lib/tkextlib/tkimg.rb +36 -0
- data/lib/tkextlib/tkimg/bmp.rb +33 -0
- data/lib/tkextlib/tkimg/gif.rb +33 -0
- data/lib/tkextlib/tkimg/ico.rb +33 -0
- data/lib/tkextlib/tkimg/jpeg.rb +33 -0
- data/lib/tkextlib/tkimg/pcx.rb +33 -0
- data/lib/tkextlib/tkimg/pixmap.rb +44 -0
- data/lib/tkextlib/tkimg/png.rb +33 -0
- data/lib/tkextlib/tkimg/ppm.rb +33 -0
- data/lib/tkextlib/tkimg/ps.rb +33 -0
- data/lib/tkextlib/tkimg/setup.rb +8 -0
- data/lib/tkextlib/tkimg/sgi.rb +33 -0
- data/lib/tkextlib/tkimg/sun.rb +33 -0
- data/lib/tkextlib/tkimg/tga.rb +33 -0
- data/lib/tkextlib/tkimg/tiff.rb +33 -0
- data/lib/tkextlib/tkimg/window.rb +33 -0
- data/lib/tkextlib/tkimg/xbm.rb +33 -0
- data/lib/tkextlib/tkimg/xpm.rb +33 -0
- data/lib/tkextlib/tktable.rb +14 -0
- data/lib/tkextlib/tktable/setup.rb +8 -0
- data/lib/tkextlib/tktable/tktable.rb +966 -0
- data/lib/tkextlib/tktrans.rb +14 -0
- data/lib/tkextlib/tktrans/setup.rb +8 -0
- data/lib/tkextlib/tktrans/tktrans.rb +64 -0
- data/lib/tkextlib/treectrl.rb +13 -0
- data/lib/tkextlib/treectrl/setup.rb +8 -0
- data/lib/tkextlib/treectrl/tktreectrl.rb +2522 -0
- data/lib/tkextlib/trofs.rb +13 -0
- data/lib/tkextlib/trofs/setup.rb +8 -0
- data/lib/tkextlib/trofs/trofs.rb +51 -0
- data/lib/tkextlib/version.rb +6 -0
- data/lib/tkextlib/vu.rb +48 -0
- data/lib/tkextlib/vu/bargraph.rb +61 -0
- data/lib/tkextlib/vu/charts.rb +53 -0
- data/lib/tkextlib/vu/dial.rb +102 -0
- data/lib/tkextlib/vu/pie.rb +286 -0
- data/lib/tkextlib/vu/setup.rb +8 -0
- data/lib/tkextlib/vu/spinbox.rb +22 -0
- data/lib/tkextlib/winico.rb +14 -0
- data/lib/tkextlib/winico/setup.rb +8 -0
- data/lib/tkextlib/winico/winico.rb +224 -0
- data/lib/tkfont.rb +4 -0
- data/lib/tkmacpkg.rb +4 -0
- data/lib/tkmenubar.rb +4 -0
- data/lib/tkmngfocus.rb +4 -0
- data/lib/tkpalette.rb +4 -0
- data/lib/tkscrollbox.rb +4 -0
- data/lib/tktext.rb +4 -0
- data/lib/tkvirtevent.rb +4 -0
- data/lib/tkwinpkg.rb +4 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/tk-win_spec.rb +7 -0
- data/tk-win.gemspec +373 -0
- metadata +412 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Elia Schito
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
= tk-win
|
2
|
+
|
3
|
+
Description goes here.
|
4
|
+
|
5
|
+
== Note on Patches/Pull Requests
|
6
|
+
|
7
|
+
* Fork the project.
|
8
|
+
* Make your feature addition or bug fix.
|
9
|
+
* Add tests for it. This is important so I don't break it in a
|
10
|
+
future version unintentionally.
|
11
|
+
* Commit, do not mess with rakefile, version, or history.
|
12
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
13
|
+
* Send me a pull request. Bonus points for topic branches.
|
14
|
+
|
15
|
+
== Copyright
|
16
|
+
|
17
|
+
Copyright (c) 2010 Elia Schito. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "tk-win"
|
8
|
+
gem.summary = %Q{RubyTk bindings for windows bundled with tcltklib and tkutil}
|
9
|
+
gem.description = %Q{RubyTk bindings for windows bundled with Tcl8.5}
|
10
|
+
gem.email = "elia.schito@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/elia/tk-win"
|
12
|
+
gem.authors = ["Hidetoshi NAGAI", "Elia Schito"]
|
13
|
+
gem.add_development_dependency "rspec", "~> 1.2.9"
|
14
|
+
gem.platform = 'x86-mingw32'
|
15
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
|
+
end
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
rescue LoadError
|
19
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
20
|
+
end
|
21
|
+
|
22
|
+
require 'spec/rake/spectask'
|
23
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
24
|
+
spec.libs << 'lib' << 'spec'
|
25
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
26
|
+
end
|
27
|
+
|
28
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
29
|
+
spec.libs << 'lib' << 'spec'
|
30
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
31
|
+
spec.rcov = true
|
32
|
+
end
|
33
|
+
|
34
|
+
task :spec => :check_dependencies
|
35
|
+
|
36
|
+
task :default => :spec
|
37
|
+
|
38
|
+
require 'rake/rdoctask'
|
39
|
+
Rake::RDocTask.new do |rdoc|
|
40
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
41
|
+
|
42
|
+
rdoc.rdoc_dir = 'rdoc'
|
43
|
+
rdoc.title = "tk-win #{version}"
|
44
|
+
rdoc.rdoc_files.include('README*')
|
45
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
46
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.0
|
data/lib/tcltk.rb
ADDED
@@ -0,0 +1,367 @@
|
|
1
|
+
# tof
|
2
|
+
|
3
|
+
#### tcltk library, more direct manipulation of tcl/tk
|
4
|
+
#### Sep. 5, 1997 Y. Shigehiro
|
5
|
+
|
6
|
+
require "tcltklib"
|
7
|
+
|
8
|
+
################
|
9
|
+
|
10
|
+
# module TclTk: collection of tcl/tk utilities (supplies namespace.)
|
11
|
+
module TclTk
|
12
|
+
|
13
|
+
# initialize Hash to hold unique symbols and such
|
14
|
+
@namecnt = {}
|
15
|
+
|
16
|
+
# initialize Hash to hold callbacks
|
17
|
+
@callback = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
# TclTk.mainloop(): call TclTkLib.mainloop()
|
21
|
+
def TclTk.mainloop()
|
22
|
+
print("mainloop: start\n") if $DEBUG
|
23
|
+
TclTkLib.mainloop()
|
24
|
+
print("mainloop: end\n") if $DEBUG
|
25
|
+
end
|
26
|
+
|
27
|
+
# TclTk.deletecallbackkey(ca): remove callback from TclTk module
|
28
|
+
# this does not remove callbacks from tcl/tk interpreter
|
29
|
+
# without calling this method, TclTkInterpreter will not be GCed
|
30
|
+
# ca: callback(TclTkCallback)
|
31
|
+
def TclTk.deletecallbackkey(ca)
|
32
|
+
print("deletecallbackkey: ", ca.to_s(), "\n") if $DEBUG
|
33
|
+
@callback.delete(ca.to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
# TclTk.dcb(ca, wid, W): call TclTk.deletecallbackkey() for each callbacks
|
37
|
+
# in an array.
|
38
|
+
# this is for callback for top-level <Destroy>
|
39
|
+
# ca: array of callbacks(TclTkCallback)
|
40
|
+
# wid: top-level widget(TclTkWidget)
|
41
|
+
# w: information about window given by %W(String)
|
42
|
+
def TclTk.dcb(ca, wid, w)
|
43
|
+
if wid.to_s() == w
|
44
|
+
ca.each{|i|
|
45
|
+
TclTk.deletecallbackkey(i)
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# TclTk._addcallback(ca): register callback
|
51
|
+
# ca: callback(TclTkCallback)
|
52
|
+
def TclTk._addcallback(ca)
|
53
|
+
print("_addcallback: ", ca.to_s(), "\n") if $DEBUG
|
54
|
+
@callback[ca.to_s()] = ca
|
55
|
+
end
|
56
|
+
|
57
|
+
# TclTk._callcallback(key, arg): invoke registered callback
|
58
|
+
# key: key to select callback (to_s value of the TclTkCallback)
|
59
|
+
# arg: parameter from tcl/tk interpreter
|
60
|
+
def TclTk._callcallback(key, arg)
|
61
|
+
print("_callcallback: ", @callback[key].inspect, "\n") if $DEBUG
|
62
|
+
@callback[key]._call(arg)
|
63
|
+
# throw out callback value
|
64
|
+
# should return String to satisfy rb_eval_string()
|
65
|
+
return ""
|
66
|
+
end
|
67
|
+
|
68
|
+
# TclTk._newname(prefix): generate unique name(String)
|
69
|
+
# prefix: prefix of the unique name
|
70
|
+
def TclTk._newname(prefix)
|
71
|
+
# generated name counter is stored in @namecnt
|
72
|
+
if !@namecnt.key?(prefix)
|
73
|
+
# first appearing prefix, initialize
|
74
|
+
@namecnt[prefix] = 1
|
75
|
+
else
|
76
|
+
# already appeared prefix, generate next name
|
77
|
+
@namecnt[prefix] += 1
|
78
|
+
end
|
79
|
+
return "#{prefix}#{@namecnt[prefix]}"
|
80
|
+
end
|
81
|
+
|
82
|
+
################
|
83
|
+
|
84
|
+
# class TclTkInterpreter: tcl/tk interpreter
|
85
|
+
class TclTkInterpreter
|
86
|
+
|
87
|
+
# initialize():
|
88
|
+
def initialize()
|
89
|
+
# generate interpreter object
|
90
|
+
@ip = TclTkIp.new()
|
91
|
+
|
92
|
+
# add ruby_fmt command to tcl interpreter
|
93
|
+
# ruby_fmt command format arguments by `format' and call `ruby' command
|
94
|
+
# (notice ruby command receives only one argument)
|
95
|
+
if $DEBUG
|
96
|
+
@ip._eval("proc ruby_fmt {fmt args} { puts \"ruby_fmt: $fmt $args\" ; set cmd [list ruby [format $fmt $args]] ; uplevel $cmd }")
|
97
|
+
else
|
98
|
+
@ip._eval("proc ruby_fmt {fmt args} { set cmd [list ruby [format $fmt $args]] ; uplevel $cmd }")
|
99
|
+
end
|
100
|
+
|
101
|
+
# @ip._get_eval_string(*args): generate string to evaluate in tcl interpreter
|
102
|
+
# *args: script which is going to be evaluated under tcl/tk
|
103
|
+
def @ip._get_eval_string(*args)
|
104
|
+
argstr = ""
|
105
|
+
args.each{|arg|
|
106
|
+
argstr += " " if argstr != ""
|
107
|
+
# call to_eval if it is defined
|
108
|
+
if (arg.respond_to?(:to_eval))
|
109
|
+
argstr += arg.to_eval()
|
110
|
+
else
|
111
|
+
# call to_s unless defined
|
112
|
+
argstr += arg.to_s()
|
113
|
+
end
|
114
|
+
}
|
115
|
+
return argstr
|
116
|
+
end
|
117
|
+
|
118
|
+
# @ip._eval_args(*args): evaluate string under tcl/tk interpreter
|
119
|
+
# returns result string.
|
120
|
+
# *args: script which is going to be evaluated under tcl/tk
|
121
|
+
def @ip._eval_args(*args)
|
122
|
+
# calculate the string to eval in the interpreter
|
123
|
+
argstr = _get_eval_string(*args)
|
124
|
+
|
125
|
+
# evaluate under the interpreter
|
126
|
+
print("_eval: \"", argstr, "\"") if $DEBUG
|
127
|
+
res = _eval(argstr)
|
128
|
+
if $DEBUG
|
129
|
+
print(" -> \"", res, "\"\n")
|
130
|
+
elsif _return_value() != 0
|
131
|
+
print(res, "\n")
|
132
|
+
end
|
133
|
+
fail(%Q/can't eval "#{argstr}"/) if _return_value() != 0 #'
|
134
|
+
return res
|
135
|
+
end
|
136
|
+
|
137
|
+
# generate tcl/tk command object and register in the hash
|
138
|
+
@commands = {}
|
139
|
+
# for all commands registered in tcl/tk interpreter:
|
140
|
+
@ip._eval("info command").split(/ /).each{|comname|
|
141
|
+
if comname =~ /^[.]/
|
142
|
+
# if command is a widget (path), generate TclTkWidget,
|
143
|
+
# and register it in the hash
|
144
|
+
@commands[comname] = TclTkWidget.new(@ip, comname)
|
145
|
+
else
|
146
|
+
# otherwise, generate TclTkCommand
|
147
|
+
@commands[comname] = TclTkCommand.new(@ip, comname)
|
148
|
+
end
|
149
|
+
}
|
150
|
+
end
|
151
|
+
|
152
|
+
# commands(): returns hash of the tcl/tk commands
|
153
|
+
def commands()
|
154
|
+
return @commands
|
155
|
+
end
|
156
|
+
|
157
|
+
# rootwidget(): returns root widget(TclTkWidget)
|
158
|
+
def rootwidget()
|
159
|
+
return @commands["."]
|
160
|
+
end
|
161
|
+
|
162
|
+
# _tcltkip(): returns @ip(TclTkIp)
|
163
|
+
def _tcltkip()
|
164
|
+
return @ip
|
165
|
+
end
|
166
|
+
|
167
|
+
# method_missing(id, *args): execute undefined method as tcl/tk command
|
168
|
+
# id: method symbol
|
169
|
+
# *args: method arguments
|
170
|
+
def method_missing(id, *args)
|
171
|
+
# if command named by id registered, then execute it
|
172
|
+
if @commands.key?(id.id2name)
|
173
|
+
return @commands[id.id2name].e(*args)
|
174
|
+
else
|
175
|
+
# otherwise, exception
|
176
|
+
super
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
# class TclTkObject: base class of the tcl/tk objects
|
182
|
+
class TclTkObject
|
183
|
+
|
184
|
+
# initialize(ip, exp):
|
185
|
+
# ip: interpreter(TclTkIp)
|
186
|
+
# exp: tcl/tk representation
|
187
|
+
def initialize(ip, exp)
|
188
|
+
fail("type is not TclTkIp") if !ip.kind_of?(TclTkIp)
|
189
|
+
@ip = ip
|
190
|
+
@exp = exp
|
191
|
+
end
|
192
|
+
|
193
|
+
# to_s(): returns tcl/tk representation
|
194
|
+
def to_s()
|
195
|
+
return @exp
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
# class TclTkCommand: tcl/tk commands
|
200
|
+
# you should not call TclTkCommand.new()
|
201
|
+
# commands are created by TclTkInterpreter:initialize()
|
202
|
+
class TclTkCommand < TclTkObject
|
203
|
+
|
204
|
+
# e(*args): execute command. returns String (e is for exec or eval)
|
205
|
+
# *args: command arguments
|
206
|
+
def e(*args)
|
207
|
+
return @ip._eval_args(to_s(), *args)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# class TclTkLibCommand: tcl/tk commands in the library
|
212
|
+
class TclTkLibCommand < TclTkCommand
|
213
|
+
|
214
|
+
# initialize(ip, name):
|
215
|
+
# ip: interpreter(TclTkInterpreter)
|
216
|
+
# name: command name (String)
|
217
|
+
def initialize(ip, name)
|
218
|
+
super(ip._tcltkip, name)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
# class TclTkVariable: tcl/tk variable
|
223
|
+
class TclTkVariable < TclTkObject
|
224
|
+
|
225
|
+
# initialize(interp, dat):
|
226
|
+
# interp: interpreter(TclTkInterpreter)
|
227
|
+
# dat: the value to set(String)
|
228
|
+
# if nil, not initialize variable
|
229
|
+
def initialize(interp, dat)
|
230
|
+
# auto-generate tcl/tk representation (variable name)
|
231
|
+
exp = TclTk._newname("v_")
|
232
|
+
# initialize TclTkObject
|
233
|
+
super(interp._tcltkip(), exp)
|
234
|
+
# safe this for `set' command
|
235
|
+
@set = interp.commands()["set"]
|
236
|
+
# set value
|
237
|
+
set(dat) if dat
|
238
|
+
end
|
239
|
+
|
240
|
+
# although you can set/read variables by using set in tcl/tk,
|
241
|
+
# we provide the method for accessing variables
|
242
|
+
|
243
|
+
# set(data): set tcl/tk variable using `set'
|
244
|
+
# data: new value
|
245
|
+
def set(data)
|
246
|
+
@set.e(to_s(), data.to_s())
|
247
|
+
end
|
248
|
+
|
249
|
+
# get(): read tcl/tk variable(String) using `set'
|
250
|
+
def get()
|
251
|
+
return @set.e(to_s())
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
# class TclTkWidget: tcl/tk widget
|
256
|
+
class TclTkWidget < TclTkCommand
|
257
|
+
|
258
|
+
# initialize(*args):
|
259
|
+
# *args: parameters
|
260
|
+
def initialize(*args)
|
261
|
+
if args[0].kind_of?(TclTkIp)
|
262
|
+
# in case the 1st argument is TclTkIp:
|
263
|
+
|
264
|
+
# Wrap tcl/tk widget by TclTkWidget
|
265
|
+
# (used in TclTkInterpreter#initialize())
|
266
|
+
|
267
|
+
# need two arguments
|
268
|
+
fail("invalid # of parameter") if args.size != 2
|
269
|
+
|
270
|
+
# ip: interpreter(TclTkIp)
|
271
|
+
# exp: tcl/tk representation
|
272
|
+
ip, exp = args
|
273
|
+
|
274
|
+
# initialize TclTkObject
|
275
|
+
super(ip, exp)
|
276
|
+
elsif args[0].kind_of?(TclTkInterpreter)
|
277
|
+
# in case 1st parameter is TclTkInterpreter:
|
278
|
+
|
279
|
+
# generate new widget from parent widget
|
280
|
+
|
281
|
+
# interp: interpreter(TclTkInterpreter)
|
282
|
+
# parent: parent widget
|
283
|
+
# command: widget generating tk command(label ��)
|
284
|
+
# *args: argument to the command
|
285
|
+
interp, parent, command, *args = args
|
286
|
+
|
287
|
+
# generate widget name
|
288
|
+
exp = parent.to_s()
|
289
|
+
exp += "." if exp !~ /[.]$/
|
290
|
+
exp += TclTk._newname("w_")
|
291
|
+
# initialize TclTkObject
|
292
|
+
super(interp._tcltkip(), exp)
|
293
|
+
# generate widget
|
294
|
+
res = @ip._eval_args(command, exp, *args)
|
295
|
+
# fail("can't create Widget") if res != exp
|
296
|
+
# for tk_optionMenu, it is legal res != exp
|
297
|
+
else
|
298
|
+
fail("first parameter is not TclTkInterpreter")
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
# class TclTkCallback: tcl/tk callbacks
|
304
|
+
class TclTkCallback < TclTkObject
|
305
|
+
|
306
|
+
# initialize(interp, pr, arg):
|
307
|
+
# interp: interpreter(TclTkInterpreter)
|
308
|
+
# pr: callback procedure(Proc)
|
309
|
+
# arg: string to pass as block parameters of pr
|
310
|
+
# bind command of tcl/tk uses % replacement for parameters
|
311
|
+
# pr can receive replaced data using block parameter
|
312
|
+
# its format is specified by arg string
|
313
|
+
# You should not specify arg for the command like
|
314
|
+
# scrollbar with -command option, which receives parameters
|
315
|
+
# without specifying any replacement
|
316
|
+
def initialize(interp, pr, arg = nil)
|
317
|
+
# auto-generate tcl/tk representation (variable name)
|
318
|
+
exp = TclTk._newname("c_")
|
319
|
+
# initialize TclTkObject
|
320
|
+
super(interp._tcltkip(), exp)
|
321
|
+
# save parameters
|
322
|
+
@pr = pr
|
323
|
+
@arg = arg
|
324
|
+
# register in the module
|
325
|
+
TclTk._addcallback(self)
|
326
|
+
end
|
327
|
+
|
328
|
+
# to_eval(): retuens string representation for @ip._eval_args
|
329
|
+
def to_eval()
|
330
|
+
if @arg
|
331
|
+
# bind replaces %s before calling ruby_fmt, so %%s is used
|
332
|
+
s = %Q/{ruby_fmt {TclTk._callcallback("#{to_s()}", "%%s")} #{@arg}}/
|
333
|
+
else
|
334
|
+
s = %Q/{ruby_fmt {TclTk._callcallback("#{to_s()}", "%s")}}/
|
335
|
+
end
|
336
|
+
|
337
|
+
return s
|
338
|
+
end
|
339
|
+
|
340
|
+
# _call(arg): invoke callback
|
341
|
+
# arg: callback parameter
|
342
|
+
def _call(arg)
|
343
|
+
@pr.call(arg)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
# class TclTkImage: tcl/tk images
|
348
|
+
class TclTkImage < TclTkCommand
|
349
|
+
|
350
|
+
# initialize(interp, t, *args):
|
351
|
+
# generating image is done by TclTkImage.new()
|
352
|
+
# destrying is done by image delete (inconsistent, sigh)
|
353
|
+
# interp: interpreter(TclTkInterpreter)
|
354
|
+
# t: image type (photo, bitmap, etc.)
|
355
|
+
# *args: command argument
|
356
|
+
def initialize(interp, t, *args)
|
357
|
+
# auto-generate tcl/tk representation
|
358
|
+
exp = TclTk._newname("i_")
|
359
|
+
# initialize TclTkObject
|
360
|
+
super(interp._tcltkip(), exp)
|
361
|
+
# generate image
|
362
|
+
res = @ip._eval_args("image create", t, exp, *args)
|
363
|
+
fail("can't create Image") if res != exp
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
# eof
|