/Tukui/modules/actionbars/Toggle.lua

http://github.com/Asphyxia/Tukui · Lua · 447 lines · 363 code · 75 blank · 9 comment · 129 complexity · a3385a175545044c76bc19a10b1e044b MD5 · raw file

  1. local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
  2. if not C["actionbar"].enable then return end
  3. -- © 2011 Eclípsé
  4. local function ModifiedBackdrop(self)
  5. local color = RAID_CLASS_COLORS[T.myclass]
  6. self:SetBackdropColor(color.r*.15, color.g*.15, color.b*.15)
  7. self:SetBackdropBorderColor(color.r, color.g, color.b)
  8. end
  9. local function OriginalBackdrop(self)
  10. self:SetTemplate("Default")
  11. end
  12. local TukuiBar1 = TukuiBar1
  13. local TukuiBar2 = TukuiBar2
  14. local TukuiBar3 = TukuiBar3
  15. local TukuiBar4 = TukuiBar4
  16. local TukuiSplitBarLeft = TukuiSplitBarLeft
  17. local TukuiSplitBarRight = TukuiSplitBarRight
  18. local TukuiRightBar = TukuiRightBar
  19. local TukuiPetBar = TukuiPetBar
  20. local Toggle = CreateFrame("Frame", "TukuiToggleActionbar", actionBarBG)
  21. local ToggleText = function(index, text, plus, neg)
  22. if plus then
  23. Toggle[index].Text:SetText(text)
  24. Toggle[index].Text:SetTextColor(.3, .3, .9)
  25. elseif neg then
  26. Toggle[index].Text:SetText(text)
  27. Toggle[index].Text:SetTextColor(.9, .3, .3)
  28. end
  29. end
  30. local MainBars = function()
  31. if TukuiSaved.bottomrows == 1 then
  32. TukuiBar1:Height((T.buttonsize + T.buttonspacing * 2) + 2)
  33. TukuiSplitBarLeft:Height(TukuiBar1:GetHeight())
  34. TukuiSplitBarRight:Height(TukuiBar1:GetHeight())
  35. ToggleText(1, "+ + +", true)
  36. TukuiBar2:Hide()
  37. if TukuiSaved.splitbars == true then
  38. MultiBarLeft:SetParent(TukuiSplitBarLeft)
  39. for i = 7, 12 do
  40. local b = _G["MultiBarLeftButton"..i]
  41. b:SetAlpha(1)
  42. b:SetScale(0.000001)
  43. end
  44. else
  45. MultiBarLeft:SetParent(TukuiBar3)
  46. end
  47. elseif TukuiSaved.bottomrows == 2 then
  48. TukuiBar1:Height((T.buttonsize * 2 + T.buttonspacing * 3) + 2)
  49. TukuiSplitBarLeft:Height(TukuiBar1:GetHeight())
  50. TukuiSplitBarRight:Height(TukuiBar1:GetHeight())
  51. ToggleText(1, "- - -", false, true)
  52. TukuiBar2:Show()
  53. if TukuiSaved.splitbars == true then
  54. MultiBarLeft:SetParent(TukuiSplitBarLeft)
  55. for i = 7, 12 do
  56. local b = _G["MultiBarLeftButton"..i]
  57. b:SetAlpha(1)
  58. b:SetScale(1)
  59. end
  60. else
  61. MultiBarLeft:SetParent(TukuiBar3)
  62. end
  63. end
  64. Toggle[4]:Height(16)
  65. Toggle[4]:Width(39)
  66. Toggle[5]:Height(16)
  67. Toggle[5]:Width(39)
  68. end
  69. local RightBars = function()
  70. if TukuiSaved.rightbars >= 1 then
  71. TukuiPetBar:ClearAllPoints()
  72. if C["actionbar"].vertical_rightbars == true then
  73. if not C["chat"].background then
  74. TukuiPetBar:Point("RIGHT", TukuiRightBar, "LEFT", -3, 0)
  75. else
  76. TukuiPetBar:Point("BOTTOMRIGHT", TukuiRightBar, "BOTTOMLEFT", -3, 0)
  77. end
  78. else
  79. TukuiPetBar:Point("BOTTOM", TukuiRightBar, "TOP", 0, 3)
  80. end
  81. else
  82. TukuiPetBar:ClearAllPoints()
  83. if not C["chat"].background then
  84. TukuiPetBar:Point("RIGHT", UIParent, "RIGHT", -8, 0)
  85. elseif C["actionbar"].vertical_rightbars == true then
  86. TukuiPetBar:Point("BOTTOMRIGHT", TukuiChatBackgroundRight, "TOPRIGHT", 0, 3)
  87. else
  88. TukuiPetBar:Point("BOTTOM", TukuiChatBackgroundRight, "TOP", 0, 3)
  89. end
  90. end
  91. if TukuiSaved.rightbars == 1 then
  92. TukuiRightBar:Show()
  93. TukuiBar4:Hide()
  94. if C["actionbar"].vertical_rightbars == true then
  95. TukuiRightBar:Width((T.buttonsize + T.buttonspacing * 2) + 2)
  96. else
  97. TukuiRightBar:Height((T.buttonsize + T.buttonspacing * 2) + 2)
  98. end
  99. if TukuiSaved.splitbars ~= true and TukuiBar3:IsShown() then
  100. MultiBarLeft:SetParent(TukuiBar3)
  101. TukuiBar3:Hide()
  102. end
  103. elseif TukuiSaved.rightbars == 2 then
  104. TukuiRightBar:Show()
  105. TukuiBar4:Show()
  106. if C["actionbar"].vertical_rightbars == true then
  107. TukuiRightBar:Width((T.buttonsize * 2 + T.buttonspacing * 3) + 2)
  108. else
  109. TukuiRightBar:Height((T.buttonsize * 2 + T.buttonspacing * 3) + 2)
  110. end
  111. if TukuiSaved.splitbars ~= true and TukuiBar3:IsShown() then
  112. MultiBarLeft:SetParent(TukuiBar3)
  113. TukuiBar3:Hide()
  114. end
  115. elseif TukuiSaved.rightbars == 3 then
  116. TukuiRightBar:Show()
  117. TukuiBar4:Show()
  118. if C["actionbar"].vertical_rightbars == true then
  119. TukuiRightBar:Width((T.buttonsize * 3 + T.buttonspacing * 4) + 2)
  120. else
  121. TukuiRightBar:Height((T.buttonsize * 3 + T.buttonspacing * 4) + 2)
  122. end
  123. if TukuiSaved.splitbars ~= true then
  124. MultiBarLeft:SetParent(TukuiBar3)
  125. TukuiBar3:Show()
  126. for i = 1, 12 do
  127. local b = _G["MultiBarLeftButton"..i]
  128. local b2 = _G["MultiBarLeftButton"..i-1]
  129. b:SetSize(T.buttonsize, T.buttonsize)
  130. b:ClearAllPoints()
  131. if i == 1 then
  132. b:Point("TOPLEFT", TukuiRightBar, 5, -5)
  133. else
  134. if not TukuiSaved.splitbars and C["actionbar"].vertical_rightbars == true then
  135. b:Point("TOP", b2, "BOTTOM", 0, -T.buttonspacing)
  136. else
  137. b:Point("LEFT", b2, "RIGHT", T.buttonspacing, 0)
  138. end
  139. end
  140. end
  141. end
  142. elseif TukuiSaved.rightbars == 0 then
  143. TukuiRightBar:Hide()
  144. TukuiBar4:Hide()
  145. if TukuiSaved.splitbars ~= true then
  146. MultiBarLeft:SetParent(TukuiBar3)
  147. TukuiBar3:Hide()
  148. end
  149. end
  150. end
  151. local SplitBars = function()
  152. if TukuiSaved.splitbars == true then
  153. MultiBarLeft:SetParent(TukuiSplitBarLeft)
  154. for i = 1, 12 do
  155. local b = _G["MultiBarLeftButton"..i]
  156. local b2 = _G["MultiBarLeftButton"..i-1]
  157. b:ClearAllPoints()
  158. if i == 1 then
  159. b:Point("BOTTOMLEFT", TukuiSplitBarLeft, 5, 5)
  160. else
  161. if i == 4 then
  162. b:Point("BOTTOMLEFT", TukuiSplitBarRight, 5, 5)
  163. elseif i == 7 then
  164. b:Point("BOTTOMLEFT", _G["MultiBarLeftButton1"], "TOPLEFT", 0, T.buttonspacing)
  165. elseif i == 10 then
  166. b:Point("BOTTOMLEFT", _G["MultiBarLeftButton4"], "TOPLEFT", 0, T.buttonspacing)
  167. else
  168. b:Point("LEFT", b2, "RIGHT", T.buttonspacing, 0)
  169. end
  170. end
  171. end
  172. if TukuiSaved.rightbars == 3 then
  173. TukuiRightBar:Show()
  174. if C["actionbar"].vertical_rightbars == true then
  175. TukuiRightBar:Width((T.buttonsize * 2 + T.buttonspacing * 3) + 2)
  176. else
  177. TukuiRightBar:Height((T.buttonsize * 2 + T.buttonspacing * 3) + 2)
  178. end
  179. end
  180. for i = 7, 12 do
  181. if TukuiSaved.bottomrows == 1 then
  182. local b = _G["MultiBarLeftButton"..i]
  183. b:SetAlpha(1)
  184. b:SetScale(0.000001)
  185. elseif TukuiSaved.bottomrows == 2 then
  186. local b = _G["MultiBarLeftButton"..i]
  187. b:SetAlpha(1)
  188. b:SetScale(1)
  189. end
  190. end
  191. TukuiSplitBarLeft:Show()
  192. TukuiSplitBarRight:Show()
  193. Toggle[4]:ClearAllPoints(); Toggle[5]:ClearAllPoints()
  194. Toggle[4]:Point("BOTTOMLEFT", closeAB, "TOPLEFT", 0, 23) -- Splitbar Toggle left
  195. Toggle[4]:SetFrameStrata("DIALOG")
  196. Toggle[4]:CreateOverlay(Toggle[4])
  197. Toggle[4]:HookScript("OnEnter", ModifiedBackdrop)
  198. Toggle[4]:HookScript("OnLeave", OriginalBackdrop)
  199. Toggle[5]:Point("LEFT", Toggle[4], "RIGHT", 4, 0) -- Splitbar Toggle right
  200. Toggle[5]:SetFrameStrata("DIALOG")
  201. Toggle[5]:CreateOverlay(Toggle[5])
  202. Toggle[5]:HookScript("OnEnter", ModifiedBackdrop)
  203. Toggle[5]:HookScript("OnLeave", OriginalBackdrop)
  204. ToggleText(4, ">", false, true)
  205. ToggleText(5, "<", false, true)
  206. elseif TukuiSaved.splitbars == false then
  207. MultiBarLeft:SetParent(TukuiBar3)
  208. for i = 1, 12 do
  209. local b = _G["MultiBarLeftButton"..i]
  210. local b2 = _G["MultiBarLeftButton"..i-1]
  211. b:ClearAllPoints()
  212. if i == 1 then
  213. b:Point("TOPLEFT", TukuiRightBar, 5, -5)
  214. else
  215. b:Point("LEFT", b2, "RIGHT", T.buttonspacing, 0)
  216. end
  217. end
  218. Toggle[4]:ClearAllPoints(); Toggle[5]:ClearAllPoints()
  219. Toggle[4]:Point("BOTTOMLEFT", closeAB, "TOPLEFT", 0, 23)-- Splitbar Toggle left
  220. Toggle[4]:SetFrameStrata("DIALOG")
  221. Toggle[5]:Point("LEFT", Toggle[4], "RIGHT", 4, 0) -- Splitbar Toggle right
  222. Toggle[5]:SetFrameStrata("DIALOG")
  223. ToggleText(4, "<", true)
  224. ToggleText(5, ">", true)
  225. RightBars()
  226. for i = 7, 12 do
  227. local b = _G["MultiBarLeftButton"..i]
  228. b:SetAlpha(1)
  229. b:SetScale(1)
  230. end
  231. TukuiSplitBarLeft:Hide()
  232. TukuiSplitBarRight:Hide()
  233. end
  234. end
  235. local function LockCheck(index)
  236. if TukuiSaved.actionbarsLocked == true then
  237. Toggle[index].Text:SetText("|cff50e468Unlock")
  238. elseif TukuiSaved.actionbarsLocked == false then
  239. Toggle[index].Text:SetText("|cffe45050Lock")
  240. end
  241. end
  242. for i = 1, 6 do
  243. Toggle[i] = CreateFrame("Frame", "TukuiToggle"..i, Toggle)
  244. Toggle[i]:EnableMouse(true)
  245. Toggle[i]:SetAlpha(1)
  246. Toggle[i]:CreateBorder(true, false)
  247. Toggle[i].Text = Toggle[i]:CreateFontString(nil, "OVERLAY")
  248. Toggle[i].Text:SetFont(C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  249. Toggle[i].Text:Point("CENTER", 2, 1)
  250. if i == 1 then
  251. Toggle[i]:CreatePanel("Default", actionBarBG:GetWidth() - 8, 15, "TOP", actionBarBG, "TOP", 0, -4) -- Collapse button
  252. Toggle[i]:SetFrameStrata("DIALOG")
  253. Toggle[i]:CreateOverlay(Toggle[i])
  254. Toggle[i]:HookScript("OnEnter", ModifiedBackdrop)
  255. Toggle[i]:HookScript("OnLeave", OriginalBackdrop)
  256. Toggle[i]:SetScript("OnMouseDown", function()
  257. if InCombatLockdown() then return end
  258. TukuiSaved.bottomrows = TukuiSaved.bottomrows + 1
  259. if TukuiSaved.bottomrows > 2 then
  260. TukuiSaved.bottomrows = 1
  261. end
  262. MainBars()
  263. end)
  264. Toggle[i]:SetScript("OnEvent", MainBars)
  265. elseif i == 2 then
  266. Toggle[i]:CreatePanel("Default", T.buttonsize, actionBarBG:GetHeight() - 44, "RIGHT", actionBarBG, "RIGHT", -4, 0) -- Rightbar toggle right
  267. Toggle[i]:SetFrameLevel(actionBarBG:GetFrameLevel() + 1)
  268. Toggle[i]:CreateOverlay(Toggle[i])
  269. if C["actionbar"].vertical_rightbars then
  270. ToggleText(i, ">", false, true)
  271. else
  272. ToggleText(i, "-", false, true)
  273. end
  274. Toggle[i]:HookScript("OnEnter", ModifiedBackdrop)
  275. Toggle[i]:HookScript("OnLeave", OriginalBackdrop)
  276. Toggle[i]:SetScript("OnMouseDown", function()
  277. if InCombatLockdown() then return end
  278. TukuiSaved.rightbars = TukuiSaved.rightbars - 1
  279. if TukuiSaved.splitbars == true and TukuiSaved.rightbars > 2 then
  280. TukuiSaved.rightbars = 1
  281. elseif TukuiSaved.rightbars < 0 then
  282. if TukuiSaved.splitbars == true then
  283. TukuiSaved.rightbars = 2
  284. else
  285. TukuiSaved.rightbars = 3
  286. end
  287. end
  288. RightBars()
  289. end)
  290. Toggle[i]:SetScript("OnEvent", RightBars)
  291. elseif i == 3 then
  292. Toggle[i]:CreatePanel("Default", Toggle[i-1]:GetWidth(), Toggle[i-1]:GetHeight(), "TOPRIGHT", Toggle[i-1], "TOPLEFT", -3, 0) -- Rightbar toggle left
  293. Toggle[i]:SetFrameLevel(Toggle[i-1]:GetFrameLevel())
  294. Toggle[i]:CreateOverlay(Toggle[i])
  295. if C["actionbar"].vertical_rightbars then
  296. ToggleText(i, "<", true, false)
  297. else
  298. ToggleText(i, "+", true, false)
  299. end
  300. Toggle[i]:HookScript("OnEnter", ModifiedBackdrop)
  301. Toggle[i]:HookScript("OnLeave", OriginalBackdrop)
  302. Toggle[i]:SetScript("OnMouseDown", function()
  303. if InCombatLockdown() then return end
  304. TukuiSaved.rightbars = TukuiSaved.rightbars + 1
  305. if TukuiSaved.splitbars == true and TukuiSaved.rightbars > 2 then
  306. TukuiSaved.rightbars = 0
  307. elseif TukuiSaved.rightbars > 3 then
  308. TukuiSaved.rightbars = 0
  309. end
  310. RightBars()
  311. end)
  312. Toggle[i]:SetScript("OnEvent", RightBars)
  313. elseif i == 4 then
  314. Toggle[i]:CreatePanel("Default", T.buttonsize / 2, 15, "BOTTOMRIGHT", actionBarBG, "BOTTOMLEFT", -3, 0)
  315. elseif i == 5 then
  316. Toggle[i]:CreatePanel("Default", T.buttonsize / 2, 15, "BOTTOMLEFT", actionBarBG, "BOTTOMRIGHT", 3, 0)
  317. elseif i == 6 then
  318. Toggle[i]:CreatePanel("Default", 82, 17, "BOTTOMLEFT", closeAB, "TOPLEFT", 0, 3) -- Lock button
  319. Toggle[i]:SetFrameStrata("DIALOG")
  320. Toggle[i]:CreateOverlay(Toggle[i])
  321. Toggle[i]:HookScript("OnEnter", ModifiedBackdrop)
  322. Toggle[i]:HookScript("OnLeave", OriginalBackdrop)
  323. Toggle[i]:SetScript("OnMouseDown", function()
  324. if InCombatLockdown() then return end
  325. if TukuiSaved.actionbarsLocked == true then
  326. TukuiSaved.actionbarsLocked = false
  327. print(L.actionbars_unlocked)
  328. elseif TukuiSaved.actionbarsLocked == false then
  329. TukuiSaved.actionbarsLocked = true
  330. print(L.actionbars_locked)
  331. end
  332. LockCheck(i)
  333. end)
  334. Toggle[i]:SetScript("OnEvent", function()
  335. LockCheck(i)
  336. end)
  337. end
  338. if i == 4 or i == 5 then
  339. Toggle[i]:SetScript("OnMouseDown", function()
  340. if InCombatLockdown() then return end
  341. if TukuiSaved.splitbars == false then
  342. TukuiSaved.splitbars = true
  343. elseif TukuiSaved.splitbars == true then
  344. TukuiSaved.splitbars = false
  345. end
  346. SplitBars()
  347. end)
  348. Toggle[i]:SetScript("OnEvent", SplitBars)
  349. end
  350. Toggle[i]:RegisterEvent("PLAYER_ENTERING_WORLD")
  351. Toggle[i]:RegisterEvent("PLAYER_REGEN_DISABLED")
  352. Toggle[i]:RegisterEvent("PLAYER_REGEN_ENABLED")
  353. --[[Toggle[i]:SetScript("OnEnter", function()
  354. if InCombatLockdown() then return end
  355. Toggle[i]:FadeIn()
  356. end)
  357. Toggle[i]:SetScript("OnLeave", function()
  358. Toggle[i]:FadeOut()
  359. end)--]]
  360. Toggle[i]:SetScript("OnUpdate", function()
  361. if TukuiSaved.actionbarsLocked == true then
  362. for i = 1, 5 do
  363. Toggle[i]:EnableMouse(false)
  364. end
  365. elseif TukuiSaved.actionbarsLocked == false then
  366. for i = 1, 5 do
  367. Toggle[i]:EnableMouse(true)
  368. end
  369. end
  370. end)
  371. end