home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 1997 November
/
PCWorld_1997-11_cd.bin
/
software
/
programy
/
komix
/
DATA.Z
/
menutree.tcl
< prev
next >
Wrap
Text File
|
1996-10-22
|
4KB
|
161 lines
#---------------------------------------------------------------------------
#
# (c) Westmount Technology 1994
#
# File: @(#)menutree.tcl /main/hindenburg/1
# Author: <generated>
# Description:
#---------------------------------------------------------------------------
# SccsId = @(#)menutree.tcl /main/hindenburg/1 22 Oct 1996 Copyright 1994 Westmount Technology
# Start user added include file section
# End user added include file section
Class MenuTree : {BrowsTree} {
constructor
method destructor
method dropEvent
method isDropPossible
method selectedSet
method getMenuPartNode
method setMenuPartNode
method removeMenuPartNode
attribute levelsToWrite
attribute MenuPartNode
}
constructor MenuTree {class this name} {
set this [BrowsTree::constructor $class $this $name]
$this MenuPartNode [Dictionary new]
# Start constructor user section
# create popup menu for tree
TreePopUpMenu new $this.pop -poppedUp {
%this entrySet [[.main menuHdlr] getValidPopUpEntrySet]
}
# End constructor user section
return $this
}
method MenuTree::destructor {this} {
# Start destructor user section
# End destructor user section
}
method MenuTree::dropEvent {this droppedObject srcIsDst droppedAfterObject droppedForObject} {
if {$srcIsDst == 0} {
wmtkerror "Drag & drop between tools is not supported (yet)."
return
}
if { $droppedAfterObject == "" &&
![$droppedObject isA MenuBarNode] } {
wmtkerror "Object not moved, reason: no parent available."
return
}
if {![$droppedObject editable]} {
wmtkerror "Object not moved, reason: object not editable."
return
}
set obj $droppedAfterObject
if [$droppedObject isA MenuBarNode] {
set newIndex 0
while {$obj != ""} {
set newIndex [expr [$obj index] + 1]
set obj [$obj parent]
}
} else {
if [$obj isA ParentNode] {
set newIndex 0
} else {
set newIndex [expr [$obj index] + 1]
# find the parent
while {$obj != "" && (![$obj isA ParentNode] || \
[$obj foldState] == 1)} {
set obj [$obj parent]
}
}
# is a parent found
if {$obj == "" } {
return
}
}
if {[$this isDropPossible $droppedObject $obj] == 1} {
$droppedObject parent $obj
$droppedObject index $newIndex
if {$obj != "" } {
set dotName [$obj name].menu
} else {
set dotName ""
}
# adjust the dotnames from the object and it's children
$droppedObject changeDotName $dotName
[.main editorArea] isChanged 1
}
}
method MenuTree::isDropPossible {this droppedObject parentObject} {
if {[ $droppedObject parent] != $parentObject} {
set parent $parentObject
} else {
set parent [$droppedObject parent]
}
# check if this one is valid
set err [$droppedObject check [$droppedObject scope] \
[$droppedObject visible] [$droppedObject specLevel] $parent]
if {$err != ""} {
wmtkerror "[$droppedObject displayName]: $err: object not moved."
return 0
}
set levelList [$droppedObject specLevel]
# check if all the children can be saved
set err ""
foreach i [$this getChildObjects $droppedObject] {
if {![$i editable]} {
lappend err "[$i displayName] "
}
}
if { $err != "" } {
wmtkerror "[$droppedObject displayName] $err not changeable."
return 0
}
return 1
}
method MenuTree::selectedSet {this args} {
if {$args == ""} {
return [$this selected]
} else {
$this selected [lindex $args 0]
}
}
# Do not delete this line -- regeneration end marker
method MenuTree::getMenuPartNode {this dotName} {
return [[$this MenuPartNode] set $dotName]
}
method MenuTree::setMenuPartNode {this dotName newMenuPartNode} {
[$this MenuPartNode] set $dotName $newMenuPartNode
}
method MenuTree::removeMenuPartNode {this dotName} {
[$this MenuPartNode] unset $dotName
}