\name{renderInfo-class}
\docType{class}
\alias{renderInfo-class}
\alias{edgeRenderInfo}
\alias{edgeRenderInfo<-}
\alias{nodeRenderInfo}
\alias{nodeRenderInfo<-}
\alias{parRenderInfo}
\alias{parRenderInfo<-}
\alias{graphRenderInfo}
\alias{graphRenderInfo<-}

\title{Class "renderInfo"}
\description{A container class to manage graph rendering attributes.
}
\section{Objects from the Class}{
  Objects can be created by calls of the form \code{new("renderInfo")}
  or by using the initializer \code{.renderInfoPrototype}.
}
\section{Slots}{
  \describe{
    \item{\code{nodes}:}{Named list of attributes specific to nodes.}
    \item{\code{edges}:}{Named list of attributes specific to edges.}
    \item{\code{pars}:}{List of default rendering attributes with two items
      \code{nodes} and \code{edges}}
    Each item of \code{nodes} and \code{edges} can take arbitrary
    vectors, the only restriction is that they have to be of either
    length 1 or length equal to the number of nodes or edges,
    respectively.

    \code{pars} can take arbitrary skalars for both edges and nodes.
  }
}
\section{Methods}{
  The following are functions rather than methods and build the API to
  control the graphical output of a graph when it is plotted using
  \code{\link[Rgraphviz]{renderGraph}}. Please see
  \code{\link{graphRendering}} for more details.
  \describe{
    \item{nodeRenderInfo, nodeRenderInfo<-}{getter and setter for
      items of slot \code{nodes}}
    \item{edgeRenderInfo, edgeRenderInfo<-}{getter and setter for
      items of slot \code{edges}}
    \item{graphRenderInfo, graphRenderInfo<-}{getter and setter for
      items of slot \code{graph}}
    \item{parRenderInfo, parRenderInfo<-}{getter and setter for
      items of slot \code{pars}}
    The getters all take two arguments: \code{g} is a graph object and
    \code{name} is a character giving the name of one of the item in the
    respective slot. When \code{name} is missing this will give you the
    whole list.

    The setters are a bit more complex: \code{nodeRenderInfo<-} and
    \code{edgeRenderInfo<-} can take
    \item{named list of named vectors}{where the names have to match the node
    or edge names. Items in the vector that don't match a valid edge or
    node name will be silently ignored. For undirected edges the order
    of head nodes and tail nodes in edge names is ignored,
    i.e. \code{a~b} is equivalent to code{b~a}}
    \item{named list of skalars}{which will set all the attribute for all
      edges or nodes in the graph}
    \code{parRenderInfo<-}{will only take a list with items
    \code{nodes}, \code{edges} and \code{graph}. The content of these
    list items can be arbitrary named vectors.}
    \code{parRenderInfo<-}{takes an arbitrary list}
  }
}
\author{Deepayan Sarkar, Florian Hahne}

\examples{
g <- randomGraph(letters[1:4], 1:3, p=0.8)
nodeRenderInfo(g) <- list(fill=c("a"="red", "b"="green"))
edgeRenderInfo(g) <- list(lwd=3)
edgeRenderInfo(g) <- list(lty=3, col="red")
parRenderInfo(g) <- list(edges=list(lwd=2, lty="dashed"),
nodes=list(col="gray", fill="gray"))
nodeRenderInfo(g)
edgeRenderInfo(g, "lwd")
edgeRenderInfo(g, c("lwd", "col"))
parRenderInfo(g)
}

\keyword{classes}