SWidget.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. local SWidget = class("SWidget")
  2. local Element = require("sui/Element")
  3. local SUIHelper = require("sui/SUIHelper")
  4. function SWidget:ctor()
  5. self.element = nil
  6. self.render = nil
  7. self.trunk = nil
  8. self.branches = {}
  9. self.index = 1 -- Z轴
  10. self.depth = 1 -- 深度
  11. end
  12. function SWidget:cleanup()
  13. self.element = nil
  14. self.render = nil
  15. self.trunk = nil
  16. self.branches = {}
  17. self.index = 1 -- Z轴
  18. self.depth = 1 -- 深度
  19. end
  20. function SWidget:addBranch(branch)
  21. table.insert(self.branches, branch)
  22. branch.index = #self.branches
  23. branch.trunk = self
  24. branch.depth = self.depth + 1
  25. end
  26. function SWidget:insertBranch(branch, index)
  27. table.insert(self.branches, index, branch)
  28. branch.index = index
  29. branch.trunk = self
  30. branch.depth = self.depth + 1
  31. -- update index
  32. for index, branch in ipairs(self.branches) do
  33. branch.index = index
  34. if branch.render then
  35. branch.render:setLocalZOrder(branch.index)
  36. end
  37. end
  38. end
  39. function SWidget:removeBranch(branch)
  40. table.remove(self.branches, branch.index)
  41. if branch.render then
  42. if not global.SWidgetCache:cachingRender(branch) then
  43. branch.render:retain()
  44. if self.element.type == "ListView" then
  45. self.render:removeItem(self.render:getIndex(branch.render))
  46. elseif self.element.type == "PageView" then
  47. self.render:removePage(branch.render)
  48. else
  49. branch.render:removeFromParent()
  50. end
  51. branch.render:autorelease()
  52. end
  53. end
  54. -- update index
  55. for index, branch in ipairs(self.branches) do
  56. branch.index = index
  57. if branch.render then
  58. branch.render:setLocalZOrder(branch.index)
  59. end
  60. end
  61. end
  62. function SWidget:addBranchRender(branch)
  63. if not self.render then
  64. print("ERROR function SWidget:addBranchRender(branch), curr render error")
  65. return false
  66. end
  67. if not branch then
  68. print("ERROR function SWidget:addBranchRender(branch), branch arge error")
  69. return false
  70. end
  71. if self.element.type == "ListView" then
  72. -- self.render:pushBackCustomItem(branch.render)
  73. self.render:insertCustomItem(branch.render, branch.index-1)
  74. elseif self.element.type == "PageView" then
  75. self.render:insertPage(branch.render, branch.index-1)
  76. else
  77. self.render:addChild(branch.render)
  78. branch.render:setLocalZOrder(branch.index)
  79. end
  80. end
  81. function SWidget:replaceRender(newrender)
  82. local children = self.render:getChildren()
  83. for _, branch in ipairs(self.branches) do
  84. branch.render:retain()
  85. branch.render:autorelease()
  86. branch.render:removeFromParent()
  87. newrender:addChild(branch.render)
  88. branch.render:setLocalZOrder(branch.index)
  89. end
  90. self.render:removeFromParent()
  91. self.render = newrender
  92. self.trunk.render:addChild(self.render)
  93. self.render:setLocalZOrder(self.index)
  94. end
  95. return SWidget