[Richard Suchenwirth] 2007-09-28 - Installing Visual Studio 8, I found a [listbox] with some buttons to insert, delete, or move up or down items, and as I was waiting for a lengthy build, of course I had to try this in Tcl too :^) [WikiDbImage xlistbox.JPG] For the "insert" function, a little overrideredirect toplevel with an entry is overlaid. This is however not very robust: pixel geometry needed to be tweaked (and is probably not right for other windowing themes), and it is only destroyed when the user hits . If he doesn't, multiple of those may be scattered over the screen... Improvement hints are very welcome. [AEC] Couldn't you bind the entry widget to the event and destroy the toplevel? Also couldn't you simply use the place geometry manager and place an entry widget rather than using the overrideredirect toplevel? - [RS]: Oh yes, thanks! Fixed the ''insert'' and ''rewrite'' methods accordingly. proc xlb'delete w { set sel [$w curselection] $w delete $sel if {$sel==[$w size]} {incr sel -1} $w selection set $sel } proc xlb'insert w { set sel [$w curselection] if {$sel eq ""} {set sel 0} $w insert $sel "" $w selection clear 0 end $w selection set $sel foreach {x0 y0 x1 y1} [$w bbox $sel] break destroy $w.e place [entry $w.e -textvariable $w] -x [expr {$x0-4}] -y [expr {$y0-4}] focus $w.e set ::$w "" bind $w.e [list xlb'rewrite $w $sel] } proc xlb'rewrite {w sel} { global $w $w delete $sel $w insert $sel [set $w] $w selection set $sel destroy $w.e } proc xlb'move {w offset} { set sel [$w curselection] if {$sel ne "" && ($offset==-1 && $sel>0 || $offset==1 && $sel<[$w size]-1)} { set it [$w get $sel] $w delete $sel incr sel $offset $w insert $sel $it $w selection set $sel } } #-- Test and demo: pack [frame .f] -anchor e button .f.+ -width 2 -text + -command {xlb'insert .l} button .f.x -width 2 -text x -command {xlb'delete .l} button .f.up -width 2 -text \u2191 -command {xlb'move .l -1} button .f.dn -width 2 -text \u2193 -command {xlb'move .l 1} eval pack [winfo children .f] -side left pack [listbox .l] .l insert end foo bar grill baz wibble ---- [AMG]: I think that's the first time I've ever seen [[[place]]] used for good, not evil. :^) ---- [[ [Category Example] ]]