/usr/share/tcltk/tklib0.6/menubar/node.tcl is in tklib 0.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | # node.tcl --
#
# Package that defines the menubar::Node class. This class is a
# privite class used by the menubar::Tree class.
#
# Copyright (c) 2009 Tom Krehbiel <tomk@users.sourceforge.net>
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# RCS: @(#) $Id: node.tcl,v 1.4 2010/01/06 20:55:54 tomk Exp $
package require TclOO
package provide menubar::node 0.5
# --------------------------------------------------
#
# manubar::Node class - used by menubar::Tree class
#
# --------------------------------------------------
# --
# parent - contains the parent node instance
# children - contains list of child node instances
# attrs - a dictionary of attribute/value pairs
oo::class create ::menubar::node {
# --
# create a named node
constructor { pnode } {
variable parent
variable children
variable attrs
set parent ${pnode}
set children {}
set attrs [dict create]
}
# --
# If 'pnode' isn't blank, set the node's parent to its
# value; return the current parent.
method parent { {pnode ""} } {
variable parent
if { ${pnode} ne "" } {
set parent ${pnode}
}
return ${parent}
}
# --
# If 'clist' is empty then return the current childern list else
# set the node's children to 'clist' and return the current childern list.
# If the option '-force' is found then set the node's children even
# if 'clist' is blank.
method children { {clist ""} args } {
variable children
if { [llength ${clist}] != 0 || "-force" in ${args} } {
set children ${clist}
}
return ${children}
}
# --
# Insert a list of node instances ('args') into the
# child list at location 'index'.
method insert { index args } {
variable children
set children [linsert ${children} ${index} {*}${args}]
return
}
# --
# If 'kdict' isn't blank set the node attributes to its
# value; return the current value of attributes.
method attrs { {kdict ""} {force ""} } {
variable attrs
if { ${kdict} ne "" || ${force} eq "-force" } {
set attrs ${kdict}
}
return ${attrs}
}
# --
# Return the node's attributes as a dict of key/value pairs. If
# globpat exists, only keys that match the glob pattern will be
# returned.
method attrs.filter { {globpat ""} } {
variable attrs
if { ${globpat} eq "" } {
return ${attrs}
} else {
return [dict filter ${attrs} key ${globpat}]
}
}
# --
# Return the node's attribute keys as a list. If globpat exists,
# only return keys that match the glob pattern.
method attr.keys { {globpat ""} } {
variable attrs
if { ${globpat} eq "" } {
return [dict keys ${attrs}]
} else {
return [dict keys ${attrs} ${globpat}]
}
}
# --
# Set the value of the attribute 'key' to 'value'. If 'key
# doesn't exist add it to the node.
method attr.set { key value } {
variable attrs
dict set attrs ${key} ${value}
return ${value}
}
# --
#
method attr.unset { key } {
variable attrs
dict unset attrs ${key}
return
}
# --
# Return true of attribute 'key' exists for node else return false.
method attr.exists { key } {
variable attrs
return [dict exist ${attrs} ${key}]
}
# --
# Return the value of the attribute 'key' for node.
method attr.get { key } {
variable attrs
if { [dict exist ${attrs} ${key}] } {
return [dict get ${attrs} ${key}]
}
error "attribute '${key}' - not found"
}
# --
# Do a string append of 'value' to the value of attribute 'key' for
# node. Return the resulting string value.
method attr.append { key value } {
variable attrs
dict append attrs ${key} ${value}
return
}
# --
# Do a list append of 'value' to the value of attribute 'key' for
# node. Return the resulting list value.
method attr.lappend { key value } {
variable attrs
dict lappend attrs ${key} ${value}
return
}
}
|