| 
Flick@276
 | 
     1 local _, ns = ...
 | 
| 
Flick@276
 | 
     2 local ReAction = ns.ReAction
 | 
| 
flickerstreak@218
 | 
     3 local L = ReAction.L
 | 
| 
flickerstreak@159
 | 
     4 local format = string.format
 | 
| 
flickerstreak@159
 | 
     5 
 | 
| 
flickerstreak@159
 | 
     6 --
 | 
| 
flickerstreak@159
 | 
     7 -- VExitButton Button class
 | 
| 
flickerstreak@159
 | 
     8 --
 | 
| 
flickerstreak@218
 | 
     9 local buttonTypeID = "VehicleExit"
 | 
| 
flickerstreak@159
 | 
    10 local Super = ReAction.Button
 | 
| 
flickerstreak@218
 | 
    11 local VExitButton = setmetatable(
 | 
| 
flickerstreak@218
 | 
    12   { 
 | 
| 
flickerstreak@218
 | 
    13     defaultBarConfig = { 
 | 
| 
flickerstreak@218
 | 
    14       type = buttonTypeID ,
 | 
| 
flickerstreak@218
 | 
    15       btnWidth = 36,
 | 
| 
flickerstreak@218
 | 
    16       btnHeight = 36,
 | 
| 
flickerstreak@218
 | 
    17       btnRows = 1,
 | 
| 
flickerstreak@218
 | 
    18       btnColumns = 1,
 | 
| 
flickerstreak@222
 | 
    19       spacing = 3,
 | 
| 
flickerstreak@222
 | 
    20       buttons = { }
 | 
| 
flickerstreak@218
 | 
    21     },
 | 
| 
flickerstreak@218
 | 
    22 
 | 
| 
flickerstreak@218
 | 
    23     barType = L["Exit Vehicle Floater"], 
 | 
| 
Flick@231
 | 
    24     buttonTypeID = buttonTypeID
 | 
| 
flickerstreak@218
 | 
    25   }, 
 | 
| 
flickerstreak@218
 | 
    26   { __index = Super } )
 | 
| 
flickerstreak@223
 | 
    27 
 | 
| 
flickerstreak@159
 | 
    28 ReAction.Button.VehicleExit = VExitButton
 | 
| 
flickerstreak@223
 | 
    29 ReAction:RegisterBarType(VExitButton)
 | 
| 
flickerstreak@159
 | 
    30 
 | 
| 
Flick@299
 | 
    31 function VExitButton:New( config, bar, idx, idHint )
 | 
| 
Flick@277
 | 
    32   self = Super.New(self, config, bar, idx, "SecureFrameTemplate, ActionButtonTemplate", "Button")
 | 
| 
flickerstreak@159
 | 
    33 
 | 
| 
flickerstreak@159
 | 
    34   -- frame setup
 | 
| 
flickerstreak@159
 | 
    35   local f = self:GetFrame()
 | 
| 
flickerstreak@159
 | 
    36   self.frames.icon:SetTexture("Interface\\Vehicles\\UI-Vehicles-Button-Exit-Up")
 | 
| 
flickerstreak@159
 | 
    37   self.frames.icon:SetTexCoord(0.140625, 0.859375, 0.140625, 0.859375)
 | 
| 
flickerstreak@159
 | 
    38 
 | 
| 
Flick@299
 | 
    39   self:SetActionIDPool("vehicle-exit",1)
 | 
| 
Flick@299
 | 
    40   self:AcquireActionID(nil, idHint, true)
 | 
| 
Flick@299
 | 
    41 
 | 
| 
flickerstreak@159
 | 
    42   -- attribute setup
 | 
| 
flickerstreak@159
 | 
    43   -- (none)
 | 
| 
flickerstreak@159
 | 
    44 
 | 
| 
flickerstreak@159
 | 
    45   -- non secure scripts
 | 
| 
flickerstreak@159
 | 
    46   f:SetScript("OnClick", VehicleExit)
 | 
| 
flickerstreak@159
 | 
    47   f:SetScript("OnEnter", function(frame) GameTooltip_AddNewbieTip(frame, LEAVE_VEHICLE, 1.0, 1.0, 1.0, nil) end)
 | 
| 
flickerstreak@159
 | 
    48   f:SetScript("OnLeave", GameTooltip_Hide)
 | 
| 
flickerstreak@159
 | 
    49   f:SetScript("OnEvent", function(frame, evt, ...) self:OnEvent(evt,...) end)
 | 
| 
flickerstreak@159
 | 
    50 
 | 
| 
flickerstreak@159
 | 
    51   -- event registration
 | 
| 
flickerstreak@159
 | 
    52   f:RegisterEvent("UPDATE_BINDINGS")
 | 
| 
flickerstreak@159
 | 
    53 
 | 
| 
flickerstreak@159
 | 
    54   -- attach to skinner
 | 
| 
flickerstreak@159
 | 
    55   bar:SkinButton(self)
 | 
| 
flickerstreak@159
 | 
    56 
 | 
| 
flickerstreak@159
 | 
    57   self:Refresh()
 | 
| 
flickerstreak@159
 | 
    58   self:UpdateHotkey()
 | 
| 
flickerstreak@159
 | 
    59 
 | 
| 
flickerstreak@159
 | 
    60   return self
 | 
| 
flickerstreak@159
 | 
    61 end
 | 
| 
flickerstreak@159
 | 
    62 
 | 
| 
Flick@234
 | 
    63 function VExitButton:SetupBar(bar)
 | 
| 
Flick@234
 | 
    64   Super.SetupBar(self,bar)
 | 
| 
Flick@234
 | 
    65   self:UpdateRegistration(bar)
 | 
| 
Flick@234
 | 
    66 end
 | 
| 
Flick@234
 | 
    67 
 | 
| 
flickerstreak@159
 | 
    68 function VExitButton:GetActionID()
 | 
| 
flickerstreak@159
 | 
    69   return 1
 | 
| 
flickerstreak@159
 | 
    70 end
 | 
| 
flickerstreak@159
 | 
    71 
 | 
| 
flickerstreak@159
 | 
    72 function VExitButton:Refresh()
 | 
| 
flickerstreak@159
 | 
    73   Super.Refresh(self)
 | 
| 
flickerstreak@159
 | 
    74   -- it seems that setscale kills the texcoord, have to refresh it
 | 
| 
flickerstreak@159
 | 
    75   self.frames.icon:SetTexCoord(0.140625, 0.859375, 0.140625, 0.859375) 
 | 
| 
flickerstreak@159
 | 
    76 end
 | 
| 
flickerstreak@159
 | 
    77 
 | 
| 
flickerstreak@159
 | 
    78 function VExitButton:OnEvent(event, ...)
 | 
| 
flickerstreak@159
 | 
    79   if self[event] then
 | 
| 
flickerstreak@159
 | 
    80     self[event](self, event, ...)
 | 
| 
flickerstreak@159
 | 
    81   end
 | 
| 
flickerstreak@159
 | 
    82 end
 | 
| 
flickerstreak@159
 | 
    83 
 | 
| 
flickerstreak@159
 | 
    84 function VExitButton:UPDATE_BINDINGS()
 | 
| 
flickerstreak@159
 | 
    85   self:UpdateHotkey()
 | 
| 
flickerstreak@159
 | 
    86 end
 | 
| 
Flick@234
 | 
    87 
 | 
| 
Flick@234
 | 
    88 function VExitButton:UpdateRegistration(bar)
 | 
| 
Flick@234
 | 
    89   -- auto show/hide when on a vehicle
 | 
| 
Flick@234
 | 
    90   local config = bar:GetConfig()
 | 
| 
Flick@234
 | 
    91   local f = bar:GetFrame()
 | 
| 
Flick@279
 | 
    92   if config.withControls or ReAction:GetConfigMode() then
 | 
| 
Flick@234
 | 
    93     if bar.vehicleExitStateRegistered then
 | 
| 
Flick@234
 | 
    94       UnregisterStateDriver(f, "unitexists")
 | 
| 
Flick@234
 | 
    95       bar.vehicleExitStateRegistered = false
 | 
| 
Flick@234
 | 
    96     end
 | 
| 
Flick@279
 | 
    97     bar:RegisterUnitWatch("vehicle",not ReAction:GetConfigMode())
 | 
| 
Flick@234
 | 
    98   else
 | 
| 
Flick@234
 | 
    99     bar:RegisterUnitWatch("vehicle",false)
 | 
| 
Flick@234
 | 
   100     if not bar.vehicleExitStateRegistered then
 | 
| 
Flick@234
 | 
   101       f:SetAttribute("unit","vehicle")
 | 
| 
Flick@234
 | 
   102       RegisterStateDriver(f, "unitexists", "[target=vehicle,exists,novehicleui] show; hide") -- spoof onstate-unitexists
 | 
| 
Flick@234
 | 
   103       bar.vehicleExitStateRegistered = true
 | 
| 
Flick@234
 | 
   104     end
 | 
| 
Flick@234
 | 
   105   end
 | 
| 
Flick@234
 | 
   106 end
 | 
| 
Flick@234
 | 
   107 
 |