Pavel Stranak wrote:
> This way the widget is still selectable and all other bindings as  
> well as cursor work as in normal text.
> Do you think similar approach would be possible in Tcl::Tk?

The ROText and similar widgets exist from pre-8.4 Tk versions, where the text
widget was less functional.  8.4 added unlimited undo, some other minor
features, but most importantly in your case - a disabled state.

If you simply do:
        $textWidget->configure(-state => "disabled");

you should get the effect you are looking for.

> Currently your ROText widget is a disabled Text, which means it  
> doesn't take focus and consequently key bindings don't work. 
> Yet I want to use the ROText for tagging text via simple key  
> bindings. So I need to move cursor, make selections with keyboard and  
> use my bindings to create tags from selection. I can use buttons now,  
> but using mouse is too slow for this kind of work.
        ...
> In Perl/Tk both of these widgets are actually quite simple, but I  
> have no idea, how much work would it be in Tcl/Tk to implement them.

OK, what you are asking for isn't really "read-only text", but it is also not
that hard to do in Tcl/Tk.  The following simple example makes any text tagged
"readonly" ... read only:

pack [text .text]
.text tag configure readonly -background yellow
rename .text ..text
proc .text args {
    if {[string match ins* $args] &&
        [lsearch -exact [.text tag names [lindex $args 1]] readonly]>-1}
return
    if {[string match del* $args]} {
        if {[string compare {} [lindex $args 2]]} {
            if {[string compare {} [eval .text tag nextrange \
                readonly [lrange $args 1 2]]]} return
        } else {
            if {[lsearch -exact [.text tag names \
                [lindex $args 1]] readonly]>-1} return
        }
    }
    uplevel ..text $args
}

Jeff

Reply via email to