Viewing file: NoteBook.tcl (6.02 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: NoteBook.tcl,v 1.7 2004/03/28 02:44:57 hobbs Exp $ # # NoteBook.tcl -- # # tixNoteBook: NoteBook type of window. # # Copyright (c) 1993-1999 Ioi Kim Lam. # Copyright (c) 2000-2001 Tix Project Group. # Copyright (c) 2004 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. #
tixWidgetClass tixNoteBook { -classname TixNoteBook -superclass tixVStack -method { } -flag { } -configspec { {-takefocus takeFocus TakeFocus 0 tixVerifyBoolean} } -default { {.nbframe.tabPadX 8} {.nbframe.tabPadY 5} {.nbframe.borderWidth 2} {*nbframe.relief raised} } }
proc tixNoteBook:InitWidgetRec {w} { upvar #0 $w data
tixChainMethod $w InitWidgetRec
set data(pad-x1) 0 set data(pad-x2) 0 set data(pad-y1) 20 set data(pad-y2) 0 }
proc tixNoteBook:ConstructWidget {w} { upvar #0 $w data
tixChainMethod $w ConstructWidget
set data(w:top) [tixNoteBookFrame $w.nbframe -slave 1 -takefocus 1] set data(w:nbframe) $data(w:top)
bind $data(w:top) <ButtonPress-1> [list tixNoteBook:MouseDown $w %x %y] bind $data(w:top) <ButtonRelease-1> [list tixNoteBook:MouseUp $w %x %y]
bind $data(w:top) <B1-Motion> [list tixNoteBook:MouseDown $w %x %y]
bind $data(w:top) <Left> [list tixNoteBook:FocusNext $w prev] bind $data(w:top) <Right> [list tixNoteBook:FocusNext $w next]
bind $data(w:top) <Return> [list tixNoteBook:SetFocusByKey $w] bind $data(w:top) <space> [list tixNoteBook:SetFocusByKey $w] }
#---------------------------------------------------------------------- # Public methods #---------------------------------------------------------------------- proc tixNoteBook:add {w child args} { upvar #0 $w data
set ret [eval tixChainMethod $w add $child $args]
set new_args "" foreach {flag value} $args { if {$flag ne "-createcmd" && $flag ne "-raisecmd"} { lappend new_args $flag lappend new_args $value } }
eval [linsert $new_args 0 $data(w:top) add $child]
return $ret }
proc tixNoteBook:raise {w child} { upvar #0 $w data
tixChainMethod $w raise $child
if {[$data(w:top) pagecget $child -state] eq "normal"} { $data(w:top) activate $child } }
proc tixNoteBook:delete {w child} { upvar #0 $w data
tixChainMethod $w delete $child $data(w:top) delete $child }
#---------------------------------------------------------------------- # Private methods #---------------------------------------------------------------------- proc tixNoteBook:Resize {w} { upvar #0 $w data
# We have to take care of the size of the tabs so that # set rootReq [$data(w:top) geometryinfo] set tW [lindex $rootReq 0] set tH [lindex $rootReq 1]
set data(pad-x1) 2 set data(pad-x2) 2 set data(pad-y1) [expr {$tH + $data(-ipadx) + 1}] set data(pad-y2) 2 set data(minW) [expr {$tW}] set data(minH) [expr {$tH}]
# Now that we know data(pad-y1), we can chain the call # tixChainMethod $w Resize }
proc tixNoteBook:MouseDown {w x y} { upvar #0 $w data
focus $data(w:top)
set name [$data(w:top) identify $x $y] $data(w:top) focus $name set data(w:down) $name }
proc tixNoteBook:MouseUp {w x y} { upvar #0 $w data
#it could happen (using the tk/menu) that a MouseUp #proceeds without a MouseDown event!! if {![info exists data(w:down)] || ![info exists data(w:top)]} { return }
set name [$data(w:top) identify $x $y]
if {$name ne "" && $name eq $data(w:down) && [$data(w:top) pagecget $name -state] eq "normal"} { $data(w:top) activate $name tixCallMethod $w raise $name } else { $data(w:top) focus "" } }
#---------------------------------------------------------------------- # # Section for keyboard bindings # #----------------------------------------------------------------------
proc tixNoteBook:FocusNext {w dir} { upvar #0 $w data
if {[$data(w:top) info focus] == ""} { set name [$data(w:top) info active] $data(w:top) focus $name
if {$name ne ""} { return } } else { set name [$data(w:top) info focus$dir] $data(w:top) focus $name } }
proc tixNoteBook:SetFocusByKey {w} { upvar #0 $w data
set name [$data(w:top) info focus]
if {$name ne "" && [$data(w:top) pagecget $name -state] eq "normal"} { tixCallMethod $w raise $name $data(w:top) activate $name } }
#---------------------------------------------------------------------- # Automatic bindings for alt keys #---------------------------------------------------------------------- proc tixNoteBookFind {w char} { set char [string tolower $char]
foreach child [winfo child $w] { if {![winfo ismapped $w]} { continue } switch -exact -- [winfo class $child] { Toplevel { continue } TixNoteBook { set nbframe [$child subwidget nbframe] foreach page [$nbframe info pages] { set char2 [string index [$nbframe pagecget $page -label] \ [$nbframe pagecget $page -underline]] if {($char eq [string tolower $char2] || $char eq "") && [$nbframe pagecget $page -state] ne "disabled"} { return [list $child $page] } } } } # Well, this notebook doesn't match with the key, but maybe # it contains a "subnotebook" that will match .. set match [tixNoteBookFind $child $char] if {$match ne ""} { return $match } } return "" }
proc tixTraverseToNoteBook {w char} { if {$char eq ""} { return 0 } if {![winfo exists $w]} { return 0 } set list [tixNoteBookFind [winfo toplevel $w] $char] if {$list ne ""} { [lindex $list 0] raise [lindex $list 1] return 1 } return 0 }
#---------------------------------------------------------------------- # Set default class bindings #----------------------------------------------------------------------
bind all <Alt-KeyPress> "+tixTraverseToNoteBook %W %A" bind all <Meta-KeyPress> "+tixTraverseToNoteBook %W %A"
|