1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
#
# tktext.rb - Tk text classes
# $Date$
# by Yukihiro Matsumoto <[email protected]>
require 'tk.rb'
class TkText<TkTextWin
include Scrollable
def create_self
tk_call 'text', @path
@tags = {}
end
def index(index)
tk_send 'index', index
end
def value
tk_send 'get', "1.0", "end"
end
def value= (val)
tk_send 'delete', "1.0", 'end'
tk_send 'insert', "1.0", val
end
def _addcmd(cmd)
@cmdtbl.push id
end
def _addtag(name, obj)
@tags[name] = obj
end
def tag_names
tk_send('tag', 'names').collect{|elt|
if not @tags[elt]
elt
else
@tags[elt]
end
}
end
def window_names
tk_send('window', 'names').collect{|elt|
if not @tags[elt]
elt
else
@tags[elt]
end
}
end
def destroy
for t in @tags
t.destroy
end
super
end
def backspace
self.delete 'insert'
end
def compare(idx1, op, idx2)
bool(tk_send('compare', idx1, op, idx2))
end
def debug
bool(tk_send('debug'))
end
def debug=(boolean)
tk_send 'debug', boolean
end
def yview(*what)
tk_send 'yview', *what
end
def yview_pickplace(*what)
tk_send 'yview', '-pickplace', *what
end
def xview(*what)
tk_send 'xview', *what
end
def xview_pickplace(*what)
tk_send 'xview', '-pickplace', *what
end
end
class TkTextTag<TkObject
$tk_text_tag = 'tag0000'
def initialize(parent, keys=nil)
if not parent.kind_of?(TkText)
fail format("%s need to be TkText", parent.inspect)
end
@t = parent
@path = @id = $tk_text_tag
$tk_text_tag = $tk_text_tag.succ
tk_call @t.path, "tag", "configure", @id, *hash_kv(keys)
@t._addtag id, self
end
def id
return @id
end
def add(*index)
tk_call @t.path, 'tag', 'add', @id, *index
end
def configure(keys)
tk_call @t.path, 'tag', 'configure', @id, *hash_kv(keys)
end
def bind(seq, cmd=Proc.new)
id = install_cmd(cmd)
tk_call @t, 'tag', 'bind', tag, "<#{seq}>", id
@t._addcmd cmd
end
def lower(below=None)
tk_call @t.path, 'tag', 'lower', below
end
def destroy
tk_call @t.path, 'tag', 'delete', @id
end
end
class TkTextMark<TkObject
$tk_text_mark = 'mark0000'
def initialize(parent, index)
if not parent.kind_of?(TkText)
fail format("%s need to be TkText", parent.inspect)
end
@t = parent
@path = @id = $tk_text_mark
$tk_text_mark = $tk_text_mark.succ
tk_call @t.path, 'set', @id, index
@t._addtag id, self
end
def id
return @id
end
def set(where)
tk_call @t.path, 'mark', 'unset', @id, where
end
def unset
tk_call @t.path, 'mark', 'unset', @id
end
alias destroy unset
end
class TkTextWindow<TkObject
def initialize(parent, index, *args)
if not parent.kind_of?(TkText)
fail format("%s need to be TkText", parent.inspect)
end
@t = parent
@path = @index = index
tk_call @t.path, 'window', 'create', index, *args
end
def configure(slot, value)
tk_call @t.path, 'window', 'configure', @index, "-#{slot}", value
end
end
|