| Version: | 1.0 | 
| Date: | 2024-05-08 | 
| Title: | Implement 'tableGrob' Object as a Clickable Image Map | 
| Maintainer: | Barry Zeeberg <barryz2013@gmail.com> | 
| Author: | Barry Zeeberg [aut, cre] | 
| Depends: | R (≥ 4.2.0) | 
| LazyData: | true | 
| Imports: | gridExtra, ggplotify, grid, ggplot2, stats, gtable, grDevices | 
| Description: | Implement 'tableGrob' object as a clickable image map. The 'clickableImageMap' package is designed to be more convenient and more configurable than the edit() function. Limitations that I have encountered with edit() are cannot control (1) positioning (2) size (3) appearance and formatting of fonts In contrast, when the table is implemented as a 'tableGrob', all of these features are controllable. In particular, the 'ggplot2' grid system allows exact positioning of the table relative to other graphics etc. | 
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] | 
| Encoding: | UTF-8 | 
| VignetteBuilder: | knitr | 
| Suggests: | knitr, rmarkdown, testthat (≥ 3.0.0) | 
| RoxygenNote: | 7.3.1 | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2024-05-11 15:32:05 UTC; barryzeeberg | 
| Repository: | CRAN | 
| Date/Publication: | 2024-05-14 07:43:17 UTC | 
annunciator
Description
post a message in the annunciator grob of gtab
Usage
annunciator(gtab, row, message, name)
Arguments
gtab | 
 return value of gtable_replace_grob()  | 
row | 
 integer the row number of the annunciator grob in gtab  | 
message | 
 character string message to be posted  | 
name | 
 character string value of name field in gtab layout matrix  | 
Value
returns the return value of gtable_add_grob()
Examples
if(interactive()){
load("data/x_rows.RData")
annunciatorRow<-which(names(x_rows)=="annunciatorRow")
load("data/x_gtab.RData")
annunciator(x_gtab,annunciatorRow,"message","annunciator")
}
calibrate
Description
use coordinates of upper left and bottom right of matrix to construct mapping between viewport coordinates and matrix cells
Usage
calibrate(m, rows, pullDownRow)
Arguments
m | 
 matrix  | 
rows | 
 list of row heights in the gtable object  | 
pullDownRow | 
 integer number of the target row in the gtable object  | 
Value
returns a list whose components are matrices representing the upper and lower coordinates of the row and column cells
Examples
if(interactive()){
m<-matrix(1:20 * .05,nrow=2,ncol=10)
load("data/x_rows.RData")
pullDownRow<-which(names(x_rows)=="pullDownRow")
load("data/x_m.RData")
cal<-calibrate(x_m,x_rows,pullDownRow)
}
clickableImageMapDemo
Description
demo to illustrate how to implement calibrate() and grid.locator() for a numerical matrix. This is just a stub to be replaced by the user's actual program.
Usage
clickableImageMapDemo(
  n = 3,
  bounds = list(xmin = 0.534, xmax = 0.553, ymin = 0.057, ymax = 0.067),
  sleepTime = 0.5
)
Arguments
n | 
 integer number of values to be edited in matrix m  | 
bounds | 
 list of 4 numerical values xmin, xmax, ymin, ymax  | 
sleepTime | 
 numeric number of seconds to sleep to avoid potential race condition  | 
Details
this package emulates edit() but allows full control
over formatting and management of the edited matrix.
sleepTime parameter can be set to nonzero (suggest trying sleepTime=0.5) in case a complicated 
graphic causes a race condition evidenced by incomplete redrawing of the window. Too large a value 
might cause a noticeable annoying delay in redrawing the window.
Value
returns the updated numerical matrix
Examples
if(interactive()){
m<-clickableImageMapDemo(2,bounds=list(xmin=.534,xmax=.553,ymin=.057,ymax=.067))
}
construct_entire_gtab
Description
construct the main gtable into which grobs will be inserted
Usage
construct_entire_gtab(m, rows, message, clickCoord)
Arguments
m | 
 a matrix  | 
rows | 
 numerical vector defining rows for inserting grobs into main gtable  | 
message | 
 character string message to display in annunciator grob of gtable  | 
clickCoord | 
 numerical matrix of 2 columns, each row contains x and y coords of a mouse click  | 
Value
returns a list whose components are
m.pullDown component m of return value of pullDown()
cal.pullDown return value of calibrate()
cal.m return value of calibrate()
gtab return value of annunciator()
Examples
if(interactive()){
load("data/x_m.RData")
load("data/x_rows.RData")
load("data/x_clickCoord.RData")
gtab<-construct_entire_gtab(x_m,x_rows,"x_message",x_clickCoord)
}
decode
Description
map the screen coordinates to a cell of a matrix
Usage
decode(y, cal, rcnames)
Arguments
y | 
 parsed return value of grid.locator()  | 
cal | 
 return value of calibrate()  | 
rcnames | 
 Boolean if TRUE matrix has row names and col names  | 
Value
returns an integer vector of the index of a cell in a matrix or returns -1 if rcnames is TRUE and vector y is not within valid range
Examples
if(interactive()){
load("data/x_y.RData")
load("data/x_rcnames.RData")
load("data/x_cal2.RData")
decode(x_y,x_cal2,x_rcnames)
}
defineBounds
Description
use mouse clicks to define bounding box
Usage
defineBounds()
Details
use in conjunction with exitClick()
Value
returns a list of numeric xmin xmax ymin ymax defining screen target for exit
Examples
if(interactive()){
defineBounds()
}
doubleClick
Description
detect a (left) double click (without moving cursor position)
Usage
doubleClick(tol = 0.001)
Arguments
tol | 
 numeric tolerance for detecting same position  | 
Details
I realized this is not very useful, as processing is stopped until 2 clicks are detected
Value
returns TRUE if a double click was detected
Examples
if(interactive()){
doubleClick()
}
exitClick
Description
test position of mouse click to see if user wants to exit
Usage
exitClick(bounds, y)
Arguments
bounds | 
 list of numeric xmin xmax ymin ymax defining screen target for exit  | 
y | 
 numeric vector of x and y cursor position  | 
Details
use in conjunction with defineBounds()
Value
Boolean TRUE if y is within bounds
Examples
if(interactive()){
load("data/x_bounds.RData")
load("data/x_y.RData")
exitClick(x_bounds,x_y)
}
gtable_replace_grob
Description
replace an existing grob (in a row of a gtable) with an updated version
Usage
gtable_replace_grob(gtab, row, new_grob, name)
Arguments
gtab | 
 a gtable object  | 
row | 
 integer target row number within the gtable  | 
new_grob | 
 update grob to insert into gtable  | 
name | 
 character string entry in the "name" field of gtable$layout  | 
Value
returns the updated gtable object
Examples
if(interactive()){
load("data/x_gtab.RData")
load("data/x_tab.RData")
load("data/x_rows.RData")
ptabRow<-which(names(x_rows)=="ptabRow")
gtab<-gtable_replace_grob(x_gtab,ptabRow,x_tab,name="ptab")
}
highlight
Description
invoke highlight() to set highlight font color and size
Usage
highlight(gtab, color, fontsize)
Arguments
gtab | 
 a gtable object  | 
color | 
 character string representing a color  | 
fontsize | 
 integer font size  | 
Value
returns gtab
Examples
if(interactive()){
load("data/x_gtab.RData")
highlight(x_gtab,"red",16)
}
highlightOneCell
Description
highlight one cell of grob matrix in gtab
Usage
highlightOneCell(gtab, row, col, currentPick)
Arguments
gtab | 
 a gtable object  | 
row | 
 integer row number of cell to highlight  | 
col | 
 integer col number of cell to highlight  | 
currentPick | 
 Boolean TRUE if this is the most recently chosen cell and we are to apply special highlighting  | 
Value
returns gtab, a gtable object
Examples
if(interactive()){
load("data/x_mtab.RData")
load("data/x_clickCoord.RData")
highlightOneCell(x_mtab,x_clickCoord[1,"x"],x_clickCoord[1,"y"],FALSE)
}
pullDown
Description
generate and insert a matrix, acting as a pull down menu, into a gtable object
Usage
pullDown(gtab, row, focus)
Arguments
gtab | 
 a gtable object  | 
row | 
 integer target row number within the gtable  | 
focus | 
 Boolean if TRUE add emphasis to matrix cell  | 
Value
returns a list whose components are the generated matrix and the gtable object
Examples
if(interactive()){
load("data/x_gtab.RData")
load("data/x_rows.RData")
pullDownRow<-which(names(x_rows)=="pullDownRow")
message<-"select a new value from the pull down menu: "
pd<-pullDown(x_gtab,pullDownRow,grepl("pull down",message))
}
tabify
Description
adjust the width and height of a matrix to exactly fill the grob
Usage
tabify(m, focus = FALSE, clickCoord = NULL)
Arguments
m | 
 a matrix  | 
focus | 
 Boolean if TRUE add emphasis to matrix cell  | 
clickCoord | 
 param for highlightOneCell()  | 
Value
returns the grob containing the matrix
Examples
if(interactive()){
load("data/x_m.RData")
t<-tabify(x_m,FALSE,NULL)
}
unhighlight
Description
invoke highlight() to set font color and size to default
Usage
unhighlight(gtab)
Arguments
gtab | 
 a gtable object  | 
Value
returns the return value of highlight()
Examples
if(interactive()){
load("data/x_gtab.RData")
unhighlight(x_gtab)
}
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_bounds)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_cal.m)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_cal.pullDown)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_cal2)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_clickCoord)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_gtab)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_l)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_m)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_mtab)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_mtab2)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_rcnames)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_rows)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_tab)
clickableImageMap data sets
Description
clickableImageMap data sets
Usage
data(x_y)
zlocator
Description
wrapper to perform and decode grid.locator()
Usage
zlocator(cal, rcnames, bounds)
Arguments
cal | 
 return value of calibrate()  | 
rcnames | 
 parameter passed to decode()  | 
bounds | 
 parameter passed to exitClick()  | 
Details
keeps looping until a valid click is detected
Value
returns the return value of decode()
Examples
if(interactive()){
load("data/x_cal.m.RData")
load("data/x_rcnames.RData")
load("data/x_bounds.RData")
zlocator(x_cal.m,x_rcnames,x_bounds)
}