Flick@299
|
1 local _, ns = ...
|
Flick@299
|
2 local ReAction = ns.ReAction
|
Flick@299
|
3 local L = ReAction.L
|
Flick@299
|
4 local format = string.format
|
Flick@299
|
5
|
Flick@299
|
6 --
|
Flick@299
|
7 -- ExtraAction Button class
|
Flick@299
|
8 --
|
Flick@299
|
9 local buttonTypeID = "ExtraAction"
|
Flick@299
|
10 local Super = ReAction.Button.Action
|
Flick@299
|
11 local ExtraAction = setmetatable(
|
Flick@299
|
12 {
|
Flick@299
|
13 defaultBarConfig = {
|
Flick@299
|
14 type = buttonTypeID ,
|
Flick@299
|
15 btnWidth = 52,
|
Flick@299
|
16 btnHeight = 52,
|
Flick@299
|
17 btnRows = 1,
|
Flick@299
|
18 btnColumns = 1,
|
Flick@299
|
19 spacing = 3,
|
Flick@299
|
20 buttons = { }
|
Flick@299
|
21 },
|
Flick@299
|
22
|
Flick@299
|
23 barType = L["Special Action Button"],
|
Flick@299
|
24 buttonTypeID = buttonTypeID
|
Flick@299
|
25 },
|
Flick@299
|
26 { __index = Super } )
|
Flick@299
|
27
|
Flick@299
|
28 ReAction.Button.ExtraAction = ExtraAction
|
Flick@299
|
29 ReAction:RegisterBarType(ExtraAction)
|
Flick@299
|
30
|
Flick@299
|
31 function ExtraAction:New( config, bar, idx, idHint )
|
Flick@299
|
32 -- don't invoke the base ActionButton constructor, since it does a bunch of stuff that
|
Flick@299
|
33 -- we don't need. Instead, call the Button base constructor directly instead and
|
Flick@299
|
34 -- re-implement the bits of the ActionButton constructor that we actually need.
|
Flick@299
|
35 self = ReAction.Button.New(self, config, bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" )
|
Flick@299
|
36
|
Flick@299
|
37 self.barConfig = bar:GetConfig()
|
Flick@299
|
38
|
Flick@299
|
39 local f = self:GetFrame()
|
Flick@299
|
40 local barFrame = bar:GetFrame()
|
Flick@299
|
41
|
Flick@299
|
42 self.rangeTimer = TOOLTIP_UPDATE_TIME
|
Flick@299
|
43
|
Flick@299
|
44 self:SetActionIDPool("special-action",1)
|
Flick@299
|
45 config.actionID = self:AcquireActionID(config.actionID, idHint, true)
|
Flick@299
|
46 self.nPages = 1
|
Flick@299
|
47
|
Flick@299
|
48 -- compute the actual game action-ID from the extra bar offset page
|
Flick@299
|
49 local actionID = config.actionID + (GetExtraBarIndex() - 1)*NUM_ACTIONBAR_BUTTONS
|
Flick@299
|
50 self.actionID = actionID
|
Flick@299
|
51 f.action = actionID
|
Flick@299
|
52
|
Flick@299
|
53 -- attribute setup
|
Flick@299
|
54 f:SetAttribute("type","action")
|
Flick@299
|
55 f:SetAttribute("checkselfcast", true)
|
Flick@299
|
56 f:SetAttribute("checkfocuscast", true)
|
Flick@299
|
57 f:SetAttribute("action", actionID)
|
Flick@299
|
58 f:SetAttribute("default-action", actionID)
|
Flick@299
|
59 f:SetAttribute("bar-idx",idx)
|
Flick@299
|
60
|
Flick@299
|
61 -- non secure scripts
|
Flick@299
|
62 f:SetScript("OnEvent", function(frame, ...) self:OnEvent(...) end)
|
Flick@299
|
63 f:SetScript("OnEnter", function(frame) self:OnEnter() end)
|
Flick@299
|
64 f:SetScript("OnLeave", function(frame) self:OnLeave() end)
|
Flick@299
|
65 f:SetScript("OnAttributeChanged", function(frame, attr, value) self:OnAttributeChanged(attr, value) end)
|
Flick@299
|
66 f:SetScript("PostClick", function(frame, ...) self:PostClick(...) end)
|
Flick@299
|
67 f:SetScript("OnUpdate", function(frame, elapsed) self:OnUpdate(elapsed) end)
|
Flick@299
|
68
|
Flick@299
|
69 -- event registration
|
Flick@299
|
70 for _, evt in pairs(self.eventList) do
|
Flick@299
|
71 f:RegisterEvent(evt)
|
Flick@299
|
72 end
|
Flick@299
|
73
|
Flick@299
|
74 -- register to use the C cooldown implementation
|
Flick@299
|
75 SetActionUIButton(f, actionID, f.cooldown)
|
Flick@299
|
76
|
Flick@299
|
77 -- attach to skinner
|
Flick@299
|
78 bar:SkinButton(self)
|
Flick@299
|
79
|
Flick@299
|
80 self:Refresh()
|
Flick@299
|
81
|
Flick@299
|
82 return self
|
Flick@299
|
83 end
|
Flick@299
|
84
|
Flick@299
|
85 function ExtraAction:Destroy()
|
Flick@299
|
86 -- similarly, don't call the ActionButton destructor function, call the Button destructor function
|
Flick@299
|
87 ReAction.Button.Destroy(self)
|
Flick@299
|
88 end
|
Flick@299
|
89
|
Flick@299
|
90 function ExtraAction:SetupBar(bar)
|
Flick@299
|
91 -- again don't call the ActionButton:SetupBar method, because it does a lot of things we don't need/want.
|
Flick@299
|
92 -- however the Button base class SetupBar method does need to be called.
|
Flick@299
|
93 ReAction.Button.SetupBar(self,bar)
|
Flick@299
|
94
|
Flick@299
|
95 -- show/hide the bar based on whether we have an extrabar. Hook into the unitexists mechanism that the pet bar uses.
|
Flick@299
|
96 RegisterStateDriver(bar:GetFrame(), "unitexists", "[extrabar] show ; hide")
|
Flick@299
|
97 end
|
Flick@299
|
98
|
Flick@299
|
99 function ExtraAction:ShowGrid()
|
Flick@299
|
100 -- override: do nothing
|
Flick@299
|
101 end
|
Flick@299
|
102
|
Flick@299
|
103 function ExtraAction:ShowGridTemp( show )
|
Flick@299
|
104 -- override: do nothing
|
Flick@299
|
105 end
|
Flick@299
|
106
|
Flick@299
|
107 function ExtraAction:SetActionID()
|
Flick@299
|
108 -- override: action ID never changes
|
Flick@299
|
109 end
|
Flick@299
|
110
|
Flick@299
|
111 function ExtraAction:RefreshPages()
|
Flick@299
|
112 -- override: action ID never changes
|
Flick@299
|
113 end
|
Flick@299
|
114
|