[ruby-dev:21066] patch for tkentry.rb
From:
Hidetoshi NAGAI <nagai@...>
Date:
2003-08-02 00:23:20 UTC
List:
ruby-dev #21066
永井@知能.九工大です.
ネットワークの不調(多分)のために CVS に接続できず,
commit したくてもできないでいます.
このメールも届くかどうかわかりませんが,
もし届きましたら,添付のパッチの適用をお願いできないでしょうか.
特に tkentry.rb の修正は,「なんでこんなバグが今に至るまで
報告されていないのか」というようなものですし,
demo のパッチも,一部機能拡張を含んではいますが
ほとんどがそのデモを正常に動作させるためのものです.
これを適用しなければエラーを出してしまって動きません.
ご迷惑をおかけしますが,よろしくお願いします.
# 一人だとなかなかすべてには目が行き届きませんね.(;_;)
-----<修正内容>-------------------------
* (bug fix) TkEntry#delete
* (bug fix) some widget demos
* support <TkVariable object> == <Symbol>
( "coerce TkVariable" add to the TODO list :-) )
----------------------------------------
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/lib/tk.rb ./lib/tk.rb
--- ../../../ruby-1.8.0-preview7/ext/tk/lib/tk.rb 2003-08-01 16:08:43.000000000 +0900
+++ ./lib/tk.rb 2003-08-02 07:04:07.000000000 +0900
@@ -1839,6 +1839,10 @@
string(value).to_s
end
+ def to_symbol
+ value.intern
+ end
+
def inspect
format "#<TkVariable: %s>", @id
end
@@ -1849,6 +1853,8 @@
self.equal?(other)
when String
self.to_s == other
+ when Symbol
+ self.to_symbol == other
when Integer
self.to_i == other
when Float
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/lib/tkentry.rb ./lib/tkentry.rb
--- ../../../ruby-1.8.0-preview7/ext/tk/lib/tkentry.rb 2003-07-30 16:17:59.000000000 +0900
+++ ./lib/tkentry.rb 2003-08-02 05:11:50.000000000 +0900
@@ -158,7 +158,7 @@
self
end
def delete(first, last=None)
- tk_send 'insert', first, last
+ tk_send 'delete', first, last
self
end
def mark(pos)
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/rmt ./sample/demos-en/rmt
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/rmt 2003-08-01 05:52:37.000000000 +0900
+++ ./sample/demos-en/rmt 2003-08-02 05:54:55.000000000 +0900
@@ -53,10 +53,8 @@
# Create text window and scrollbar.
- @txt = TkText.new(root, 'relief'=>'sunken', 'bd'=>2, 'setgrid'=>true) {|t|
- TkScrollbar.new(root, 'command'=>proc{|*args| t.yview *args}) {
- pack('side'=>'right', 'fill'=>'both')
- }
+ @txt = TkText.new(root, 'relief'=>'sunken', 'bd'=>2, 'setgrid'=>true) {
+ yscrollbar(TkScrollbar.new(root){pack('side'=>'right', 'fill'=>'y')})
pack('side'=>'left')
}
@@ -247,13 +245,18 @@
rescue
end
TkWinfo.interps.sort.each{|ip|
- if Tk.appsend(ip, false, 'info commands ruby') == ""
- mode = 'Tcl'
- else
- mode = 'Ruby'
+ begin
+ if Tk.appsend(ip, false, 'info commands ruby') == ""
+ mode = 'Tcl'
+ else
+ mode = 'Ruby'
+ end
+ menu.add('command', 'label'=>format("%s (#{mode}/Tk)", ip),
+ 'command'=>proc{win.newApp ip, mode})
+ rescue
+ menu.add('command', 'label'=>format("%s (unknown Tk)", ip),
+ 'command'=>proc{win.newApp ip, mode}, 'state'=>'disabled')
end
- menu.add('command', 'label'=>format("%s (#{mode}/Tk)", ip),
- 'command'=>proc{win.newApp ip, mode})
}
menu.add('command', 'label'=>format("local (Ruby/Tk)"),
'command'=>proc{win.newApp 'local', 'Ruby'})
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/rolodex ./sample/demos-en/rolodex
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/rolodex 2003-08-01 05:52:37.000000000 +0900
+++ ./sample/demos-en/rolodex 2003-08-02 06:23:06.000000000 +0900
@@ -4,7 +4,7 @@
# This script is a part of Tom LaStrange's rolodex
#
# Copyright (C) 1998 by Takaaki Tateishi <ttate@jaist.ac.jp>
-# Time-stamp: "98/07/20 12:00:02 ttate"
+# Time-stamp: "03/08/02 06:23:06 nagai"
#
require "tk"
@@ -176,8 +176,8 @@
class Rolodex < TkRoot
attr_reader :frame, :buttons, :menu
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@frame = RolodexFrame.new(self)
@frame.pack("side"=>"top",
"fill"=>"y",
@@ -314,7 +314,7 @@
EOF
$helpTopics["version"] = <<EOF
-This is version 1.0.
+This is version 1.0.1.
EOF
Tk.mainloop
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/rolodex-j ./sample/demos-en/rolodex-j
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/rolodex-j 2003-08-01 05:52:37.000000000 +0900
+++ ./sample/demos-en/rolodex-j 2003-08-02 06:23:32.000000000 +0900
@@ -4,7 +4,7 @@
# このスクリプトは Tom LaStrange の rolodex の一部です。
#
# Copyright (C) 1998 by Takaaki Tateishi <ttate@jaist.ac.jp>
-# Time-stamp: "98/07/20 12:00:36 ttate"
+# Time-stamp: "03/08/02 06:23:32 nagai"
#
require "tk"
@@ -198,8 +198,8 @@
class Rolodex < TkRoot
attr_reader :frame, :buttons, :menu
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@frame = RolodexFrame.new(self)
@frame.pack("side"=>"top",
"fill"=>"y",
@@ -318,7 +318,7 @@
EOF
$helpTopics["バージョン情報"] = <<EOF
-バージョンは 1.0 です。
+バージョンは 1.0.1 です。
EOF
Tk.mainloop
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/tcolor ./sample/demos-en/tcolor
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/tcolor 2003-08-01 05:52:37.000000000 +0900
+++ ./sample/demos-en/tcolor 2003-08-02 07:24:53.000000000 +0900
@@ -15,7 +15,7 @@
# Tkによって変更される変数はTkVariableのインスタンスを使う。
-$colorSpace = TkVariable.new(:rgb)
+$colorSpace = TkVariable.new(:rgb.to_i)
$red = 65535
$green = 0
$blue = 0
@@ -30,6 +30,12 @@
$label3 = TkVariable.new("label3")
+# setup the entry of the resourc database
+if (TkVarAccess.new('tcl_platform')['platform'] == 'unix')
+ TkOptionDB.add('*Entry.background', 'white')
+end
+
+
# 各イベント用のメソッド
def rgbToHsv(red,green,blue)
@@ -132,7 +138,7 @@
scale2 = $root.middle.middle.scale2
scale3 = $root.middle.middle.scale3
- case $colorSpace.to_i
+ case $colorSpace.value.intern
when :rgb
$red = (scale1.get * 65.535).to_i
$green = (scale2.get * 65.535).to_i
@@ -167,7 +173,7 @@
scale2 = $root.middle.middle.scale2
scale3 = $root.middle.middle.scale3
- case $colorSpace.to_i
+ case $colorSpace.value.intern
when :rgb
scale1.set($red / 65.535)
scale2.set($green / 65.535)
@@ -289,7 +295,7 @@
"command" => proc{changeColorSpace(:hsb)}
add "separator"
add "radio",
- "label" => "Qutomatic updates",
+ "label" => "Automatic updates",
"variable" => $autoUpdate,
"value" => "1",
"underline" => "0"
@@ -367,7 +373,7 @@
"relief"=>"sunken",
"borderwidth"=>"2",
"exportselection"=>"false")
- @scroll.command(proc{|*args| @names.yview *args})
+ @scroll.command(proc{|*args| @names.yview(*args)})
@names.bind("Double-1",proc{
tc_loadNamedColor(@names.get(@names.curselection))})
@names.pack("side"=>"left")
@@ -490,8 +496,8 @@
class TkColor<TkRoot
attr_reader :menu, :bottom, :middle
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@menu = TkColorMenuFrame.new(self)
@menu.pack("side"=>"top", "fill"=>"x")
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/timer ./sample/demos-en/timer
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-en/timer 2003-08-01 05:52:37.000000000 +0900
+++ ./sample/demos-en/timer 2003-08-02 07:38:16.000000000 +0900
@@ -80,12 +80,28 @@
class ButtonFrame < TkFrame
def initialize(parent=nil,keys=nil)
super(parent,keys)
+=begin
@stop = TkButton.new(self,
'text'=>'Stop',
'command'=>proc{timer_stop})
@start = TkButton.new(self,
'text'=>'Start',
'command'=>proc{timer_start})
+=end
+ @stop = TkButton.new(self, :text=>'Stop', :state=>:disabled)
+ @start = TkButton.new(self, :text=>'Start', :state=>:normal)
+
+ @stop.command proc{
+ timer_stop
+ @start.state(:normal)
+ @stop.state(:disabled)
+ }
+ @start.command proc{
+ timer_start
+ @stop.state(:normal)
+ @start.state(:disabled)
+ }
+
@reset = TkButton.new(self,
'text'=>'Reset',
'command'=>proc{timer_reset})
@@ -99,8 +115,8 @@
class Timer < TkRoot
attr_reader :countframe
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@countframe = CountFrame.new(self)
@buttonframe = ButtonFrame.new(self)
for f in [@buttonframe,@countframe]
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/ixset ./sample/demos-jp/ixset
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/ixset 2003-08-01 05:52:38.000000000 +0900
+++ ./sample/demos-jp/ixset 2003-08-02 05:11:38.000000000 +0900
@@ -166,7 +166,7 @@
l = TkLabel.new(bell, 'text'=>'Bell Settings')
@w_bellvol = TkScale.new(bell, 'from'=>0, 'to'=>100, 'length'=>200,
'tickinterval'=>20, 'orient'=>'horizontal',
- 'label'=>"Volume (%)")
+ 'label'=>"Volume (%)")
f = TkFrame.new(bell)
@w_bellpit = LabelEntry.new(f, "Pitch (Hz)", 6)
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/rmt ./sample/demos-jp/rmt
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/rmt 2003-08-01 05:52:38.000000000 +0900
+++ ./sample/demos-jp/rmt 2003-08-02 05:54:46.000000000 +0900
@@ -53,10 +53,8 @@
# Create text window and scrollbar.
- @txt = TkText.new(root, 'relief'=>'sunken', 'bd'=>2, 'setgrid'=>true) {|t|
- TkScrollbar.new(root, 'command'=>proc{|*args| t.yview *args}) {
- pack('side'=>'right', 'fill'=>'both')
- }
+ @txt = TkText.new(root, 'relief'=>'sunken', 'bd'=>2, 'setgrid'=>true) {
+ yscrollbar(TkScrollbar.new(root){pack('side'=>'right', 'fill'=>'y')})
pack('side'=>'left')
}
@@ -247,13 +245,18 @@
rescue
end
TkWinfo.interps.sort.each{|ip|
- if Tk.appsend(ip, false, 'info commands ruby') == ""
- mode = 'Tcl'
- else
- mode = 'Ruby'
+ begin
+ if Tk.appsend(ip, false, 'info commands ruby') == ""
+ mode = 'Tcl'
+ else
+ mode = 'Ruby'
+ end
+ menu.add('command', 'label'=>format("%s (#{mode}/Tk)", ip),
+ 'command'=>proc{win.newApp ip, mode})
+ rescue
+ menu.add('command', 'label'=>format("%s (unknown Tk)", ip),
+ 'command'=>proc{win.newApp ip, mode}, 'state'=>'disabled')
end
- menu.add('command', 'label'=>format("%s (#{mode}/Tk)", ip),
- 'command'=>proc{win.newApp ip, mode})
}
menu.add('command', 'label'=>format("local (Ruby/Tk)"),
'command'=>proc{win.newApp 'local', 'Ruby'})
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/rolodex ./sample/demos-jp/rolodex
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/rolodex 2003-08-01 05:52:38.000000000 +0900
+++ ./sample/demos-jp/rolodex 2003-08-02 06:23:12.000000000 +0900
@@ -4,7 +4,7 @@
# This script is a part of Tom LaStrange's rolodex
#
# Copyright (C) 1998 by Takaaki Tateishi <ttate@jaist.ac.jp>
-# Time-stamp: "98/07/20 12:00:02 ttate"
+# Time-stamp: "03/08/02 06:23:12 nagai"
#
require "tk"
@@ -176,8 +176,8 @@
class Rolodex < TkRoot
attr_reader :frame, :buttons, :menu
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@frame = RolodexFrame.new(self)
@frame.pack("side"=>"top",
"fill"=>"y",
@@ -314,7 +314,7 @@
EOF
$helpTopics["version"] = <<EOF
-This is version 1.0.
+This is version 1.0.1.
EOF
Tk.mainloop
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/rolodex-j ./sample/demos-jp/rolodex-j
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/rolodex-j 2003-08-01 05:52:38.000000000 +0900
+++ ./sample/demos-jp/rolodex-j 2003-08-02 06:23:21.000000000 +0900
@@ -4,7 +4,7 @@
# このスクリプトは Tom LaStrange の rolodex の一部です。
#
# Copyright (C) 1998 by Takaaki Tateishi <ttate@jaist.ac.jp>
-# Time-stamp: "98/07/20 12:00:36 ttate"
+# Time-stamp: "03/08/02 06:23:21 nagai"
#
require "tk"
@@ -185,8 +185,8 @@
class Rolodex < TkRoot
attr_reader :frame, :buttons, :menu
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@frame = RolodexFrame.new(self)
@frame.pack("side"=>"top",
"fill"=>"y",
@@ -305,7 +305,7 @@
EOF
$helpTopics["バージョン情報"] = <<EOF
-バージョンは 1.0 です。
+バージョンは 1.0.1 です。
EOF
Tk.mainloop
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/tcolor ./sample/demos-jp/tcolor
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/tcolor 2003-08-01 05:52:38.000000000 +0900
+++ ./sample/demos-jp/tcolor 2003-08-02 07:25:04.000000000 +0900
@@ -30,6 +30,12 @@
$label3 = TkVariable.new("label3")
+# リソースデータベースの設定
+if (TkVarAccess.new('tcl_platform')['platform'] == 'unix')
+ TkOptionDB.add('*Entry.background', 'white')
+end
+
+
# 各イベント用のメソッド
def rgbToHsv(red,green,blue)
@@ -132,7 +138,7 @@
scale2 = $root.middle.middle.scale2
scale3 = $root.middle.middle.scale3
- case $colorSpace.to_i
+ case $colorSpace.value.intern
when :rgb
$red = (scale1.get * 65.535).to_i
$green = (scale2.get * 65.535).to_i
@@ -167,7 +173,7 @@
scale2 = $root.middle.middle.scale2
scale3 = $root.middle.middle.scale3
- case $colorSpace.to_i
+ case $colorSpace.value.intern
when :rgb
scale1.set($red / 65.535)
scale2.set($green / 65.535)
@@ -289,7 +295,7 @@
"command" => proc{changeColorSpace(:hsb)}
add "separator"
add "radio",
- "label" => "Qutomatic updates",
+ "label" => "Automatic updates",
"variable" => $autoUpdate,
"value" => "1",
"underline" => "0"
@@ -367,7 +373,7 @@
"relief"=>"sunken",
"borderwidth"=>"2",
"exportselection"=>"false")
- @scroll.command(proc{|*args| @names.yview *args})
+ @scroll.command(proc{|*args| @names.yview(*args)})
@names.bind("Double-1",proc{
tc_loadNamedColor(@names.get(@names.curselection))})
@names.pack("side"=>"left")
@@ -490,8 +496,8 @@
class TkColor<TkRoot
attr_reader :menu, :bottom, :middle
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@menu = TkColorMenuFrame.new(self)
@menu.pack("side"=>"top", "fill"=>"x")
diff -ur ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/timer ./sample/demos-jp/timer
--- ../../../ruby-1.8.0-preview7/ext/tk/sample/demos-jp/timer 2003-08-01 05:52:38.000000000 +0900
+++ ./sample/demos-jp/timer 2003-08-02 07:38:06.000000000 +0900
@@ -80,12 +80,28 @@
class ButtonFrame < TkFrame
def initialize(parent=nil,keys=nil)
super(parent,keys)
+=begin
@stop = TkButton.new(self,
'text'=>'Stop',
'command'=>proc{timer_stop})
@start = TkButton.new(self,
'text'=>'Start',
'command'=>proc{timer_start})
+=end
+ @stop = TkButton.new(self, :text=>'Stop', :state=>:disabled)
+ @start = TkButton.new(self, :text=>'Start', :state=>:normal)
+
+ @stop.command proc{
+ timer_stop
+ @start.state(:normal)
+ @stop.state(:disabled)
+ }
+ @start.command proc{
+ timer_start
+ @stop.state(:normal)
+ @start.state(:disabled)
+ }
+
@reset = TkButton.new(self,
'text'=>'Reset',
'command'=>proc{timer_reset})
@@ -99,8 +115,8 @@
class Timer < TkRoot
attr_reader :countframe
- def initialize
- super
+ def initialize(*args)
+ super(*args)
@countframe = CountFrame.new(self)
@buttonframe = ButtonFrame.new(self)
for f in [@buttonframe,@countframe]
--
永井 秀利 (九工大 知能情報)
nagai@ai.kyutech.ac.jp