TWidget.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. local TWidget = class("TWidget")
  2. local Element = require("sui/Element")
  3. local SUIHelper = require("sui/SUIHelper")
  4. function TWidget: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. self.content = nil
  12. end
  13. function TWidget:cleanup()
  14. self.element = nil
  15. self.render = nil
  16. self.trunk = nil
  17. self.branches = {}
  18. self.index = 1 -- Z轴
  19. self.depth = 1 -- 深度
  20. self.content = nil
  21. end
  22. function TWidget:addBranch(branch)
  23. table.insert(self.branches, branch)
  24. branch.index = #self.branches
  25. branch.trunk = self
  26. branch.depth = self.depth + 1
  27. end
  28. function TWidget:insertBranch(branch, index)
  29. table.insert(self.branches, index, branch)
  30. branch.index = index
  31. branch.trunk = self
  32. branch.depth = self.depth + 1
  33. -- update index
  34. for index, branch in ipairs(self.branches) do
  35. branch.index = index
  36. if branch.render then
  37. branch.render:setLocalZOrder(branch.index)
  38. end
  39. end
  40. end
  41. function TWidget:removeBranch(branch)
  42. table.remove(self.branches, branch.index)
  43. if branch.render then
  44. if not global.TWidgetCache:cachingRender(branch) then
  45. branch.render:retain()
  46. if self.element.type == "ListView" then
  47. self.render:removeItem(self.render:getIndex(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 TWidget:addBranchRender(branch)
  63. if not branch then
  64. print("ERROR function TWidget:addBranchRender(branch), branch arge error")
  65. return false
  66. end
  67. local content = ""
  68. if self.element.type == "ListView" then
  69. content = replace([[
  70. ${parentName}:insertCustomItem(${childName},${index})
  71. ]],{parentName = self.name, childName = branch.realname or branch.name, index = branch.index-1})
  72. else
  73. content = replace([[
  74. ${parentName}:addChild(${childName})
  75. ${childName}:setLocalZOrder(${index})
  76. ]], {parentName = self.name, childName = branch.realname or branch.name, index = branch.index})
  77. end
  78. return content
  79. end
  80. function TWidget:replaceRender(newrender)
  81. local children = self.render:getChildren()
  82. for _, branch in ipairs(self.branches) do
  83. branch.render:retain()
  84. branch.render:autorelease()
  85. branch.render:removeFromParent()
  86. newrender:addChild(branch.render)
  87. branch.render:setLocalZOrder(branch.index)
  88. end
  89. self.render:removeFromParent()
  90. self.render = newrender
  91. self.trunk.render:addChild(self.render)
  92. self.render:setLocalZOrder(self.index)
  93. end
  94. return TWidget