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
|