annotate utils.lua @ 106:f857e01b067e

Added tag v1.0beta12 for changeset 08ede537787b
author contrebasse
date Tue, 31 May 2011 00:57:27 +0200
parents 8dd86b6b76d8
children d64a19e5a47d
rev   line source
contrebasse@0 1 local addonName, A = ...
contrebasse@0 2
contrebasse@16 3 -- Lua functions
contrebasse@16 4 local tonumber = tonumber
contrebasse@16 5 local select = select
contrebasse@16 6 local sfind = string.find
contrebasse@16 7
contrebasse@16 8 -- Wow functions
contrebasse@16 9
contrebasse@3 10 -- DEBUG Print
contrebasse@3 11 function A.DEBUG(msg)
contrebasse@16 12 -- GLOBALS: DEFAULT_CHAT_FRAME
contrebasse@3 13 DEFAULT_CHAT_FRAME:AddMessage(msg or "nil",1,0,0)
contrebasse@3 14 end -- function
contrebasse@0 15
contrebasse@38 16 -- Messages to the user
contrebasse@38 17 function A.Warn(msg)
contrebasse@38 18 if not msg then return end
contrebasse@38 19 local event = "UI_INFO_MESSAGE"
contrebasse@38 20 UIErrorsFrame_OnEvent(UIErrorsFrame, event, msg)
contrebasse@38 21 end -- function
contrebasse@38 22 function A.Error(msg)
contrebasse@38 23 if not msg then return end
contrebasse@38 24 local event = "UI_ERROR_MESSAGE"
contrebasse@38 25 UIErrorsFrame_OnEvent(UIErrorsFrame, event, msg)
contrebasse@38 26 end -- function
contrebasse@38 27
contrebasse@3 28 -- Returns the item ID from its link
contrebasse@3 29 function A.link2ID(link)
contrebasse@16 30 return tonumber(select(3,sfind(link or "", "-*:(%d+)[:|].*")) or "")
contrebasse@3 31 end -- function
contrebasse@3 32
contrebasse@3 33 -- Returns the button number for the reagents buttons
contrebasse@3 34 function A.buttonNumber(btn)
contrebasse@3 35 -- "TradeSkillReagentN"
contrebasse@3 36 return tonumber(btn:GetName():sub(-1))
contrebasse@0 37 end
contrebasse@0 38
contrebasse@16 39 do
contrebasse@16 40 -- Wow functions
contrebasse@16 41 local GetTradeSkillInfo = GetTradeSkillInfo
contrebasse@16 42 local GetNumTradeSkills = GetNumTradeSkills
contrebasse@16 43 local GetTradeSkillItemLink = GetTradeSkillItemLink
contrebasse@0 44
contrebasse@16 45 -- Gives the number of craftable objects
contrebasse@16 46 function A.numMakable(reagentID)
contrebasse@16 47 -- Look for the recipe to make the item
contrebasse@16 48 local reagentIndex = A.findSkillIndex(reagentID)
contrebasse@25 49 if not reagentIndex then return end
contrebasse@3 50
contrebasse@16 51 -- Check how many items we can craft
contrebasse@16 52 local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex)
contrebasse@25 53 return numReagentMakable, reagentIndex
contrebasse@16 54 end
contrebasse@16 55
contrebasse@16 56 -- Find the first tradeskill index of the recipe to make an item
contrebasse@16 57 function A.findSkillIndex(itemID)
contrebasse@16 58 for i = 1,GetNumTradeSkills() do
contrebasse@82 59 local _, skillType = GetTradeSkillInfo(i)
contrebasse@16 60 if skillType == "header" then
contrebasse@16 61 else
contrebasse@70 62 local ID = A.link2ID(GetTradeSkillItemLink(i))
contrebasse@70 63 if ID and ID == itemID then
contrebasse@70 64 return i
contrebasse@3 65 end -- if
contrebasse@3 66 end -- if
contrebasse@16 67 end -- for
contrebasse@16 68 end -- function
contrebasse@16 69 end -- do
contrebasse@24 70
contrebasse@24 71
contrebasse@24 72 -- Taken from Datastore_Crafts
contrebasse@24 73 -- *** Scanning functions ***
contrebasse@24 74 do
contrebasse@24 75 local selectedTradeSkillIndex
contrebasse@24 76 local subClasses, subClassID
contrebasse@24 77 local invSlots, invSlotID
contrebasse@24 78 local haveMats
contrebasse@24 79 local headersState = {}
contrebasse@24 80
contrebasse@24 81 local function GetSubClassID()
contrebasse@24 82 -- The purpose of this function is to get the subClassID in a UI independant way
contrebasse@24 83 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name.
contrebasse@24 84
contrebasse@24 85 if GetTradeSkillSubClassFilter(0) then -- if "All Subclasses" is selected, GetTradeSkillSubClassFilter() will return 1 for all indexes, including 0
contrebasse@24 86 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown))
contrebasse@24 87 end
contrebasse@24 88
contrebasse@24 89 local filter
contrebasse@24 90 for i = 1, #subClasses do
contrebasse@24 91 filter = GetTradeSkillSubClassFilter(i)
contrebasse@24 92 if filter then
contrebasse@24 93 return i+1 -- ex: 3rd element of the subClasses array, but 4th in the dropdown due to "All Subclasses", so return i+1
contrebasse@24 94 end
contrebasse@24 95 end
contrebasse@24 96 end
contrebasse@24 97
contrebasse@24 98 local function GetInvSlotID()
contrebasse@24 99 -- The purpose of this function is to get the invSlotID in a UI independant way (same as GetSubClassID)
contrebasse@24 100 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown), which uses a hardcoded frame name.
contrebasse@24 101
contrebasse@24 102 if GetTradeSkillInvSlotFilter(0) then -- if "All Slots" is selected, GetTradeSkillInvSlotFilter() will return 1 for all indexes, including 0
contrebasse@24 103 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown))
contrebasse@24 104 end
contrebasse@24 105
contrebasse@24 106 local filter
contrebasse@24 107 for i = 1, #invSlots do
contrebasse@24 108 filter = GetTradeSkillInvSlotFilter(i)
contrebasse@24 109 if filter then
contrebasse@24 110 return i+1 -- ex: 3rd element of the invSlots array, but 4th in the dropdown due to "All Slots", so return i+1
contrebasse@24 111 end
contrebasse@24 112 end
contrebasse@24 113 end
contrebasse@24 114
contrebasse@82 115 function A.SaveActiveFilters(headerName)
contrebasse@82 116 A.blockScan = true
contrebasse@82 117
contrebasse@82 118 --[[
contrebasse@24 119 print("save")
contrebasse@82 120 print(GetNumTradeSkills())
contrebasse@24 121 selectedTradeSkillIndex = GetTradeSkillSelectionIndex()
contrebasse@24 122
contrebasse@24 123 subClasses = { GetTradeSkillSubClasses() }
contrebasse@24 124 invSlots = { GetTradeSkillInvSlots() }
contrebasse@24 125 subClassID = GetSubClassID()
contrebasse@24 126 invSlotID = GetInvSlotID()
contrebasse@24 127
contrebasse@24 128 -- Subclasses
contrebasse@24 129 SetTradeSkillSubClassFilter(0, 1, 1) -- this checks "All subclasses"
contrebasse@24 130 if TradeSkillSubClassDropDown then
contrebasse@24 131 UIDropDownMenu_SetSelectedID(TradeSkillSubClassDropDown, 1)
contrebasse@24 132 end
contrebasse@82 133 print(GetNumTradeSkills())
contrebasse@24 134
contrebasse@24 135 -- Inventory slots
contrebasse@24 136 SetTradeSkillInvSlotFilter(0, 1, 1) -- this checks "All slots"
contrebasse@24 137 if TradeSkillInvSlotDropDown then
contrebasse@24 138 UIDropDownMenu_SetSelectedID(TradeSkillInvSlotDropDown, 1)
contrebasse@24 139 end
contrebasse@82 140 print(GetNumTradeSkills())
contrebasse@24 141
contrebasse@24 142 -- Have Materials
contrebasse@24 143 if TradeSkillFrameAvailableFilterCheckButton then
contrebasse@24 144 haveMats = TradeSkillFrameAvailableFilterCheckButton:GetChecked() -- nil or true
contrebasse@24 145 TradeSkillFrameAvailableFilterCheckButton:SetChecked(false)
contrebasse@24 146 end
contrebasse@24 147 TradeSkillOnlyShowMakeable(false)
contrebasse@82 148 print(GetNumTradeSkills())
contrebasse@82 149 --]]
contrebasse@24 150
contrebasse@24 151 -- Headers
contrebasse@82 152 --local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique.
contrebasse@24 153 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories
contrebasse@82 154 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i)
contrebasse@24 155 if (skillType == "header") then
contrebasse@82 156 --headerCount = headerCount + 1
contrebasse@82 157 if not isExpanded and skillName==headerName then
contrebasse@24 158 ExpandTradeSkillSubClass(i)
contrebasse@82 159 --print(GetNumTradeSkills())
contrebasse@82 160 --headersState[headerCount] = true
contrebasse@24 161 end
contrebasse@24 162 end
contrebasse@24 163 end
contrebasse@24 164
contrebasse@82 165 --print("saved")
contrebasse@82 166
contrebasse@82 167 A.blockScan = nil
contrebasse@24 168 end
contrebasse@24 169
contrebasse@24 170 function A.RestoreActiveFilters()
contrebasse@82 171 A.blockScan = true
contrebasse@82 172
contrebasse@24 173 print("restore")
contrebasse@24 174 -- Subclasses
contrebasse@24 175 SetTradeSkillSubClassFilter(subClassID-1, 1, 1) -- this checks the previously checked value
contrebasse@24 176
contrebasse@24 177 local frame = TradeSkillSubClassDropDown
contrebasse@24 178 if frame then -- other addons might nil this frame (delayed load, etc..), so secure DDM calls
contrebasse@24 179 local text = (subClassID == 1) and ALL_SUBCLASSES or subClasses[subClassID-1]
contrebasse@24 180 UIDropDownMenu_SetSelectedID(frame, subClassID)
contrebasse@24 181 UIDropDownMenu_SetText(frame, text);
contrebasse@24 182 end
contrebasse@24 183
contrebasse@24 184 subClassID = nil
contrebasse@24 185 wipe(subClasses)
contrebasse@24 186 subClasses = nil
contrebasse@24 187
contrebasse@24 188 -- Inventory slots
contrebasse@24 189 invSlotID = invSlotID or 1
contrebasse@24 190 SetTradeSkillInvSlotFilter(invSlotID-1, 1, 1) -- this checks the previously checked value
contrebasse@24 191
contrebasse@24 192 frame = TradeSkillInvSlotDropDown
contrebasse@24 193 if frame then
contrebasse@24 194 local text = (invSlotID == 1) and ALL_INVENTORY_SLOTS or invSlots[invSlotID-1]
contrebasse@24 195 UIDropDownMenu_SetSelectedID(frame, invSlotID)
contrebasse@24 196 UIDropDownMenu_SetText(frame, text);
contrebasse@24 197 end
contrebasse@24 198
contrebasse@24 199 invSlotID = nil
contrebasse@24 200 wipe(invSlots)
contrebasse@24 201 invSlots = nil
contrebasse@24 202
contrebasse@24 203 -- Have Materials
contrebasse@24 204 if TradeSkillFrameAvailableFilterCheckButton then
contrebasse@24 205 TradeSkillFrameAvailableFilterCheckButton:SetChecked(haveMats or false)
contrebasse@24 206 end
contrebasse@24 207 TradeSkillOnlyShowMakeable(haveMats or false)
contrebasse@24 208 haveMats = nil
contrebasse@24 209
contrebasse@24 210 SelectTradeSkill(selectedTradeSkillIndex)
contrebasse@24 211 selectedTradeSkillIndex = nil
contrebasse@24 212
contrebasse@24 213 -- Headers
contrebasse@24 214 local headerCount = 0
contrebasse@24 215 for i = GetNumTradeSkills(), 1, -1 do
contrebasse@24 216 local _, skillType = GetTradeSkillInfo(i)
contrebasse@24 217 if (skillType == "header") then
contrebasse@24 218 headerCount = headerCount + 1
contrebasse@24 219 if headersState[headerCount] then
contrebasse@24 220 CollapseTradeSkillSubClass(i)
contrebasse@24 221 end
contrebasse@24 222 end
contrebasse@24 223 end
contrebasse@24 224 wipe(headersState)
contrebasse@24 225 end
contrebasse@24 226 print("restored")
contrebasse@82 227
contrebasse@82 228 A.blockScan = nil
contrebasse@24 229 end
contrebasse@73 230
contrebasse@73 231 function A.isRecipeUnique(itemData)
contrebasse@73 232 local unique = true
contrebasse@73 233
contrebasse@73 234 -- Check if the item is made by only one recipe. If not, return
contrebasse@73 235 if #itemData>1 then
contrebasse@73 236 local spellLink
contrebasse@73 237 for _,v in ipairs(itemData) do
contrebasse@73 238 if not spellLink then
contrebasse@73 239 spellLink = v.spellLink
contrebasse@73 240 else
contrebasse@73 241 if v.spellLink ~= spellLink then
contrebasse@73 242 unique = nil
contrebasse@73 243 break
contrebasse@73 244 end
contrebasse@73 245 end
contrebasse@73 246 end
contrebasse@73 247 end
contrebasse@73 248
contrebasse@73 249 return unique
contrebasse@73 250 end
contrebasse@76 251
contrebasse@76 252 --[[
contrebasse@76 253 function A.isTradeskillUnique(itemData)
contrebasse@85 254 local spellName = itemData[1].spellName
contrebasse@76 255
contrebasse@76 256 -- Check if the item is made by only one recipe. If not, return
contrebasse@76 257 if #itemData>1 then
contrebasse@76 258 for _,v in ipairs(itemData) do
contrebasse@85 259 if v.spellName ~= spellName then
contrebasse@85 260 spellName = nil
contrebasse@76 261 break
contrebasse@76 262 end
contrebasse@76 263 end
contrebasse@76 264 end
contrebasse@89 265
contrebasse@85 266 return spellName
contrebasse@76 267 end
contrebasse@76 268 --]]