run.simplepanel | R Documentation |
Execute various operations in a simple point-and-click user interface.
run.simplepanel(P, popup=TRUE, verbose = FALSE)
clear.simplepanel(P)
redraw.simplepanel(P, verbose = FALSE)
P |
An interaction panel (object of class |
popup |
Logical. If |
verbose |
Logical. If |
These commands enable the user to run a simple, robust, point-and-click interface to any R code. The interface is implemented using only the basic graphics package in R.
The argument P
is an object of class "simplepanel"
,
created by simplepanel
or grow.simplepanel
,
which specifies the graphics to be displayed and the actions to be performed
when the user interacts with the panel.
The command run.simplepanel(P)
activates the panel:
the display is initialised and the graphics system waits for the
user to click the panel.
While the panel is active, the user can only interact with the panel;
the R command line interface and the R GUI cannot be used.
When the panel terminates (typically because the user
clicked a button labelled Exit), control returns to the R command line
interface and the R GUI.
The command clear.simplepanel(P)
clears all the display
elements in the panel, resulting in a blank display except for the
title of the panel.
The command redraw.simplepanel(P)
redraws all the buttons
of the panel, according to the redraw
functions contained
in the panel.
If popup=TRUE
(the default), run.simplepanel
begins by
calling dev.new
so that a new popup window
is created; this window is closed using
dev.off
when run.simplepanel
terminates.
If popup=FALSE
, the panel will be displayed on the current graphics
window if it already exists, and on a new window otherwise;
this window is not closed when run.simplepanel
terminates.
For more sophisticated control of the graphics focus (for example, to
use the panel to control the display on another window),
initialise the graphics devices yourself using
dev.new
or similar commands; save these devices
in the shared environment env
of the panel P
;
and write the click/redraw functions of P
in such a way that
they access these devices using dev.set
.
Then use run.simplepanel
with popup=FALSE
.
The return value of run.simplepanel(P)
is the value returned
by the exit
function of P
. See simplepanel
.
The functions clear.simplepanel
and redraw.simplepanel
return NULL
.
and \rolf
simplepanel
if(interactive()) {
# make boxes (alternatively use layout.boxes())
Bminus <- square(1)
Bvalue <- shift(Bminus, c(1.2, 0))
Bplus <- shift(Bvalue, c(1.2, 0))
Bdone <- shift(Bplus, c(1.2, 0))
myboxes <- list(Bminus, Bvalue, Bplus, Bdone)
myB <- do.call(boundingbox,myboxes)
# make environment containing an integer count
myenv <- new.env()
assign("answer", 0, envir=myenv)
# what to do when finished: return the count.
myexit <- function(e) { return(get("answer", envir=e)) }
# button clicks
# decrement the count
Cminus <- function(e, xy) {
ans <- get("answer", envir=e)
assign("answer", ans - 1, envir=e)
return(TRUE)
}
# display the count (clicking does nothing)
Cvalue <- function(...) { TRUE }
# increment the count
Cplus <- function(e, xy) {
ans <- get("answer", envir=e)
assign("answer", ans + 1, envir=e)
return(TRUE)
}
# quit button
Cdone <- function(e, xy) { return(FALSE) }
myclicks <- list("-"=Cminus,
value=Cvalue,
"+"=Cplus,
done=Cdone)
# redraw the button that displays the current value of the count
Rvalue <- function(button, nam, e) {
plot(button, add=TRUE)
ans <- get("answer", envir=e)
text(centroid.owin(button), labels=ans)
return(TRUE)
}
# make the panel
P <- simplepanel("Counter",
B=myB, boxes=myboxes,
clicks=myclicks,
redraws = list(NULL, Rvalue, NULL, NULL),
exit=myexit, env=myenv)
P
run.simplepanel(P)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.