diff -r 000000000000 -r ae805ac0140d python-2.5.2/win32/tcl/tix8.4/IconView.tcl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python-2.5.2/win32/tcl/tix8.4/IconView.tcl Fri Apr 03 17:19:34 2009 +0100 @@ -0,0 +1,272 @@ +# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- +# +# $Id: IconView.tcl,v 1.2 2001/12/09 05:04:02 idiscovery Exp $ +# +# IconView.tcl -- +# +# This file implements the Icon View widget: the "icon" view mode of +# the MultiView widget. It implements: +# +# (1) Creation of the icons in the canvas subwidget. +# (2) Automatic arrangement of the objects +# +# Copyright (c) 1993-1999 Ioi Kim Lam. +# Copyright (c) 2000-2001 Tix Project Group. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# + +tixWidgetClass tixIconView { + -classname TixIconView + -superclass tixCObjView + -method { + add arrange + } + -flag { + -autoarrange + } + -static { + } + -configspec { + {-autoarrange autoArrange AutoArrange 0 tixVerifyBoolean} + } + -default { + {.scrollbar auto} + {*borderWidth 1} + {*canvas.background #c3c3c3} + {*canvas.highlightBackground #d9d9d9} + {*canvas.relief sunken} + {*canvas.takeFocus 1} + {*Scrollbar.takeFocus 0} + } + -forcecall { + } +} + +proc tixIconView:ConstructWidget {w} { + upvar #0 $w data + + tixChainMethod $w ConstructWidget +} + +proc tixIconView:SetBindings {w} { + upvar #0 $w data + + tixChainMethod $w SetBindings + + set c $data(w:canvas) + + bind $c <1> "tixIconView:StartDrag $w %x %y" + bind $c "tixIconView:Drag $w %x %y" + bind $c "tixIconView:EndDrag $w" +} + +proc tixIconView:StartDrag {w x y} { + upvar #0 $w data + global lastX lastY + + set c $data(w:canvas) + $c raise current + + set lastX [$c canvasx $x] + set lastY [$c canvasy $y] +} + + +proc tixIconView:Drag {w x y} { + upvar #0 $w data + global lastX lastY + + set c $data(w:canvas) + set x [$c canvasx $x] + set y [$c canvasy $y] + $c move current [expr $x-$lastX] [expr $y-$lastY] + set lastX $x + set lastY $y +} + +proc tixIconView:EndDrag {w} { + upvar #0 $w data + + tixCallMethod $w adjustscrollregion +} + +#---------------------------------------------------------------------- +# +# option configs +#---------------------------------------------------------------------- +proc tixIconView:add {w tag image text} { + upvar #0 $w data + + set cmp [image create compound -window $data(w:canvas)] + + $cmp add image -image $image + $cmp add line + $cmp add text -text $text + + set id [$data(w:canvas) create image 0 0 -image $cmp -anchor nw] + $data(w:canvas) addtag $tag withtag $id + + if {$data(-autoarrange)} { + tixWidgetDoWhenIdle tixIconView:Arrange $w 1 + } +} + +# Do it in an idle handler, so that Arrange is not called before the window +# is properly mapped. +# +proc tixIconView:arrange {w} { + tixWidgetDoWhenIdle tixIconView:Arrange $w 1 +} + + +proc tixIconView:PackOneRow {w row y maxH bd padX padY} { + upvar #0 $w data + + set iX [expr $bd+$padX] + foreach i $row { + set box [$data(w:canvas) bbox $i] + set W [expr [lindex $box 2]-[lindex $box 0]+1] + set H [expr [lindex $box 3]-[lindex $box 1]+1] + + set iY [expr $y + $maxH - $H] + $data(w:canvas) coords $i $iX $iY + incr iX [expr $W+$padX] + } +} + +# virtual method +# +proc tixIconView:PlaceWindow {w} { + upvar #0 $w data + + if {$data(-autoarrange)} { + tixWidgetDoWhenIdle tixIconView:Arrange $w 0 + } + + tixChainMethod $w PlaceWindow +} + +proc tixIconView:Arrange {w adjust} { + upvar #0 $w data + + set padX 2 + set padY 2 + + tixIconView:ArrangeGrid $w $padX $padY + if {$adjust} { + tixCallMethod $w adjustscrollregion + } +} + +# the items are not packed +# +proc tixIconView:ArrangeGrid {w padX padY} { + upvar #0 $w data + + set maxW 0 + set maxH 0 + foreach item [$data(w:canvas) find all] { + set box [$data(w:canvas) bbox $item] + set itemW [expr [lindex $box 2]-[lindex $box 0]+1] + set itemH [expr [lindex $box 3]-[lindex $box 1]+1] + if {$maxW < $itemW} { + set maxW $itemW + } + if {$maxH < $itemH} { + set maxH $itemH + } + } + if {$maxW == 0 || $maxH == 0} { + return + } + + set winW [tixWinWidth $data(w:canvas)] + set bd [expr [$data(w:canvas) cget -bd]+\ + [$data(w:canvas) cget -highlightthickness]] + set cols [expr $winW / ($maxW+$padX)] + if {$cols < 1} { + set cols 1 + } + set y $bd + + set c 0 + set x $bd + foreach item [$data(w:canvas) find all] { + set box [$data(w:canvas) bbox $item] + set itemW [expr [lindex $box 2]-[lindex $box 0]+1] + set itemH [expr [lindex $box 3]-[lindex $box 1]+1] + + set iX [expr $x + $padX + ($maxW-$itemW)/2] + set iY [expr $y + $padY + ($maxH-$itemH) ] + + $data(w:canvas) coords $item $iX $iY + incr c + incr x [expr $maxW + $padY] + if {$c == $cols} { + set c 0 + incr y [expr $maxH + $padY] + set x $bd + } + } +} + +# the items are packed +# +proc tixIconView:ArrangePack {w padX padY} { + upvar #0 $w data + + set winW [tixWinWidth $data(w:canvas)] + set bd [expr [$data(w:canvas) cget -bd]+\ + [$data(w:canvas) cget -highlightthickness]] + set y [expr $bd + $padY] + + set maxH 0 + set usedW $padX + set row "" + foreach item [$data(w:canvas) find all] { + set box [$data(w:canvas) bbox $item] + set itemW [expr [lindex $box 2]-[lindex $box 0]+1] + set itemH [expr [lindex $box 3]-[lindex $box 1]+1] + + if {[expr $usedW + $itemW] > $winW} { + if {$row == ""} { + # only one item in this row + # + $data(w:canvas) coords $item [expr $bd + $padX] $y + incr y [expr $itemH+$padY] + continue + } else { + # this item is not in this row. Arrange the previous items + # first + # + tixIconView:PackOneRow $w $row $y $maxH $bd $padX $padY + + incr y $maxH + set row "" + set maxH 0 + set usedW $padX + } + } + lappend row $item + if {$maxH < $itemH} { + set maxH $itemH + } + incr usedW [expr $padX+$itemW] + } + if {$row != ""} { + tixIconView:PackOneRow $w $row $y $maxH $bd $padX $padY + } +} + +#---------------------------------------------------------------------- +# +# Widget commands +#---------------------------------------------------------------------- + +#---------------------------------------------------------------------- +# +# Private Methods +#---------------------------------------------------------------------- +