comparison modules/VehicleExit.lua @ 159:799c6ea9da7b

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