Spaces:
Running
Running
# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- | |
# | |
# $Id: Init.tcl,v 1.18 2008/02/28 04:35:16 hobbs Exp $ | |
# | |
# Init.tcl -- | |
# | |
# Initializes the Tix library and performes version checking to ensure | |
# the Tcl, Tk and Tix script libraries loaded matches with the binary | |
# of the respective packages. | |
# | |
# 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. | |
# | |
namespace eval ::tix { | |
} | |
proc tixScriptVersion {} { return $::tix_version } | |
proc tixScriptPatchLevel {} { return $::tix_patchLevel } | |
proc ::tix::Init {dir} { | |
global tix env tix_library tcl_platform auto_path | |
if {[info exists tix(initialized)]} { | |
return | |
} | |
if {![info exists tix_library]} { | |
# we're running from stand-alone module. | |
set tix_library "" | |
} elseif {[file isdir $tix_library]} { | |
if {![info exists auto_path] || | |
[lsearch $auto_path $tix_library] == -1} { | |
lappend auto_path $tix_library | |
} | |
} | |
# STEP 1: Version checking | |
# | |
# | |
package require Tcl 8.4 | |
package require -exact Tix 8.4.3 | |
# STEP 2: Initialize file compatibility modules | |
# | |
foreach file { | |
fs.tcl | |
Tix.tcl Event.tcl | |
Balloon.tcl BtnBox.tcl | |
CObjView.tcl ChkList.tcl | |
ComboBox.tcl Compat.tcl | |
Console.tcl Control.tcl | |
DefSchm.tcl DialogS.tcl | |
DirBox.tcl DirDlg.tcl | |
DirList.tcl DirTree.tcl | |
DragDrop.tcl DtlList.tcl | |
EFileBox.tcl EFileDlg.tcl | |
FileBox.tcl FileCbx.tcl | |
FileDlg.tcl FileEnt.tcl | |
FloatEnt.tcl | |
Grid.tcl HList.tcl | |
HListDD.tcl IconView.tcl | |
LabEntry.tcl LabFrame.tcl | |
LabWidg.tcl ListNBk.tcl | |
Meter.tcl MultView.tcl | |
NoteBook.tcl OldUtil.tcl | |
OptMenu.tcl PanedWin.tcl | |
PopMenu.tcl Primitiv.tcl | |
ResizeH.tcl SGrid.tcl | |
SHList.tcl SListBox.tcl | |
STList.tcl SText.tcl | |
SWidget.tcl SWindow.tcl | |
Select.tcl Shell.tcl | |
SimpDlg.tcl StackWin.tcl | |
StatBar.tcl StdBBox.tcl | |
StdShell.tcl TList.tcl | |
Tree.tcl | |
Utils.tcl VResize.tcl | |
VStack.tcl VTree.tcl | |
Variable.tcl WInfo.tcl | |
} { | |
uplevel \#0 [list source [file join $dir $file]] | |
} | |
# STEP 3: Initialize the Tix application context | |
# | |
tixAppContext tix | |
# DO NOT DO THIS HERE !! | |
# This causes the global defaults to be altered, which may not | |
# be desirable. The user can call this after requiring Tix if | |
# they wish to use different defaults. | |
# | |
#tix initstyle | |
# STEP 4: Initialize the bindings for widgets that are implemented in C | |
# | |
foreach w { | |
HList TList Grid ComboBox Control FloatEntry | |
LabelEntry ScrolledGrid ScrolledListBox | |
} { | |
tix${w}Bind | |
} | |
rename ::tix::Init "" | |
} | |
# tixWidgetClassEx -- | |
# | |
# This procedure is similar to tixWidgetClass, except it | |
# performs a [subst] on the class declaration before evaluating | |
# it. This gives us a chance to specify platform-specific widget | |
# default without using a lot of ugly double quotes. | |
# | |
# The use of subst'able entries in the class declaration should | |
# be restrained to widget default values only to avoid producing | |
# unreadable code. | |
# | |
# Arguments: | |
# name - The name of the class to declare. | |
# classDecl - Various declarations about the class. See documentation | |
# of tixWidgetClass for details. | |
proc tixWidgetClassEx {name classDecl} { | |
tixWidgetClass $name [uplevel [list subst $classDecl]] | |
} | |
# | |
# Deprecated tix* functions | |
# | |
interp alias {} tixFileJoin {} file join | |
interp alias {} tixStrEq {} string equal | |
proc tixTrue {args} { return 1 } | |
proc tixFalse {args} { return 0 } | |
proc tixStringSub {var fromStr toStr} { | |
upvar 1 var var | |
set var [string map $var [list $fromStr $toStr]] | |
} | |
proc tixGetBoolean {args} { | |
set len [llength [info level 0]] | |
set nocomplain 0 | |
if {$len == 3} { | |
if {[lindex $args 0] ne "-nocomplain"} { | |
return -code error "wrong \# args:\ | |
must be [lindex [info level 0] 0] ?-nocomplain? string" | |
} | |
set nocomplain 1 | |
set val [lindex $args 1] | |
} elseif {$len != 2} { | |
return -code error "wrong \# args:\ | |
must be [lindex [info level 0] 0] ?-nocomplain? string" | |
} else { | |
set val [lindex $args 0] | |
} | |
if {[string is boolean -strict $val] || $nocomplain} { | |
return [string is true -strict $val] | |
} elseif {$nocomplain} { | |
return 0 | |
} else { | |
return -code error "\"$val\" is not a valid boolean" | |
} | |
} | |
interp alias {} tixVerifyBoolean {} tixGetBoolean | |
proc tixGetInt {args} { | |
set len [llength [info level 0]] | |
set nocomplain 0 | |
set trunc 0 | |
for {set i 1} {$i < $len-1} {incr i} { | |
set arg [lindex $args 0] | |
if {$arg eq "-nocomplain"} { | |
set nocomplain 1 | |
} elseif {$arg eq "-trunc"} { | |
set trunc 1 | |
} else { | |
return -code error "wrong \# args: must be\ | |
[lindex [info level 0] 0] ?-nocomplain? ?-trunc? string" | |
} | |
} | |
if {$i != $len-1} { | |
return -code error "wrong \# args: must be\ | |
[lindex [info level 0] 0] ?-nocomplain? ?-trunc? string" | |
} | |
set val [lindex $args end] | |
set code [catch {expr {round($val)}} res] | |
if {$code} { | |
if {$nocomplain} { | |
return 0 | |
} else { | |
return -code error "\"$val\" cannot be converted to integer" | |
} | |
} | |
if {$trunc} { | |
return [expr {int($val)}] | |
} else { | |
return $res | |
} | |
} | |
proc tixFile {option filename} { | |
set len [string length $option] | |
if {$len > 1 && [string equal -length $len $option "tildesubst"]} { | |
set code [catch {file normalize $filename} res] | |
if {$code == 0} { | |
set filename $res | |
} | |
} elseif {$len > 1 && [string equal -length $len $option "trimslash"]} { | |
# normalize extra slashes | |
set filename [file join $filename] | |
if {$filename ne "/"} { | |
set filename [string trimright $filename "/"] | |
} | |
} else { | |
return -code error "unknown option \"$option\",\ | |
must be tildesubst or trimslash" | |
} | |
return $filename | |
} | |
interp alias {} tixRaiseWindow {} raise | |
#proc tixUnmapWindow {w} { } | |
# | |
# if tix_library is not defined, we're running in SAM mode. ::tix::Init | |
# will be called later by the Tix_Init() C code. | |
# | |
if {[info exists tix_library]} { | |
::tix::Init [file dirname [info script]] | |
} | |