| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- # -*-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 <Destroy> exit
- }
|