diff classes/VehicleExitButton.lua @ 234:0e20f65375d5

Reworked button creation to not use goofy event driven semantics.
author Flick
date Tue, 22 Mar 2011 17:05:51 -0700
parents 158c9299185b
children
line wrap: on
line diff
--- a/classes/VehicleExitButton.lua	Tue Mar 22 11:48:09 2011 -0700
+++ b/classes/VehicleExitButton.lua	Tue Mar 22 17:05:51 2011 -0700
@@ -28,7 +28,7 @@
 ReAction.Button.VehicleExit = VExitButton
 ReAction:RegisterBarType(VExitButton)
 
-function VExitButton:New( idx, config, bar )
+function VExitButton:New( config, bar, idx )
   local name = format("ReAction_%s_VehicleExit_%d",bar:GetName(),idx)
  
   self = Super.New(self, name, config, bar, idx, "SecureFrameTemplate, ActionButtonTemplate", "Button")
@@ -61,6 +61,11 @@
   return self
 end
 
+function VExitButton:SetupBar(bar)
+  Super.SetupBar(self,bar)
+  self:UpdateRegistration(bar)
+end
+
 function VExitButton:GetActionID()
   return 1
 end
@@ -80,3 +85,24 @@
 function VExitButton:UPDATE_BINDINGS()
   self:UpdateHotkey()
 end
+
+function VExitButton:UpdateRegistration(bar)
+  -- auto show/hide when on a vehicle
+  local config = bar:GetConfig()
+  local f = bar:GetFrame()
+  if config.withControls then
+    if bar.vehicleExitStateRegistered then
+      UnregisterStateDriver(f, "unitexists")
+      bar.vehicleExitStateRegistered = false
+    end
+    bar:RegisterUnitWatch("vehicle",true)
+  else
+    bar:RegisterUnitWatch("vehicle",false)
+    if not bar.vehicleExitStateRegistered then
+      f:SetAttribute("unit","vehicle")
+      RegisterStateDriver(f, "unitexists", "[target=vehicle,exists,novehicleui] show; hide") -- spoof onstate-unitexists
+      bar.vehicleExitStateRegistered = true
+    end
+  end
+end
+