Mercurial > wow > askmrrobot
comparison ui/Components.lua @ 0:ec731d2fe6ba
Version 1.2.12.0
author | Adam tegen <adam.tegen@gmail.com> |
---|---|
date | Tue, 20 May 2014 21:43:23 -0500 |
parents | |
children | ece9167c0d1c |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ec731d2fe6ba |
---|---|
1 local _, AskMrRobot = ... | |
2 | |
3 local unresolvedItemIds = {} | |
4 | |
5 -- Create a new class that inherits from a base class | |
6 function AskMrRobot.inheritsFrom( baseClass ) | |
7 | |
8 -- The following lines are equivalent to the SimpleClass example: | |
9 | |
10 -- Create the table and metatable representing the class. | |
11 local new_class = {} | |
12 | |
13 -- Note that this function uses class_mt as an upvalue, so every instance | |
14 -- of the class will share the same metatable. | |
15 -- | |
16 -- function new_class:create(o) | |
17 -- o = o or {} | |
18 -- setmetatable( o, class_mt ) | |
19 -- return o | |
20 -- end | |
21 | |
22 -- The following is the key to implementing inheritance: | |
23 | |
24 -- The __index member of the new class's metatable references the | |
25 -- base class. This implies that all methods of the base class will | |
26 -- be exposed to the sub-class, and that the sub-class can override | |
27 -- any of these methods. | |
28 -- | |
29 if baseClass then | |
30 setmetatable( new_class, { __index = baseClass } ) | |
31 end | |
32 | |
33 return new_class | |
34 end | |
35 | |
36 local itemInfoFrame = nil; | |
37 | |
38 local function onGetItemInfoReceived(arg1, arg2, arg3) | |
39 -- since wow is awesome, it doesn't tell us *which* item id was just resolved, so we have to look at them all | |
40 for itemId, callbacks in pairs(unresolvedItemIds) do | |
41 -- attempt to get the item info AGAIN | |
42 local a, b, c, d, e, f, g, h, i, j, k = GetItemInfo(itemId) | |
43 -- if we got item info... | |
44 if a then | |
45 -- remove the callbacks from the list | |
46 unresolvedItemIds[itemId] = nil | |
47 | |
48 -- call each callback | |
49 for i = 1, #callbacks do | |
50 callbacks[i](a, b, c, d, e, f, g, h, i, j, k) | |
51 end | |
52 end | |
53 end | |
54 end | |
55 | |
56 | |
57 function AskMrRobot.RegisterItemInfoCallback(itemId, callback) | |
58 if not itemId then | |
59 return | |
60 end | |
61 | |
62 if not itemInfoFrame then | |
63 waitFrame = CreateFrame("Frame","WaitFrame", UIParent); | |
64 waitFrame:RegisterEvent("GET_ITEM_INFO_RECEIVED") | |
65 waitFrame:SetScript("OnEvent", onGetItemInfoReceived); | |
66 end | |
67 | |
68 | |
69 -- get the list of registered callbacks for this particular item | |
70 local list = unresolvedItemIds[itemId] | |
71 -- if there was a list, then just add the callback to the list | |
72 if list then | |
73 tinsert(list, callback) | |
74 else | |
75 -- there wasn't a list, so make a new one with this callback | |
76 unresolvedItemIds[itemId] = { callback } | |
77 end | |
78 end | |
79 | |
80 function AskMrRobot.getItemIdFromLink(item) | |
81 if not item then return 0 end | |
82 local id = tonumber (item:match ("item:(%d+):%d+:%d+:%d+:%d+:%d+:%-?%d+:%-?%d+:%d+:%d+")) | |
83 return (id and id ~= 0 and id or 0) | |
84 end | |
85 | |
86 -- initialize the Frame class (inherit from a dummy frame) | |
87 AskMrRobot.Frame = AskMrRobot.inheritsFrom(CreateFrame("Frame")) | |
88 | |
89 -- Frame contructor | |
90 function AskMrRobot.Frame:new(name, parentFrame, inheritsFrame) | |
91 -- create a new frame (if one isn't supplied) | |
92 local o = CreateFrame("Frame", name, parentFrame, inheritsFrame) | |
93 | |
94 -- use the Frame class | |
95 setmetatable(o, { __index = AskMrRobot.Frame }) | |
96 | |
97 -- return the instance of the Frame | |
98 return o | |
99 end | |
100 | |
101 local MAINHAND = nil | |
102 local OFFHAND = nil | |
103 | |
104 AskMrRobot.slotNames = {"HeadSlot", "NeckSlot", "ShoulderSlot", "BackSlot", "ChestSlot", "ShirtSlot", "TabardSlot", "WristSlot", "HandsSlot", "WaistSlot", "LegsSlot", "FeetSlot", "Finger0Slot", "Finger1Slot", "Trinket0Slot", "Trinket1Slot", "MainHandSlot", "SecondaryHandSlot", "AmmoSlot" }; | |
105 AskMrRobot.OptimizationSlots = {} | |
106 AskMrRobot.slotIdToSlotNum = {} | |
107 AskMrRobot.slotIds = {}; | |
108 for slotNum = 1, #AskMrRobot.slotNames do | |
109 local slotId = GetInventorySlotInfo(AskMrRobot.slotNames[slotNum]) | |
110 AskMrRobot.slotIds[slotNum] = slotId | |
111 AskMrRobot.slotIdToSlotNum[slotId] = slotNum | |
112 local slotName = AskMrRobot.slotNames[slotNum] | |
113 if slotName == "MainHandSlot" then | |
114 MAINHAND = slotNum | |
115 end | |
116 if slotName == "SecondaryHandSlot" then | |
117 OFFHAND = slotNum | |
118 end | |
119 if slotName ~= "TabardSlot" and slotName ~= "AmmoSlot" and slotName ~= "ShirtSlot" then | |
120 AskMrRobot.OptimizationSlots[slotNum] = true | |
121 end | |
122 | |
123 end | |
124 | |
125 AskMrRobot.sortedSlots = {[MAINHAND] = 1, [OFFHAND] = 2} | |
126 | |
127 local i = 3 | |
128 for slotNum = 1, #AskMrRobot.slotNames do | |
129 if slotNum ~= MAINHAND and slotNum ~= OFFHAND then | |
130 AskMrRobot.sortedSlots[slotNum] = i | |
131 i = i + 1 | |
132 end | |
133 end | |
134 | |
135 | |
136 -- initialize the Frame class (inherit from a dummy frame) | |
137 AskMrRobot.FontString = AskMrRobot.inheritsFrom(AskMrRobot.Frame:new():CreateFontString(nil, "ARTWORK", "GameFontNormal")) | |
138 | |
139 -- Frame contructor | |
140 function AskMrRobot.FontString:new(parentFrame, name, layer, style, fontSize) | |
141 | |
142 local o = parentFrame:CreateFontString(name, layer, style) -- create a new frame (if one isn't supplied) | |
143 | |
144 -- use the fontstring class | |
145 setmetatable(o, { __index = AskMrRobot.FontString }) | |
146 | |
147 if fontSize then | |
148 o:SetFontSize(fontSize) | |
149 end | |
150 | |
151 return o | |
152 end | |
153 | |
154 function AskMrRobot.FontString:SetFontSize(fontSize) | |
155 local file, _, flags = self:GetFont() | |
156 self:SetFont(file, fontSize, flags) | |
157 end | |
158 | |
159 function AskMrRobot.SetFontSize(fontString, fontSize) | |
160 local file, _, flags = fontString:GetFont() | |
161 fontString:SetFont(file, fontSize, flags) | |
162 end |