contrebasse@0
|
1 local addonName, A = ...
|
contrebasse@0
|
2
|
contrebasse@111
|
3 -- Lua functions
|
contrebasse@111
|
4 local ipairs = ipairs
|
contrebasse@111
|
5 local type = type
|
contrebasse@111
|
6
|
contrebasse@111
|
7 -- Wow variables
|
contrebasse@111
|
8
|
contrebasse@0
|
9 -- Create the menu frame
|
contrebasse@34
|
10 local MenuFrame = CreateFrame("Frame","ReagentMaker_ExternalFrame",UIParent)
|
contrebasse@0
|
11 MenuFrame:Hide()
|
contrebasse@3
|
12 MenuFrame:SetSize(192,256)
|
contrebasse@110
|
13 --MenuFrame:SetFrameStrata("DIALOG")
|
contrebasse@3
|
14 MenuFrame:EnableMouse(true)
|
contrebasse@3
|
15 MenuFrame:SetPoint("CENTER")
|
contrebasse@110
|
16 MenuFrame:SetToplevel(true) -- raised if clicked
|
contrebasse@3
|
17 tinsert(UISpecialFrames,"ReagentMaker_ExternalFrame") -- make it closable with escape
|
contrebasse@2
|
18
|
contrebasse@20
|
19 local SCAN_DELAY = 0.2
|
contrebasse@20
|
20 local t_throttle = SCAN_DELAY
|
contrebasse@20
|
21 function MenuFrame.throttleUpdateCounts(self, t_elapsed)
|
contrebasse@20
|
22 t_throttle = t_throttle - t_elapsed
|
contrebasse@20
|
23 if t_throttle<0 then
|
contrebasse@20
|
24 self:SetScript("OnUpdate", nil)
|
contrebasse@20
|
25
|
contrebasse@20
|
26 -- Update counts
|
contrebasse@20
|
27 MenuFrame.updateCounts()
|
contrebasse@20
|
28 end
|
contrebasse@20
|
29 end
|
contrebasse@3
|
30 MenuFrame:SetScript("OnEvent",function(self,event,...)
|
contrebasse@20
|
31 if event == "BAG_UPDATE" then
|
contrebasse@20
|
32 t_throttle = SCAN_DELAY
|
contrebasse@20
|
33 self:SetScript("OnUpdate", MenuFrame.throttleUpdateCounts)
|
contrebasse@19
|
34 elseif event == "TRADE_SKILL_CLOSE" or event == "PLAYER_REGEN_DISABLED" then
|
contrebasse@3
|
35 MenuFrame:Hide()
|
contrebasse@3
|
36 end
|
contrebasse@3
|
37 end)
|
contrebasse@3
|
38 MenuFrame:RegisterEvent("TRADE_SKILL_CLOSE")
|
contrebasse@3
|
39 MenuFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
|
contrebasse@20
|
40 MenuFrame:RegisterEvent("BAG_UPDATE")
|
contrebasse@20
|
41 MenuFrame:SetScript("OnEnter",function(self)
|
contrebasse@20
|
42 if self.reagentLink then
|
contrebasse@20
|
43 GameTooltip:SetOwner(self)
|
contrebasse@20
|
44 GameTooltip:SetHyperlink(self.reagentLink)
|
contrebasse@20
|
45 GameTooltip:Show()
|
contrebasse@20
|
46 GameTooltip:ClearAllPoints()
|
contrebasse@20
|
47 GameTooltip:SetPoint("TOPRIGHT",self,"TOPLEFT",10,0)
|
contrebasse@32
|
48 if self.spellLink then
|
contrebasse@32
|
49 A.tooltipRecipe:SetOwner(GameTooltip)
|
contrebasse@32
|
50 A.tooltipRecipe:SetHyperlink(self.spellLink)
|
contrebasse@32
|
51 A.tooltipRecipe:Show()
|
contrebasse@32
|
52 A.tooltipRecipe:ClearAllPoints()
|
contrebasse@32
|
53 A.tooltipRecipe:SetPoint("TOPRIGHT",GameTooltip,"BOTTOMRIGHT")
|
contrebasse@32
|
54 end
|
contrebasse@20
|
55 end
|
contrebasse@20
|
56 end)
|
contrebasse@20
|
57 MenuFrame:SetScript("OnLeave",function()
|
contrebasse@20
|
58 GameTooltip:Hide()
|
contrebasse@32
|
59 A.tooltipRecipe:Hide()
|
contrebasse@20
|
60 end)
|
contrebasse@33
|
61
|
contrebasse@33
|
62 -- Hide frame when selecting a recipe which doesn't need this reagent
|
contrebasse@33
|
63 hooksecurefunc("SelectTradeSkill",function()
|
contrebasse@33
|
64 local selectedIndex = GetTradeSkillSelectionIndex()
|
contrebasse@111
|
65 for reagentIndexInRecipe = 1,GetTradeSkillNumReagents(selectedIndex) do
|
contrebasse@111
|
66 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(selectedIndex, reagentIndexInRecipe))
|
contrebasse@33
|
67 if reagentID == MenuFrame.itemID or (MenuFrame.superItemID and reagentID == MenuFrame.superItemID) then
|
contrebasse@33
|
68 return
|
contrebasse@33
|
69 end
|
contrebasse@33
|
70 end
|
contrebasse@33
|
71 MenuFrame:Hide()
|
contrebasse@33
|
72 end)
|
contrebasse@3
|
73 A.MenuFrame = MenuFrame
|
contrebasse@3
|
74
|
contrebasse@3
|
75 -- Background adaptable vertically
|
contrebasse@3
|
76 local bg_top = MenuFrame:CreateTexture(nil,"BACKGROUND",nil,0)
|
contrebasse@3
|
77 bg_top:SetTexture("Interface\\LootFrame\\UI-LootPanel")
|
contrebasse@3
|
78 bg_top:SetSize(192,80)
|
contrebasse@3
|
79 bg_top:SetPoint("TOP")
|
contrebasse@3
|
80 bg_top:SetTexCoord(0,192/256,0,80/256)
|
contrebasse@3
|
81 local bg_bot = MenuFrame:CreateTexture(nil,"BACKGROUND",nil,0)
|
contrebasse@3
|
82 bg_bot:SetTexture("Interface\\LootFrame\\UI-LootPanel")
|
contrebasse@3
|
83 bg_bot:SetSize(192,16)
|
contrebasse@3
|
84 bg_bot:SetPoint("BOTTOM")
|
contrebasse@3
|
85 bg_bot:SetTexCoord(0,192/256,240/256,1)
|
contrebasse@3
|
86 local bg_mid = MenuFrame:CreateTexture(nil,"BACKGROUND",nil,0)
|
contrebasse@3
|
87 bg_mid:SetTexture("Interface\\LootFrame\\UI-LootPanel")
|
contrebasse@3
|
88 bg_mid:SetWidth(192)
|
contrebasse@3
|
89 bg_mid:SetPoint("TOP",bg_top,"BOTTOM")
|
contrebasse@3
|
90 bg_mid:SetPoint("BOTTOM",bg_bot,"TOP")
|
contrebasse@3
|
91 bg_mid:SetTexCoord(0,192/256,80/256,240/256)
|
contrebasse@3
|
92
|
contrebasse@3
|
93 -- Bouton de fermeture
|
contrebasse@3
|
94 local CloseButton = CreateFrame("Button",nil,MenuFrame,"UIPanelCloseButton");
|
contrebasse@3
|
95 CloseButton:SetPoint("TOPRIGHT",0,-10)
|
contrebasse@3
|
96
|
contrebasse@3
|
97 -- Main icon
|
contrebasse@3
|
98 local itemIcon = MenuFrame:CreateTexture(nil,"BACKGROUND",nil,-1)
|
contrebasse@3
|
99 itemIcon:SetSize(64,64)
|
contrebasse@3
|
100 itemIcon:SetPoint("TOPLEFT",8,-4)
|
contrebasse@3
|
101
|
contrebasse@3
|
102 -- Title
|
contrebasse@3
|
103 local TitleText = MenuFrame:CreateFontString(nil,"ARTWORK","GameFontHighlight")
|
contrebasse@45
|
104 --TitleText:SetSize(92,14)
|
contrebasse@45
|
105 TitleText:SetSize(92,36)
|
contrebasse@45
|
106 TitleText:SetPoint("TOPRIGHT",CloseButton,"TOPLEFT",4,-8)
|
contrebasse@45
|
107 TitleText:SetWordWrap(true)
|
contrebasse@45
|
108 TitleText:SetNonSpaceWrap(false)
|
contrebasse@45
|
109 TitleText:SetJustifyV("TOP")
|
contrebasse@45
|
110
|
contrebasse@3
|
111
|
contrebasse@3
|
112 local MENU_ENTRY_HEIGHT = 41
|
contrebasse@3
|
113 local MENU_ENTRY_WIDTH = 147
|
contrebasse@3
|
114 local MENU_ENTRY_ICON_RATIO = 40/48
|
contrebasse@2
|
115
|
contrebasse@0
|
116 local numActiveEntries = 0
|
contrebasse@0
|
117 local menuEntries = {}
|
contrebasse@0
|
118
|
contrebasse@3
|
119 -- Button hovering
|
contrebasse@5
|
120 local function btnEntered(btn)
|
contrebasse@20
|
121 if btn.numMakable and btn.numMakable>0 then
|
contrebasse@5
|
122 btn.textureHighlight:Show()
|
contrebasse@5
|
123 end
|
contrebasse@3
|
124
|
contrebasse@20
|
125 GameTooltip:SetOwner(btn,"ANCHOR_LEFT")
|
contrebasse@5
|
126 GameTooltip:SetHyperlink(btn.reagentLink)
|
contrebasse@5
|
127 GameTooltip:Show()
|
contrebasse@96
|
128 if btn.spellLink and btn.spellLink~=btn.reagentLink then
|
contrebasse@31
|
129 A.tooltipRecipe:SetOwner(GameTooltip)
|
contrebasse@31
|
130 A.tooltipRecipe:SetHyperlink(btn.spellLink)
|
contrebasse@31
|
131 A.tooltipRecipe:Show()
|
contrebasse@31
|
132 A.tooltipRecipe:ClearAllPoints()
|
contrebasse@31
|
133 A.tooltipRecipe:SetPoint("TOPRIGHT",GameTooltip,"BOTTOMRIGHT")
|
contrebasse@20
|
134 end
|
contrebasse@3
|
135 end
|
contrebasse@5
|
136 local function btnLeft(btn)
|
contrebasse@5
|
137 btn.textureHighlight:Hide()
|
contrebasse@5
|
138 GameTooltip:Hide()
|
contrebasse@5
|
139 A.tooltipRecipe:Hide()
|
contrebasse@3
|
140 end
|
contrebasse@3
|
141 local function createMenuEntry()
|
contrebasse@3
|
142 local btn = CreateFrame("Button", nil, MenuFrame, "SecureActionButtonTemplate")
|
contrebasse@3
|
143 table.insert(menuEntries,btn)
|
contrebasse@3
|
144
|
contrebasse@3
|
145 btn:Hide()
|
contrebasse@3
|
146 btn:SetSize(MENU_ENTRY_WIDTH,MENU_ENTRY_HEIGHT)
|
contrebasse@110
|
147 --btn:SetFrameStrata("DIALOG")
|
contrebasse@3
|
148
|
contrebasse@3
|
149 -- Set its position
|
contrebasse@3
|
150 if #menuEntries>1 then
|
contrebasse@3
|
151 btn:SetPoint("TOP",menuEntries[#menuEntries-1],"BOTTOM",0,-2)
|
contrebasse@2
|
152 else
|
contrebasse@3
|
153 btn:SetPoint("TOPLEFT",MenuFrame,"TOPLEFT",24,-79)
|
contrebasse@2
|
154 end
|
contrebasse@3
|
155
|
contrebasse@3
|
156 local icon = btn:CreateTexture(nil,"BACKGROUND")
|
contrebasse@3
|
157 icon:SetPoint("TOPLEFT")
|
contrebasse@3
|
158 icon:SetSize(39,39)
|
contrebasse@3
|
159 btn.icon = icon
|
contrebasse@3
|
160
|
contrebasse@3
|
161 local itemNameBG = btn:CreateTexture(nil,"BACKGROUND")
|
contrebasse@3
|
162 itemNameBG:SetTexture("Interface\\QuestFrame\\UI-QuestItemNameFrame")
|
contrebasse@3
|
163 itemNameBG:SetSize(128,64)
|
contrebasse@3
|
164 itemNameBG:SetPoint("LEFT",icon,"RIGHT",-10,0)
|
contrebasse@3
|
165
|
contrebasse@3
|
166 local itemName = btn:CreateFontString(nil,"BACKGROUND","GameFontHighlight")
|
contrebasse@3
|
167 itemName:SetSize(90,36)
|
contrebasse@3
|
168 itemName:SetPoint("LEFT",itemNameBG,"LEFT",15,0)
|
contrebasse@3
|
169 itemName:SetJustifyH("LEFT")
|
contrebasse@3
|
170 itemName:SetWordWrap(true)
|
contrebasse@3
|
171 itemName:SetNonSpaceWrap(false)
|
contrebasse@3
|
172 btn.itemName = itemName
|
contrebasse@3
|
173
|
contrebasse@3
|
174 local textureHighlight = btn:CreateTexture(nil,"BORDER")
|
contrebasse@3
|
175 textureHighlight:Hide()
|
contrebasse@3
|
176 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight")
|
contrebasse@110
|
177 --textureHighlight:SetTexture("Interface\\BUTTONS\\ButtonHilight-Square")
|
contrebasse@3
|
178 textureHighlight:SetBlendMode("ADD")
|
contrebasse@3
|
179 textureHighlight:SetAllPoints(icon)
|
contrebasse@3
|
180 btn.textureHighlight = textureHighlight
|
contrebasse@5
|
181
|
contrebasse@5
|
182 local countDetail = btn:CreateFontString(nil,"ARTWORK","NumberFontNormal")
|
contrebasse@5
|
183 countDetail:SetPoint("BOTTOMRIGHT",icon,"BOTTOMRIGHT",-1,1)
|
contrebasse@5
|
184 countDetail:SetJustifyH("RIGHT")
|
contrebasse@5
|
185 countDetail:SetJustifyV("BOTTOM")
|
contrebasse@5
|
186 btn.countDetail = countDetail
|
contrebasse@5
|
187
|
contrebasse@10
|
188 local resultNumber = btn:CreateFontString(nil,"ARTWORK","NumberFontNormal")
|
contrebasse@11
|
189 resultNumber:SetPoint("TOPLEFT",icon,"TOPLEFT",1,-3)
|
contrebasse@10
|
190 resultNumber:SetJustifyH("LEFT")
|
contrebasse@10
|
191 resultNumber:SetJustifyV("TOP")
|
contrebasse@11
|
192 resultNumber:SetFont("Fonts\\ARIALN.TTF", 12, "OUTLINE")
|
contrebasse@10
|
193 btn.resultNumber = resultNumber
|
contrebasse@10
|
194
|
contrebasse@110
|
195 -- Used to choose the number of items to make
|
contrebasse@110
|
196 btn.SplitStack = A.SplitStack
|
contrebasse@110
|
197
|
contrebasse@20
|
198 btn:SetScript("OnEnter", btnEntered)
|
contrebasse@20
|
199 btn:SetScript("OnLeave", btnLeft)
|
contrebasse@3
|
200
|
contrebasse@3
|
201 return btn
|
contrebasse@2
|
202 end
|
contrebasse@1
|
203
|
contrebasse@40
|
204 local function WarnNotMakable(btn)
|
contrebasse@96
|
205 if not btn.reagentID then
|
contrebasse@96
|
206 A.Error(A.L["You do not have enough reagents to craft [%s]"]:format(TitleText:GetText()))
|
contrebasse@96
|
207 else
|
contrebasse@96
|
208 A.Error(A.L["You do not have enough [%s] to craft [%s]"]:format(btn.itemNameString,TitleText:GetText()))
|
contrebasse@96
|
209 end
|
contrebasse@40
|
210 end
|
contrebasse@40
|
211
|
contrebasse@110
|
212 local function CraftFromExternal(btn)
|
contrebasse@111
|
213 local chooseNumberToCraft = IsShiftKeyDown()
|
contrebasse@110
|
214
|
contrebasse@111
|
215 A.CraftItemWithRecipe( GetTradeSkillSelectionIndex(),
|
contrebasse@111
|
216 btn.itemID,
|
contrebasse@111
|
217 btn.reagent,
|
contrebasse@111
|
218 MenuFrame.reagentIndexInRecipe,
|
contrebasse@111
|
219 IsShiftKeyDown(),
|
contrebasse@111
|
220 btn)
|
contrebasse@110
|
221 end
|
contrebasse@110
|
222
|
contrebasse@40
|
223 -- Update counts and button actions
|
contrebasse@19
|
224 function MenuFrame.updateCounts()
|
contrebasse@3
|
225 local anyMakable
|
contrebasse@0
|
226 for i=1,numActiveEntries do
|
contrebasse@110
|
227 local btn = menuEntries[i]
|
contrebasse@3
|
228 local itemCount = GetItemCount(btn.reagentID)
|
contrebasse@3
|
229
|
contrebasse@110
|
230 local numMakable
|
contrebasse@110
|
231 if btn.reagentID then
|
contrebasse@110
|
232 numMakable = math.floor(itemCount/(btn.reagentsForOneRecipe or 1))
|
contrebasse@110
|
233 btn.countDetail:SetText(itemCount.."/"..(btn.reagentsForOneRecipe or 1))
|
contrebasse@110
|
234 else
|
contrebasse@110
|
235 for _,reagent in pairs(btn.reagentsForOneRecipe) do
|
contrebasse@110
|
236 itemCount = GetItemCount(reagent[1])
|
contrebasse@110
|
237 if not itemCount then
|
contrebasse@110
|
238 numMakable = 0
|
contrebasse@110
|
239 break
|
contrebasse@110
|
240 end
|
contrebasse@110
|
241 if not numMakable then
|
contrebasse@110
|
242 numMakable = math.floor(itemCount/reagent[2])
|
contrebasse@110
|
243 else
|
contrebasse@110
|
244 numMakable = math.min(numMakable,math.floor(itemCount/reagent[2]))
|
contrebasse@110
|
245 end
|
contrebasse@110
|
246 if numMakable==0 then break end
|
contrebasse@110
|
247 end
|
contrebasse@110
|
248 btn.countDetail:SetText(numMakable)
|
contrebasse@110
|
249 end
|
contrebasse@3
|
250
|
contrebasse@3
|
251 if numMakable>0 then
|
contrebasse@40
|
252 -- Set action
|
contrebasse@73
|
253 if type(btn.action)=="function" then
|
contrebasse@40
|
254 btn:SetScript("PreClick",btn.action)
|
contrebasse@40
|
255 btn:SetAttribute("type", nil)
|
contrebasse@40
|
256 btn:SetAttribute("macrotext", nil)
|
contrebasse@40
|
257 else --if type(action)=="string" then
|
contrebasse@40
|
258 btn:SetScript("PreClick",nil)
|
contrebasse@40
|
259 btn:SetAttribute("type", "macro")
|
contrebasse@73
|
260 btn:SetAttribute("macrotext", btn.action:format(btn.itemNameString))
|
contrebasse@40
|
261 end -- if
|
contrebasse@40
|
262
|
contrebasse@3
|
263 anyMakable = true
|
contrebasse@5
|
264 btn.countDetail:SetTextColor(1, 1, 1, 1)
|
contrebasse@3
|
265 btn.icon:SetVertexColor(1,1,1);
|
contrebasse@3
|
266 btn.itemName:SetTextColor(1,1,1,1)
|
contrebasse@3
|
267 else
|
contrebasse@5
|
268 -- Do not disable the button, to be able to show the tooltip
|
contrebasse@40
|
269 -- Disable only the effects
|
contrebasse@40
|
270 btn:SetScript("PreClick",WarnNotMakable)
|
contrebasse@40
|
271 btn:SetAttribute("type", nil)
|
contrebasse@40
|
272 btn:SetAttribute("macrotext", nil)
|
contrebasse@108
|
273
|
contrebasse@5
|
274 btn.countDetail:SetTextColor(1, 0.1, 0.1, 1)
|
contrebasse@3
|
275 btn.icon:SetVertexColor(0.5, 0.5, 0.5)
|
contrebasse@3
|
276 btn.itemName:SetTextColor(1,1,1,0.5)
|
contrebasse@3
|
277 end
|
contrebasse@5
|
278
|
contrebasse@5
|
279 btn.numMakable = numMakable
|
contrebasse@3
|
280 end
|
contrebasse@3
|
281
|
contrebasse@5
|
282 local r,g,b = TitleText:GetTextColor()
|
contrebasse@3
|
283 if anyMakable then
|
contrebasse@3
|
284 itemIcon:SetVertexColor(1,1,1)
|
contrebasse@5
|
285 TitleText:SetTextColor(r,g,b,1)
|
contrebasse@3
|
286 else
|
contrebasse@3
|
287 itemIcon:SetVertexColor(0.5, 0.5, 0.5)
|
contrebasse@5
|
288 TitleText:SetTextColor(r,g,b,0.7)
|
contrebasse@0
|
289 end
|
contrebasse@0
|
290 end
|
contrebasse@0
|
291
|
contrebasse@73
|
292 local function menuAddItem(action,itemID,reagent)
|
contrebasse@0
|
293 local btn
|
contrebasse@0
|
294 -- Create a button only if necessary
|
contrebasse@0
|
295 if numActiveEntries >= #menuEntries then
|
contrebasse@3
|
296 btn = createMenuEntry()
|
contrebasse@0
|
297 else
|
contrebasse@0
|
298 btn = menuEntries[numActiveEntries+1]
|
contrebasse@0
|
299 end
|
contrebasse@0
|
300
|
contrebasse@3
|
301 -- Set text and icon
|
contrebasse@96
|
302 local name, link, texture, _
|
contrebasse@96
|
303 if reagent[1] then
|
contrebasse@96
|
304 name, link, _, _, _, _, _, _, _, texture = GetItemInfo(reagent[1])
|
contrebasse@96
|
305 if not (name and link and texture) then
|
contrebasse@96
|
306 -- Will be retried on next OnUpdate
|
contrebasse@96
|
307 return
|
contrebasse@96
|
308 end
|
contrebasse@96
|
309 elseif reagent.spellLink then
|
contrebasse@96
|
310 --name, rank, icon, powerCost, isFunnel, powerType, castingTime, minRange, maxRange = GetSpellInfo(id)
|
contrebasse@96
|
311 name, _, texture = GetSpellInfo(A.link2ID(reagent.spellLink))
|
contrebasse@96
|
312 if not (name and texture) then
|
contrebasse@96
|
313 -- Will be retried on next OnUpdate
|
contrebasse@96
|
314 return
|
contrebasse@96
|
315 end
|
contrebasse@96
|
316 link = reagent.spellLink
|
contrebasse@3
|
317 end
|
contrebasse@96
|
318
|
contrebasse@73
|
319 btn.itemName:SetText(name)
|
contrebasse@73
|
320 btn.icon:SetTexture(texture)
|
contrebasse@3
|
321
|
contrebasse@10
|
322 -- Set chance to have the item or the number of items created
|
contrebasse@93
|
323 btn.resultNumber:Hide()
|
contrebasse@10
|
324 if reagent[3] then
|
contrebasse@10
|
325 if reagent[3]<1 then
|
contrebasse@10
|
326 btn.resultNumber:SetText((reagent[3]*100).."%")
|
contrebasse@93
|
327 btn.resultNumber:Show()
|
contrebasse@11
|
328 elseif reagent[4] and reagent[3]~=reagent[4] then
|
contrebasse@11
|
329 btn.resultNumber:SetText(math.min(reagent[3],reagent[4]).."-"..math.max(reagent[3],reagent[4]))
|
contrebasse@93
|
330 btn.resultNumber:Show()
|
contrebasse@10
|
331 elseif reagent[3]>1 then
|
contrebasse@10
|
332 btn.resultNumber:SetText(reagent[3])
|
contrebasse@93
|
333 btn.resultNumber:Show()
|
contrebasse@10
|
334 end
|
contrebasse@10
|
335 end
|
contrebasse@10
|
336
|
contrebasse@3
|
337 -- Save params
|
contrebasse@3
|
338 btn.itemID = itemID
|
contrebasse@111
|
339 btn.reagent = reagent
|
contrebasse@10
|
340 btn.reagentID = reagent[1]
|
contrebasse@5
|
341 btn.reagentLink = link
|
contrebasse@10
|
342 btn.reagentsForOneRecipe = reagent[2]
|
contrebasse@73
|
343 btn.spellLink = reagent.spellLink
|
contrebasse@40
|
344 btn.action = action
|
contrebasse@40
|
345 btn.itemNameString = name
|
contrebasse@0
|
346
|
contrebasse@3
|
347 btn:Show()
|
contrebasse@0
|
348
|
contrebasse@2
|
349 -- Increase the entry number
|
contrebasse@0
|
350 numActiveEntries = numActiveEntries + 1
|
contrebasse@34
|
351
|
contrebasse@34
|
352 -- Everything went well
|
contrebasse@34
|
353 return true
|
contrebasse@0
|
354 end -- function
|
contrebasse@3
|
355
|
contrebasse@34
|
356 -- Function used on OnUpdate tu update the frame if there were errors the previous time
|
contrebasse@34
|
357 local function reopen()
|
contrebasse@34
|
358 -- Release OnUpdate frame (could conflict with BAG_UPDATE)
|
contrebasse@34
|
359 MenuFrame:SetScript("OnUpdate",nil)
|
contrebasse@34
|
360
|
contrebasse@34
|
361 -- reopen
|
contrebasse@111
|
362 A.externalCraftWindow(MenuFrame.itemID,MenuFrame.reagentIndexInRecipe,MenuFrame.superItemID)
|
contrebasse@34
|
363 end
|
contrebasse@34
|
364
|
contrebasse@3
|
365 -- Fill the window and open it
|
contrebasse@111
|
366 function A.externalCraftWindow(itemID,reagentIndexInRecipe,superItemID)
|
contrebasse@3
|
367 -- Do not open during combat
|
contrebasse@103
|
368 if InCombatLockdown() then
|
contrebasse@108
|
369 A.Error(SPELL_FAILED_AFFECTING_COMBAT)
|
contrebasse@103
|
370 return
|
contrebasse@103
|
371 end
|
contrebasse@3
|
372
|
contrebasse@3
|
373 -- Save the tradeskill
|
contrebasse@3
|
374 A.currentTradeSkill = GetTradeSkillLine()
|
contrebasse@3
|
375
|
contrebasse@3
|
376 -- Close the previous menu
|
contrebasse@3
|
377 MenuFrame:Hide()
|
contrebasse@3
|
378 for i=1,numActiveEntries do
|
contrebasse@3
|
379 menuEntries[i]:Hide()
|
contrebasse@3
|
380 end
|
contrebasse@3
|
381 numActiveEntries = 0
|
contrebasse@3
|
382
|
contrebasse@3
|
383 -- Fill the info of the reagent to make
|
contrebasse@35
|
384 local name, link, quality, _, _, _, _, _, _, texture = GetItemInfo(itemID)
|
contrebasse@3
|
385 SetPortraitToTexture(itemIcon, texture)
|
contrebasse@3
|
386 TitleText:SetText(name)
|
contrebasse@5
|
387 local color = ITEM_QUALITY_COLORS[quality]
|
contrebasse@5
|
388 TitleText:SetTextColor(color.r, color.g, color.b)
|
contrebasse@3
|
389
|
contrebasse@20
|
390 -- Save vars to show the tooltip later
|
contrebasse@20
|
391 MenuFrame.reagentLink = link
|
contrebasse@73
|
392 MenuFrame.spellLink = A.isRecipeUnique(A.data[itemID]) and A.data[itemID][1].spellLink
|
contrebasse@33
|
393 MenuFrame.itemID = itemID
|
contrebasse@111
|
394 MenuFrame.reagentIndexInRecipe = reagentIndexInRecipe
|
contrebasse@73
|
395 MenuFrame.superItemID = superItemID -- optional, will be nil if not set
|
contrebasse@34
|
396
|
contrebasse@3
|
397 -- Loop over the available recipes
|
contrebasse@76
|
398 local noSkipped = true -- check if we have to reload the external frame to get all the data
|
contrebasse@76
|
399 local existsValidEntries -- check if the menu contains at least one item (cross-tradeskill problem)
|
contrebasse@3
|
400 for _,reagent in ipairs(A.data[itemID]) do
|
contrebasse@73
|
401 if reagent.macro then
|
contrebasse@29
|
402 -- Special spell
|
contrebasse@76
|
403 existsValidEntries = true
|
contrebasse@76
|
404 noSkipped = menuAddItem(reagent.macro,itemID,reagent) and noSkipped
|
contrebasse@29
|
405 else
|
contrebasse@76
|
406 -- Standard tradeskill spell
|
contrebasse@110
|
407 if not reagent.tradeskillName or reagent.tradeskillName == A.currentTradeSkill then
|
contrebasse@76
|
408 existsValidEntries = true
|
contrebasse@110
|
409 noSkipped = menuAddItem(CraftFromExternal,itemID,reagent) and noSkipped
|
contrebasse@76
|
410 end
|
contrebasse@29
|
411 end -- if
|
contrebasse@3
|
412 end -- for
|
contrebasse@3
|
413
|
contrebasse@76
|
414 -- do not show an empty menu
|
contrebasse@76
|
415 if not existsValidEntries then
|
contrebasse@76
|
416 return false
|
contrebasse@76
|
417 end
|
contrebasse@76
|
418
|
contrebasse@3
|
419 MenuFrame:SetHeight(89 + numActiveEntries*(MENU_ENTRY_HEIGHT+2))
|
contrebasse@3
|
420
|
contrebasse@3
|
421 MenuFrame:ClearAllPoints()
|
contrebasse@3
|
422 MenuFrame:SetPoint("TOPLEFT",TradeSkillFrame,"TOPRIGHT",-2,14)
|
contrebasse@3
|
423
|
contrebasse@40
|
424 -- Update counts and set actions
|
contrebasse@19
|
425 MenuFrame.updateCounts()
|
contrebasse@3
|
426
|
contrebasse@3
|
427 MenuFrame:Show()
|
contrebasse@34
|
428
|
contrebasse@76
|
429 if not noSkipped then
|
contrebasse@34
|
430 MenuFrame:SetScript("OnUpdate",reopen)
|
contrebasse@34
|
431 end
|
contrebasse@3
|
432 end
|