Quantcast

Add ability to change spec from bar

MilleXIV [07-25-16 - 21:37]
Add ability to change spec from bar
Filename
modules/talent.lua
diff --git a/modules/talent.lua b/modules/talent.lua
index 8117c75..f9f0fce 100644
--- a/modules/talent.lua
+++ b/modules/talent.lua
@@ -63,6 +63,37 @@ lootSpectBG:SetColorTexture(unpack(cfg.color.barcolor))
 globalLootSpecFrame = lootSpecFrame

 ---------------------------------------------
+-- SPEC CHANGE FRAME
+---------------------------------------------
+local specFrame = CreateFrame("BUTTON",'SX_SpecFrame', talentFrame)
+if cfg.core.position ~= "BOTTOM" then
+	specFrame:SetPoint("TOP", talentFrame, "BOTTOM", 0,-6)
+else
+	specFrame:SetPoint("BOTTOM", talentFrame, "TOP", 0,8)
+end
+specFrame:RegisterForClicks("AnyUp")
+specFrame:Hide()
+specFrame:EnableMouse(true)
+
+specFrame:SetScript("OnClick", function(self, button, down)
+	if InCombatLockdown() then return end
+	if button == "RightButton" then
+		specFrame:Hide()
+	end
+end)
+
+local specText = specFrame:CreateFontString(nil, "OVERLAY")
+specText:SetFont(cfg.text.font, cfg.text.normalFontSize)
+specText:SetPoint("TOP")
+specText:SetText("SET SPECIALIZATION")
+specText:SetTextColor(unpack(cfg.color.normal))
+
+local specBG = specFrame:CreateTexture(nil,"OVERLAY",nil,7)
+specBG:SetPoint("TOP")
+specBG:SetColorTexture(unpack(cfg.color.barcolor))
+globalSpecFrame = specFrame
+
+---------------------------------------------
 -- PRIMARY SPEC FRAME
 ---------------------------------------------

@@ -90,10 +121,9 @@ primarySpecFrame:SetScript("OnEnter", function()
 	lootspecid = GetLootSpecialization()
 	if lootspecid == 0 then lootspecid = currentSpecID end
 	id, name = GetSpecializationInfoByID(lootspecid)
-	if currentSpecID ~= id then
-		GameTooltip:AddLine("|cffffffffLoot is currently set to |cffffff00"..name.."|cffffffff spec")
-		GameTooltip:AddDoubleLine("<Right-Click>", "Change lootspec", 1, 1, 0, 1, 1, 1)
-	end
+	GameTooltip:AddLine("|cffffffffLoot is currently set to |cffffff00"..name.."|cffffffff spec")
+	GameTooltip:AddDoubleLine("<Left-Click>", "Change spec", 1, 1, 0, 1, 1, 1)
+	GameTooltip:AddDoubleLine("<Right-Click>", "Change lootspec", 1, 1, 0, 1, 1, 1)
 	primarySpecIcon:SetVertexColor(unpack(cfg.color.hover))
 	GameTooltip:Show()
 end)
@@ -110,11 +140,21 @@ end)
 primarySpecFrame:SetScript("OnClick", function(self, button, down)
 	if InCombatLockdown() then return end
 	if button == "LeftButton" then
-		ToggleTalentFrame(1)
+		if globalSpecFrame:IsShown() then
+			globalSpecFrame:Hide()
+		else
+			if globalLootSpecFrame:IsShown() then
+				globalLootSpecFrame:Hide()
+			end
+			globalSpecFrame:Show()
+		end
 	elseif button == "RightButton" then
 		if globalLootSpecFrame:IsShown() then
 			globalLootSpecFrame:Hide()
 		else
+			if globalSpecFrame:IsShown() then
+				globalSpecFrame:Hide()
+			end
 			globalLootSpecFrame:Show()
 		end
 	end
@@ -173,10 +213,14 @@ for index = 1,4 do
 		lootSpecButton:SetScript("OnClick", function(self, button, down)
 			if InCombatLockdown() then return end
 			if button == "LeftButton" then
-				local id = GetSpecializationInfo(index)
-				SetLootSpecialization(id)
-				lootSpecbuttonText:SetTextColor(unpack(cfg.color.normal))
-				lootSpecbuttonIcon:SetVertexColor(unpack(cfg.color.normal))
+				if IsShiftKeyDown() then
+					SetSpecialization(index)
+				else
+					local id = GetSpecializationInfo(index)
+					SetLootSpecialization(id)
+					lootSpecbuttonText:SetTextColor(unpack(cfg.color.normal))
+					lootSpecbuttonIcon:SetVertexColor(unpack(cfg.color.normal))
+				end
 				lootSpecFrame:Hide()
 			elseif button == "RightButton" then
 				lootSpecFrame:Hide()
@@ -186,6 +230,70 @@ for index = 1,4 do
 end
 end

+---------------------------------------------------------------------
+
+local function createSpecButtons()
+	local curSpec = GetSpecialization()
+	for index = 1,GetNumSpecializations() do
+		local id, name = GetSpecializationInfo(index)
+		if ( name ) then
+			specFrame:SetSize(specText:GetStringWidth()+16, (index+1)*18)
+			specBG:SetSize(specFrame:GetSize())
+			currentSpecID, currentSpecName = GetSpecializationInfo(index)
+
+			local specButton = CreateFrame("BUTTON",nil, specFrame)
+			specButton:SetPoint("TOPLEFT", specText, 0, index*-18)
+			specButton:SetSize(16, 16)
+			specButton:EnableMouse(true)
+			specButton:RegisterForClicks("AnyUp")
+
+			local specButtonText = specButton:CreateFontString(nil, "OVERLAY")
+			specButtonText:SetFont(cfg.text.font, cfg.text.smallFontSize)
+			specButtonText:SetPoint("RIGHT")
+			if currentSpecName then currentSpecName = string.upper(currentSpecName) end
+			specButtonText:SetText(currentSpecName)
+
+			local specButtonIcon = specButton:CreateTexture(nil,"OVERLAY",nil,7)
+			specButtonIcon:SetSize(16, 16)
+			specButtonIcon:SetPoint("LEFT")
+			specButtonIcon:SetTexture(cfg.mediaFolder.."spec\\"..cfg.CLASS)
+			specButtonIcon:SetTexCoord(unpack(cfg.specCoords[index]))
+
+			--local id = GetSpecializationInfo(index)
+			if GetSpecialization() == index then
+				specButtonText:SetTextColor(unpack(cfg.color.normal))
+				specButtonIcon:SetVertexColor(unpack(cfg.color.normal))
+			else
+				specButtonText:SetTextColor(unpack(cfg.color.inactive))
+				specButtonIcon:SetVertexColor(unpack(cfg.color.inactive))
+			end
+			specButton:SetSize(specButtonText:GetStringWidth()+18,16)
+
+			specButton:SetScript("OnEnter", function() if InCombatLockdown() then return end specButtonIcon:SetVertexColor(unpack(cfg.color.hover)) end)
+			specButton:SetScript("OnLeave", function()
+				local id = GetSpecializationInfo(index)
+				if GetSpecialization() == id then
+					specButtonText:SetTextColor(unpack(cfg.color.normal))
+					specButtonIcon:SetVertexColor(unpack(cfg.color.normal))
+				else
+					specButtonText:SetTextColor(unpack(cfg.color.inactive))
+					specButtonIcon:SetVertexColor(unpack(cfg.color.inactive))
+				end
+			end)
+
+			specButton:SetScript("OnClick", function(self, button, down)
+				if InCombatLockdown() then return end
+				if button == "LeftButton" then
+					SetSpecialization(index)
+					specFrame:Hide()
+				elseif button == "RightButton" then
+					specFrame:Hide()
+				end
+			end)
+		end
+	end
+end
+
 ---------------------------------------------
 -- EVENTS
 ---------------------------------------------
@@ -199,12 +307,16 @@ eventframe:RegisterEvent("PLAYER_REGEN_DISABLED")

 eventframe:SetScript("OnEvent", function(self,event, ...)
 	if event == ("PLAYER_ENTERING_WORLD") then
-	createLootSpecButtons()
+		createSpecButtons()
+		createLootSpecButtons()
 	end
 	if event == ("PLAYER_REGEN_DISABLED") then
 		if lootSpecFrame:IsShown() then
 			lootSpecFrame:Hide()
 		end
+		if specFrame:IsShown() then
+			specFrame:Hide()
+		end
 	end

 	local primarySpec = GetSpecialization(false, false, 1)