123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- # -*- 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"
|