123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
- #
- # $Id: Tix.tcl,v 1.14 2008/03/17 23:01:10 hobbs Exp $
- #
- # Tix.tcl --
- #
- # This file implements the Tix application context class
- #
- # 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.
- #
- tixClass tixAppContext {
- -superclass {}
- -classname TixAppContext
- -method {
- cget configure addbitmapdir filedialog getbitmap getimage
- option platform resetoptions setbitmap initstyle
- }
- -flag {
- -binding -debug -extracmdargs -filedialog -fontset -grabmode
- -haspixmap -libdir -scheme -schemepriority -percentsubst
- }
- -readonly {
- -haspixmap
- }
- -configspec {
- {-binding TK}
- {-debug 0}
- {-extracmdargs 1}
- {-filedialog ""}
- {-fontset WmDefault}
- {-grabmode global}
- {-haspixmap 0}
- {-libdir ""}
- {-percentsubst 0}
- {-scheme WmDefault}
- {-schemepriority 21}
- }
- -alias {
- }
- }
- proc tixAppContext:Constructor {w} {
- upvar #0 $w data
- global tix_priv tix_library tixOption
- if {[info exists data(initialized)]} {
- error "tixAppContext has already be initialized"
- } else {
- set data(initialized) 1
- }
- set data(et) [string equal $tix_library ""]
- set data(image) 0
- # These options were set when Tix was loaded
- #
- set data(-binding) $tix_priv(-binding)
- set data(-debug) $tix_priv(-debug)
- set data(-fontset) $tix_priv(-fontset)
- set data(-scheme) $tix_priv(-scheme)
- set data(-schemepriority) $tix_priv(-schemepriority)
- if {![info exists tix_priv(isSafe)]} {
- set data(-libdir) [file normalize $tix_library]
- }
- set tixOption(prioLevel) $tix_priv(-schemepriority)
- # Compatibility stuff: the obsolete name courier_font has been changed to
- # fixed_font
- set tixOption(fixed_font) Courier
- set tixOption(courier_font) $tixOption(fixed_font)
- # Enable/Disable Intrinsics debugging
- #
- set tix_priv(debug) [string is true -strict $data(-debug)]
- tixAppContext:BitmapInit $w
- tixAppContext:FileDialogInit $w
- # Clean up any error message generated by the above loop
- set ::errorInfo ""
- }
- proc tixAppContext:initstyle {w} {
- # Do the init stuff here that affects styles
- upvar #0 $w data
- global tix_priv
- if {![info exists tix_priv(isSafe)]} {
- tixAppContext:config-fontset $w $data(-fontset)
- tixAppContext:config-scheme $w $data(-scheme)
- }
- tixAppContext:BitmapInit $w
- tixAppContext:FileDialogInit $w
- # Force the "." window to accept the new Tix options
- #
- set noconfig [list -class -colormap -container -menu -screen -use -visual]
- set noconfig [lsort $noconfig]
- foreach spec [. configure] {
- set flag [lindex $spec 0]
- if {[llength $spec] != 5
- || [lsearch -exact -sorted $noconfig $flag] != -1} {
- continue
- }
- set name [lindex $spec 1]
- set class [lindex $spec 2]
- set value [option get . $name $class]
- catch {. configure $flag $value}
- }
- }
- #----------------------------------------------------------------------
- # Configurations
- #
- #----------------------------------------------------------------------
- proc tixAppContext:resetoptions {w scheme fontset {schemePrio ""}} {
- upvar #0 $w data
- if {! $data(et)} {
- global tixOption
- option clear
- if {$schemePrio != ""} {
- set tixOption(prioLevel) $schemePrio
- }
- tixAppContext:config-scheme $w $scheme
- tixAppContext:config-fontset $w $fontset
- }
- }
- proc tixAppContext:StartupError {args} {
- bgerror [join $args "\n"]
- }
- proc tixAppContext:config-fontset {w value} {
- upvar #0 $w data
- global tix_priv tixOption
- set data(-fontset) $value
- #-----------------------------------
- # Initialization of options database
- #-----------------------------------
- # Load the fontset
- #
- if {!$data(et)} {
- set prefDir [file join $data(-libdir) pref]
- set fontSetFile [file join $prefDir $data(-fontset).fsc]
- if {[file exists $fontSetFile]} {
- source $fontSetFile
- tixPref:InitFontSet:$data(-fontset)
- tixPref:SetFontSet:$data(-fontset)
- } else {
- tixAppContext:StartupError \
- " Error: cannot use fontset \"$data(-fontset)\"" \
- " Using default fontset "
- tixSetDefaultFontset
- }
- } else {
- if [catch {
- tixPref:InitFontSet:$data(-fontset)
- tixPref:SetFontSet:$data(-fontset)
- }] {
- # User chose non-existent fontset
- #
- tixAppContext:StartupError \
- " Error: cannot use fontset \"$data(-fontset)\"" \
- " Using default fontset "
- tixSetDefaultFontset
- }
- }
- }
- proc tixAppContext:config-scheme {w value} {
- upvar #0 $w data
- global tix_priv
- set data(-scheme) $value
- # Load the color scheme
- #
- if {!$data(et)} {
- set schemeName [file join [file join $data(-libdir) pref] \
- $data(-scheme).csc]
- if {[file exists $schemeName]} {
- source $schemeName
- tixPref:SetScheme-Color:$data(-scheme)
- } else {
- tixAppContext:StartupError \
- " Error: cannot use color scheme \"$data(-scheme)\"" \
- " Using default color scheme"
- tixSetDefaultScheme-Color
- }
- } else {
- if [catch {tixPref:SetScheme-Color:$data(-scheme)}] {
- # User chose non-existent color scheme
- #
- tixAppContext:StartupError \
- " Error: cannot use color scheme \"$data(-scheme)\"" \
- " Using default color scheme"
- tixSetDefaultScheme-Color
- }
- }
- }
- #----------------------------------------------------------------------
- # Private methods
- #
- #----------------------------------------------------------------------
- proc tixAppContext:BitmapInit {w} {
- upvar #0 $w data
- # See whether we have pixmap extension
- #
- set data(-haspixmap) true
- # Dynamically set the bitmap directory
- #
- if {! $data(et)} {
- set data(bitmapdirs) [list [file join $data(-libdir) bitmaps]]
- } else {
- set data(bitmapdirs) ""
- }
- }
- proc tixAppContext:FileDialogInit {w} {
- upvar #0 $w data
- if {$data(-filedialog) == ""} {
- set data(-filedialog) [option get . fileDialog FileDialog]
- }
- if {$data(-filedialog) == ""} {
- set data(-filedialog) tixFileSelectDialog
- }
- }
- #----------------------------------------------------------------------
- # Public methods
- #----------------------------------------------------------------------
- proc tixAppContext:addbitmapdir {w bmpdir} {
- upvar #0 $w data
- if {[lsearch $data(bitmapdirs) $bmpdir] == -1} {
- lappend data(bitmapdirs) $bmpdir
- }
- }
- proc tixAppContext:getimage {w name} {
- upvar #0 $w data
- global tix_priv
- if {[info exists data(img:$name)]} {
- return $data(img:$name)
- }
- if {![info exists tix_priv(isSafe)]} {
- foreach dir $data(bitmapdirs) {
- foreach {ext type} {
- .xpm pixmap
- .gif photo
- .ppm photo
- .xbm bitmap
- "" bitmap
- } {
- set file [file join $dir $name$ext]
- if {[file exists $file]
- && ![catch {
- set img tiximage$data(image)
- set data(img:$name) \
- [image create $type $img -file $file]
- }]} {
- incr data(image)
- break
- }
- }
- if {[info exists data(img:$name)]} {
- return $data(img:$name)
- }
- }
- }
- if {![info exists data(img:$name)]} {
- catch {
- set img tiximage$data(image)
- # This is for compiled-in images
- set data(img:$name) [image create pixmap $img -id $name]
- } err
- if {[string match internal* $err]} {
- error $err
- } else {
- incr data(image)
- }
- }
- if {[info exists data(img:$name)]} {
- return $data(img:$name)
- } else {
- error "image file \"$name\" cannot be found"
- }
- }
- proc tixAppContext:getbitmap {w bitmapname} {
- upvar #0 $w data
- global tix_priv
- if {[info exists data(bmp:$bitmapname)]} {
- return $data(bmp:$bitmapname)
- } else {
- set ext [file extension $bitmapname]
- if {$ext == ""} {
- set ext .xbm
- }
- # This is the fallback value. If we can't find the bitmap in
- # the bitmap directories, then use the name of the bitmap
- # as the default value.
- #
- set data(bmp:$bitmapname) $bitmapname
- if {[info exists tix_priv(isSafe)]} {
- return $data(bmp:$bitmapname)
- }
- foreach dir $data(bitmapdirs) {
- if {$ext eq ".xbm" &&
- [file exists [file join $dir $bitmapname.xbm]]} {
- set data(bmp:$bitmapname) \
- @[file join $dir $bitmapname.xbm]
- break
- }
- if {[file exists [file join $dir $bitmapname]]} {
- set data(bmp:$bitmapname) @[file join $dir $bitmapname]
- break
- }
- }
- return $data(bmp:$bitmapname)
- }
- }
- proc tixAppContext:filedialog {w {type tixFileSelectDialog}} {
- upvar #0 $w data
- if {$type == ""} {
- set type $data(-filedialog)
- }
- if {![info exists data(filedialog,$type)]} {
- set data(filedialog,$type) ""
- }
- if {$data(filedialog,$type) == "" || \
- ![winfo exists $data(filedialog,$type)]} {
- set data(filedialog,$type) [$type .tixapp_filedialog_$type]
- }
- return $data(filedialog,$type)
- }
- proc tixAppContext:option {w action {option ""} {value ""}} {
- global tixOption
- if {$action eq "get"} {
- if {$option == ""} {return [lsort [array names tixOption]]}
- return $tixOption($option)
- }
- }
- proc tixAppContext:platform {w} {
- return $::tcl_platform(platform)
- }
- proc tixDebug {message {level "1"}} {
- set debug [tix cget -debug]
- if {![string is true -strict $debug]} { return }
- if {$debug > 0} {
- # use $level here
- if {[catch {fconfigure stderr}]} {
- # This will happen under PYTHONW.EXE or frozen Windows apps
- proc tixDebug args {}
- } else {
- puts stderr $message
- }
- }
- }
- if {![llength [info commands toplevel]]} {
- interp alias {} toplevel {} frame
- }
|