Index: tree.tcl
===================================================================
RCS file: /cvsroot/tcllib/bwidget/tree.tcl,v
retrieving revision 1.33
diff -r1.33 tree.tcl
786c786,787
< proc Tree::opentree { path node } {
---
> # JDC: added option recursive
> proc Tree::opentree { path node {recursive 1} } {
794c795
<     _recexpand $path $node 1 [Widget::getoption $path -opencmd]
---
>     _recexpand $path $node 1 $recursive [Widget::getoption $path -opencmd]
802c803
< proc Tree::closetree { path node } {
---
> proc Tree::closetree { path node {recursive 1} } {
810c811
<     _recexpand $path $node 0 [Widget::getoption $path -closecmd]
---
>     _recexpand $path $node 0 $recursive [Widget::getoption $path -closecmd]
999c1000,1001
< proc Tree::_recexpand { path node expand cmd } {
---
> # JDC : added option recursive
> proc Tree::_recexpand { path node expand recursive cmd } {
1010,1011c1012,1015
<     foreach subnode [lrange $data($node) 1 end] {
<         _recexpand $path $subnode $expand $cmd
---
>     if { $recursive } {
> 	foreach subnode [lrange $data($node) 1 end] {
> 	    _recexpand $path $subnode $expand $recursive $cmd
> 	}
Index: dialog.tcl
===================================================================
RCS file: /cvsroot/tcllib/bwidget/dialog.tcl,v
retrieving revision 1.8
diff -r1.8 dialog.tcl
21a22,23
> # JDC: added -transient and -place flag
> 
40a43,44
>         {-transient   Boolean    1        1}
>         {-place       Enum       center   0 {none center left right above below}}
90c94,97
<     wm transient $path [winfo toplevel $parent]
---
>    # JDC: made transient optional
>     if { [Widget::getoption $path -transient] } {
> 	wm transient $path [winfo toplevel $parent]
>     }
253,257c260,267
<         if { [winfo exists $parent] } {
<             BWidget::place $path 0 0 center $parent
<         } else {
<             BWidget::place $path 0 0 center
<         }
---
> 	set place [Widget::getoption $path -place]
> 	if { ![string equal $place none] } {
> 	    if { [winfo exists $parent] } {
> 		BWidget::place $path 0 0 $place $parent
> 	    } else {
> 		BWidget::place $path 0 0 $place
> 	    }
> 	}
Index: listbox.tcl
===================================================================
RCS file: /cvsroot/tcllib/bwidget/listbox.tcl,v
retrieving revision 1.4
diff -r1.4 listbox.tcl
43a44
> # JDC: added -selectmode
86c87
< 
---
> 	{-selectmode       Enum none 1 {none single multiple}}
149a151,165
>     switch -exact -- [Widget::getoption $path -selectmode] {
> 	single {
> 	    $path bindText <Button-1> [list $path selection set]
> 	    $path bindImage <Button-1> [list $path selection set]
> 	}
> 	multiple {
> 	    $path bindText <Button-1>         [list ListBox::_multiple_select $path n]
> 	    $path bindText <Control-Button-1> [list ListBox::_multiple_select $path c]
> 	    $path bindText <Shift-Button-1>   [list ListBox::_multiple_select $path s]
> 	    $path bindImage <Button-1>         [list ListBox::_multiple_select $path n]
> 	    $path bindImage <Control-Button-1> [list ListBox::_multiple_select $path c]
> 	    $path bindImage <Shift-Button-1>   [list ListBox::_multiple_select $path s]
> 	}
>     }
> 
1282a1299,1352
> }
> 
> # ------------------------------------------------------------------------------
> #  Command ListBox::_multiple_select
> # ------------------------------------------------------------------------------
> proc ListBox::_multiple_select { path mode idx } {
> 
>     variable $path
>     upvar 0  $path data
> 
> 
>     if { ![info exists data(anchor)] || ![info exists data(sel_anchor)] } {
> 	set data(anchor) $idx
> 	set data(sel_anchor) {}
>     }
> 
>     switch -exact -- $mode {
> 	n {
> 	    $path selection set $idx
> 	    set data(anchor) $idx
> 	    set data(sel_anchor) {}
> 	}
> 	c {
> 	    set l [$path selection get]
> 	    if { [lsearch -exact $l $idx] >= 0 } {
> 		$path selection remove $idx
> 	    } else {
> 		$path selection add $idx
> 	    }
> 	    set data(anchor) $idx
> 	    set data(sel_anchor) {}
> 	}
> 	s {
> 	    eval $path selection remove $data(sel_anchor)
> 
>   	    if { $idx > $data(anchor) } {
>   		set istart $data(anchor)
>   		set iend $idx
>   	    } else {
>   		set istart $idx
>   		set iend $data(anchor)
>   	    }
> 
>   	    for { set i $istart } { $i <= $iend } { incr i } {
>   		set l [$path selection get]
>   		set li [lsearch -exact $l $i]
> 		if { $li < 0 } {
> 		    $path selection add $i
> 		    lappend data(sel_anchor) $i
>  		}
>   	    }
>         }
>     }
> 
Index: widget.tcl
===================================================================
RCS file: /cvsroot/tcllib/bwidget/widget.tcl,v
retrieving revision 1.17
diff -r1.17 widget.tcl
982c982,983
<                 set def [lindex [lindex $config $idx] 3]
---
> 		# JDC: used 4 (was 3) to get def from optiondb
>                 set def [lindex [lindex $config $idx] 4]
985c986,987
<                 set def [lindex $optlist 3]
---
> 		# JDC: used 4 (was 3) to get def from optiondb
>                 set def [lindex $optlist 4]
Index: progressbar.tcl
===================================================================
RCS file: /cvsroot/tcllib/bwidget/progressbar.tcl,v
retrieving revision 1.5
diff -r1.5 progressbar.tcl
15c15
<         {-type        Enum       normal     0 {normal incremental infinite}}
---
>         {-type        Enum       normal     0 {normal incremental infinite nonincremental_infinite}}
151,193c151,183
<         place $path.bar -relx 0 -rely 0 -relwidth 1 -relheight 1
<         set type [Widget::getoption $path -type]
<         if { $val != 0 && [string compare $type "normal"] } {
<             set val [expr {$val+$_widget($path,val)}]
<         }
<         set _widget($path,val) $val
<         set max [Widget::getoption $path -maximum]
<         set bd  [expr {2*[$path.bar cget -bd]}]
<         set w   [winfo width  $path.bar]
<         set h   [winfo height $path.bar]
<         if { ![string compare $type "infinite"] } {
<             if { $val > $max } {
<                 set _widget($path,dir) [expr {-$_widget($path,dir)}]
<                 set val 0
<                 set _widget($path,val) 0
<             }
<             if { $val <= $max/2.0 } {
<                 set dx0 0.0
<                 set dx1 [expr {double($val)/$max}]
<             } else {
<                 set dx1 [expr {double($val)/$max}]
<                 set dx0 [expr {$dx1-0.5}]
<             }
<             if { $_widget($path,dir) == 1 } {
<                 set x0 $dx0
<                 set x1 $dx1
<             } else {
<                 set x0 [expr {1-$dx1}]
<                 set x1 [expr {1-$dx0}]
<             }
<             if { ![string compare [Widget::getoption $path -orient] "horizontal"] } {
<                 $path.bar coords rect [expr {$x0*$w}] 0 [expr {$x1*$w}] $h
<             } else {
<                 $path.bar coords rect 0 [expr {$h-$x0*$h}] $w [expr {$x1*$h}]
<             }
<         } else {
<             if { $val > $max } {set val $max}
<             if { ![string compare [Widget::getoption $path -orient] "horizontal"] } {
<                 $path.bar coords rect -1 0 [expr {$val*$w/$max}] $h
<             } else {
<                 $path.bar coords rect 0 [expr {$h+1}] $w [expr {$h*($max-$val)}]
<             }
<         }
---
> 	    place $path.bar -relx 0 -rely 0 -relwidth 1 -relheight 1
> 	    set type [Widget::getoption $path -type]
> 	    if { $val != 0 && [string compare $type "normal"] && [string compare $type "nonincremental_infinite"]} {
> 		set val [expr {$val+$_widget($path,val)}]
> 	    }
> 	    set _widget($path,val) $val
> 	    set max [Widget::getoption $path -maximum]
> 	    set bd  [expr {2*[$path.bar cget -bd]}]
> 	    set w   [winfo width  $path.bar]
> 	    set h   [winfo height $path.bar]
> 	    if { ![string compare $type "infinite"] || ![string compare $type "nonincremental_infinite"]} {
> 		# JDC: New infinite behaviour
> 		set tval [expr {$val % $max}]
> 		if { $tval < ($max / 2.0) } {
> 		    set x0 [expr {double($tval) / double($max) * 1.5}]
> 		} else {
> 		    set x0 [expr {(1.0 - (double($tval) / double($max))) * 1.5}]
> 		}
> 		set x1 [expr {$x0 + 0.25}]
> 		if { ![string compare [Widget::getoption $path -orient] "horizontal"] } {
> 		    $path.bar coords rect [expr {$x0*$w}] 0 [expr {$x1*$w}] $h
> 		} else {
> 		    $path.bar coords rect 0 [expr {$h-$x0*$h}] $w [expr {$x1*$h}]
> 		}
> 		
> 	    } else {
> 		if { $val > $max } {set val $max}
> 		if { ![string compare [Widget::getoption $path -orient] "horizontal"] } {
> 		    $path.bar coords rect -1 0 [expr {$val*$w/$max}] $h
> 		} else {
> 		    $path.bar coords rect 0 [expr {$h+1}] $w [expr {$h*($max-$val)}]
> 		}
> 	    }
Index: panedw.tcl
===================================================================
RCS file: /cvsroot/tcllib/bwidget/panedw.tcl,v
retrieving revision 1.6
diff -r1.6 panedw.tcl
10a11
> #     - PanedWindow::_apply_weights
17a19,22
> # JDC: added option to choose behavior of weights
> #    -weights extra : only apply weights to extra space (as current (>= 1.3.1) with grid command)
> #    -weights available : apply weights to total available space (as before (<1.3.1) with place command)
> 
27,30c32,35
<         {-side       Enum       top 1 {top left bottom right}}
<         {-width      Int        10  1 "%d >=3"}
<         {-pad        Int        4   1 "%d >= 0"}
<         {-background TkResource ""  0 frame}
---
>         {-side       Enum       top   1 {top left bottom right}}
>         {-width      Int        10    1 "%d >=3"}
>         {-pad        Int        4     1 "%d >= 0"}
>         {-background TkResource ""    0 frame}
32c37,38
<         {-activator  Enum       ""  1 {line button}}
---
>         {-activator  Enum       ""    1 {line button}}
> 	{-weights    Enum       extra 1 {extra available}}
106,109c112,118
<     set wbut  [Widget::getoption $path -width]
<     set pad   [Widget::getoption $path -pad]
<     set width [expr {$wbut+2*$pad}]
<     set side  [Widget::getoption $path -side]
---
>     set wbut   [Widget::getoption $path -width]
>     set pad    [Widget::getoption $path -pad]
>     set width  [expr {$wbut+2*$pad}]
>     set side   [Widget::getoption $path -side]
>     set weight [Widget::getoption $path.f$num -weight]
>     lappend _panedw($path,weights) $weight
> 
181,182c190
<         grid columnconfigure $path [expr {2*$num}] \
<             -weight  [Widget::getoption $path.f$num -weight]
---
>         grid columnconfigure $path [expr {2*$num}] -weight $weight
185,186c193
<         grid rowconfigure $path [expr {2*$num}] \
<             -weight  [Widget::getoption $path.f$num -weight]
---
>         grid rowconfigure $path [expr {2*$num}] -weight $weight
334a342,376
> 
>     _apply_weights $path
> }
> 
> # ------------------------------------------------------------------------------
> #  Command PanedWindow::apply_weights
> # ------------------------------------------------------------------------------
> proc PanedWindow::_apply_weights { path } {
>     variable _panedw
> 
>     set weights [Widget::getoption $path -weights]
>     if { ![string compare $weights "extra"] } {
> 	return
>     }
> 
>     set side   [Widget::getoption $path -side]
>     if { ![string compare $side "top"] || ![string compare $side "bottom"] } {
> 	set size width
>     } else {
> 	set size height
>     }
>     set wsash [expr {[Widget::getoption $path -width] + 2*[Widget::getoption $path -pad]}]
>     set rs [winfo $size $path]
>     set s [expr {$rs - ($_panedw($path,nbpanes) - 1) * $wsash}]
>     
>     set tw 0.0
>     foreach w $_panedw($path,weights) { 
> 	set tw [expr {$tw + $w}]
>     }
> 
>     for {set i 0} {$i < $_panedw($path,nbpanes)} {incr i} {
> 	set rw [lindex $_panedw($path,weights) $i]
> 	set ps [expr {int($rw / $tw * $s)}]
> 	$path.f$i configure -$size $ps
>     }    
