Spaces:
Building
Building
# -*-mode: tcl; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- | |
# | |
# $Id: SHList.tcl,v 1.3 2001/12/09 05:31:07 idiscovery Exp $ | |
# | |
# Tix Demostration Program | |
# | |
# This sample program is structured in such a way so that it can be | |
# executed from the Tix demo program "widget": it must have a | |
# procedure called "RunSample". It should also have the "if" statment | |
# at the end of this file so that it can be run as a standalone | |
# program using tixwish. | |
# This file demonstrates the use of the tixScrolledHList widget. | |
# | |
proc RunSample {w} { | |
# We create the frame and the ScrolledHList widget | |
# at the top of the dialog box | |
# | |
frame $w.top -relief raised -bd 1 | |
# Put a simple hierachy into the HList (two levels). Use colors and | |
# separator widgets (frames) to make the list look fancy | |
# | |
tixScrolledHList $w.top.a | |
pack $w.top.a -expand yes -fill both -padx 10 -pady 10 -side left | |
# This is our little relational database | |
# | |
set bosses { | |
{jeff "Jeff Waxman"} | |
{john "John Lee"} | |
{peter "Peter Kenson"} | |
} | |
set employees { | |
{alex john "Alex Kellman"} | |
{alan john "Alan Adams"} | |
{andy peter "Andreas Crawford"} | |
{doug jeff "Douglas Bloom"} | |
{jon peter "Jon Baraki"} | |
{chris jeff "Chris Geoffrey"} | |
{chuck jeff "Chuck McLean"} | |
} | |
set hlist [$w.top.a subwidget hlist] | |
# Let configure the appearance of the HList subwidget | |
# | |
$hlist config -separator "." -width 25 -drawbranch 0 -indent 10 | |
set index 0 | |
foreach line $bosses { | |
if {$index != 0} { | |
frame $hlist.sep$index -bd 2 -height 2 -width 150 -relief sunken \ | |
-bg [$hlist cget -bg] | |
$hlist addchild {} -itemtype window \ | |
-window $hlist.sep$index -state disabled | |
} | |
$hlist add [lindex $line 0] -itemtype text \ | |
-text [lindex $line 1] | |
incr index | |
} | |
foreach line $employees { | |
# "." is the separator character we chose above | |
# | |
set entrypath [lindex $line 1].[lindex $line 0] | |
# ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ | |
# parent entryPath / child's name | |
$hlist add $entrypath -text [lindex $line 2] | |
# [Hint] Make sure the [lindex $line 1].[lindex $line 0] you choose | |
# are unique names. If you cannot be sure of this (because of | |
# the structure of your database, e.g.) you can use the | |
# "addchild" widget command instead: | |
# | |
# $hlist addchild [lindex $line 1] -text [lindex $line 2] | |
# ^^^^^^^^^^^^^^^^ | |
# parent entryPath | |
} | |
# Use a ButtonBox to hold the buttons. | |
# | |
tixButtonBox $w.box -orientation horizontal | |
$w.box add ok -text Ok -underline 0 -command "destroy $w" \ | |
-width 6 | |
$w.box add cancel -text Cancel -underline 0 -command "destroy $w" \ | |
-width 6 | |
pack $w.box -side bottom -fill x | |
pack $w.top -side top -fill both -expand yes | |
} | |
# This "if" statement makes it possible to run this script file inside or | |
# outside of the main demo program "widget". | |
# | |
if {![info exists tix_demo_running]} { | |
wm withdraw . | |
set w .demo | |
toplevel $w; wm transient $w "" | |
RunSample $w | |
bind .demo <Destroy> exit | |
} | |