From: NAGAI Hidetoshi Date: 1998-07-21T16:34:04+09:00 Subject: [ruby-dev:3351] Re: tk.rb patch (for ruby-1.1c0) 永井@知能.九工大です. >>>>> "t" == ttate writes: t> TkWinfo.containingが別のTkコマンドを t> 発行しています。 t> また、rolodexが一応完成したのでチェックを t> して明日かあさってには下記URLにおいておきます。 t> http://www.jaist.ac.jp/~ttate/ftp/ruby-tk-demo/ t> (URL変更しました。) ありがとうございます.先ほど受け取りました. ついでに,unofficial patch です. 私が以前流した 1.1c0 からのパッチ後の状態からのパッチになっています. # 立石さんの修正は含まれていません. このパッチで OK なら,ixset, rmt の移植が完了, つまり,すべての widget demo の移植が完了となります. パッチが取り込まれることになりましたら, 簡単な README を添えて Ruby_Tk-widget-demo-v1.0 として リリースということになります. # パッチが取り込まれることになった場合, # 「1.1c1 以上で動作」ということにしとけばいいですよね? # > まつもとさん -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp --- tk.rb.new1 Fri Jul 17 20:27:41 1998 +++ tk.rb Tue Jul 21 15:18:41 1998 @@ -26,6 +26,8 @@ private :error_at def _genobj_for_tkwidget(path) + return TkRoot.new if path == '.' + begin tk_class = TkCore::INTERP._invoke('winfo', 'class', path) rescue @@ -94,7 +96,33 @@ list += tk_split_list(str[i+1..-1]) list end - private :tk_tcl2ruby, :tk_split_list + + def tk_split_simplelist(str) + return [] if str == "" + idx = str.index('{') + return str.split unless idx + + list = str[0,idx].split + str = str[idx+1..-1] + i = -1 + brace = 1 + str.each_byte {|c| + i += 1 + brace += 1 if c == ?{ + brace -= 1 if c == ?} + break if brace == 0 + } + if i == 0 + list.push '' + elsif str[0, i] == ' ' + list.push ' ' + else + list.push str[0..i-1] + end + list += tk_split_simplelist(str[i+1..-1]) + list + end + private :tk_tcl2ruby, :tk_split_list, :tk_split_simplelist def hash_kv(keys) conf = [] @@ -445,6 +473,10 @@ appsend_displayof(interp, win, async, *args) end + def info(*args) + tk_call('info', *args) + end + def mainloop TclTkLib.mainloop end @@ -681,7 +713,7 @@ def value begin - INTERP._eval(format('global %s; set %s', @id, @id)) + tk_tcl2ruby(INTERP._eval(format('global %s; set %s', @id, @id))) rescue if INTERP._eval(format('global %s; array exists %s', @id, @id)) != "1" raise @@ -1093,22 +1125,10 @@ end def TkWinfo.interps(window=nil) if window - tk_split_list(tk_call('winfo', '-displayof', window.path, - 'interps')).collect{|ip| - if ip.kind_of? Array - ip.flatten.join(' ') - else - ip - end - } + tk_split_simplelist(tk_call('winfo', '-displayof', window.path, + 'interps')) else - tk_split_list(tk_call('winfo', 'interps')).collect{|ip| - if ip.kind_of? Array - ip.flatten.join(' ') - else - ip - end - } + tk_split_simplelist(tk_call('winfo', 'interps')) end end def winfo_interps @@ -1120,6 +1140,12 @@ def winfo_mapped? TkWinfo.mapped? self end + def TkWinfo.appname(window) + bool(tk_call('winfo', 'name', window.path)) + end + def winfo_appname + TkWinfo.appname self + end def TkWinfo.parent(window) window(tk_call('winfo', 'parent', window.path)) end @@ -2201,6 +2227,9 @@ end def insert(index, type, keys=nil) tk_send 'add', index, type, *hash_kv(keys) + end + def delete(index, last=None) + tk_send 'delete', index, last end def post(x, y) tk_send 'post', x, y