R/StyleClass.R

#' @include class_definitions.R


Style$methods(initialize = function(){
  
  fontName <<- NULL
  fontColour <<- NULL
  fontSize <<- NULL
  fontFamily <<- NULL
  fontScheme <<- NULL
  fontDecoration <<- NULL
  
  borderTop <<- NULL
  borderLeft <<- NULL
  borderRight <<- NULL
  borderBottom <<- NULL
  borderTopColour <<- NULL
  borderLeftColour <<- NULL
  borderRightColour <<- NULL
  borderBottomColour <<- NULL
  borderDiagonal <<- NULL
  borderDiagonalColour <<- NULL
  borderDiagonalUp <<- FALSE
  borderDiagonalDown <<- FALSE
    
  halign <<- NULL
  valign <<- NULL
  indent <<- NULL
  textRotation <<- NULL
  numFmt <<- NULL
  fill <<- NULL
  wrapText <<- NULL
  hidden <<- NULL
  locked <<- NULL
  xfId <<- NULL
  
})



mergeStyle = function(oldStyle, newStyle){

  ## This function is used to merge an existing cell style with a new style to create a stacked style.
  oldStyle <- oldStyle$copy()
  
  if(!is.null(newStyle$fontName))
    oldStyle$fontName <- newStyle$fontName
  
  if(!is.null(newStyle$fontColour))
    oldStyle$fontColour <- newStyle$fontColour

  if(!is.null(newStyle$fontSize))
    oldStyle$fontSize <- newStyle$fontSize
  
  if(!is.null(newStyle$fontFamily))
    oldStyle$fontFamily <- newStyle$fontFamily
  
  if(!is.null(newStyle$fontScheme))
    oldStyle$fontScheme <- newStyle$fontScheme
  
  if(length(newStyle$fontDecoration) > 0){
    
    if(length(oldStyle$fontDecoration) == 0){
      oldStyle$fontDecoration <- newStyle$fontDecoration
    }else{
      oldStyle$fontDecoration <- c(oldStyle$fontDecoration, newStyle$fontDecoration)
    }
    
  }
    
  
  ## borders
  if(!is.null(newStyle$borderTop))
    oldStyle$borderTop <- newStyle$borderTop
  
  if(!is.null(newStyle$borderLeft))
    oldStyle$borderLeft <- newStyle$borderLeft
  
  if(!is.null(newStyle$borderRight))
    oldStyle$borderRight <- newStyle$borderRight
  
  if(!is.null(newStyle$borderBottom))
    oldStyle$borderBottom <- newStyle$borderBottom
  
  if(!is.null(newStyle$borderDiagonal))
    oldStyle$borderDiagonal <- newStyle$borderDiagonal
  
  oldStyle$borderDiagonalUp <- newStyle$borderDiagonalUp
  oldStyle$borderDiagonalDown <- newStyle$borderDiagonalDown
  
  
  if(!is.null(newStyle$borderTopColour))
    oldStyle$borderTopColour <- newStyle$borderTopColour
  
  if(!is.null(newStyle$borderLeftColour))
    oldStyle$borderLeftColour <- newStyle$borderLeftColour
  
  if(!is.null(newStyle$borderRightColour))
    oldStyle$borderRightColour <- newStyle$borderRightColour
  
  if(!is.null(newStyle$borderBottomColour))
    oldStyle$borderBottomColour <- newStyle$borderBottomColour
  
  
  
  ## other
  if(!is.null(newStyle$halign))
    oldStyle$halign <- newStyle$halign
  
  if(!is.null(newStyle$valign))
    oldStyle$valign <- newStyle$valign
  
  if(!is.null(newStyle$indent))
    oldStyle$indent <- newStyle$indent
  
  if(!is.null(newStyle$textRotation))
    oldStyle$textRotation <- newStyle$textRotation
  
  if(!is.null(newStyle$numFmt))
    oldStyle$numFmt <- newStyle$numFmt
  
  if(!is.null(newStyle$fill))
    oldStyle$fill <- newStyle$fill
  
  if(!is.null(newStyle$wrapText))
    oldStyle$wrapText <- newStyle$wrapText
    
  if(!is.null(newStyle$locked))
    oldStyle$locked <- newStyle$locked
  
  if(!is.null(newStyle$hidden))
    oldStyle$hidden <- newStyle$hidden
  
  if(!is.null(newStyle$xfId))
    oldStyle$xfId <- newStyle$xfId
  
    return(oldStyle)

}





Style$methods(show = function(print = TRUE){
 
  numFmtMapping <- list(list("numFmtId" = 0),
                        list("numFmtId" = 2),
                        list("numFmtId" = 164),
                        list("numFmtId" = 44),
                        list("numFmtId" = 14),
                        list("numFmtId" = 167),
                        list("numFmtId" = 10),
                        list("numFmtId" = 11),
                        list("numFmtId" = 49))
  
  validNumFmt <- c("GENERAL", "NUMBER", "CURRENCY", "ACCOUNTING", "DATE", "TIME", "PERCENTAGE", "SCIENTIFIC", "TEXT")
  
  if(!is.null(numFmt)){
    if(as.integer(numFmt$numFmtId) %in% unlist(numFmtMapping)){
      numFmtStr <- validNumFmt[unlist(numFmtMapping) == as.integer(numFmt$numFmtId)]
    }else{
      numFmtStr <- sprintf('"%s"', numFmt$formatCode)
    }
  }else{
    numFmtStr <- "GENERAL"
  }
  
  borders <- c(sprintf("Top: %s", borderTop), sprintf("Bottom: %s", borderBottom), sprintf("Left: %s", borderLeft), sprintf("Right: %s", borderRight))
  borderColours <- gsub("^FF", "#", c(borderTopColour, borderBottomColour, borderLeftColour, borderRightColour))

  fgFill <- fill$fillFg
  bgFill <- fill$fillBg

  styleShow <- "A custom cell style. \n\n"

  styleShow <- append(styleShow, sprintf("Cell formatting: %s \n", numFmtStr))  ## numFmt
  styleShow <- append(styleShow, sprintf("Font name: %s \n", fontName[[1]]))  ## Font name
  styleShow <- append(styleShow, sprintf("Font size: %s \n", fontSize[[1]]))  ## Font size
  styleShow <- append(styleShow, sprintf("Font colour: %s \n", gsub("^FF", "#", fontColour[[1]])))  ## Font colour
  
  ## Font decoration
  if(length(fontDecoration) > 0)
    styleShow <- append(styleShow, sprintf("Font decoration: %s \n", paste(fontDecoration, collapse = ", ")))
  
  if(length(borders) > 0){
    styleShow <- append(styleShow, sprintf("Cell borders: %s \n", paste(borders, collapse = ", ")))  ## Cell borders
    styleShow <- append(styleShow, sprintf("Cell border colours: %s \n", paste(borderColours, collapse = ", ")))  ## Cell borders
  }
  
  if(!is.null(halign))
    styleShow <- append(styleShow, sprintf("Cell horz. align: %s \n", halign))  ## Cell horizontal alignment
  
  if(!is.null(valign))
    styleShow <- append(styleShow, sprintf("Cell vert. align: %s \n", valign))  ## Cell vertical alignment 
  
  if(!is.null(indent))
    styleShow <- append(styleShow, sprintf("Cell indent: %s \n", indent))  ## Cell indent
  
  if(!is.null(textRotation))
    styleShow <- append(styleShow, sprintf("Cell text rotation: %s \n", textRotation))  ## Cell text rotation 
  
  ## Cell fill colour
  if(length(fgFill) > 0)
    styleShow <- append(styleShow, sprintf("Cell fill foreground: %s \n", paste(paste0(names(fgFill),": ", sub("^FF", "#", fgFill)), collapse = ", ")))
  
  if(length(bgFill) > 0)
    styleShow <- append(styleShow, sprintf("Cell fill background: %s \n", paste(paste0(names(bgFill),": ", sub("^FF", "#", bgFill)), collapse = ", ")))
  
  if(!is.null(locked))
    styleShow <- append(styleShow, sprintf("Cell protection: %s \n", locked))  ## Cell protection
  if(!is.null(hidden))
    styleShow <- append(styleShow, sprintf("Cell formula hidden: %s \n", hidden))  ## Cell formula hidden
  
  styleShow <- append(styleShow, sprintf("wraptext: %s", wrapText))  ## wrap text
  
  styleShow <- c(styleShow, "\n\n")

  if(print)
    cat(styleShow)
  
  return(invisible(styleShow))
  
})
  

          

Style$methods(as.list = function(){
  
  l <- list(
  "fontName" = fontName,
  "fontColour" = fontColour,
  "fontSize" = fontSize,
  "fontFamily" = fontFamily,
  "fontScheme" = fontScheme,
  "fontDecoration" = fontDecoration,
  
  "borderTop" = borderTop,
  "borderLeft" = borderLeft,
  "borderRight" = borderRight,
  "borderBottom" = borderBottom,
  "borderTopColour" = borderTopColour,
  "borderLeftColour" = borderLeftColour,
  "borderRightColour" = borderRightColour,
  "borderBottomColour" = borderBottomColour,
  
  "halign" = halign,
  "valign" = valign,
  "indent" = indent,
  "textRotation" = textRotation,
  "numFmt" = numFmt,
  "fillFg" = fill$fillFg,
  "fillBg" = fill$fillBg,
  "wrapText" = wrapText,
  "locked" = locked,
  "hidden" = hidden,
  "xfId" = xfId
  )
  
  l[sapply(l, length) > 0]
  
})
awalker89/openxlsx documentation built on May 11, 2019, 4:09 p.m.