annotate modules/VehicleExit.lua @ 222:d08a74e86c96

un-namespace totem, pet, stance, vehicle exit
author Flick <flickerstreak@gmail.com>
date Sun, 21 Nov 2010 14:42:38 -0800
parents e63aefb8a555
children c4b134512c50
rev   line source
flickerstreak@159 1 --[[
flickerstreak@159 2 ReAction Vehicle Exit button module
flickerstreak@159 3
flickerstreak@159 4 The button module implements a single button which you can use
flickerstreak@159 5 to exit a vehicle that doesn't have controls (replacement for
flickerstreak@159 6 MainMenuBarLeaveVehicleButton).
flickerstreak@159 7
flickerstreak@159 8 --]]
flickerstreak@159 9
flickerstreak@159 10 -- local imports
flickerstreak@175 11 local addonName, addonTable = ...
flickerstreak@175 12 local ReAction = addonTable.ReAction
flickerstreak@159 13 local L = ReAction.L
flickerstreak@159 14
flickerstreak@159 15 -- module declaration
flickerstreak@159 16 local moduleID = "VehicleExit"
flickerstreak@159 17 local module = ReAction:NewModule( moduleID )
flickerstreak@159 18
flickerstreak@159 19 -- Button class
flickerstreak@159 20 local Button = ReAction.Button.VehicleExit
flickerstreak@159 21
flickerstreak@159 22 -- module methods
flickerstreak@159 23 function module:OnInitialize()
flickerstreak@159 24 self.registered = { }
flickerstreak@159 25 self.buttons = { }
flickerstreak@159 26
flickerstreak@159 27 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions")
flickerstreak@159 28
flickerstreak@159 29 ReAction.RegisterCallback(self, "OnCreateBar")
flickerstreak@159 30 ReAction.RegisterCallback(self, "OnDestroyBar")
flickerstreak@159 31 ReAction.RegisterCallback(self, "OnRefreshBar")
flickerstreak@159 32 end
flickerstreak@159 33
flickerstreak@159 34 function module:OnEnable()
flickerstreak@218 35 ReAction:RegisterBarType(Button)
flickerstreak@159 36 end
flickerstreak@159 37
flickerstreak@159 38 function module:OnDisable()
flickerstreak@218 39 ReAction:UnregisterBarType(Button)
flickerstreak@159 40 end
flickerstreak@159 41
flickerstreak@159 42 function module:OnCreateBar(event, bar, name)
flickerstreak@159 43 if bar.config.type == moduleID then
flickerstreak@159 44 self:OnRefreshBar(event, bar, name)
flickerstreak@159 45 end
flickerstreak@159 46 end
flickerstreak@159 47
flickerstreak@159 48 function module:OnRefreshBar(event, bar, name)
flickerstreak@222 49 local config = bar:GetConfig()
flickerstreak@222 50 if config.type == moduleID then
flickerstreak@222 51 if not config.buttons then
flickerstreak@222 52 config.buttons = { }
flickerstreak@159 53 end
flickerstreak@222 54 local btnCfg = config.buttons
flickerstreak@222 55 btnCfg[1] = btnCfg[1] or { }
flickerstreak@159 56
flickerstreak@159 57 if self.buttons[bar] == nil then
flickerstreak@222 58 local success, r = pcall(Button.New, Button, 1, btnCfg[1], bar)
flickerstreak@159 59 if success and r then
flickerstreak@159 60 self.buttons[bar] = r
flickerstreak@159 61 bar:AddButton(1,r)
flickerstreak@159 62 end
flickerstreak@159 63 else
flickerstreak@159 64 self.buttons[bar]:Refresh()
flickerstreak@159 65 end
flickerstreak@159 66 bar:ClipNButtons(1)
flickerstreak@159 67 self:UpdateRegistration(bar)
flickerstreak@159 68 end
flickerstreak@159 69 end
flickerstreak@159 70
flickerstreak@159 71 function module:OnDestroyBar(event, bar, name)
flickerstreak@159 72 if self.buttons[bar] then
flickerstreak@159 73 self.buttons[bar]:Destroy()
flickerstreak@159 74 self.buttons[bar] = nil
flickerstreak@159 75 end
flickerstreak@159 76 end
flickerstreak@159 77
flickerstreak@159 78
flickerstreak@159 79 function module:UpdateRegistration(bar)
flickerstreak@159 80 -- auto show/hide when on a vehicle
flickerstreak@222 81 local config = bar:GetConfig()
flickerstreak@159 82 local f = bar:GetFrame()
flickerstreak@159 83 if config.withControls then
flickerstreak@159 84 if bar.vehicleExitStateRegistered then
flickerstreak@159 85 UnregisterStateDriver(f, "unitexists")
flickerstreak@159 86 bar.vehicleExitStateRegistered = false
flickerstreak@159 87 end
flickerstreak@159 88 bar:RegisterUnitWatch("vehicle",true)
flickerstreak@159 89 else
flickerstreak@159 90 bar:RegisterUnitWatch("vehicle",false)
flickerstreak@159 91 if not bar.vehicleExitStateRegistered then
flickerstreak@159 92 f:SetAttribute("unit","vehicle")
flickerstreak@165 93 RegisterStateDriver(f, "unitexists", "[target=vehicle,exists,novehicleui] show; hide") -- spoof onstate-unitexists
flickerstreak@159 94 bar.vehicleExitStateRegistered = true
flickerstreak@159 95 end
flickerstreak@159 96 end
flickerstreak@159 97 end
flickerstreak@159 98
flickerstreak@159 99 ---- Options ----
flickerstreak@159 100 local Handler = { }
flickerstreak@159 101 local meta = { __index = Handler }
flickerstreak@159 102
flickerstreak@159 103 function Handler:New(bar)
flickerstreak@159 104 return setmetatable(
flickerstreak@159 105 {
flickerstreak@159 106 bar = bar
flickerstreak@159 107 }, meta)
flickerstreak@159 108 end
flickerstreak@159 109
flickerstreak@159 110 function Handler:GetConfig()
flickerstreak@222 111 return self.bar:GetConfig()
flickerstreak@159 112 end
flickerstreak@159 113
flickerstreak@159 114 function Handler:GetPassengerOnly()
flickerstreak@159 115 return not self:GetConfig().withControls
flickerstreak@159 116 end
flickerstreak@159 117
flickerstreak@159 118 function Handler:SetPassengerOnly(info, value)
flickerstreak@159 119 self:GetConfig().withControls = not value
flickerstreak@159 120 module:UpdateRegistration(self.bar)
flickerstreak@159 121 end
flickerstreak@159 122
flickerstreak@159 123
flickerstreak@159 124 function module:GetBarOptions(bar)
flickerstreak@159 125 if bar.config.type == moduleID then
flickerstreak@159 126 return {
flickerstreak@159 127 type = "group",
flickerstreak@159 128 name = L["Exit Vehicle"],
flickerstreak@159 129 handler = Handler:New(bar),
flickerstreak@159 130 args = {
flickerstreak@159 131 passengerOnly = {
flickerstreak@159 132 name = L["Show only when passenger"],
flickerstreak@159 133 desc = L["Only show the button when riding as a passenger in a vehicle (no vehicle controls)"],
flickerstreak@159 134 order = 2,
flickerstreak@159 135 width = "double",
flickerstreak@159 136 type = "toggle",
flickerstreak@159 137 get = "GetPassengerOnly",
flickerstreak@159 138 set = "SetPassengerOnly",
flickerstreak@159 139 },
flickerstreak@159 140 }
flickerstreak@159 141 }
flickerstreak@159 142 end
flickerstreak@159 143 end
flickerstreak@159 144
flickerstreak@159 145