123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
- #
- # $Id: Tree.tcl,v 1.7 2004/04/09 21:39:12 hobbs Exp $
- #
- # Tree.tcl --
- #
- # This file implements the TixTree widget.
- #
- # Copyright (c) 1993-1999 Ioi Kim Lam.
- # Copyright (c) 2000-2001 Tix Project Group.
- #
- # See the file "license.terms" for information on usage and redistribution
- # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- #
- tixWidgetClass tixTree {
- -classname TixTree
- -superclass tixVTree
- -method {
- autosetmode close getmode open setmode
- addchild anchor column delete entrycget
- entryconfigure header hide indicator info
- item nearest see selection show
- }
- -flag {
- -browsecmd -command -opencmd -closecmd
- }
- -configspec {
- {-browsecmd browseCmd BrowseCmd ""}
- {-command command Command ""}
- {-closecmd closeCmd CloseCmd ""}
- {-opencmd openCmd OpenCmd ""}
- }
- -default {
- {.scrollbar auto}
- {*Scrollbar.takeFocus 0}
- {*borderWidth 1}
- {*hlist.background #c3c3c3}
- {*hlist.drawBranch 1}
- {*hlist.height 10}
- {*hlist.highlightBackground #d9d9d9}
- {*hlist.indicator 1}
- {*hlist.indent 20}
- {*hlist.itemType imagetext}
- {*hlist.padX 2}
- {*hlist.padY 2}
- {*hlist.relief sunken}
- {*hlist.takeFocus 1}
- {*hlist.wideSelection 0}
- {*hlist.width 20}
- }
- }
- proc tixTree:InitWidgetRec {w} {
- upvar #0 $w data
- tixChainMethod $w InitWidgetRec
- }
- proc tixTree:ConstructWidget {w} {
- upvar #0 $w data
- tixChainMethod $w ConstructWidget
- }
- proc tixTree:SetBindings {w} {
- upvar #0 $w data
- tixChainMethod $w SetBindings
- }
- #----------------------------------------------------------------------
- #
- # Widget commands
- #
- #----------------------------------------------------------------------
- proc tixTree:autosetmode {w} {
- tixTree:SetModes $w ""
- }
- proc tixTree:close {w ent} {
- upvar #0 $w data
- set type [tixVTree:GetType $w $ent]
- if {$type == "close"} {
- tixCallMethod $w Activate $ent $type
- }
- }
- proc tixTree:open {w ent} {
- upvar #0 $w data
- set type [tixVTree:GetType $w $ent]
- if {$type == "open"} {
- tixCallMethod $w Activate $ent $type
- }
- }
- proc tixTree:getmode {w ent} {
- tixVTree:GetType $w $ent
- }
- proc tixTree:setmode {w ent mode} {
- tixVTree:SetMode $w $ent $mode
- }
- foreach cmd {
- addchild anchor column delete entrycget
- entryconfigure header hide indicator info
- item nearest see selection show
- } {
- proc tixTree:$cmd {w args} {
- # These are hlist passthrough methods to work around
- # Tix' ignorant inheritance model.
- upvar #0 $w data
- set cmd [lindex [split [lindex [info level 0] 0] :] end]
- uplevel 1 [linsert $args 0 $data(w:hlist) $cmd]
- }
- }
- unset cmd
- #----------------------------------------------------------------------
- #
- # Private Methods
- #
- #----------------------------------------------------------------------
- proc tixTree:SetModes {w ent} {
- upvar #0 $w data
-
- set mode none
- if {$ent == ""} {
- set children [$data(w:hlist) info children]
- } else {
- set children [$data(w:hlist) info children $ent]
- }
-
- if {$children != ""} {
- set mode close
- foreach c $children {
- if {[$data(w:hlist) info hidden $c]} {
- set mode open
- }
- tixTree:SetModes $w $c
- }
- }
-
- if {$ent != ""} {
- tixVTree:SetMode $w $ent $mode
- }
- }
- #----------------------------------------------------------------------
- #
- # Virtual Methods
- #
- #----------------------------------------------------------------------
- proc tixTree:OpenCmd {w ent} {
- upvar #0 $w data
- if {$data(-opencmd) != ""} {
- tixTree:CallSwitchCmd $w $data(-opencmd) $ent
- } else {
- tixChainMethod $w OpenCmd $ent
- }
- }
- proc tixTree:CloseCmd {w ent} {
- upvar #0 $w data
- if {$data(-closecmd) != ""} {
- tixTree:CallSwitchCmd $w $data(-closecmd) $ent
- } else {
- tixChainMethod $w CloseCmd $ent
- }
- }
- # Call the opencmd or closecmd, depending on the mode ($cmd argument)
- #
- proc tixTree:CallSwitchCmd {w cmd ent} {
- upvar #0 $w data
- set bind(specs) {%V}
- set bind(%V) $ent
- tixEvalCmdBinding $w $cmd bind $ent
- }
- proc tixTree:Command {w B} {
- upvar #0 $w data
- upvar $B bind
- tixChainMethod $w Command $B
- set ent [tixEvent flag V]
- if {$data(-command) != ""} {
- tixEvalCmdBinding $w $data(-command) bind $ent
- }
- }
- proc tixTree:BrowseCmd {w B} {
- upvar #0 $w data
- set ent [tixEvent flag V]
- if {$data(-browsecmd) != ""} {
- tixEvalCmdBinding $w $data(-browsecmd) "" $ent
- }
- }
|