annotate modules/VehicleExit.lua @ 163:ab5c37989986

- totem bar now stores which page was selected across sessions - totem bar shouldn't be messed up if resized around on non-shaman toons now
author Flick <flickerstreak@gmail.com>
date Sat, 22 Aug 2009 00:12:44 +0000
parents 799c6ea9da7b
children 5257073138e8
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@159 11 local ReAction = ReAction
flickerstreak@159 12 local L = ReAction.L
flickerstreak@159 13
flickerstreak@159 14 ReAction:UpdateRevision("$Revision: 200 $")
flickerstreak@159 15
flickerstreak@159 16 -- module declaration
flickerstreak@159 17 local moduleID = "VehicleExit"
flickerstreak@159 18 local module = ReAction:NewModule( moduleID )
flickerstreak@159 19
flickerstreak@159 20 -- Button class
flickerstreak@159 21 local Button = ReAction.Button.VehicleExit
flickerstreak@159 22
flickerstreak@159 23 -- module methods
flickerstreak@159 24 function module:OnInitialize()
flickerstreak@159 25 self.db = ReAction.db:RegisterNamespace( moduleID,
flickerstreak@159 26 {
flickerstreak@159 27 profile = {
flickerstreak@159 28 buttons = { }
flickerstreak@159 29 }
flickerstreak@159 30 }
flickerstreak@159 31 )
flickerstreak@159 32 self.registered = { }
flickerstreak@159 33 self.buttons = { }
flickerstreak@159 34
flickerstreak@159 35 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions")
flickerstreak@159 36
flickerstreak@159 37 ReAction.RegisterCallback(self, "OnCreateBar")
flickerstreak@159 38 ReAction.RegisterCallback(self, "OnDestroyBar")
flickerstreak@159 39 ReAction.RegisterCallback(self, "OnRefreshBar")
flickerstreak@159 40 ReAction.RegisterCallback(self, "OnEraseBar")
flickerstreak@159 41 ReAction.RegisterCallback(self, "OnRenameBar")
flickerstreak@159 42 end
flickerstreak@159 43
flickerstreak@159 44 function module:OnEnable()
flickerstreak@159 45 ReAction:RegisterBarType(L["Exit Vehicle Floater"],
flickerstreak@159 46 {
flickerstreak@159 47 type = moduleID ,
flickerstreak@159 48 defaultButtonSize = 36,
flickerstreak@159 49 defaultBarRows = 1,
flickerstreak@159 50 defaultBarCols = 1,
flickerstreak@159 51 defaultBarSpacing = 3
flickerstreak@159 52 })
flickerstreak@159 53 end
flickerstreak@159 54
flickerstreak@159 55 function module:OnDisable()
flickerstreak@159 56 ReAction:UnregisterBarType(L["Exit Vehicle Floater"])
flickerstreak@159 57 end
flickerstreak@159 58
flickerstreak@159 59 function module:OnCreateBar(event, bar, name)
flickerstreak@159 60 if bar.config.type == moduleID then
flickerstreak@159 61 self:OnRefreshBar(event, bar, name)
flickerstreak@159 62 end
flickerstreak@159 63 end
flickerstreak@159 64
flickerstreak@159 65 function module:OnRefreshBar(event, bar, name)
flickerstreak@159 66 if bar.config.type == moduleID then
flickerstreak@159 67 local profile = self.db.profile
flickerstreak@159 68 if profile.buttons[name] == nil then
flickerstreak@159 69 profile.buttons[name] = {}
flickerstreak@159 70 end
flickerstreak@159 71 local btnCfg = profile.buttons[name]
flickerstreak@159 72
flickerstreak@159 73 if profile.buttons[name] == nil then
flickerstreak@159 74 profile.buttons[name] = { }
flickerstreak@159 75 end
flickerstreak@159 76 if self.buttons[bar] == nil then
flickerstreak@159 77 local success, r = pcall(Button.New, Button, 1, profile.buttons[name], bar)
flickerstreak@159 78 if success and r then
flickerstreak@159 79 self.buttons[bar] = r
flickerstreak@159 80 bar:AddButton(1,r)
flickerstreak@159 81 end
flickerstreak@159 82 else
flickerstreak@159 83 self.buttons[bar]:Refresh()
flickerstreak@159 84 end
flickerstreak@159 85 bar:ClipNButtons(1)
flickerstreak@159 86 self:UpdateRegistration(bar)
flickerstreak@159 87 end
flickerstreak@159 88 end
flickerstreak@159 89
flickerstreak@159 90 function module:OnDestroyBar(event, bar, name)
flickerstreak@159 91 if self.buttons[bar] then
flickerstreak@159 92 self.buttons[bar]:Destroy()
flickerstreak@159 93 self.buttons[bar] = nil
flickerstreak@159 94 end
flickerstreak@159 95 end
flickerstreak@159 96
flickerstreak@159 97 function module:OnEraseBar(event, bar, name)
flickerstreak@159 98 self.db.profile.buttons[name] = nil
flickerstreak@159 99 end
flickerstreak@159 100
flickerstreak@159 101 function module:OnRenameBar(event, bar, oldname, newname)
flickerstreak@159 102 local b = self.db.profile.buttons
flickerstreak@159 103 b[newname], b[oldname] = b[oldname], nil
flickerstreak@159 104 end
flickerstreak@159 105
flickerstreak@159 106
flickerstreak@159 107 function module:UpdateRegistration(bar)
flickerstreak@159 108 -- auto show/hide when on a vehicle
flickerstreak@159 109 local config = self.db.profile.buttons[bar:GetName()]
flickerstreak@159 110 local f = bar:GetFrame()
flickerstreak@159 111 if config.withControls then
flickerstreak@159 112 if bar.vehicleExitStateRegistered then
flickerstreak@159 113 UnregisterStateDriver(f, "unitexists")
flickerstreak@159 114 bar.vehicleExitStateRegistered = false
flickerstreak@159 115 end
flickerstreak@159 116 bar:RegisterUnitWatch("vehicle",true)
flickerstreak@159 117 else
flickerstreak@159 118 bar:RegisterUnitWatch("vehicle",false)
flickerstreak@159 119 if not bar.vehicleExitStateRegistered then
flickerstreak@159 120 f:SetAttribute("unit","vehicle")
flickerstreak@159 121 RegisterStateDriver(f, "unitexists", "[target=vehicle,exists,nobonusbar:5] show; hide") -- spoof onstate-unitexists
flickerstreak@159 122 bar.vehicleExitStateRegistered = true
flickerstreak@159 123 end
flickerstreak@159 124 end
flickerstreak@159 125 end
flickerstreak@159 126
flickerstreak@159 127 ---- Options ----
flickerstreak@159 128 local Handler = { }
flickerstreak@159 129 local meta = { __index = Handler }
flickerstreak@159 130
flickerstreak@159 131 function Handler:New(bar)
flickerstreak@159 132 return setmetatable(
flickerstreak@159 133 {
flickerstreak@159 134 bar = bar
flickerstreak@159 135 }, meta)
flickerstreak@159 136 end
flickerstreak@159 137
flickerstreak@159 138 function Handler:GetConfig()
flickerstreak@159 139 return module.db.profile.buttons[self.bar:GetName()]
flickerstreak@159 140 end
flickerstreak@159 141
flickerstreak@159 142 function Handler:GetPassengerOnly()
flickerstreak@159 143 return not self:GetConfig().withControls
flickerstreak@159 144 end
flickerstreak@159 145
flickerstreak@159 146 function Handler:SetPassengerOnly(info, value)
flickerstreak@159 147 self:GetConfig().withControls = not value
flickerstreak@159 148 module:UpdateRegistration(self.bar)
flickerstreak@159 149 end
flickerstreak@159 150
flickerstreak@159 151
flickerstreak@159 152 function module:GetBarOptions(bar)
flickerstreak@159 153 if bar.config.type == moduleID then
flickerstreak@159 154 return {
flickerstreak@159 155 type = "group",
flickerstreak@159 156 name = L["Exit Vehicle"],
flickerstreak@159 157 handler = Handler:New(bar),
flickerstreak@159 158 args = {
flickerstreak@159 159 passengerOnly = {
flickerstreak@159 160 name = L["Show only when passenger"],
flickerstreak@159 161 desc = L["Only show the button when riding as a passenger in a vehicle (no vehicle controls)"],
flickerstreak@159 162 order = 2,
flickerstreak@159 163 width = "double",
flickerstreak@159 164 type = "toggle",
flickerstreak@159 165 get = "GetPassengerOnly",
flickerstreak@159 166 set = "SetPassengerOnly",
flickerstreak@159 167 },
flickerstreak@159 168 }
flickerstreak@159 169 }
flickerstreak@159 170 end
flickerstreak@159 171 end
flickerstreak@159 172
flickerstreak@159 173