Der WizardController macht es möglich, ereignisgesteuerte Assistenten zu
schreiben. Ferner vereinfacht er die Erstellung von Dialogelementen. Sie
können den WizardController mit der Prozedur
useWizardController
, die Bestandteil von
wizardLib.tcl
ist, einbinden. Informationen zur Funktionsweise
finden Sie in der Datei wizardController.tcl
.
Das folgende Beispiel zeigt einen einfachen Assistenten, mit dem der Titel einer Datei bearbeitet werden kann. Zur Behandlung von Ereignissen ruft der WizardController Prozeduren auf, deren Namen er aus dem Seitennamen und der Benutzeraktion (dem Namen des verwendeten Buttons) zusammensetzt. Zur Verdeutlichung sind die Namensbestandteile in diesen Prozedurnamen farblich hervorgehoben.
if {[app get appName] ne "CM"} { return } namespace eval ::enterTitle { useWizardController proc initRender {paramList args} { variable objId set objId $args return } proc handleInitPage {buttonName} { variable objId if {![obj withId $objId get isEdited]} { return [renderErrorPage "Die Datei hat keine Arbeitsversion." "Fehler"] } if {[whoami] ne [obj withId $objId editedContent get editor]} { return [renderErrorPage "Sie sind nicht der Bearbeiter der Datei." "Fehler"] } return [renderEnterTitlePage] } proc handleCancelAction {pageName} { return "" } proc renderEnterTitlePage {} { set content [::layout::textField contentTitle Titel "Neuer Titel"] return [renderPage -title "Titel setzen" -buttons [list ok cancel]\ "enterTitle" $content] } proc handleEnterTitleOkPageAction {} { variable objId obj withId $objId editedContent set title [getParam contentTitle] addNpsRefresh $objId return [renderSuccessPage] } proc renderSuccessPage {} { set content "<p>Titel erfolgreich gesetzt</p>" return [renderPage -title "Vielen Dank!" -buttons [list ok] "success" $content] } proc handleSuccessOkPageAction {} { return "" } # Beliebige Seite dieses Assistenten ausgeben proc renderPage {args} { variable objId return [eval [list npsPage -affectedNodes [list $objId]] $args] } }