Mercurial > wow > reagentmaker
view utils.lua @ 32:416c307fd00b
Add recipe tooltip for the crafted reagent in the external window
author | contrebasse |
---|---|
date | Thu, 28 Apr 2011 23:39:30 +0200 |
parents | 578b9c9479c9 |
children | aa2f6965c0f6 |
line wrap: on
line source
local addonName, A = ... -- Lua functions local tonumber = tonumber local select = select local sfind = string.find -- Wow functions -- DEBUG Print function A.DEBUG(msg) -- GLOBALS: DEFAULT_CHAT_FRAME DEFAULT_CHAT_FRAME:AddMessage(msg or "nil",1,0,0) end -- function -- Returns the item ID from its link function A.link2ID(link) return tonumber(select(3,sfind(link or "", "-*:(%d+)[:|].*")) or "") end -- function -- Returns the button number for the reagents buttons function A.buttonNumber(btn) -- "TradeSkillReagentN" return tonumber(btn:GetName():sub(-1)) end do -- Wow functions local GetTradeSkillInfo = GetTradeSkillInfo local GetNumTradeSkills = GetNumTradeSkills local GetTradeSkillItemLink = GetTradeSkillItemLink -- Gives the number of craftable objects function A.numMakable(reagentID) -- Look for the recipe to make the item local reagentIndex = A.findSkillIndex(reagentID) if not reagentIndex then return end -- Check how many items we can craft local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex) return numReagentMakable, reagentIndex end -- Find the first tradeskill index of the recipe to make an item function A.findSkillIndex(itemID) for i = 1,GetNumTradeSkills() do local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(i) if skillType == "header" then else if skillName then local ID = A.link2ID(GetTradeSkillItemLink(i)) if ID and ID == itemID then return i end -- if end -- if end -- if end -- for A.DEBUG("Tradeskill not found for "..itemID) end -- function end -- do -- Taken from Datastore_Crafts -- *** Scanning functions *** do local selectedTradeSkillIndex local subClasses, subClassID local invSlots, invSlotID local haveMats local headersState = {} local function GetSubClassID() -- The purpose of this function is to get the subClassID in a UI independant way -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name. if GetTradeSkillSubClassFilter(0) then -- if "All Subclasses" is selected, GetTradeSkillSubClassFilter() will return 1 for all indexes, including 0 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown)) end local filter for i = 1, #subClasses do filter = GetTradeSkillSubClassFilter(i) if filter then return i+1 -- ex: 3rd element of the subClasses array, but 4th in the dropdown due to "All Subclasses", so return i+1 end end end local function GetInvSlotID() -- The purpose of this function is to get the invSlotID in a UI independant way (same as GetSubClassID) -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown), which uses a hardcoded frame name. if GetTradeSkillInvSlotFilter(0) then -- if "All Slots" is selected, GetTradeSkillInvSlotFilter() will return 1 for all indexes, including 0 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown)) end local filter for i = 1, #invSlots do filter = GetTradeSkillInvSlotFilter(i) if filter then return i+1 -- ex: 3rd element of the invSlots array, but 4th in the dropdown due to "All Slots", so return i+1 end end end function A.SaveActiveFilters() print("save") selectedTradeSkillIndex = GetTradeSkillSelectionIndex() subClasses = { GetTradeSkillSubClasses() } invSlots = { GetTradeSkillInvSlots() } subClassID = GetSubClassID() invSlotID = GetInvSlotID() -- Subclasses SetTradeSkillSubClassFilter(0, 1, 1) -- this checks "All subclasses" if TradeSkillSubClassDropDown then UIDropDownMenu_SetSelectedID(TradeSkillSubClassDropDown, 1) end -- Inventory slots SetTradeSkillInvSlotFilter(0, 1, 1) -- this checks "All slots" if TradeSkillInvSlotDropDown then UIDropDownMenu_SetSelectedID(TradeSkillInvSlotDropDown, 1) end -- Have Materials if TradeSkillFrameAvailableFilterCheckButton then haveMats = TradeSkillFrameAvailableFilterCheckButton:GetChecked() -- nil or true TradeSkillFrameAvailableFilterCheckButton:SetChecked(false) end TradeSkillOnlyShowMakeable(false) -- Headers local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique. for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories local _, skillType, _, isExpanded = GetTradeSkillInfo(i) if (skillType == "header") then headerCount = headerCount + 1 if not isExpanded then ExpandTradeSkillSubClass(i) headersState[headerCount] = true end end end print("saved") end function A.RestoreActiveFilters() print("restore") -- Subclasses SetTradeSkillSubClassFilter(subClassID-1, 1, 1) -- this checks the previously checked value local frame = TradeSkillSubClassDropDown if frame then -- other addons might nil this frame (delayed load, etc..), so secure DDM calls local text = (subClassID == 1) and ALL_SUBCLASSES or subClasses[subClassID-1] UIDropDownMenu_SetSelectedID(frame, subClassID) UIDropDownMenu_SetText(frame, text); end subClassID = nil wipe(subClasses) subClasses = nil -- Inventory slots invSlotID = invSlotID or 1 SetTradeSkillInvSlotFilter(invSlotID-1, 1, 1) -- this checks the previously checked value frame = TradeSkillInvSlotDropDown if frame then local text = (invSlotID == 1) and ALL_INVENTORY_SLOTS or invSlots[invSlotID-1] UIDropDownMenu_SetSelectedID(frame, invSlotID) UIDropDownMenu_SetText(frame, text); end invSlotID = nil wipe(invSlots) invSlots = nil -- Have Materials if TradeSkillFrameAvailableFilterCheckButton then TradeSkillFrameAvailableFilterCheckButton:SetChecked(haveMats or false) end TradeSkillOnlyShowMakeable(haveMats or false) haveMats = nil SelectTradeSkill(selectedTradeSkillIndex) selectedTradeSkillIndex = nil -- Headers local headerCount = 0 for i = GetNumTradeSkills(), 1, -1 do local _, skillType = GetTradeSkillInfo(i) if (skillType == "header") then headerCount = headerCount + 1 if headersState[headerCount] then CollapseTradeSkillSubClass(i) end end end wipe(headersState) end print("restored") end