$Tk::TraceText::VERSION
=
'1.0'
;
Construct Tk::Widget
'TraceText'
;
sub
Populate {
my
(
$self
,
$args
) =
@_
;
$self
->SUPER::Populate(
$args
);
$self
->ConfigSpecs(
-textvariable
=> [
'METHOD'
,
'textVariable'
,
'TextVariable'
,
undef
],
);
$self
->OnDestroy(
sub
{
my
$vref
=
$self
->{_vref};
$self
->traceVdelete (
$self
->{_vref} )
if
defined
$vref
;
} );
}
sub
insdel {
my
(
$self
,
$sub
,
@args
) =
@_
;
$self
->{_busy} = 1;
$self
->
$sub
(
@args
);
my
$vref
=
$self
->{_vref};
$$vref
=
$self
->get(
qw/1.0 end/
);
$self
->{_busy} = 0;
}
sub
textvariable {
my
(
$self
,
$vref
) =
@_
;
$self
->traceVariable(
$vref
,
'w'
, [ \
&tracew
=>
$self
,
$vref
] );
$self
->{_vref} =
$vref
;
}
sub
tracew {
my
(
$index
,
$value
,
$op
,
$self
,
$vref
) =
@_
;
return
unless
defined
$self
;
return
if
$self
->{_busy};
if
(
$op
eq
'w'
) {
$self
->
delete
(
qw/1.0 end/
);
$self
->insert(
'1.0'
,
$value
);
}
elsif
(
$op
eq
'r'
) {
}
elsif
(
$op
eq
'u'
) {
$self
->traceVdelete (
$vref
);
}
}
sub
delete
{
my
(
$self
,
@args
) =
@_
;
$self
->insdel(
'SUPER::delete'
,
@args
)
}
sub
insert {
my
(
$self
,
@args
) =
@_
;
$self
->insdel(
'SUPER::insert'
,
@args
);
}
1;
sub
trace2 {
my
(
$demo
) =
@_
;
$TOP
=
$MW
->WidgetDemo(
-name
=>
$demo
,
-text
=>
"This demonstration derives a new Text widget whose contents are modified using a normal Perl variable."
,
-title
=>
'Contents of a Text idget tied to a variable'
,
-iconname
=>
'trace2'
,
);
my
$mw
=
$TOP
;
my
$tt
=
$mw
->Scrolled(
'TraceText'
,
-textvariable
=> \
my
$frog
)->grid;
$tt
->focus;
$mw
->traceVariable( \
$frog
,
'wu'
, [ \
&trace2_tracefrog
,
$mw
, \
$frog
] );
$frog
=
"Frogs lacking lipophores are blue."
;
}
sub
trace2_tracefrog {
my
(
$index
,
$value
,
$op
) =
@_
;
print
"Final "
if
$op
eq
'u'
;
print
"User trace: $value"
;
return
$value
;
}