Posted to tcl by kostix at Wed Feb 21 16:41:54 GMT 2007view pretty
# $Id$ proc btags {what args} { switch -glob -- $what { add { eval btags::add $args } remove { eval btags::remove $args } default { error "Bad option: "$what": must be add, remove" } } } namespace eval btags {} proc btags::add {where what args} { set which "" set off 0 foreach {opt val} $args { switch -glob -- $opt { -before { set which $val set off 1 } -after { set which $val set off 0 } default { error "bad option \"$opt\": must be -before, -after" } } } set btags [bindtags $where] if {[string equal $which ""]} { set ix 0 } else { set ix [lsearch -exact $btags $which] if {$ix < 0} { error "bindtag \"$which\" is not defined for \"$where\"" } incr ix $off } bindtags $where [linsert $btags $ix $what] } proc btags::remove {where what} { set btags [bindtags $where] set ix [lsearch -exact $btags $what] if {$ix < 0} { error "bindtag \"$what\" is not defined for \"$where\"" } bindtags $where [lreplace $btags $ix $ix] } ### JUNK ### if 1 { namespace eval hook { proc run args {} } } bind TkabberTextActions <Button-3> \ [list tk_messageBox -message {Menu placeholder}] # The trickery (see http://wiki.tcl.tk/16343): rename entry orig.entry rename text orig.text proc entry {w args} { eval [linsert $args 0 orig.entry $w] btags add $w TkabberTextActions -before Entry hook::run entry_created_hook $w $args return $w } proc text {w args} { eval [linsert $args 0 orig.text $w] btags add $w TkabberTextActions -before Text hook::run text_created_hook $w $args return $w } ### TEST ### if 1 { pack [entry .e] -fill x -expand true pack [text .t] -fill x -expand true pack [button .b -text REMOVE -command \ [list btags remove .e TkabberTextActions]] }