# -*-mode: tcl; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- # # $Id: SHList2.tcl,v 1.4 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 how to use multiple columns and multiple styles # in the tixHList widget # # In a tixHList widget, you can have one ore more columns. # 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 -options { hlist.columns 3 hlist.header true } pack $w.top.a -expand yes -fill both -padx 10 -pady 10 -side left set hlist [$w.top.a subwidget hlist] # Create the title for the HList widget # >> Notice that we have set the hlist.header subwidget option to true # so that the header is displayed # # First some styles for the headers set style(header) [tixDisplayStyle text -refwindow $hlist \ -fg black -anchor c \ -padx 8 -pady 2\ -font [tix option get bold_font ]] $hlist header create 0 -itemtype text -text Name \ -style $style(header) $hlist header create 1 -itemtype text -text Position \ -style $style(header) # Notice that we use 3 columns in the hlist widget. This way when the user # expands the windows wide, the right side of the header doesn't look # chopped off. The following line ensures that the 3 column header is # not shown unless the hlist window is wider than its contents. # $hlist column width 2 0 # This is our little relational database # set boss {doe "John Doe" Director} set managers { {jeff "Jeff Waxman" Manager} {john "John Lee" Manager} {peter "Peter Kenson" Manager} } set employees { {alex john "Alex Kellman" Clerk} {alan john "Alan Adams" Clerk} {andy peter "Andreas Crawford" Salesman} {doug jeff "Douglas Bloom" Clerk} {jon peter "Jon Baraki" Salesman} {chris jeff "Chris Geoffrey" Clerk} {chuck jeff "Chuck McLean" Cleaner} } set style(mgr_name) [tixDisplayStyle text -refwindow $hlist \ -font [tix option get bold_font ]] set style(mgr_posn) [tixDisplayStyle text -refwindow $hlist \ -padx 8] set style(empl_name) [tixDisplayStyle text -refwindow $hlist \ -font [tix option get bold_font ]] set style(empl_posn) [tixDisplayStyle text -refwindow $hlist \ -padx 8 ] # Let configure the appearance of the HList subwidget # $hlist config -separator "." -width 25 -drawbranch 0 -indent 10 $hlist column width 0 -char 20 # Create the boss # $hlist add . -itemtype text -text [lindex $boss 1] \ -style $style(mgr_name) $hlist item create . 1 -itemtype text -text [lindex $boss 2] \ -style $style(mgr_posn) # Create the managers # set index 0 foreach line $managers { set row [$hlist add .[lindex $line 0] -itemtype text \ -text [lindex $line 1] -style $style(mgr_name)] $hlist item create $row 1 -itemtype text -text [lindex $line 2] \ -style $style(mgr_posn) 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 set row [$hlist add $entrypath -text [lindex $line 2] \ -style $style(empl_name)] $hlist item create $row 1 -itemtype text -text [lindex $line 3] \ -style $style(empl_posn) # [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 exit }