1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/tk/sample/tktextio.rb: add show_mode which means that see where

when changing file position.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8126 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nagai 2005-03-09 06:08:33 +00:00
parent 8e5362a666
commit 9ef561b6e0

View file

@ -21,11 +21,13 @@ class TkTextIO < TkText
ovwt = false
text = nil
wrap = 'char'
show = :pos
if keys.kind_of?(Hash)
mode = keys.delete('mode')
ovwt = keys.delete('overwrite')
text = keys.delete('text')
show = keys.delete('show') if keys.has_key?('show')
wrap = keys.delete('wrap') || 'char'
end
@ -37,6 +39,8 @@ class TkTextIO < TkText
@txtpos = TkTextMark.new(self, '1.0')
@txtpos.gravity = :left
self.show_mode = show
@sync = true
@overwrite = (ovwt)? true: false
@ -168,6 +172,7 @@ class TkTextIO < TkText
return nil if eof?
c = get(@txtpos)
@txtpos.set(@txtpos + '1 char')
_see_pos
c
end
@ -217,6 +222,7 @@ class TkTextIO < TkText
def index_pos=(idx)
@txtpos.set(idx)
@txtpos.set('end - 1 char') if compare(@txtpos, '>=', :end)
_see_pos
idx
end
@ -294,6 +300,7 @@ class TkTextIO < TkText
s = get(@txtpos, epos)
@txtpos.set(epos)
@txtpos.set('end - 1 char') if compare(@txtpos, '>=', :end)
_see_pos
s
end
private :_read
@ -307,6 +314,7 @@ class TkTextIO < TkText
else
s = get(@txtpos, 'end - 1 char')
@txtpos.set('end - 1 char')
_see_pos
end
buf.replace(s) if buf.kind_of?(String)
s
@ -317,6 +325,7 @@ class TkTextIO < TkText
fail EOFError if eof?
c = get(@txtpos)
@txtpos.set(@txtpos + '1 char')
_see_pos
c
end
@ -340,12 +349,14 @@ class TkTextIO < TkText
if idx
s = get(@txtpos, "#{idx} + #{@count_var.value} char")
@txtpos.set("#{idx} + #{@count_var.value} char")
@txtpos.set('end - 1 char') if compare(@txtpos, '>=', :end)
else
s = get(@txtpos, 'end - 1 char')
@txtpos.set('end - 1 char')
end
end
_see_pos
@lineno += 1
$_ = s
end
@ -380,6 +391,7 @@ class TkTextIO < TkText
def rewind
@txtpos.set('1.0')
_see_pos
@lineno = 0
@line_offset = 0
self
@ -404,11 +416,48 @@ class TkTextIO < TkText
end
@txtpos.set('end - 1 char') if compare(@txtpos, '>=', :end)
_see_pos
0
end
alias sysseek seek
def _see_pos
see(@show) if @show
end
private :_see_pos
def show_mode
(@show == @txtpos)? :pos : @show
end
def show_mode=(mode)
# define show mode when file position is changed.
# mode == :pos or "pos" or true :: see current file position.
# mode == :insert or "insert" :: see insert cursor position.
# mode == nil or false :: do nothing
# else see 'mode' position ('mode' should be text index or mark)
case mode
when :pos, 'pos', true
@show = @txtpos
when :insert, 'insert'
@show = :insert
when nil, false
@show = false
else
begin
index(mode)
rescue
fail ArgumentError, 'invalid show-position'
end
@show = mode
end
_see_pos
mode
end
def stat
fail NotImplementedError, 'stat is not implemented on TkTextIO'
end
@ -450,6 +499,7 @@ class TkTextIO < TkText
delete(@txtpos)
insert(@txtpos, tk_call('string', 'range', c, 0, 1))
@txtpos.set(@txtpos - '1 char') if @txtpos.gravity == 'right'
_see_pos
else
fail IOError, 'cannot ungetc at head of stream'
end
@ -462,6 +512,8 @@ class TkTextIO < TkText
delete(@txtpos, @txtpos + "#{n} char") if @overwrite
self.insert(@txtpos, s)
@txtpos.set(@txtpos + "#{n} char")
@txtpos.set('end - 1 char') if compare(@txtpos, '>=', :end)
_see_pos
Tk.update if @sync
n
end
@ -478,7 +530,8 @@ end
####################
if __FILE__ == $0
f = TkFrame.new.pack
tio = TkTextIO.new(f, :text=>">>> This is an initial text line. <<<\n\n"){
tio = TkTextIO.new(f, :show=>:pos,
:text=>">>> This is an initial text line. <<<\n\n"){
yscrollbar(TkScrollbar.new(f).pack(:side=>:right, :fill=>:y))
pack(:side=>:left, :fill=>:both, :expand=>true)
}
@ -498,12 +551,21 @@ if __FILE__ == $0
puts "On this sample, a text widget works as if it is a I/O stream."
puts "Please see the code."
puts
printf("printf message: %d %X\n", 123456, 255);
printf("printf message: %d %X\n", 123456, 255)
puts
printf("(output by 'p' method) This TkTextIO object is ...\n")
p tio
print(" [ Current wrap mode of this object is 'char'. ]\n")
puts
warn("This is a warning message generated by 'warn' method.")
puts
puts "current show_mode is #{tio.show_mode}."
if tio.show_mode == :pos
puts "So, you can see the current file position on this text widget."
else
puts "So, you can see the position '#{tio.show_mode}' on this text widget."
end
print("Please scroll up this text widget to see the head of lines.\n")
print("---------------------------------------------------------\n")
STDOUT.print("\n=============== TkTextIO#readlines =============\n\n")