ruby--ruby/ext/tcltklib
nagai d8b02b5096 tk.rb :
* small bug fix
 * rename 'no_create' option to 'without_creating'
 * add TkWindow#pack_in,  TkWindow#grid_in,  TkWindow#place_in
 * add TkWindow#bind_class and TkWindow#database_class
   If defined specific_class (@db_class), bind_class returns @db_class.
   In other case, bind_class returns TkWinow#class().
   It is useful for binding.
   TkWindow#database_class is defined for querying the option database.
   It's same to TkWinfo.classname(self).
 * add TkBindTag.new_by_name and TkDatabaseClass for binding to database class
 * check varname whether already exsist or not. (TkVarAccess.new)
 * TkTextWin#bbox returns an array of four numbers
 * autoload TkDialog2, TkWarning2
 * scan event callback arguments and convert to proper type
 * TkBindTag.new accepts a block ( TkBindTag.new(context){callback} )
 * If given taglist, TkWindow#bindtags(taglist) returns taglist
 * add TkWindow#bindtags=(taglist)
 * Tk.focue and Tk.focus_lastfor return nil if there is no target widget.
 * Tk::Wm.client returns the argument string when setting name
 * TkGrid.columnconfiginfo and rowconfiginfo given a slot return a number.
 * TkWindow.grid_columnconfiginfo and grid_rowconfiginfo :: ditto
 * rename and define alias :: TkOption ==> TkOptionDB
 * define alias :: TkTimer ==> TkAfter
 * some instance methods change from public to private
 * some TkComm methods change to module functions
   (help to treat return values from Tk)
 * add support for -displayof option to some TkWinfo methods
 * bind, bind_append and bind_remove :: returns the target of event-binding
 * add Tk8.4 features
 * add TkPaneWindow

tkdialog.rb:
 * classes without showing at initialize : TkDialog2, TkWarning2
 * add show method to reuse TkDialog object
 * some instance methods change from public to private
 * add new features for configuration

tktext.rb :
 * small bug fix
 * some methods return self
 * add TkTextMark#+(mod) and TkTextMark#-(mod) (e.g. mark + '3 chars')
 * add some methods

tkcanvas.rb :
 * small bug fix
 * some methods return self

tkentry.rb :
 * some methods return self
 * TkEntry#bbox returns an array of four numbers
 * scan validatecommand arguments and convert to proper type

tkbgerror.rb :
 * support to define a error handler by user

tcltklib.rb :
 * reported by Ferenc Engard <engard@all.hu> on [ruby-talk:60759]

                                     ... and so on


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3960 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2003-06-18 19:46:20 +00:00
..
demo Initial revision 1998-01-16 12:19:09 +00:00
lib tk.rb : 2003-06-18 19:46:20 +00:00
sample * eval.c (rb_eval): NODE_EVSTR is no longer used. 2002-06-24 07:20:42 +00:00
.cvsignore * configure.in: modify program_prefix only if specified 2002-09-08 09:08:15 +00:00
MANIFEST eban 2000-08-08 05:06:24 +00:00
MANUAL.euc Initial revision 1998-01-16 12:19:09 +00:00
README.euc Initial revision 1998-01-16 12:19:09 +00:00
depend eban 2000-08-09 21:27:10 +00:00
extconf.rb * eval.c (load_dyna): clear ruby_errinfo. (ruby-bugs-ja PR#409) 2003-03-20 06:27:22 +00:00
stubs.c * configure.in, defines.h, dir.c, dir.h, dln.c, error.c, 2002-12-15 03:18:08 +00:00
tcltklib.c fix : 100% CPU problem of Tk.mainloop 2003-06-09 18:09:11 +00:00

README.euc

(tof)
	tcltk ライブラリ
	tcltklib ライブラリ
		Sep. 19, 1997	Y. Shigehiro

以下, 「tcl/tk」という表記は, tclsh や wish を実現している, 一般でいう
ところの tcl/tk を指します. 「tcltk ライブラリ」, 「tcltklib ライブラ
リ」という表記は, 本パッケージに含まれる ruby 用のライブラリを指します.

[ファイルについて]

README.euc : このファイル(注意, 特徴, インストールの方法).
MANUAL.euc : マニュアル.

lib/, ext/ : ライブラリの実体.

sample/ : マニュアル代わりのサンプルプログラム.
sample/sample0.rb : tcltklib ライブラリのテスト.
sample/sample1.rb : tcltk ライブラリのテスト.
    tcl/tk (wish) でできそうなことを一通り書いてみました.
sample/sample2.rb : tcltk ライブラリのサンプル.
    maeda shugo (shugo@po.aianet.ne.jp) 氏による
    (`rb.tk' で書かれていた) ruby のサンプルプログラム
	http://www.aianet.or.jp/~shugo/ruby/othello.rb.gz
    を tcltk ライブラリを使うように, 機械的に変更してみました.

demo/ : 100 本の線を 100 回描くデモプログラム.
    最初に空ループの時間を測定し, 続いて実際に線を引く時間を測定します.
    tcl/tk は(再)描画のときに backing store を使わずに律義に 10000 本(?)
    線を引くので, (再)描画を始めると, マシンがかなり重くなります.
demo/lines0.tcl : wish 用のスクリプト.
demo/lines1.rb : `tk.rb' 用のスクリプト.
demo/lines2.rb : tcltk ライブラリ用のスクリプト.

[注意]

コンパイル/実行には, tcl/tk の C ライブラリが必要です.

このライブラリは,

	ruby-1.0-970701, ruby-1.0-970911, ruby-1.0-970919
	FreeBSD 2.2.2-RELEASE
	およびそのパッケージ jp-tcl-7.6.tgz, jp-tk-4.2.tgz

で作成/動作確認しました. 他の環境では動作するかどうかわかりません.

TclTkLib.mainloop を実行中に Control-C が効かないのは不便なので, ruby 
のソースを参考に, #include "sig.h" して trap_immediate を操作していま
すが, ruby の README.EXT にも書いてないのに, こんなことをして良いのか
どうかわかりません.

-d オプションでデバッグ情報を表示させるために, ruby のソースを参考に,
debug という大域変数を参照していますが, ruby の README.EXT にも書いて
ないのに, こんなことをして良いのかどうかわかりません.

extconf.rb は書きましたが, (いろいろな意味で)これで良いのか良く分かり
ません.

[特徴]

ruby から tcl/tk ライブラリを利用できます.

tcl/tk インタプリタのスクリプトは, 機械的に tcltk ライブラリ用の ruby 
スクリプトに変換できます.

(`tk.rb' との違い)

1. tcl/tk インタプリタのスクリプトが, どのように, tcltk ライブラリ用の 
   ruby スクリプトに変換されるかが理解できれば, マニュアル類が無いに等
   しい `tk.rb' とは異なり

	tcl/tk のマニュアルやオンラインドキュメントを用いて

   効率良くプログラミングを行うことができます.
   記述方法がわからない, コマンドに与えるパラメータがわからない...
     - Canvas.new { ... } と, なぜイテレータブロックを書けるの??
     - Canvas の bbox は数値のリストを返すのに, xview は文字列を返すの??
   と, いちいち, ライブラリのソースを追いかける必要はありません.

2. 個々の機能(オプション)を個別処理によりサポートしており, そのためサ
   ポートしていない機能は使うことができない(本当は使えないこともないの
   ですが) `tk.rb' とは異なり, tcl/tk インタプリタで可能なことは

	ほとんど

   ruby からも実行できます. 現在, ruby から実行できないことが確認され
   ているのは,

	bind コマンドでスクリプトを追加する構文
	「bind tag sequence +script」
                            ^

   のみです.
     - `. configure -width' をしようとして, `Tk.root.height()' と書い
      たのに, `undefined method `height'' と怒られてしまった. tk.rb を
      読んでみて, ガーン. できないのか...
   ということはありません.

3. wish プロセスを起動しプロセス間通信で wish を利用する `tk.rb' とは
   異なり, tcl/tk の C ライブラリをリンクし

	より高速に (といっても, 思った程は速くないですが)

   処理を行います.

4. `tk.rb' ほど, 高水準なインターフェースを備えていないため, tcl/tk イ
   ンタプリタの生成等

	何から何まで自分で記述

   しなければなりません(その代わり, tcl/tk ライブラリの仕様通り,
   tcl/tk インタプリタを複数生成することもできますが).
   インターフェースは(おそらく) ruby の思想に沿ったものではありません. 
   また, スクリプトの記述は

	ダサダサ

   です. スクリプトは, 一見, 読みづらいものとなります. が, 書く人にとっ
   ては, それほど煩わしいものではないと思います.

[インストールの方法]

0. ruby のソースファイル(ruby-1.0-なんたら.tgz)を展開しておきます.

1. ruby-1.0-なんたら/ext に ext/tcltklib をコピーします.
	cp -r ext/tcltklib ???/ruby-1.0-なんたら/ext/

2. ruby のインストール法に従い make 等をします.

3. ruby のライブラリ置場に lib/* をコピーします.
	cp lib/* /usr/local/lib/ruby/

(eof)