\name{widgetRender} \alias{widgetRender} \title{Render a Tk Widget from Given Specifications} \description{ This function takes a list that specifies the appearance and behavior of a Tk widget and renders the widget accordingly. } \usage{ widgetRender(iWidget, tkTitle) } \arguments{ \item{iWidget}{list of lists that specifies the appearance and behavior of the widget to be rendered.} \item{tkTitle}{character string for the text to appear in the title bar of the widget to be rendered.} } \details{ The widget to be rendered normally consists of frames with three widgets arranged in a row. The first widget is normally a label for the name of the second widget. The second widget can be any type of widgets. The third widget is a button widget that defines some behavior to be associated with the second widget. For example, a button that will cause something to be displayed in the second widget when pressed. The third widget can be missing if no such association is required. The widget to be rendered also has two buttons at the bottom part of the widgets. The followings are the name and behavior of the buttons: \describe{ \item{\bold{Cancel} -}{The unmodified list passed to the function at the time of invocation will be returned when pressed.} \item{\bold{End} -}{A modified version of the \code{iWidget} argument will be returned when pressed. The returned list has the same number of elements as the original one but with the values modified based on the entries in corresponding widgets items.} } } \value{ A \code{\link{list}} of lists with the original values of the passed modified or unmodified depending on whether the cancel or end button pressed. } \references{ Peter Dalgaard (2001) A Primer on the R-Tcl/Tk Package; R News \bold{1} (3), 27--31 \url{http://CRAN.R-project.org/doc/Rnews/} } \author{Jianhua (John) Zhang} \seealso{\code{\link{fileBrowser}}, \code{\link{objectBrowser}}. } \examples{ # Create the list to be passed pW1 <- list(Name="AAA", Value="bbb", toText=function(x) paste(x,collapse= ","), fromText=NULL, canEdit=TRUE, buttonFun = fileBrowser, buttonText = "Browse") pW2 <- list(Name="BBB", Value="x,y,z", toText=function(x) paste(x, collapse=","), fromText=NULL, canEdit=TRUE, buttonFun = ls, buttonText = "List") pW3 <- list(Name="CCC", Value="ccc", toText=function(x) paste(x, collapse = ","), fromText=NULL, canEdit=TRUE, buttonFun=NULL, buttonText=NULL) widget1 <- list(wList = list(a = pW1, b = pW2, c = pW3), preFun = function() "Hi", postFun = function() "Bye") # Call the function if(interactive()){ x <- widgetRender(widget1, "Test Widget") str(x) } } \keyword{interface}