compound_container.tcl
来自「一个跨平台的TCL/TK可视开发环境类似VC. TCL/TK是一个跨平台的脚本」· TCL 代码 · 共 1,392 行 · 第 1/4 页
TCL
1,392 行
}
}
}
}
}
#############################################################################
## Procedure: ::bitmapbutton::get_parent
namespace eval ::bitmapbutton {
proc get_parent {W {level 1}} {
global widget
set items [split $W .]
set last [expr [llength $items] - 1]
set parent_items [lrange $items 0 [expr $last - $level] ]
return [join $parent_items .]
}
}
#############################################################################
## Procedure: ::bitmapbutton::set_command
namespace eval ::bitmapbutton {
proc set_command {W cmd} {
global widget
set N [vTcl:rename $W]
namespace eval ::${N} {}
set ::${N}::command $cmd
}
}
}
}
#############################################################################
## vTcl Code to Load Stock Images
if {![info exist vTcl(sourcing)]} {
#############################################################################
## Procedure: vTcl:rename
proc ::vTcl:rename {name} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
regsub -all "\\." $name "_" ret
regsub -all "\\-" $ret "_" ret
regsub -all " " $ret "_" ret
regsub -all "/" $ret "__" ret
regsub -all "::" $ret "__" ret
return [string tolower $ret]
}
#############################################################################
## Procedure: vTcl:image:create_new_image
proc ::vTcl:image:create_new_image {filename {description {no description}} {type {}} {data {}}} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
global vTcl env
# Does the image already exist?
if {[info exists vTcl(images,files)]} {
if {[lsearch -exact $vTcl(images,files) $filename] > -1} { return }
}
if {![info exists vTcl(sourcing)] && [string length $data] > 0} {
set object [image create [vTcl:image:get_creation_type $filename] -data $data]
} else {
# Wait a minute... Does the file actually exist?
if {! [file exists $filename] } {
# Try current directory
set script [file dirname [info script]]
set filename [file join $script [file tail $filename] ]
}
if {![file exists $filename]} {
set description "file not found!"
set object [image create photo -data [vTcl:image:broken_image] ]
} else {
set object [image create [vTcl:image:get_creation_type $filename] -file $filename]
}
}
set reference [vTcl:rename $filename]
set vTcl(images,$reference,image) $object
set vTcl(images,$reference,description) $description
set vTcl(images,$reference,type) $type
set vTcl(images,filename,$object) $filename
lappend vTcl(images,files) $filename
lappend vTcl(images,$type) $object
# return image name in case caller might want it
return $object
}
#############################################################################
## Procedure: vTcl:image:get_image
proc ::vTcl:image:get_image {filename} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
set reference [vTcl:rename $filename]
# Let's do some checking first
if {![info exists ::vTcl(images,$reference,image)]} {
# Well, the path may be wrong; in that case check
# only the filename instead, without the path.
set imageTail [file tail $filename]
foreach oneFile $::vTcl(images,files) {
if {[file tail $oneFile] == $imageTail} {
set reference [vTcl:rename $oneFile]
break
}
}
}
return $::vTcl(images,$reference,image)
}
#############################################################################
## Procedure: vTcl:image:get_creation_type
proc ::vTcl:image:get_creation_type {filename} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
switch [string tolower [file extension $filename]] {
.ppm -
.jpg -
.bmp -
.gif {return photo}
.xbm {return bitmap}
default {return photo}
}
}
#############################################################################
## Procedure: vTcl:image:broken_image
proc ::vTcl:image:broken_image {} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
return {
R0lGODdhFAAUAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/
AP//AAAA//8A/wD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAACwAAAAAFAAUAAAIhAAPCBxIsKDBgwgPAljIUOBC
BAkBPJg4UeBEBBAVPkCI4EHGghIHChAwsKNHgyEPCFBA0mFDkBtVjiz4AADK
mAds0tRJMCVBBkAl8hwYMsFPBwyE3jzQwKhAoASUwmTagCjDmksbVDWIderC
g1174gQ71CHFigfOhrXKUGfbrwnjyp0bEAA7
}
}
foreach img {
{{[file join D:/ cygwin home cgavin vtcl images edit ok.gif]} {} stock {}}
} {
eval set _file [lindex $img 0]
vTcl:image:create_new_image\
$_file [lindex $img 1] [lindex $img 2] [lindex $img 3]
}
}
#################################
# VTCL LIBRARY PROCEDURES
#
if {![info exists vTcl(sourcing)]} {
#############################################################################
## Library Procedure: Window
proc ::Window {args} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
global vTcl
set cmd [lindex $args 0]
set name [lindex $args 1]
set newname [lindex $args 2]
set rest [lrange $args 3 end]
if {$name == "" || $cmd == ""} { return }
if {$newname == ""} { set newname $name }
if {$name == "."} { wm withdraw $name; return }
set exists [winfo exists $newname]
switch $cmd {
show {
if {$exists} {
wm deiconify $newname
} elseif {[info procs vTclWindow$name] != ""} {
eval "vTclWindow$name $newname $rest"
}
if {[winfo exists $newname] && [wm state $newname] == "normal"} {
vTcl:FireEvent $newname <<Show>>
}
}
hide {
if {$exists} {
wm withdraw $newname
vTcl:FireEvent $newname <<Hide>>
return}
}
iconify { if $exists {wm iconify $newname; return} }
destroy { if $exists {destroy $newname; return} }
}
}
#############################################################################
## Library Procedure: vTcl::widgets::core::compoundcontainer::cgetProc
namespace eval vTcl::widgets::core::compoundcontainer {
proc cgetProc {w args} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
upvar ::${w}::compoundType compoundType
upvar ::${w}::compoundClass compoundClass
set option [lindex $args 0]
switch -- $option {
-class {return CompoundContainer}
-compoundType {return $compoundType}
-compoundClass {return $compoundClass}
default {error "unknown option $option"}
}
}
}
#############################################################################
## Library Procedure: vTcl::widgets::core::compoundcontainer::configureProc
namespace eval vTcl::widgets::core::compoundcontainer {
proc configureProc {w args} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
upvar ::${w}::compoundType compoundType
upvar ::${w}::compoundClass compoundClass
if {[lempty $args]} {
return [concat [configureProc $w -class] [configureProc $w -compoundType] [configureProc $w -compoundClass]]
}
if {[llength $args] == 1} {
set option [lindex $args 0]
switch -- $option {
-class {
return [list "-class class Class Frame CompoundContainer"]
}
-compoundClass {
return [list "-compoundClass compoundClass CompoundClass {} [list $compoundClass]"]
}
-compoundType {
return [list "-compoundType compoundType CompoundType user $compoundType"]
}
default {
error "unknown option $option"
}
}
}
## this widget is not modifiable afterward
error "cannot configure this widget after it is created"
}
}
#############################################################################
## Library Procedure: vTcl::widgets::core::compoundcontainer::createCmd
namespace eval vTcl::widgets::core::compoundcontainer {
proc createCmd {path args} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
frame $path -class CompoundContainer
namespace eval ::$path "set compoundType {}; set compoundClass {}"
## compound class specified ?
if {[llength $args] == 2 && [lindex $args 0] == "-compoundClass"} {
set type user
set compoundName [lindex $args 1]
insertCompound $path $type [list $compoundName]
}
return $path
}
}
#############################################################################
## Library Procedure: vTcl::widgets::core::compoundcontainer::insertCompound
namespace eval vTcl::widgets::core::compoundcontainer {
proc insertCompound {target type compoundName} {
## This procedure may be used free of restrictions.
## Exception added by Christian Gavin on 08/08/02.
## Other packages and widget toolkits have different licensing requirements.
## Please read their license agreements for details.
set type user
set spc ${type}::$compoundName
if {[info exists ::vTcl(running)]} {
::vTcl::compounds::mergeCompoundCode $type [join $compoundName]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?