| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| proc tclParseConfigSpec {w specs flags argList} { |
| upvar #0 $w data |
|
|
| |
| |
| foreach spec $specs { |
| if {[llength $spec] < 4} { |
| return -code error -errorcode {TK VALUE CONFIG_SPEC} \ |
| "\"spec\" should contain 5 or 4 elements" |
| } |
| set cmdsw [lindex $spec 0] |
| set cmd($cmdsw) "" |
| set rname($cmdsw) [lindex $spec 1] |
| set rclass($cmdsw) [lindex $spec 2] |
| set def($cmdsw) [lindex $spec 3] |
| set verproc($cmdsw) [lindex $spec 4] |
| } |
|
|
| if {[llength $argList] & 1} { |
| set cmdsw [lindex $argList end] |
| if {![info exists cmd($cmdsw)]} { |
| return -code error -errorcode [list TK LOOKUP OPTION $cmdsw] \ |
| "bad option \"$cmdsw\": must be [tclListValidFlags cmd]" |
| } |
| return -code error -errorcode {TK VALUE_MISSING} \ |
| "value for \"$cmdsw\" missing" |
| } |
|
|
| |
| |
| if {"DONTSETDEFAULTS" ni $flags} { |
| foreach cmdsw [array names cmd] { |
| set data($cmdsw) $def($cmdsw) |
| } |
| } |
|
|
| |
| |
| foreach {cmdsw value} $argList { |
| if {![info exists cmd($cmdsw)]} { |
| return -code error -errorcode [list TK LOOKUP OPTION $cmdsw] \ |
| "bad option \"$cmdsw\": must be [tclListValidFlags cmd]" |
| } |
| set data($cmdsw) $value |
| } |
|
|
| |
| } |
|
|
| proc tclListValidFlags {v} { |
| upvar $v cmd |
|
|
| set len [llength [array names cmd]] |
| set i 1 |
| set separator "" |
| set errormsg "" |
| foreach cmdsw [lsort [array names cmd]] { |
| append errormsg "$separator$cmdsw" |
| incr i |
| if {$i == $len} { |
| set separator ", or " |
| } else { |
| set separator ", " |
| } |
| } |
| return $errormsg |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| proc ::tk::FocusGroup_Create {t} { |
| variable ::tk::Priv |
| if {[winfo toplevel $t] ne $t} { |
| return -code error -errorcode [list TK LOOKUP TOPLEVEL $t] \ |
| "$t is not a toplevel window" |
| } |
| if {![info exists Priv(fg,$t)]} { |
| set Priv(fg,$t) 1 |
| set Priv(focus,$t) "" |
| bind $t <FocusIn> [list tk::FocusGroup_In $t %W %d] |
| bind $t <FocusOut> [list tk::FocusGroup_Out $t %W %d] |
| bind $t <Destroy> [list tk::FocusGroup_Destroy $t %W] |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| proc ::tk::FocusGroup_BindIn {t w cmd} { |
| variable FocusIn |
| variable ::tk::Priv |
| if {![info exists Priv(fg,$t)]} { |
| return -code error -errorcode [list TK LOOKUP FOCUS_GROUP $t] \ |
| "focus group \"$t\" doesn't exist" |
| } |
| set FocusIn($t,$w) $cmd |
| } |
|
|
|
|
| |
| |
| |
| |
| |
| |
| proc ::tk::FocusGroup_BindOut {t w cmd} { |
| variable FocusOut |
| variable ::tk::Priv |
| if {![info exists Priv(fg,$t)]} { |
| return -code error -errorcode [list TK LOOKUP FOCUS_GROUP $t] \ |
| "focus group \"$t\" doesn't exist" |
| } |
| set FocusOut($t,$w) $cmd |
| } |
|
|
| |
| |
| |
| |
| |
| proc ::tk::FocusGroup_Destroy {t w} { |
| variable FocusIn |
| variable FocusOut |
| variable ::tk::Priv |
|
|
| if {$t eq $w} { |
| unset Priv(fg,$t) |
| unset Priv(focus,$t) |
|
|
| foreach name [array names FocusIn $t,*] { |
| unset FocusIn($name) |
| } |
| foreach name [array names FocusOut $t,*] { |
| unset FocusOut($name) |
| } |
| } else { |
| if {[info exists Priv(focus,$t)] && ($Priv(focus,$t) eq $w)} { |
| set Priv(focus,$t) "" |
| } |
| unset -nocomplain FocusIn($t,$w) FocusOut($t,$w) |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| proc ::tk::FocusGroup_In {t w detail} { |
| variable FocusIn |
| variable ::tk::Priv |
|
|
| if {$detail ne "NotifyNonlinear" && $detail ne "NotifyNonlinearVirtual"} { |
| |
| |
| return |
| } |
| if {![info exists FocusIn($t,$w)]} { |
| set FocusIn($t,$w) "" |
| return |
| } |
| if {![info exists Priv(focus,$t)]} { |
| return |
| } |
| if {$Priv(focus,$t) eq $w} { |
| |
| |
| return |
| } else { |
| set Priv(focus,$t) $w |
| eval $FocusIn($t,$w) |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| proc ::tk::FocusGroup_Out {t w detail} { |
| variable FocusOut |
| variable ::tk::Priv |
|
|
| if {$detail ne "NotifyNonlinear" && $detail ne "NotifyNonlinearVirtual"} { |
| |
| return |
| } |
| if {![info exists Priv(focus,$t)]} { |
| return |
| } |
| if {![info exists FocusOut($t,$w)]} { |
| return |
| } else { |
| eval $FocusOut($t,$w) |
| set Priv(focus,$t) "" |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| proc ::tk::FDGetFileTypes {string} { |
| foreach t $string { |
| if {[llength $t] < 2 || [llength $t] > 3} { |
| return -code error -errorcode {TK VALUE FILE_TYPE} \ |
| "bad file type \"$t\", should be \"typeName {extension ?extensions ...?} ?{macType ?macTypes ...?}?\"" |
| } |
| lappend fileTypes([lindex $t 0]) {*}[lindex $t 1] |
| } |
|
|
| set types {} |
| foreach t $string { |
| set label [lindex $t 0] |
| set exts {} |
|
|
| if {[info exists hasDoneType($label)]} { |
| continue |
| } |
|
|
| |
| |
| |
| foreach macType [lindex $t 2] { |
| if {[string length $macType] != 4} { |
| return -code error -errorcode {TK VALUE MAC_TYPE} \ |
| "bad Macintosh file type \"$macType\"" |
| } |
| } |
|
|
| set name "$label \(" |
| set sep "" |
| set doAppend 1 |
| foreach ext $fileTypes($label) { |
| if {$ext eq ""} { |
| continue |
| } |
| regsub {^[.]} $ext "*." ext |
| if {![info exists hasGotExt($label,$ext)]} { |
| if {$doAppend} { |
| if {[string length $sep] && [string length $name]>40} { |
| set doAppend 0 |
| append name $sep... |
| } else { |
| append name $sep$ext |
| } |
| } |
| lappend exts $ext |
| set hasGotExt($label,$ext) 1 |
| } |
| set sep "," |
| } |
| append name "\)" |
| lappend types [list $name $exts] |
|
|
| set hasDoneType($label) 1 |
| } |
|
|
| return $types |
| } |
|
|