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 #---------------