Mercurial > wow > reagentmaker
comparison SecureMenu.lua @ 110:d60d6b4cab0c
Tradeskill in external window should now be functional
| author | contrebasse |
|---|---|
| date | Thu, 02 Jun 2011 18:23:42 +0200 |
| parents | 618163a6d970 |
| children | af23986010ef |
comparison
equal
deleted
inserted
replaced
| 109:b5fd4a61ee64 | 110:d60d6b4cab0c |
|---|---|
| 2 | 2 |
| 3 -- Create the menu frame | 3 -- Create the menu frame |
| 4 local MenuFrame = CreateFrame("Frame","ReagentMaker_ExternalFrame",UIParent) | 4 local MenuFrame = CreateFrame("Frame","ReagentMaker_ExternalFrame",UIParent) |
| 5 MenuFrame:Hide() | 5 MenuFrame:Hide() |
| 6 MenuFrame:SetSize(192,256) | 6 MenuFrame:SetSize(192,256) |
| 7 MenuFrame:SetFrameStrata("DIALOG") | 7 --MenuFrame:SetFrameStrata("DIALOG") |
| 8 MenuFrame:EnableMouse(true) | 8 MenuFrame:EnableMouse(true) |
| 9 MenuFrame:SetPoint("CENTER") | 9 MenuFrame:SetPoint("CENTER") |
| 10 MenuFrame:SetToplevel(true) -- raised if clicked | |
| 10 tinsert(UISpecialFrames,"ReagentMaker_ExternalFrame") -- make it closable with escape | 11 tinsert(UISpecialFrames,"ReagentMaker_ExternalFrame") -- make it closable with escape |
| 11 | 12 |
| 12 local SCAN_DELAY = 0.2 | 13 local SCAN_DELAY = 0.2 |
| 13 local t_throttle = SCAN_DELAY | 14 local t_throttle = SCAN_DELAY |
| 14 function MenuFrame.throttleUpdateCounts(self, t_elapsed) | 15 function MenuFrame.throttleUpdateCounts(self, t_elapsed) |
| 135 local btn = CreateFrame("Button", nil, MenuFrame, "SecureActionButtonTemplate") | 136 local btn = CreateFrame("Button", nil, MenuFrame, "SecureActionButtonTemplate") |
| 136 table.insert(menuEntries,btn) | 137 table.insert(menuEntries,btn) |
| 137 | 138 |
| 138 btn:Hide() | 139 btn:Hide() |
| 139 btn:SetSize(MENU_ENTRY_WIDTH,MENU_ENTRY_HEIGHT) | 140 btn:SetSize(MENU_ENTRY_WIDTH,MENU_ENTRY_HEIGHT) |
| 140 btn:SetFrameStrata("DIALOG") | 141 --btn:SetFrameStrata("DIALOG") |
| 141 | 142 |
| 142 -- Set its position | 143 -- Set its position |
| 143 if #menuEntries>1 then | 144 if #menuEntries>1 then |
| 144 btn:SetPoint("TOP",menuEntries[#menuEntries-1],"BOTTOM",0,-2) | 145 btn:SetPoint("TOP",menuEntries[#menuEntries-1],"BOTTOM",0,-2) |
| 145 else | 146 else |
| 165 btn.itemName = itemName | 166 btn.itemName = itemName |
| 166 | 167 |
| 167 local textureHighlight = btn:CreateTexture(nil,"BORDER") | 168 local textureHighlight = btn:CreateTexture(nil,"BORDER") |
| 168 textureHighlight:Hide() | 169 textureHighlight:Hide() |
| 169 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight") | 170 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight") |
| 171 --textureHighlight:SetTexture("Interface\\BUTTONS\\ButtonHilight-Square") | |
| 170 textureHighlight:SetBlendMode("ADD") | 172 textureHighlight:SetBlendMode("ADD") |
| 171 textureHighlight:SetAllPoints(icon) | 173 textureHighlight:SetAllPoints(icon) |
| 172 btn.textureHighlight = textureHighlight | 174 btn.textureHighlight = textureHighlight |
| 173 | 175 |
| 174 local countDetail = btn:CreateFontString(nil,"ARTWORK","NumberFontNormal") | 176 local countDetail = btn:CreateFontString(nil,"ARTWORK","NumberFontNormal") |
| 182 resultNumber:SetJustifyH("LEFT") | 184 resultNumber:SetJustifyH("LEFT") |
| 183 resultNumber:SetJustifyV("TOP") | 185 resultNumber:SetJustifyV("TOP") |
| 184 resultNumber:SetFont("Fonts\\ARIALN.TTF", 12, "OUTLINE") | 186 resultNumber:SetFont("Fonts\\ARIALN.TTF", 12, "OUTLINE") |
| 185 btn.resultNumber = resultNumber | 187 btn.resultNumber = resultNumber |
| 186 | 188 |
| 189 -- Used to choose the number of items to make | |
| 190 btn.SplitStack = A.SplitStack | |
| 191 | |
| 187 btn:SetScript("OnEnter", btnEntered) | 192 btn:SetScript("OnEnter", btnEntered) |
| 188 btn:SetScript("OnLeave", btnLeft) | 193 btn:SetScript("OnLeave", btnLeft) |
| 189 | 194 |
| 190 return btn | 195 return btn |
| 191 end | 196 end |
| 196 else | 201 else |
| 197 A.Error(A.L["You do not have enough [%s] to craft [%s]"]:format(btn.itemNameString,TitleText:GetText())) | 202 A.Error(A.L["You do not have enough [%s] to craft [%s]"]:format(btn.itemNameString,TitleText:GetText())) |
| 198 end | 203 end |
| 199 end | 204 end |
| 200 | 205 |
| 206 local function CraftFromExternal(btn) | |
| 207 local chooseNumber = IsShiftKeyDown() | |
| 208 local numReagentMakable = A.numRecipeMakable(btn.reagentID,btn.reagentsForOneRecipe) | |
| 209 local reagentIndex = A.findExactSkillIndex(btn.itemID,btn.itemNameString) | |
| 210 | |
| 211 -- to define | |
| 212 local numToMake = 1 | |
| 213 | |
| 214 -- Choose number or craft directly | |
| 215 if chooseNumber then | |
| 216 -- Store info to be able to run the function later | |
| 217 btn.ReagentMaker_reagentIndex = reagentIndex | |
| 218 | |
| 219 -- Open dialog | |
| 220 OpenStackSplitFrame(numReagentMakable, btn, "BOTTOMRIGHT", "TOP") | |
| 221 | |
| 222 -- Fill in the number to make | |
| 223 numToMake = tostring(numToMake) | |
| 224 for i = 1,numToMake:len() do | |
| 225 StackSplitFrame_OnChar(StackSplitFrame,numToMake:gsub(i,i)) | |
| 226 end | |
| 227 StackSplitFrame.typing = 0 -- reinit the frame so that the entered value will be erased on text entry | |
| 228 else | |
| 229 DoTradeSkill(reagentIndex,numToMake) | |
| 230 end -- if | |
| 231 end | |
| 232 | |
| 201 -- Update counts and button actions | 233 -- Update counts and button actions |
| 202 function MenuFrame.updateCounts() | 234 function MenuFrame.updateCounts() |
| 203 local anyMakable | 235 local anyMakable |
| 204 for i=1,numActiveEntries do | 236 for i=1,numActiveEntries do |
| 205 btn = menuEntries[i] | 237 local btn = menuEntries[i] |
| 206 local itemCount = GetItemCount(btn.reagentID) | 238 local itemCount = GetItemCount(btn.reagentID) |
| 207 | 239 |
| 208 local numMakable = math.floor(itemCount/(btn.reagentsForOneRecipe or 1)) | 240 local numMakable |
| 209 btn.countDetail:SetText(itemCount.."/"..(btn.reagentsForOneRecipe or 1)) | 241 if btn.reagentID then |
| 242 numMakable = math.floor(itemCount/(btn.reagentsForOneRecipe or 1)) | |
| 243 btn.countDetail:SetText(itemCount.."/"..(btn.reagentsForOneRecipe or 1)) | |
| 244 else | |
| 245 for _,reagent in pairs(btn.reagentsForOneRecipe) do | |
| 246 itemCount = GetItemCount(reagent[1]) | |
| 247 if not itemCount then | |
| 248 numMakable = 0 | |
| 249 break | |
| 250 end | |
| 251 if not numMakable then | |
| 252 numMakable = math.floor(itemCount/reagent[2]) | |
| 253 else | |
| 254 numMakable = math.min(numMakable,math.floor(itemCount/reagent[2])) | |
| 255 end | |
| 256 if numMakable==0 then break end | |
| 257 end | |
| 258 btn.countDetail:SetText(numMakable) | |
| 259 end | |
| 210 | 260 |
| 211 if numMakable>0 then | 261 if numMakable>0 then |
| 212 -- Set action | 262 -- Set action |
| 213 if type(btn.action)=="function" then | 263 if type(btn.action)=="function" then |
| 214 btn:SetScript("PreClick",btn.action) | 264 btn:SetScript("PreClick",btn.action) |
| 360 -- Special spell | 410 -- Special spell |
| 361 existsValidEntries = true | 411 existsValidEntries = true |
| 362 noSkipped = menuAddItem(reagent.macro,itemID,reagent) and noSkipped | 412 noSkipped = menuAddItem(reagent.macro,itemID,reagent) and noSkipped |
| 363 else | 413 else |
| 364 -- Standard tradeskill spell | 414 -- Standard tradeskill spell |
| 365 if not reagent.spellName or reagent.spellName == A.currentTradeSkill then | 415 if not reagent.tradeskillName or reagent.tradeskillName == A.currentTradeSkill then |
| 366 existsValidEntries = true | 416 existsValidEntries = true |
| 367 noSkipped = menuAddItem(A.craft,itemID,reagent) and noSkipped | 417 noSkipped = menuAddItem(CraftFromExternal,itemID,reagent) and noSkipped |
| 368 end | 418 end |
| 369 end -- if | 419 end -- if |
| 370 end -- for | 420 end -- for |
| 371 | 421 |
| 372 -- do not show an empty menu | 422 -- do not show an empty menu |
