| |
| |
| |
|
|
| namespace eval ttk::notebook { |
| variable TLNotebooks |
| } |
|
|
| bind TNotebook <ButtonPress-1> { ttk::notebook::Press %W %x %y } |
| bind TNotebook <Key-Right> { ttk::notebook::CycleTab %W 1; break } |
| bind TNotebook <Key-Left> { ttk::notebook::CycleTab %W -1; break } |
| bind TNotebook <Control-Key-Tab> { ttk::notebook::CycleTab %W 1; break } |
| bind TNotebook <Control-Shift-Key-Tab> { ttk::notebook::CycleTab %W -1; break } |
| catch { |
| bind TNotebook <Control-ISO_Left_Tab> { ttk::notebook::CycleTab %W -1; break } |
| } |
| bind TNotebook <Destroy> { ttk::notebook::Cleanup %W } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| proc ttk::notebook::ActivateTab {w tab} { |
| set oldtab [$w select] |
| $w select $tab |
| set newtab [$w select] |
|
|
| if {[focus] eq $w} { return } |
| if {$newtab eq $oldtab} { focus $w ; return } |
|
|
| update idletasks |
| if {[set f [ttk::focusFirst $newtab]] ne ""} { |
| ttk::traverseTo $f |
| } else { |
| focus $w |
| } |
| } |
|
|
| |
| |
| |
| |
| proc ttk::notebook::Press {w x y} { |
| set index [$w index @$x,$y] |
| if {$index ne ""} { |
| ActivateTab $w $index |
| } |
| } |
|
|
| |
| |
| |
| proc ttk::notebook::CycleTab {w dir} { |
| if {[$w index end] != 0} { |
| set current [$w index current] |
| set select [expr {($current + $dir) % [$w index end]}] |
| while {[$w tab $select -state] != "normal" && ($select != $current)} { |
| set select [expr {($select + $dir) % [$w index end]}] |
| } |
| if {$select != $current} { |
| ActivateTab $w $select |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| proc ttk::notebook::MnemonicTab {nb key} { |
| set key [string toupper $key] |
| foreach tab [$nb tabs] { |
| set label [$nb tab $tab -text] |
| set underline [$nb tab $tab -underline] |
| set mnemonic [string toupper [string index $label $underline]] |
| if {$mnemonic ne "" && $mnemonic eq $key} { |
| return $tab |
| } |
| } |
| return "" |
| } |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| proc ttk::notebook::enableTraversal {nb} { |
| variable TLNotebooks |
|
|
| set top [winfo toplevel $nb] |
|
|
| if {![info exists TLNotebooks($top)]} { |
| |
| |
| bind $top <Control-Key-Next> {+ttk::notebook::TLCycleTab %W 1} |
| bind $top <Control-Key-Prior> {+ttk::notebook::TLCycleTab %W -1} |
| bind $top <Control-Key-Tab> {+ttk::notebook::TLCycleTab %W 1} |
| bind $top <Control-Shift-Key-Tab> {+ttk::notebook::TLCycleTab %W -1} |
| catch { |
| bind $top <Control-Key-ISO_Left_Tab> {+ttk::notebook::TLCycleTab %W -1} |
| } |
| if {[tk windowingsystem] eq "aqua"} { |
| bind $top <Option-KeyPress> \ |
| +[list ttk::notebook::MnemonicActivation $top %K] |
| } else { |
| bind $top <Alt-KeyPress> \ |
| +[list ttk::notebook::MnemonicActivation $top %K] |
| } |
| bind $top <Destroy> {+ttk::notebook::TLCleanup %W} |
| } |
|
|
| lappend TLNotebooks($top) $nb |
| } |
|
|
| |
| |
| proc ttk::notebook::TLCleanup {w} { |
| variable TLNotebooks |
| if {$w eq [winfo toplevel $w]} { |
| unset -nocomplain -please TLNotebooks($w) |
| } |
| } |
|
|
| |
| |
| proc ttk::notebook::Cleanup {nb} { |
| variable TLNotebooks |
| set top [winfo toplevel $nb] |
| if {[info exists TLNotebooks($top)]} { |
| set index [lsearch -exact $TLNotebooks($top) $nb] |
| set TLNotebooks($top) [lreplace $TLNotebooks($top) $index $index] |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| proc ttk::notebook::EnclosingNotebook {w} { |
| variable TLNotebooks |
|
|
| set top [winfo toplevel $w] |
| if {![info exists TLNotebooks($top)]} { return } |
|
|
| while {$w ne $top && $w ne ""} { |
| if {[lsearch -exact $TLNotebooks($top) $w] >= 0} { |
| return $w |
| } |
| set w [winfo parent $w] |
| } |
| return "" |
| } |
|
|
| |
| |
| |
| |
| proc ttk::notebook::TLCycleTab {w dir} { |
| set nb [EnclosingNotebook $w] |
| if {$nb ne ""} { |
| CycleTab $nb $dir |
| return -code break |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| proc ttk::notebook::MnemonicActivation {top key} { |
| variable TLNotebooks |
| foreach nb $TLNotebooks($top) { |
| if {[set tab [MnemonicTab $nb $key]] ne ""} { |
| ActivateTab $nb [$nb index $tab] |
| return -code break |
| } |
| } |
| } |
|
|