Quantcast

Redo vehicle bar.

Michael Tindal [02-24-14 - 23:42]
Redo vehicle bar.
Filename
ElvUI_SLE/modules/vehicle/vehicle.lua
diff --git a/ElvUI_SLE/modules/vehicle/vehicle.lua b/ElvUI_SLE/modules/vehicle/vehicle.lua
index e8b7882..aa90769 100755
--- a/ElvUI_SLE/modules/vehicle/vehicle.lua
+++ b/ElvUI_SLE/modules/vehicle/vehicle.lua
@@ -1,6 +1,7 @@
 local E, L, V, P, G = unpack(ElvUI);
 local EVB = E:NewModule("EnhancedVehicleBar");
 local AB = E:GetModule("ActionBars");
+local LAB = LibStub("LibActionButton-1.0")

 -- Regular Button for these bars are 52. 52 * .71 = ~37.. I just rounded it up to 40 and called it good.
 function EVB:Animate(bar, x, y, duration)
@@ -42,42 +43,44 @@ function EVB:AnimSlideOut(bar)
 	bar.anim.out1:Play()
 end

-function EVB:CreateExtraButtonSet(type, page, visibility)
-	local barFrame = self.barFrame
-	barFrame[type] = {}
-	for i = 1, 6 do
-		barFrame[type]['Button'..i] = CreateFrame('CheckButton', 'ElvUISLEEnhancedVehicleBar_'..type..i, barFrame, 'ActionBarButtonTemplate')
-		barFrame[type]['Button'..i]:Size(self.size)
-		barFrame[type]['Button'..i]:SetID(i)
-		barFrame[type]['Button'..i]:SetAttribute('actionpage', page)
-		barFrame[type]['Button'..i]:SetAttribute('action', i)
-		E:RegisterCooldown(barFrame[type]['Button'..i].cooldown)
-		AB:StyleButton(barFrame[type]['Button'..i]);
-		RegisterStateDriver(barFrame[type]['Button'..i], 'visibility', '[petbattle] hide; '..visibility)
+function EVB:CreateExtraButtonSet()
+	local bar = self.bar
+	bar.buttons = {}
+	for i = 1, 7 do
+		i = i == 7 and 12 or i
+
+		bar.buttons[i] = LAB:CreateButton(i, format(bar:GetName().."Button%d", i), bar, nil);
+		bar.buttons[i]:SetState(0, "action", i);
+
+		for k = 1, 14 do
+			bar.buttons[i]:SetState(k, "action", (k - 1) * 12 + i)
+		end
+
+		if i == 12 then
+			bar.buttons[i]:SetState(12, "custom", AB.customExitButton)
+		end
+
+		bar.buttons[i]:Size(self.size);

 		if (i == 1) then
-			barFrame[type]['Button'..i]:SetPoint('BOTTOMLEFT', self.spacing, self.spacing)
+			bar.buttons[i]:SetPoint('BOTTOMLEFT', self.spacing, self.spacing)
 		else
-			local prev = barFrame[type]['Button'..i-1]
-			barFrame[type]['Button'..i]:SetPoint('LEFT', prev, 'RIGHT', self.spacing, 0)
+			local prev = i == 12 and bar.buttons[6] or bar.buttons[i-1];
+			bar.buttons[i]:SetPoint('LEFT', prev, 'RIGHT', self.spacing, 0)
 		end
+
+		AB:StyleButton(bar.buttons[i]);
+		RegisterStateDriver(bar.buttons[i], 'visibility', '[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] show; hide')
+
 	end
-	barFrame[type]['Button7'] = CreateFrame('Button', 'ElvUISLEEnhancedVehicleBar_'..type..'7', barFrame, 'SecureHandlerClickTemplate')
-	barFrame[type]['Button7']:Size(self.size)
-	barFrame[type]['Button7'].Icon = barFrame[type]['Button7']:CreateTexture(nil, 'ARTWORK')
-	barFrame[type]['Button7'].Icon:SetTexture("Interface\\Icons\\Achievement_BG_returnXflags_def_WSG")
-	barFrame[type]['Button7'].Icon:SetTexCoord(unpack(E.TexCoords))
-	barFrame[type]['Button7'].Icon:SetInside()
-	barFrame[type]['Button7']:SetTemplate("Default")
-	barFrame[type]['Button7']:SetScript("OnClick", VehicleExit)
-	barFrame[type]['Button7']:StyleButton()
-	RegisterStateDriver(barFrame[type]['Button7'], 'visibility', '[petbattle] hide; '..visibility)
-	barFrame[type]['Button7']:SetPoint('LEFT', barFrame[type]['Button6'], 'RIGHT', self.spacing, 0)
 end
+
 function EVB:Initialize()
 	if (not E.private.sle.vehicle.enable) then return end;

 	local visibility = "[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] hide; show"
+	local page = format("[vehicleui] %d; [possessbar] %d; [overridebar] %d; [shapeshift] 13;", GetVehicleBarIndex(), GetVehicleBarIndex(), GetOverrideBarIndex());
+	local bindButtons = "ACTIONBUTTON";

 	hooksecurefunc(AB, "PositionAndSizeBar", function(self, barName)
 		local bar = self["handledBars"][barName]
@@ -89,29 +92,49 @@ function EVB:Initialize()

 	local size = 40;
 	local spacing = E:Scale(AB.db["bar1"].buttonspacing);
-	local barFrame = CreateFrame("Frame", "ElvUISLEEnhancedVehicleBar", UIParent, "SecureHandlerStateTemplate");
+	local bar = CreateFrame("Frame", "ElvUISLEEnhancedVehicleBar", UIParent, "SecureHandlerStateTemplate");

 	self.size = size;
 	self.spacing = spacing;

-	barFrame:SetWidth((size * 7) + (spacing * 8));
-	barFrame:SetHeight(size + (spacing * 2));
-	barFrame:SetTemplate("Transparent");
-	barFrame:CreateShadow();
+	bar:SetWidth((size * 7) + (spacing * 8));
+	bar:SetHeight(size + (spacing * 2));
+	bar:SetTemplate("Transparent");
+	bar:CreateShadow();
 	if (E:GetModule("EnhancedShadows", true)) then
-		E:GetModule("EnhancedShadows"):RegisterShadow(barFrame.shadow);
+		E:GetModule("EnhancedShadows"):RegisterShadow(bar.shadow);
 	end

-	barFrame:SetPoint("BOTTOM", 0, 34);
-	barFrame:HookScript("OnShow", function(frame) self:AnimSlideIn(frame) end);
-	RegisterStateDriver(barFrame, 'visibility', '[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] show; hide');
-	self:Animate(barFrame, 0, -(barFrame:GetHeight()), 1);
+	bar:SetPoint("BOTTOM", 0, 34);
+	bar:HookScript("OnShow", function(frame) self:AnimSlideIn(frame) end);
+	RegisterStateDriver(bar, 'visibility', '[petbattle] hide; [vehicleui][overridebar][shapeshift][possessbar] show; hide');
+	RegisterStateDriver(bar, 'page', page);
+
+	bar:SetAttribute("_onstate-page", [[
+		if HasTempShapeshiftActionBar() and self:GetAttribute("hasTempBar") then
+			newstate = GetTempShapeshiftBarIndex() or newstate
+		end
+
+		if newstate ~= 0 then
+			self:SetAttribute("state", newstate)
+			control:ChildUpdate("state", newstate)
+		else
+			local newCondition = self:GetAttribute("newCondition")
+			if newCondition then
+				newstate = SecureCmdOptionParse(newCondition)
+				self:SetAttribute("state", newstate)
+				control:ChildUpdate("state", newstate)
+			end
+		end
+	]]);
+
+	self:Animate(bar, 0, -(bar:GetHeight()), 1);
+
+	self.bar = bar;

-	self.barFrame = barFrame;
+	self:CreateExtraButtonSet();

-	self:CreateExtraButtonSet('vehicle', 12, '[vehicleui][possessbar] show; hide')
-	self:CreateExtraButtonSet('shapeshift', 13, '[shapeshift] show; hide')
-	self:CreateExtraButtonSet('override', 14, '[overridebar] show; hide')
+	AB:UpdateButtonConfig(bar, bindButtons);
 end

 E:RegisterModule(EVB:GetName())
\ No newline at end of file