Thursday, August 24, 2017
Displaying Tcl dict contents in a gnocl::list widget
The following script shows how to display the contents of a simple Tcl dict within a gnocl::list widget.
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
package require Gnocl
namespace eval pkg {}
#---------------
# Create a gnocl::list displaying the contents of a Tcl dict.
#---------------
# Arguments:
# val dict data to display.
# args
# Returns:
# wid of gnocl::list containing the dict data.
#
proc pkg::dict2list { vals } {
set res ""
# get a complete list of info keys
set c key
dict for {id info} $vals {
foreach {a b} $info {
if { [string first $a $c] == -1 } { lappend c $a }
}
}
set headings [lsort -unique $c]
set res [gnocl::list -titles $c]
# populate the list
dict for {id info} $vals {
set row2 [string repeat "{} " [llength $c]]
set row2 [lreplace $row2 0 0 $id]
foreach {a b} $info {
set d [lsearch $c $a]
set row2 [lreplace $row2 $d $d $b]
}
$res add [list $row2]
set row ""
}
return $res
}
#---------------
# Add a new column to an existing list or tree
# Create new widget, add data and insert into parent container.
#---------------
# Arguments:
# wid gnocl::list/gnocl::tree to modify
# title title for new column
# type data type
# Returns:
# wid widget id of replacement object
#
proc pkg::addColumn { wid title type } {
set titles [$wid cget -titles]
set types [$wid cget -types]
set data [$wid getFullList]
lappend titles $title
lappend types $type
set parent [gnocl::winfo parent $wid]
$wid delete
set wid [gnocl::list -titles $titles -types $types]
$wid add $data
$parent configure -child $wid
return $wid
}
#---------------
# Script Main Function
#---------------
# Arguments:
# args
# Returns:
# none
#
proc main { args } {
dict set employeeInfo 12345-A forenames "Joe"
dict set employeeInfo 12345-A surname "Schmoe"
dict set employeeInfo 12345-A street "147 Short Street"
dict set employeeInfo 12345-A city "Springfield"
dict set employeeInfo 12345-A phone "555-1234"
dict set employeeInfo 98372-J forenames "Anne"
dict set employeeInfo 98372-J surname "Other"
dict set employeeInfo 98372-J street "32995 Oakdale Way"
dict set employeeInfo 98372-J city "Springfield"
dict set employeeInfo 98372-J phone "555-8765"
set lst [pkg::dict2list $employeeInfo]
gnocl::window -child $lst -setSize 0.25 -width 800 -y 500 -x 100
# add an extra column to the list
set lst [pkg::addColumn $lst email string]
}
main
Recent Changes
Just a few additions and enhancements to the 0.9.96 code over the past couple of months. Latest sources available at Sourceforge.
2017-08:
gnocl::tree, gnocl::list
o cget -types now works.
o FIXED: crashing when getFullList called on model with 0 rows.
gnocl::text
o -onPopulatePopup Substitution options %r, %c and %t changed to %R(ow), %C(olumn) and %T(ags),
and %t reallocated to return id of widget toplevel window.
2017-07:
gnocl::entry
o added -onButtonPress and -onButtonRelease
o added getSelectionBounds for consistency with the text widget
gnocl::toolBar
o menuButton -icon can now be reconfigured.
gnocl::text
o FIXED: problems with serialize/deserialize, now tests for valid filename.
gnocl::comboEntry
o added -baseColor
2017-06:
gnocl::labelText
o added -orientation -leftMargin -rightMargin -margins -paragraphSpacing -lineSpacing -justify
o new commands getSelection
gnocl::text
o set -wrapMode default to word.
gnocl::statusBar
o added -baseFont
2017-05:
gnocl::tree, gnocl::list
o added %S to -onButtonRelease and -onButtonPress substitutions strings, returns a list of the selected items
gnocl::pixbuf
o new load option, -data, will create pixbufs from inline xpm data, e.g. menu icons.
gnocl::notebook
o -onFocusOut handler, now supports %g %p %t %w %D substitution strings. Where 'D' is direction.
gnocl::eventBox, gnocl::fixed and gnocl::window
o completed support for the -onAdd and -onRemove events, ie. adding or removing child widget to or from a container.
gnocl::image
o new options -scale, -constrain, -constrainWidth, -constrainHeight, -data
2017-08:
gnocl::tree, gnocl::list
o cget -types now works.
o FIXED: crashing when getFullList called on model with 0 rows.
gnocl::text
o -onPopulatePopup Substitution options %r, %c and %t changed to %R(ow), %C(olumn) and %T(ags),
and %t reallocated to return id of widget toplevel window.
2017-07:
gnocl::entry
o added -onButtonPress and -onButtonRelease
o added getSelectionBounds for consistency with the text widget
gnocl::toolBar
o menuButton -icon can now be reconfigured.
gnocl::text
o FIXED: problems with serialize/deserialize, now tests for valid filename.
gnocl::comboEntry
o added -baseColor
2017-06:
gnocl::labelText
o added -orientation -leftMargin -rightMargin -margins -paragraphSpacing -lineSpacing -justify
o new commands getSelection
gnocl::text
o set -wrapMode default to word.
gnocl::statusBar
o added -baseFont
2017-05:
gnocl::tree, gnocl::list
o added %S to -onButtonRelease and -onButtonPress substitutions strings, returns a list of the selected items
gnocl::pixbuf
o new load option, -data, will create pixbufs from inline xpm data, e.g. menu icons.
gnocl::notebook
o -onFocusOut handler, now supports %g %p %t %w %D substitution strings. Where 'D' is direction.
gnocl::eventBox, gnocl::fixed and gnocl::window
o completed support for the -onAdd and -onRemove events, ie. adding or removing child widget to or from a container.
gnocl::image
o new options -scale, -constrain, -constrainWidth, -constrainHeight, -data
Subscribe to:
Comments (Atom)
-
Given this module some attention today. Added some of the more package wide options to the module and created customised handler for settin...
-
Spent some time today creating some simple howto-tutorials on creating standalone Tcl/Gnocl applications using freewrap. The process is almo...
-
Linux distros have heaps of pre-installed icons ready for use. I recently needed to create a toolbar menu which needed to access a set of un...