源战役客户端
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

217 lignes
6.1 KiB

il y a 4 semaines
  1. --[[
  2. @description: item TabBar
  3. @example:
  4. code:
  5. local test_tab_data = {
  6. ["_1"] = "主菜单",
  7. ["_1_1"] = "子菜单",
  8. }
  9. local test_tab_data = {
  10. ["_1"] = {name = "主菜单", ...()},
  11. ["_1_1"] = {name = "子菜单", ...()},
  12. }
  13. local call_back = function (index, sub_index) --回调函数
  14. end
  15. self.verTabBar = UICusVerTabBar.New(self.scroll_content, Vector2(265, 590), item, co.TableXY(257, 75))
  16. self.verTabBar:SetSubOffset(co.TableXY(2, 2))
  17. self.verTabBar:SetPaddingTop(6)
  18. self.verTabBar:SetTabBars(test_tab_data, call_back)
  19. self.verTabBar:SetSelectTab(1, 2)
  20. ]]
  21. UICusVerTabBar = UICusVerTabBar or BaseClass()
  22. --[[
  23. sizeDelta:
  24. item: item
  25. tab_btn_size:
  26. padding_top:
  27. subCon_offset:
  28. ]]
  29. function UICusVerTabBar:__init(parent_wnd, sizeDelta, item, tab_btn_size, padding_top, tab_offset, subCon_offset)
  30. self.parent_wnd = parent_wnd
  31. self.btn_list = {}
  32. self.item = item
  33. self.tab_btn_size = tab_btn_size
  34. self.padding_top = padding_top or 0
  35. self.offset = tab_offset
  36. self.subCon_offset = subCon_offset
  37. self:Load(sizeDelta)
  38. end
  39. function UICusVerTabBar:__delete()
  40. for i,v in ipairs(self.btn_list) do
  41. v:DeleteMe()
  42. v = nil
  43. end
  44. self.btn_list = {}
  45. destroy(self.scroll_view)
  46. end
  47. function UICusVerTabBar:Load(sizeDelta)
  48. self.scroll_view = UiFactory.createChild(self.parent_wnd, UIType.ScrollView, "bar_scroll")
  49. self.scroll_view.transform.anchorMax = Vector2(0, 1)
  50. self.scroll_view.transform.anchorMin = Vector2(0, 1)
  51. self.scroll_view.transform.pivot = Vector2(0, 1)
  52. self.scroll_view.transform.anchoredPosition = Vector2(0, 0)
  53. self.scroll_view.transform.sizeDelta = sizeDelta and sizeDelta or Vector2(202, 561)
  54. self.scroll_view_content = self.scroll_view.transform:Find("Viewport/Content")
  55. self.scroll_view_viewport = self.scroll_view.transform:Find("Viewport")
  56. self:InitEvent()
  57. end
  58. function UICusVerTabBar:InitEvent()
  59. end
  60. function UICusVerTabBar:SetTabBars(bar_list, call_back, select_anything, force_size)
  61. if bar_list == nil or TableSize(bar_list) == 0 then return end
  62. --先隐藏所有菜单
  63. for i,v in ipairs(self.btn_list) do
  64. v:SetVisible(false)
  65. end
  66. for i = 1, TableSize(bar_list) do
  67. local index = "_" .. i
  68. if not bar_list[index] then
  69. break
  70. end
  71. local tab_btn = self.btn_list[i]
  72. if tab_btn == nil then
  73. tab_btn = UICusVerTabBtn.New(self.scroll_view_content, self.item, self.tab_btn_size, self.subCon_offset)
  74. self.btn_list[i] = tab_btn
  75. end
  76. tab_btn:SetTabDetail(bar_list, i, call_back, select_anything, force_size)
  77. tab_btn:SetSubOffset(self.offset)
  78. tab_btn:SetVisible(true)
  79. local function onBtnClickHandler(target)
  80. self:SetSelectTab(tab_btn.index)
  81. end
  82. if tab_btn.tab then
  83. AddClickEvent(tab_btn.tab, onBtnClickHandler,2)
  84. end
  85. end
  86. self:RefreshTabPos()
  87. end
  88. --更新tabBar的位置
  89. function UICusVerTabBar:RefreshTabPos(index, sub_index)
  90. local gap = self.padding_top
  91. local btn_height
  92. for i,v in ipairs(self.btn_list) do
  93. btn_height = v.btn_height
  94. if v.show == true then
  95. local off = self.offset and (v:GetVisibleCount(true) - 1) * self.offset.y or 0
  96. local h = v:GetVisibleCount(true) * self.item.Height + off
  97. v:SetPosition(0, -gap)
  98. gap = gap + v.btn_height + h
  99. else
  100. v:SetPosition(0, -gap)
  101. gap = gap + v.btn_height
  102. end
  103. end
  104. self.scroll_view_content.sizeDelta = Vector2(self.scroll_view_content.sizeDelta.x, gap) -- +40?
  105. if self.index and sub_index and sub_index >= 5 then
  106. local all_height = self.item.Height * 4 + (self.index - 1) * btn_height
  107. self.scroll_view_content.localPosition = Vector3(0,all_height,0)
  108. else
  109. self.scroll_view_content.localPosition = Vector3(0,0,0)
  110. end
  111. end
  112. --设置选中的选项卡
  113. --[[function UICusVerTabBar:SetSelectTab(index, sub_index,force_show)
  114. self.sub_index = sub_index
  115. self.index = index
  116. for i,v in ipairs(self.btn_list) do
  117. -- if v.index and v.index == index then
  118. v:SetSelectMode(index, sub_index, force_show)
  119. -- end
  120. end
  121. GlobalEventSystem:Fire(EventName.TAB_BAR_BE_CLICK)
  122. self:RefreshTabPos()
  123. end--]]
  124. --设置选中的选项卡
  125. function UICusVerTabBar:SetSelectTab(index, sub_index,force_show)
  126. for i,v in ipairs(self.btn_list) do
  127. if v.index and v.index == index then
  128. if not v.show then
  129. self:CancelSetSelectTab(index)
  130. end
  131. v:SetSelectMode(index, sub_index, force_show, self.quick_select)
  132. break
  133. end
  134. end
  135. self:RefreshTabPos(index, sub_index)
  136. end
  137. --取消所有的选中项
  138. function UICusVerTabBar:CancelSetSelectTab(index)
  139. for i,v in ipairs(self.btn_list) do
  140. v:RefreshBtnState(false)
  141. v:SetSelectSubIndex(0, 0)
  142. end
  143. --self:RefreshTabPos()
  144. if index and index * UIVerTabSubBtn.Height > self.scroll_view.transform.sizeDelta.y / 2 then
  145. self.scroll_view_content.localPosition = Vector2(self.scroll_view_content.localPosition.x, (index - 1) * ComposeTabSubBtn.Height)
  146. else
  147. self.scroll_view_content.localPosition = Vector2(self.scroll_view_content.localPosition.x, 0)
  148. end
  149. end
  150. function UICusVerTabBar:SetScrollViewSize(width,heigh)
  151. self.scroll_view.transform.sizeDelta = Vector2(width,heigh)
  152. end
  153. function UICusVerTabBar:RefreshTabBtnState(index)
  154. for i,v in ipairs(self.btn_list) do
  155. if v.index == index then
  156. v:RefreshBtnState(v.show)
  157. end
  158. end
  159. self:RefreshTabPos()
  160. end
  161. function UICusVerTabBar:GetTabBtnShowState(index)
  162. for i,v in ipairs(self.btn_list) do
  163. if v.index == index then
  164. return v.show
  165. end
  166. end
  167. end
  168. --在回调函数中调用该函数,刷新选中状态
  169. function UICusVerTabBar:UpdateSelectState(index, sub_index)
  170. for i,v in ipairs(self.btn_list) do
  171. v:SetSelectState(false)
  172. for key,value in ipairs(v.sub_btn_list) do
  173. value:SetSelectState(false)
  174. end
  175. end
  176. if sub_index == 0 then
  177. self.btn_list[index]:SetSelectState(true)
  178. else
  179. self.btn_list[index].sub_btn_list[sub_index]:SetSelectState(true)
  180. end
  181. end
  182. --传入主索引和所有要显示的子索引列表,取消红点只传入主索引
  183. function UICusVerTabBar:ShowRedDot(index, index_list)
  184. if self.btn_list[index] and self.btn_list[index].ShowRedDot then
  185. self.btn_list[index]:ShowRedDot(index_list)
  186. end
  187. end