From: Hidetoshi NAGAI Date: 2003-06-19T05:01:30+09:00 Subject: [ruby-list:37798] Ruby/Tk 更新 永井@知能.九工大です. Ruby/Tk のバグフィックスおよび機能追加を行いました. 今回の修正はかなり多くなっておりますので, 機能的な見落としがあったりテストが十分ではなかったりするかもしれません. もし良かったら,CVS で入手してテストしていただけると助かります. なお今回の修正では http://ns103.net/~arai/ruby/rubytk.html.gz の 注釈を参考にさせていただきました. 以下に各注釈に対する対応を記します. '-------' となっているものは「とりあえず保留」であるとか, 「ソースでの対応の必要なし」とか,「記述についてはおまかせ」とかで, とりあえずはコメントなしの項目です. ========================================================= *1 : 多分可能だけど,no check *2 : その通りと考えていい *3 : その通り.ruby2tcl で install_cmd はやっているので,後方互換の意味のみ. *4 : ------- *5 : TkWindow クラスの def destroy で super で使っている *6 : ------- *7 : ------- *8 : 現在は private *9 : どうだったかな??? そう言っても問題ない気がする *10 : 現在は消滅したオプション.少なくとも Tk8.0 以降では使えないので 消してしまってもいいかも.あるいは,警告を出す? *11 : ------- *12 : class メソッドと衝突するため *13 : 正しく数値の配列で返すように修正 *14 : ------- *15 : ------- *16 : ------- *17 : ------- *18 : ------- *19 : ------- *20 : ------- *21 : ------- *22 : ------- *23 : ------- *24 : ------- *25 : ------- *26 : ------- *27 : ------- *28 : ------- *29 : ------- *30 : ------- *31 : ごもっとも.private に変更 *32 : ------- *33 : ごもっとも.private に変更 *34 : 数値,文字列はそのままに Tcl 変数の値となる. Array,Hash は連想配列(Arrayの場合は index をキーとする)になる. Array は Tcl のリストに変換するという考えもあったが, Ruby 的感覚での index アクセスを許すために現状のようにしている. *35 : 可能だと思う. ------------------------------------------ Tk.tk_call('namespace', 'children') #==> "::auto_mkindex_parser" v = TkVarAccess.new('::auto_mkindex_parser::aaa', 3) Tk.tk_call('namespace', 'eval', '::auto_mkindex_parser', 'set', 'aaa') #==> "3" v.value #==> "3" ------------------------------------------ Tk.tk_call('set', 'aaa(0)', 1) Tk.tk_call('set', 'aaa(1)', 2) v = TkVarAccess.new('aaa') v[0] #==> "1" v[1] #==> "2" ------------------------------------------ *36 : ------- *37 : ------- *38 : ------- *39 : イベントのコールバック引数をスキャンして適切な型に変換するように修正 *40 : ------- *41 : TkComm::Event::TypeNum モジュールで定数定義を行った *42 : ------- *43 : ------- *44 : ------- *45 : ------- *46 : ------- *47 : ------- *48 : ------- *49 : ------- *50 : 可能であるように修正 *51 : ------- *52 : エラーハンドラを設定できるように set_handler を追加 *53 : ------- *54 : 10進数値でない時には例外を発生するように変更 *55 : ------- *56 : private に設定 *57 : private に設定 *58 : private に設定 *59 : private に設定 *60 : private に設定 *61 : ------- *62 : /^\./ にマッチする場合はオブジェクトに変換し,他は nil を返すように修正 *63 : ------- *64 : ------- *65 : ------- *66 : 設定時には設定した文字列を返すように修正 *67 : Tcl/Tk が動くようにしか動かない (つまり Ruby/Tk 側ではどうしようもない) *68 : Tcl/Tk が動くようにしか動かない (つまり Ruby/Tk 側ではどうしようもない) *69 : ------- *70 : 次のようにビットマップファイルを指定することは可能 ('@'に注意) ------------------------------------------ Tk.root.iconbitmap '@/usr/share/tgif/tgificon.xbm' ------------------------------------------ TkBitmapImage は image タイプであって bitmap タイプではないため, bitmap 属性の値としては指定できない (image 属性の値となる). *71 : ------- *72 : ------- *73 : ------- *74 : ------- *75 : 情報を得る場合は columnconfiginfo の方を使う *76 : columnconfiginfo の方は Hash で返す *77 : 情報を得る場合は rowconfiginfo の方を使う *78 : rowconfiginfo の方は Hash で返す *79 : Tk.focus_next と Tk.focus_prev とを追加 *80 : ごもっとも.オブジェクトを返すように修正 *81 : ごもっとも.オブジェクトを返すように修正 *82 : 例えば配置後に propagate を設定することで嬉しいケースがある ruby-talk ML での質問で,text widget の minsize を指定すると window がその最小サイズに合わせられてしまうというのがあった. その対策として,通常サイズを指定した text widget を配置した後に propagate を設定してサイズの伝播を止めて,それから minsize を指定した. geometry を指定するのでは,あまりうまくはいかないと思う. *83 : 表示領域が足りないときは,pack 順序が後のものの表示を省略する *84 : ------- *85 : ------- *86 : ------- *87 : サポートするように修正 *88 : サポートするように修正 *89 : サポートするように修正 *90 : サポートするように修正 *91 : ------- *92 : ------- *93 : ------- *94 : ------- *95 : どの visual クラスが使えるかは TkWinfo.visualsavailable で確認できる. UNIX (X) なら xdpyinfo でも確認できる. 指定形式は Tk_GetVisual の man に示されている. 例えば,DirectColor クラスの depth 8 を指定するなら, visual 属性の値として,'directcolor 8' という文字列か, ['directcolor', 8] というような配列で与えればよい. ------------------------------------------ t = TkToplevel.new(:visual=>'truecolor 8') f = TkFrame.new(:parent=>t, :visual=>'directcolor 4') ------------------------------------------ 配列は,Tk インタープリタに渡されるときにリストに変換されるので, どちらで指定しても Tk インタープリタが受け取るのは同じものになる. *96 : 同上 *97 : ------- *98 : ------- *99 : ------- *100: ------- *101: ------- *102: ------- ========================================================= -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp