utextvpChildren <- function(label, name) {
    t <- textGrob(label, y=0, just="bottom", 
                  vp=paste0(name, ".vp"),
                  name=paste0(name, ".label"))
    s <- segmentsGrob(0, unit(-.2, "lines"),
                      1, unit(-.2, "lines"),
                      vp=paste0(name, ".vp"),
                      name=paste0(name, ".underline"))
    gList(t, s)
}
    
utextvpStatic <- function(label, x=.5, y=.5, 
                          default.units="npc",
                          angle=0, just="centre", 
                          name="utext") {
    if (!is.unit(x)) x <- unit(x, default.units)
    if (!is.unit(y)) y <- unit(y, default.units)
    kids <- utextvpChildren(label, name) 
    kidsvp <- utextvp(label, x, y, just=just, angle=angle, 
                      name=paste0(name, ".vp"))
    gTree(label=label, x=x, y=y, just=just, angle=angle,
          children=kids, childrenvp=kidsvp, 
          cl="utextvpStatic", name=name)
}

editDetails.utextvpStatic <- function(x, specs) {
    if (any(names(specs) %in% 
            c("label", "x", "y", "just", "angle"))) {
        kids <- utextvpChildren(x$label, x$name)
        kidsvp <- utextvp(x$label, x$x, x$y, 
                          just=x$just, angle=x$angle,
                          name=paste0(x$name, ".vp"))
        x$childrenvp <- kidsvp
        x <- setChildren(x, kids)
    }
    x   
}


ug <- utextvpStatic("underlined text", angle=20)
grid.draw(ug)


grid.edit("utext.underline", gp=gpar(lty="dashed"))


postscript("Figures/interactgrid-utextvptreelow%1d.eps",
  paper="special", 
  onefile=FALSE, width=2, height=1, horizontal=FALSE)
grid.rect(gp=gpar(col="grey"))
ug <- utextvpStatic("underlined text", angle=20)
grid.draw(ug)
grid.edit("utext", label="le texte soulign\U00E9")
grid.edit("utext.underline", gp=gpar(lty="dashed"))
dev.off()
pdf("Figures/interactgrid-utextvptreelow%1d.pdf",
  onefile=FALSE, width=2, height=1)
grid.rect(gp=gpar(col="grey"))
ug <- utextvpStatic("underlined text", angle=20)
grid.draw(ug)
grid.edit("utext", label="le texte soulign\U00E9")
grid.edit("utext.underline", gp=gpar(lty="dashed"))
dev.off()
png("Web/interactgrid-utextvptreelow%1d.png",
    width=137, height=69)
grid.rect(gp=gpar(col="grey"))
ug <- utextvpStatic("underlined text", angle=20)
grid.draw(ug)
grid.edit("utext", label="le texte soulign\U00E9")
grid.edit("utext.underline", gp=gpar(lty="dashed"))
dev.off()


