View difference between Paste ID: aJJqCHw9 and T5pmyQfE
SHOW: | | - or go back to the newest paste.
1
local Core = LibStub("AceAddon-3.0"):GetAddon("BasicUI")
2
local Module = Core:NewModule("Actionbars", "AceEvent-3.0")
3
4-
---------------
4+
local db, classColor
5
6-
---------------
6+
----------------
7
-- Actionbars --
8-
------------------------------------------------------------------------
8+
----------------
9-
-- Local functions
9+
10
function Module:OnInitialize()
11-
local function EnableHotKeys()
11+
	db = Core.db.profile
12-
	
12+
13-
	local db = Core.db.profile
13+
	local _, class = UnitClass("player")
14-
	
14+
	classColor = (CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS)[class]
15-
	if db.actionbars.showHotKeys ~= false then return end
15+
16-
	
16+
17-
	for i=1, 12 do        
17+
18-
		_G["ActionButton"..i.."HotKey"]:SetAlpha(0) -- main bar        
18+
19-
		_G["MultiBarBottomRightButton"..i.."HotKey"]:SetAlpha(0) -- bottom right bar        
19+
20-
		_G["MultiBarBottomLeftButton"..i.."HotKey"]:SetAlpha(0) -- bottom left bar        
20+
21-
		_G["MultiBarRightButton"..i.."HotKey"]:SetAlpha(0) -- right bar        
21+
22-
		_G["MultiBarLeftButton"..i.."HotKey"]:SetAlpha(0) -- left bar
22+
23
	if self.SetupHooks then
24
		self:SetupHooks()
25
	end
26-
local function EnableMacroNames()
26+
27
	if enabled or not db.actionbars.enable then return end
28-
	local db = Core.db.profile
28+
29-
	
29+
30-
	if db.actionbars.showMacronames ~= false then return end
30+
	local hotkeyAlpha = db.actionbars.showHotKeys and 1 or 0
31
	for i = 1, 12 do
32-
	for i=1, 12 do        
32+
		_G["ActionButton"..i.."HotKey"]:SetAlpha(hotkeyAlpha) -- main bar
33-
		_G["ActionButton"..i.."Name"]:SetAlpha(0) -- main bar        
33+
		_G["MultiBarBottomRightButton"..i.."HotKey"]:SetAlpha(hotkeyAlpha) -- bottom right bar
34-
		_G["MultiBarBottomRightButton"..i.."Name"]:SetAlpha(0) -- bottom right bar        
34+
		_G["MultiBarBottomLeftButton"..i.."HotKey"]:SetAlpha(hotkeyAlpha) -- bottom left bar
35-
		_G["MultiBarBottomLeftButton"..i.."Name"]:SetAlpha(0) -- bottom left bar        
35+
		_G["MultiBarRightButton"..i.."HotKey"]:SetAlpha(hotkeyAlpha) -- right bar
36-
		_G["MultiBarRightButton"..i.."Name"]:SetAlpha(0) -- right bar        
36+
		_G["MultiBarLeftButton"..i.."HotKey"]:SetAlpha(hotkeyAlpha) -- left bar
37-
		_G["MultiBarLeftButton"..i.."Name"]:SetAlpha(0) -- left bar
37+
38
39
	local macroAlpha = db.actionbars.showMacronames and 1 or 0
40
	for i = 1, 12 do
41-
------------------------------------------------------------------------
41+
		_G["ActionButton"..i.."Name"]:SetAlpha(macroAlpha) -- main bar
42-
-- Module functions
42+
		_G["MultiBarBottomRightButton"..i.."Name"]:SetAlpha(macroAlpha) -- bottom right bar
43
		_G["MultiBarBottomLeftButton"..i.."Name"]:SetAlpha(macroAlpha) -- bottom left bar
44
		_G["MultiBarRightButton"..i.."Name"]:SetAlpha(macroAlpha) -- right bar
45
		_G["MultiBarLeftButton"..i.."Name"]:SetAlpha(macroAlpha) -- left bar
46
	end
47
end
48
49
function Module:SetupHooks()
50-
	local db = Core.db.profile
50+
51
	-- By Aprikot - http://aprikot.wowinterface.com
52
	-- Based upon functions within nMainbar by Neal, and thek: Buttonskin by thek
53
54-
	
54+
	local function AddRegionKeys(self)
55-
	EnableHotKeys()
55+
		local name = self:GetName()
56-
	EnableMacroNames()
56+
		self.__name = _G[name.."Name"]
57-
	
57+
		self.__count = _G[name.."Count"]
58-
	local ccolor = RAID_CLASS_COLORS[select(2, UnitClass("player"))]	
58+
		self.__hotkey = _G[name.."HotKey"]
59
		self.__border = _G[name.."Border"]
60
		self.__flash = _G[name.."Flash"]
61-
	hooksecurefunc('ActionButton_UpdateUsable', function(self)
61+
		self.__normalTexture = _G[name.."NormalTexture"]
62-
		if (IsAddOnLoaded('RedRange') or IsAddOnLoaded('GreenRange') or IsAddOnLoaded('tullaRange') or IsAddOnLoaded('RangeColors')) then
62+
		self.__normalTexture2 = _G[name.."NormalTexture2"]
63-
			return
63+
		self.__pushedTexture = self:GetPushedTexture()
64-
		end    
64+
		self.__highlightTexture = self:GetHighlightTexture()
65-
		
65+
		self.__checkedTexture = self:GetCheckedTexture()
66-
		local isUsable, notEnoughMana = IsUsableAction(self.action)
66+
		return name
67-
		if (isUsable) then
67+
68-
			_G[self:GetName()..'Icon']:SetVertexColor(1, 1, 1)
68+
69-
		elseif (notEnoughMana) then
69+
	local function ColorButton(texture)
70-
			_G[self:GetName()..'Icon']:SetVertexColor(db.actionbars.color.OutOfMana.r, db.actionbars.color.OutOfMana.g, db.actionbars.color.OutOfMana.b)
70+
		if db.misc.classcolor then
71
			texture:SetVertexColor(classColor.r * 1.2, classColor.g * 1.2, classColor.b * 1.2)
72-
			_G[self:GetName()..'Icon']:SetVertexColor(db.actionbars.color.NotUsable.r, db.actionbars.color.NotUsable.g, db.actionbars.color.NotUsable.b)
72+
73
			local color = db.actionbars.color
74
			texture:SetVertexColor(color.r, color.g, color.b)
75
		end
76
	end
77
78
	local extraActionButtons = setmetatable({}, { __index = function(t, self)
79
		local name = AddRegionKeys(self)
80-
	-- Functions
80+
		local v = not not strmatch(name, "ExtraActionButton")
81
		t[f] = v
82-
	if self:GetName():match("ExtraActionButton") then return end
82+
		return v
83-
		local bu = _G[self:GetName()]
83+
	end })
84-
		local ic = _G[self:GetName().."Icon"]
84+
85-
		local bo = _G[self:GetName().."NormalTexture"]
85+
86-
		bu:SetNormalTexture("Interface\\BUTTONS\\UI-Quickslot2")
86+
		if extraActionButtons[self] then return end
87-
		ic:SetTexCoord(.05, .95, .05, .95);
87+
88-
		ic:SetPoint("TOPLEFT", bu, 0, 0);
88+
		self:SetNormalTexture("Interface\\BUTTONS\\UI-Quickslot2")
89-
		ic:SetPoint("BOTTOMRIGHT", bu, 0, 0);
89+
90-
		bo:ClearAllPoints()
90+
		local icon = self.icon
91-
		bo:SetPoint("TOPLEFT", bu, -14, 14)
91+
		icon:SetTexCoord(.05, .95, .05, .95)
92-
		bo:SetPoint("BOTTOMRIGHT", bu, 14, -14)
92+
		icon:ClearAllPoints()
93-
		if db.misc.classcolor ~= true then
93+
		icon:SetPoint("TOPLEFT")
94-
			bo:SetVertexColor(db.actionbars.color.r, db.actionbars.color.g, db.actionbars.color.b)
94+
		icon:SetPoint("BOTTOMRIGHT")
95
96-
			bo:SetVertexColor((ccolor.r * 1.2), (ccolor.g * 1.2), (ccolor.b * 1.2))
96+
		local normalTexture = self.__normalTexture
97-
		end	
97+
		normalTexture:ClearAllPoints()
98-
	end);
98+
		normalTexture:SetPoint("TOPLEFT", -14, 14)
99
		normalTexture:SetPoint("BOTTOMRIGHT", 14, -14)
100
		ColorButton(normalTexture)
101-
	if self:GetName():match("ExtraActionButton") then return end
101+
102-
		if db.misc.classcolor ~= true then
102+
103-
			(_G[self:GetName().."NormalTexture"]):SetVertexColor(db.actionbars.color.r, db.actionbars.color.g, db.actionbars.color.b)
103+
104
		if extraActionButtons[self] then return end
105-
			(_G[self:GetName().."NormalTexture"]):SetVertexColor((ccolor.r * 1.2), (ccolor.g * 1.2), (ccolor.b * 1.2))
105+
		ColorButton(self.__normalTexture)
106-
		end	
106+
107-
	end);
107+
108
	hooksecurefunc("ActionButton_ShowGrid", function(self)
109
		if extraActionButtons[self] then return end
110-
	if self:GetName():match("ExtraActionButton") then return end
110+
		ColorButton(self.__normalTexture)
111-
		if db.misc.classcolor ~= true then
111+
112-
			(_G[self:GetName().."NormalTexture"]):SetVertexColor(db.actionbars.color.r, db.actionbars.color.g, db.actionbars.color.b)
112+
113
	local petButtons = { "PetActionButton", "PossessButton", "ShapeshiftButton" }
114-
			(_G[self:GetName().."NormalTexture"]):SetVertexColor((ccolor.r * 1.2), (ccolor.g * 1.2), (ccolor.b * 1.2))
114+
115-
		end	
115+
		for i = 1, #petButtons do
116-
	end);
116+
			for j = 1, 12 do
117
				local button = _G[petButtons[i]..j]
118
				button:SetNormalTexture("Interface\\BUTTONS\\UI-Quickslot2")
119-
		for i, v in pairs({"PetActionButton", "ShapeshiftButton", "PossessButton"}) do
119+
120-
			for i = 1, 12 do
120+
				AddRegionKeys(button)
121-
				local bu = _G[v..i]
121+
122-
				if bu then
122+
				local icon = button.icon
123-
					bu:SetNormalTexture("Interface\\BUTTONS\\UI-Quickslot2")
123+
				icon:SetTexCoord(.05, .95, .05, .95)
124-
					local ic = _G[v..i.."Icon"];
124+
				icon:ClearAllPoints()
125-
					ic:SetTexCoord(.05, .95, .05, .95);
125+
				icon:SetPoint("TOPLEFT", -1, 1)
126-
					ic:SetPoint("TOPLEFT", bu, -1, 1);
126+
				icon:SetPoint("BOTTOMRIGHT", 1, -1)
127-
					ic:SetPoint("BOTTOMRIGHT", bu, 1, -1);
127+
128-
					local bo = _G[v..i.."NormalTexture2"] or _G[v..i.."NormalTexture"]
128+
				local normalTexture = button.__normalTexture2 or button.__normalTexture
129-
					bo:ClearAllPoints()
129+
				normalTexture:ClearAllPoints()
130-
					bo:SetPoint("TOPLEFT", bu, -15, 15)
130+
				normalTexture:SetPoint("TOPLEFT", -15, 15)
131-
					bo:SetPoint("BOTTOMRIGHT", bu, 15, -15)
131+
				normalTexture:SetPoint("BOTTOMRIGHT",15, -15)
132-
					if db.misc.classcolor ~= true then
132+
133-
						bo:SetVertexColor(db.actionbars.color.r, db.actionbars.color.g, db.actionbars.color.b)
133+
				ColorButton(normalTexture)
134-
					else
134+
135-
						bo:SetVertexColor((ccolor.r * 1.2), (ccolor.g * 1.2), (ccolor.b * 1.2))
135+
136-
					end					
136+
137
138
	hooksecurefunc("AuraButton_Update", function(buttonName, index, filter)
139
		if not db.actionbars.auraborder then return end
140-
	end);
140+
141
		local buffName = buttonName..index
142-
	hooksecurefunc("AuraButton_Update", function(self, index)
142+
		local self = _G[buffName]
143-
		if db.actionbars.auraborder then
143+
		if not self.__border then AddRegionKeys(self) end
144-
			local bu = _G[self..index]
144+
145-
			local ic = _G[self..index.."Icon"]
145+
		local icon = self.icon
146-
			local bo = _G[self..index.."Border"]
146+
		if icon then
147-
			if ic then 
147+
			icon:SetTexCoord(.07, .93, .07, .93)
148-
				ic:SetTexCoord(.07, .93, .07, .93);
148+
149
150-
			if bo then
150+
		local border = self.__border
151-
				bo:SetTexture("Interface\\BUTTONS\\UI-Quickslot2")
151+
		if not border then
152-
				bo:ClearAllPoints()
152+
			border = self:CreateTexture("$parentOverlay", "ARTWORK")
153-
				bo:SetPoint("TOPLEFT", bu, -12, 12)
153+
			self.__border = border
154-
				bo:SetPoint("BOTTOMRIGHT", bu, 12, -12)
154+
155-
				bo:SetTexCoord(0, 1, 0, 1)
155+
		border:SetTexture("Interface\\BUTTONS\\UI-Quickslot2")
156-
				if db.misc.classcolor ~= true then
156+
		border:ClearAllPoints()
157-
					bo:SetVertexColor(db.actionbars.color.r, db.actionbars.color.g, db.actionbars.color.b)
157+
		border:SetPoint("TOPLEFT", bu, -12, 12)
158-
				else
158+
		border:SetPoint("BOTTOMRIGHT", bu, 12, -12)
159-
					bo:SetVertexColor((ccolor.r * 1.2), (ccolor.g * 1.2), (ccolor.b * 1.2))
159+
		border:SetTexCoord(0, 1, 0, 1)
160-
				end				
160+
		ColorButton(border)
161
	end)
162-
			if bu and not bo then 
162+
163-
				nbo = bu:CreateTexture("$parentOverlay", "ARTWORK")
163+
	---------------------------------------------------------------------
164-
				nbo:SetParent(bu)
164+
165-
				nbo:SetTexture("Interface\\BUTTONS\\UI-Quickslot2")
165+
	local rangeAddons = {
166-
				nbo:SetPoint("TOPLEFT", bu, -12, 12)
166+
		"GreenRange",
167-
				nbo:SetPoint("BOTTOMRIGHT", bu, 12, -12)
167+
		"RangeColors",
168-
				if db.misc.classcolor ~= true then
168+
		"RedRange",
169-
					nbo:SetVertexColor(db.actionbars.color.r, db.actionbars.color.g, db.actionbars.color.b)
169+
		"tullaRange",
170-
				else
170+
	}
171-
					nbo:SetVertexColor((ccolor.r * 1.2), (ccolor.g * 1.2), (ccolor.b * 1.2))
171+
	for i = 1, #rangeAddons do
172
		local _, _, _, enabled = GetAddOnInfo(rangeAddons[i])
173
		if enabled then
174
			rangeAddons = nil
175-
	end);
175+
			break
176-
	
176+
177-
	function ActionButton_OnUpdate(self, elapsed)
177+
178-
		if (IsAddOnLoaded('RedRange') or IsAddOnLoaded('GreenRange') or IsAddOnLoaded('tullaRange') or IsAddOnLoaded('RangeColors')) then
178+
179-
			return
179+
	if rangeAddons then
180-
		end     
180+
		hooksecurefunc("ActionButton_UpdateUsable", function(self)
181
			local isUsable, notEnoughMana = IsUsableAction(self.action)
182-
		if (ActionButton_IsFlashing(self)) then
182+
			if isUsable then
183-
			local flashtime = self.flashtime
183+
				self.icon:SetVertexColor(1, 1, 1)
184-
			flashtime = flashtime - elapsed
184+
			elseif notEnoughMana then
185
				local color = db.actionbars.color.OutOfMana
186-
			if (flashtime <= 0) then
186+
				self.icon:SetVertexColor(color.r, color.g, color.b)
187-
				local overtime = - flashtime
187+
			else
188-
				if (overtime >= ATTACK_BUTTON_FLASH_TIME) then
188+
				local color = db.actionbars.color.NotUsable
189-
					overtime = 0
189+
				self.icon:SetVertexColor(color.r, color.g, color.b)
190
			end
191
		end)
192-
				flashtime = ATTACK_BUTTON_FLASH_TIME - overtime
192+
193
		hooksecurefunc("ActionButton_OnUpdate", function(self, elapsed)
194-
				local flashTexture = _G[self:GetName()..'Flash']
194+
			local rangeTimer = self.rangeTimer2 or 0
195-
				if (flashTexture:IsShown()) then
195+
196-
					flashTexture:Hide()
196+
			if rangeTimer <= 0 then
197-
				else
197+
				if IsActionInRange(self.action) == 0 then
198-
					flashTexture:Show()
198+
					local color = db.actionbars.color.OutOfRange
199
					self.icon:SetVertexColor(color.r, color.g, color.b)
200
				end
201
				rangeTimer = TOOLTIP_UPDATE_TIME
202-
			self.flashtime = flashtime
202+
203
			self.rangeTimer2 = rangeTimer
204
		end)
205-
		local rangeTimer = self.rangeTimer
205+
206-
		if (rangeTimer) then
206+
207
	self.SetupHooks = nil
208-
			if (rangeTimer <= 0.1) then
208+