BWidget::NoteBook - changing placement of arrowbutton

HE 20070201: I like BWidgets notebook. The only thing I'm missing is to configure the placement of arrowbuttons. It is a little bit inefficient to move with the mousepointer from side to side, if I had to change the direction the tabs are moved.

Here is a small patch (diff -n) to add a new option -arrowplace (left|both|right) with 'both' as default. 'both' is the original behavior.

 a92 1
        {-arrowplace         Enum both 0 {left both right}}
 a617 3
        if {$base == -1} {
            return
        }
 d623 1
 d953 2
 a954 19

    switch -- [Widget::cget $path -arrowplace] {
        left {
            set xl      0
            set xr      $_warrow
            set permanent 1
        }
        both {
            set xl      0
            set xr      [expr {$w - $_warrow + 1}]
            set permanent 0
        }
        right {
            set xl      [expr {$w - $_warrow - $_warrow + 1}]
            set xr      [expr {$w - $_warrow + 1}]
            set permanent 1
        }
    }

 d967 1
 a967 1
    if { $data(base) > 0 || $permanent} {
 d981 1
 a981 1
    } elseif {!$permanent} {
 d985 2
 a986 2
    if { ($data(base) < $nbpages-1 && $data(wpage) + [_get_x_page $path 0] + 6 > $w) 
                || $permanent} {
 d1000 1
 a1000 1
    } elseif {!$permanent} {

if you are working on a platform without patch, you can use the following:

  • create the file notebook.diff in the bwidget1.8 directory.
  • copy the diff data in to notebook.diff
  • open a wish or tclsh
  • copy the code from patch for rcs in tcl into the open console
  • execute the following lines:
 cd [tk_chooseDir -title "Select bwidget1.8 directory"]
 file rename notebook.tcl notebook.tcl.orig
 rcs::file2array notebook.tcl.orig filedata
 set fid [open notebook.diff r]
 set patch [read $fid]
 close $fid
 rcs::patch $patch filedata
 set fid [open notebook.tcl w]
 foreach index [lsort -dictionary [array names filedata]] {
    puts $fid $filedata($index)
 }
 close $fid