PageRenderTime 10ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/Tukui/modules/extras/addonmanager.lua

http://github.com/Asphyxia/Tukui
Lua | 156 lines | 130 code | 21 blank | 5 comment | 5 complexity | 3c9a6d813c51ace7d972bde2902cb389 MD5 | raw file
  1. local T, C, L = unpack(select(2, ...)) -- Import: T - functions, constants, variables; C - config; L - locales
  2. local font, fontsize, fontstyle = C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE"
  3. local function ModifiedBackdrop(self)
  4. local color = RAID_CLASS_COLORS[T.myclass]
  5. self:SetBackdropColor(color.r*.15, color.g*.15, color.b*.15)
  6. self:SetBackdropBorderColor(color.r, color.g, color.b)
  7. end
  8. local function OriginalBackdrop(self)
  9. self:SetTemplate("Default")
  10. end
  11. -- Create BG
  12. local addonBG = CreateFrame("Frame", "addonBG", UIParent)
  13. addonBG:CreatePanel("Default", T.InfoLeftRightWidth, 500, "CENTER", UIParent, "CENTER", 0, 0)
  14. addonBG:EnableMouse(true)
  15. addonBG:SetMovable(true)
  16. addonBG:SetUserPlaced(true)
  17. addonBG:SetClampedToScreen(true)
  18. addonBG:SetScript("OnMouseDown", function(self) self:StartMoving() end)
  19. addonBG:SetScript("OnMouseUp", function(self) self:StopMovingOrSizing() end)
  20. addonBG:SetFrameStrata("HIGH")
  21. addonBG:CreateShadow("Default")
  22. T.fadeIn(addonBG)
  23. addonBG:Hide()
  24. local addonHeader = CreateFrame("Frame", "addonHeader", addonBG)
  25. addonHeader:CreatePanel("Transparent", addonBG:GetWidth(), 23, "BOTTOM", addonBG, "TOP", 0, 3, true)
  26. addonHeader.Text = T.SetFontString(addonHeader, font, fontsize, fontstyle)
  27. addonHeader.Text:SetPoint("LEFT", 5, 1)
  28. addonHeader.Text:SetText(T.datacolor.."AddOns List"..": "..T.datacolor..T.myname)
  29. -- Create scroll frame
  30. local scrollFrame = CreateFrame("ScrollFrame", "scrollFrame", addonBG, "UIPanelScrollFrameTemplate")
  31. scrollFrame:SetPoint("TOPLEFT", addonBG, "TOPLEFT", 10, -10)
  32. scrollFrame:SetPoint("BOTTOMRIGHT", addonBG, "BOTTOMRIGHT", -30, 40)
  33. T.SkinScrollBar(scrollFrameScrollBar)
  34. -- Create inside BG (uses scroll frame)
  35. local buttonsBG = CreateFrame("Frame", "buttonsBG", scrollFrame)
  36. buttonsBG:SetPoint("TOPLEFT")
  37. buttonsBG:SetWidth(scrollFrame:GetWidth())
  38. buttonsBG:SetHeight(scrollFrame:GetHeight())
  39. scrollFrame:SetScrollChild(buttonsBG)
  40. local saveButton = CreateFrame("Button", "saveButton", addonBG)
  41. saveButton:CreatePanel("Default", 130, 20, "BOTTOMLEFT", addonBG, "BOTTOMLEFT", 10, 10, true)
  42. saveButton:SetFrameStrata("TOOLTIP")
  43. saveButton:CreateOverlay(saveButton)
  44. saveButton.text:SetText(T.datacolor.."Save Changes")
  45. saveButton:SetScript("OnClick", function() ReloadUI() end)
  46. saveButton:HookScript("OnEnter", ModifiedBackdrop)
  47. saveButton:HookScript("OnLeave", OriginalBackdrop)
  48. local closeButton = CreateFrame("Button", "closeButton", addonBG)
  49. closeButton:CreatePanel("Default", 130, 20, "BOTTOMRIGHT", addonBG, "BOTTOMRIGHT", -10, 10, true)
  50. closeButton.text:SetText(T.datacolor.."Cancel")
  51. closeButton:SetFrameStrata("TOOLTIP")
  52. closeButton:CreateOverlay(closeButton)
  53. closeButton:SetScript("OnClick", function() T.fadeOut(addonBG) end)
  54. closeButton:HookScript("OnEnter", ModifiedBackdrop)
  55. closeButton:HookScript("OnLeave", OriginalBackdrop)
  56. local raid_addons = CreateFrame("Button", "TukuiEnableRaidButton", addonHeader)
  57. raid_addons:CreatePanel("Transparent", 60, 17, "RIGHT", addonHeader, "RIGHT", -5, 0)
  58. raid_addons:CreateShadow("Default")
  59. raid_addons:CreateOverlay(raid_addons)
  60. raid_addons:SetFrameStrata(addonHeader:GetFrameStrata())
  61. raid_addons:SetFrameLevel(addonHeader:GetFrameLevel() + 1)
  62. raid_addons:RegisterForClicks("AnyUp") raid_addons:SetScript("OnClick", function()
  63. EnableAddOn("DBM-Core") -- change this to your bossmod "BigWigs"
  64. EnableAddOn("Recount") -- change this to your damage meters "TinyDPS" "Skada"
  65. ReloadUI()
  66. end)
  67. raid_addons:HookScript("OnEnter", ModifiedBackdrop)
  68. raid_addons:HookScript("OnLeave", OriginalBackdrop)
  69. raid_addons.Text = T.SetFontString(raid_addons, C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  70. raid_addons.Text:Point("CENTER", raid_addons, "CENTER", 1, 1)
  71. raid_addons.Text:SetText(T.datacolor..RAID)
  72. local solo_addons = CreateFrame("Button", "TukuiEnableSoloButton", addonHeader)
  73. solo_addons:CreatePanel("Transparent", 60, 17, "RIGHT", raid_addons, "LEFT", -3, 0)
  74. solo_addons:CreateShadow("Default")
  75. solo_addons:CreateOverlay(solo_addons)
  76. solo_addons:SetFrameStrata(addonHeader:GetFrameStrata())
  77. solo_addons:SetFrameLevel(addonHeader:GetFrameLevel() + 1)
  78. solo_addons:RegisterForClicks("AnyUp") solo_addons:SetScript("OnClick", function()
  79. DisableAddOn("DBM-Core") -- change this to your bossmod "BigWigs"
  80. DisableAddOn("Recount") -- change this to your damage meters "TinyDPS" "Skada"
  81. ReloadUI()
  82. end)
  83. solo_addons:HookScript("OnEnter", ModifiedBackdrop)
  84. solo_addons:HookScript("OnLeave", OriginalBackdrop)
  85. solo_addons.Text = T.SetFontString(solo_addons, C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  86. solo_addons.Text:Point("CENTER", solo_addons, "CENTER", 1, 1)
  87. solo_addons.Text:SetText(T.datacolor..SOLO)
  88. local function UpdateAddons()
  89. local addons = {}
  90. for i=1, GetNumAddOns() do
  91. addons[i] = select(1, GetAddOnInfo(i))
  92. end
  93. table.sort(addons)
  94. local oldb
  95. for i,v in pairs(addons) do
  96. local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(v)
  97. local button = CreateFrame("Button", v.."_Button", buttonsBG, "SecureActionButtonTemplate")
  98. button:SetFrameLevel(buttonsBG:GetFrameLevel() + 1)
  99. button:Size(50, 16)
  100. button:SetTemplate("Default")
  101. button:CreateOverlay()
  102. -- to make sure the border is colored the right color on reload
  103. if enabled then
  104. button:SetBackdropBorderColor(0,1,0)
  105. else
  106. button:SetBackdropBorderColor(1,0,0)
  107. end
  108. if i==1 then
  109. button:Point("TOPLEFT", buttonsBG, "TOPLEFT", 0, 0)
  110. else
  111. button:Point("TOP", oldb, "BOTTOM", 0, -7)
  112. end
  113. local text = T.SetFontString(button, C.media.pixelfont, C["datatext"].fontsize, "MONOCHROMEOUTLINE")
  114. text:Point("LEFT", button, "RIGHT", 8, 0)
  115. text:SetText(title)
  116. button:SetScript("OnMouseDown", function()
  117. if enabled then
  118. button:SetBackdropBorderColor(1,0,0)
  119. DisableAddOn(name)
  120. enabled = false
  121. else
  122. button:SetBackdropBorderColor(0,1,0)
  123. EnableAddOn(name)
  124. enabled = true
  125. end
  126. end)
  127. oldb = button
  128. end
  129. end
  130. UpdateAddons()
  131. -- Slash commands
  132. SLASH_ALOAD1 = "/am"
  133. SlashCmdList.ALOAD = function (msg)
  134. addonBG:Show()
  135. end