/R/AllClasses.R

http://github.com/tengfei/visnab · R · 65 lines · 60 code · 5 blank · 0 comment · 8 complexity · df1bcc2251356cd4a942bce50fb2d94f MD5 · raw file

  1. setClassUnion("BSgenomeORNULL",c("BSgenome","NULL"))
  2. setOldClass("QIcon")
  3. setOldClass("QWidget")
  4. setOldClass("QDockWidget")
  5. setOldClass("QStackedWidget")
  6. setOldClass("QMainWindow")
  7. setOldClass("mutalist")
  8. setOldClass("QGraphicsScene")
  9. setOldClass("QGraphicsView")
  10. setOldClass("Qanviz::RLayer")
  11. setOldClass("Qanviz::PlotView")
  12. setOldClass("mutaframe")
  13. setClassUnion("QWidgetORNULL",c("QWidget","NULL"))
  14. setClassUnion("QMainWindowORNULL",c("QMainWindow","NULL"))
  15. setClassUnion("QGraphicsSceneORNULL", c("QGraphicsScene","NULL"))
  16. setClassUnion("Qanviz::RLayerORNULL", c("Qanviz::RLayer","NULL"))
  17. setClassUnion("Qanviz::PlotViewORNULL", c("Qanviz::PlotView","NULL"))
  18. setClassUnion("numericORcharacter", c("numeric", "character"))
  19. setClassUnion("numericORNULL", c("numeric","NULL"))
  20. setClassUnion("logicalORNULL", c("logical","NULL"))
  21. setAs("MutableGRanges", "mutaframe", function(from) {
  22. makeValueBindingFun <- function(cn) {
  23. function(val) {
  24. if (missing(val))
  25. values(from)[[cn]]
  26. else values(from)[[cn]] <- val
  27. }
  28. }
  29. cn <- colnames(values(from))
  30. closures <- sapply(, makeValueBindingFun)
  31. makeBindingFun <- function(accessor) {
  32. function(val) {
  33. if (missing(val))
  34. accessor(from)
  35. else accessor(from) <- val
  36. }
  37. }
  38. closures <- c(seqnames = makeBindingFun(seqnames),
  39. start = makeBindingFun(start), end = makeBindingFun(end),
  40. width = makeBindingFun(width), strand = makeBindingFun(strand),
  41. closures)
  42. mf <- do.call(mutaframe, closures)
  43. from$elementMetadataChanged$connect(function(i, j) {
  44. if (!is.null(j)) {
  45. j <- j + 5 # take into account the location columns
  46. notify_listeners(mf, i, j)
  47. } else { ## Assumption: columns can be added/removed but not rows
  48. newcn <- colnames(values(from))
  49. newCols <- setdiff(newcn, cn)
  50. for (newCol in newCols)
  51. mf[[newCol]] <- values(from)[[newCol]]
  52. remCols <- setdiff(cn, newcn)
  53. for (remCol in remCols)
  54. mf[[remCol]] <- NULL
  55. cn <<- newcn
  56. }
  57. })
  58. from$locationsChanged$connect(function(i) notify_listeners(mf, i, 1:5))
  59. mf
  60. })