[ulis], 2003-11-13. A pure Tcl package: http://perso.wanadoo.fr/maurice.ulis/tcl/Richlist/ a(Rich)List is a powerful and easy to use Tcl package which manages enriched ''items'' lists. As widgets, these items have ''options'' taking values and, as widgets, can execute ''actions''. Following the need a Richlist can be viewed as a poor man class of objects, as a database table (each item being a row and each option name being a column) or as a structure description (each item being an occurence of the structure and each option being an element of the structure). The items can be grouped inside ''sublists''. Each sublist could be viewed as a view on the table. The ''first sublist'' is created with the '''Richlist''' and the other sublists can be built from a simple list of items, from an ''index'' on a sublist or from set operations on the sublists ('''union''', '''intersection''', '''différence'''). An ''index'' on a sublist is as a table index and allows to access the items from the values of an option (search by pattern). So it is easy to create sublists that split the items set of the Richlist following the values taken by an option. Powerful operations allow to retrieve, modify and format the values of all or part ot the items of a sublist. The access to a sublist or an item is thru a ''reference''. A ''sublist reference'' is a Tcl command allowing the access to the sublist actions. An ''item reference'' is a Tcl command allowing the access to the item options and actions. ''Callbacks'' associated to the Richlist allow to define actions on events. The '''init''' and '''dispose''' actions are called on init and destruction of the items. The '''unknown''' action is called when items try to call unknown actions. ---- Demo result: Asia China Beijing India New Delhi Japan Tokyo Europe England London France Paris Germany Berlin Russia Moscow North America Canada Ottawa Mexico Mexico City USA Washington South America Brazil Brasilia ---- Demo source: # create the rich list richlist create countries -country "" -continent "" -capital "" # fill the rich list set list \ { {-country Brazil -continent "South America" -capital Brasilia} {-country Canada -continent "North America" -capital Ottawa} {-country China -continent Asia -capital Beijing} {-country England -continent Europe -capital London} {-country France -continent Europe -capital Paris} {-country Germany -continent Europe -capital Berlin} {-country India -continent Asia -capital "New Delhi"} {-country Japan -continent Asia -capital Tokyo} {-country Mexico -continent "North America" -capital "Mexico City"} {-country Russia -continent Asia -capital Moscow} {-country USA -continent "North America" -capital Washington} } foreach item $list { countries add [eval countries create $item] } # update an item [countries ref (-country|Russia)] config -continent Europe # display the countries by continent # create an index countries index create -continent # go thru all continents foreach continent [countries values -continent] \ { # get continent subset set sublist($continent) [countries selection -continent $continent] # display continent name puts $continent # sort continent sublist by countries & capitals names $sublist($continent) sort {-country -capital} -dictionary # display continent countries & capitals names puts [$($continent) foreach item { $item cget -country -capital } \ \n {\t\t%-10s%s}] }