WJG (19/05/09) The 2.10 release of Gtk saw the introduction of a number of new widgets and features into the core widget set. One of these is a preplacement for the deprecated GnomeDruid. The assistant widget allows the programmer to guide a user through a number of interactive steps in order to determine an outcome. Whilst at the time of writing this widget is still pre-release, here's a glimpse of the gnocl::assistant test script and how it can be used. As always, comments and feedback always welcome.

#---------------
# AssistantTest.tcl
#---------------
# Author: William J Giddings
# Date: 07/05/09
#---------------
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
#---------------
package require Gnocl
proc gotoPage {w p} {
gnocl::signalStop $w prepare
$w page set $p
}
#---------------
# create widget
#---------------
set wid [ gnocl::assistant \
-linear no \
-onDelete { exit } \
-onCancel { puts "Cancel %w %n" ; exit} \
-onClose { puts "Close %w %n" ; exit} \
-onApply { puts "Apply %w %n" } \
-onPrepare {
puts "Prepare %w %n %p"
#catch { puts "Page = $page(%n)" }
# $page(%n) configure -text "GATE GATE PARAGATE PARASAMGATE BODHI SVAHA"
if {%n == 3 } {
puts "PING"
$wid configure -linear no
}
} \
-resizable 0 \
-keepAbove 1 \
-modal 1 \
-widthRequest 640 \
-heightRequest 400 \
-backgroundColor red \
]
# -backgroundImage gnocl_logo_sml.png \
# problems arising from this block of code.
if (0) {
$wid forward 1
}
#---------------
# Add some sample action buttons
#---------------
set ab(1) [gnocl::button -text "AB1" -onClicked {$wid page set 1}]
set ab(2) [gnocl::button -text "AB2"]
set ab(3) [gnocl::button \
-text "Reset Defaults" \
-onClicked {
puts "currentpage = [$wid currentPage]"
$wid page set 4
#$wid removeWidget %w
} ]
set abuttons [gnocl::box -homogeneous 1 -padding 0]
$abuttons add [list $ab(1) $ab(2) $ab(3)] -fill {1 1} -expand 1
$wid addWidget $abuttons
#---------------
# add pages
#---------------
$wid addPage intro "Gnocl Assistant Widget"
$wid addPage content "Step 1) Make a Choice"
$wid addPage content "Step 2) Think of Something Else"
$wid addPage progress "Step 3) Change it, then"
$wid addPage confirm "Step 4) Do It!"
$wid addPage summary "Finnished!"
#---------------
# set some defaults
#---------------
set sidebar(default) Porky_pig.jpg
set header(default) banner.png
#---------------
# set default graphics for each page
#---------------
for {set i 0} {$i < [$wid pages] } { incr i } {
set header($i) $header(default)
set sidebar($i) $sidebar(default)
}
#---------------
# create page contents
# overide default for header & sidebar images
# define proceedure associate with the page
#---------------
#---------------
# page 0
#---------------
set page(0) [gnocl::image -image "%/WarnerBros.jpg" ]
proc action(0) {args} {
puts "$args"
}
#---------------
# page 1
#---------------
set page(1) [gnocl::label -text "OM MANI PADME HUM"]
set sidebar(1) Bugs_Bunny.jpg
proc action(0) {args} {
puts "$args"
}
#---------------
# page 2
#---------------
set but1 [gnocl::button -text "Daffy Duck"]
set but2 [gnocl::button -text "Bugs Bunny"]
set but3 [gnocl::button -text "Wily Coyote"]
set but4 [gnocl::button -text "Porky Pig"]
set page(2) [gnocl::box -orientation vertical ]
$page(2) add [list $but1 $but2 $but3 $but4] -fill {1 1} -expand 1
proc action(2) {args} {
puts "$args"
}
#---------------
# page 3
#---------------
set page(3) [gnocl::label -text "OM MANI PADME HUM"]
proc action(3) {args} {
puts "$args"
}
#---------------
# page 4
#---------------
set page(4) [gnocl::label -text "OK, this is the last page.\nDo it, or cancel!"]
set sidebar(4) Daffy_duck.jpg
proc action(4) {args} {
puts "$args"
}
#---------------
# page 5
#---------------
set page(5) [gnocl::label -text "Job Completed.\nWell Done!" -baseFont {Sans 18}]
set sidebar(5) ThatsAllFolks.jpg
proc action(5) {args} {
puts "$args"
}
#---------------
# configure pages in one swoop!
#---------------
for {set i 0} {$i < [$wid pages] } { incr i } {
$wid page configure $i -child $page($i) -headerImage $header($i) -sidebarImage $sidebar($i)
}
gnocl::mainLoop
#---------------