annotate utils.lua @ 108:618163a6d970 v1.0beta13

Always show counts and bypass all filtering and searches
author contrebasse
date Thu, 02 Jun 2011 14:12:06 +0200
parents d64a19e5a47d
children d60d6b4cab0c
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@108 46 --[[
contrebasse@16 47 function A.numMakable(reagentID)
contrebasse@16 48 -- Look for the recipe to make the item
contrebasse@16 49 local reagentIndex = A.findSkillIndex(reagentID)
contrebasse@25 50 if not reagentIndex then return end
contrebasse@3 51
contrebasse@16 52 -- Check how many items we can craft
contrebasse@16 53 local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex)
contrebasse@25 54 return numReagentMakable, reagentIndex
contrebasse@16 55 end
contrebasse@108 56 --]]
contrebasse@108 57 function A.numMakable(reagentID)
contrebasse@108 58 -- No recipe
contrebasse@108 59 if not A.data[reagentID] then return 0 end
contrebasse@108 60
contrebasse@108 61 -- Many recipes
contrebasse@108 62 local n = 0
contrebasse@108 63 local itemCount
contrebasse@108 64 for _,recipe in pairs(A.data[reagentID]) do
contrebasse@108 65 if recipe[1] then -- only one reagent
contrebasse@108 66 itemCount = GetItemCount(recipe[1])
contrebasse@108 67 if not itemCount then return end
contrebasse@108 68 n = n + math.floor(itemCount/recipe[2])
contrebasse@108 69 else -- many reagents
contrebasse@108 70 local m
contrebasse@108 71 for _,reagent in pairs(recipe[2]) do
contrebasse@108 72 itemCount = GetItemCount(reagent[1])
contrebasse@108 73 if not itemCount then return end
contrebasse@108 74 if not m then
contrebasse@108 75 m = math.floor(itemCount/reagent[2])
contrebasse@108 76 else
contrebasse@108 77 m = math.min(m,math.floor(itemCount/reagent[2]))
contrebasse@108 78 end
contrebasse@108 79 if m==0 then break end
contrebasse@108 80 end
contrebasse@108 81 n = n + m
contrebasse@108 82 end -- if
contrebasse@108 83 end -- for
contrebasse@108 84 return n
contrebasse@108 85 end -- function
contrebasse@16 86
contrebasse@16 87 -- Find the first tradeskill index of the recipe to make an item
contrebasse@16 88 function A.findSkillIndex(itemID)
contrebasse@16 89 for i = 1,GetNumTradeSkills() do
contrebasse@82 90 local _, skillType = GetTradeSkillInfo(i)
contrebasse@16 91 if skillType == "header" then
contrebasse@16 92 else
contrebasse@70 93 local ID = A.link2ID(GetTradeSkillItemLink(i))
contrebasse@70 94 if ID and ID == itemID then
contrebasse@70 95 return i
contrebasse@3 96 end -- if
contrebasse@3 97 end -- if
contrebasse@16 98 end -- for
contrebasse@16 99 end -- function
contrebasse@16 100 end -- do
contrebasse@24 101
contrebasse@24 102
contrebasse@24 103 -- Taken from Datastore_Crafts
contrebasse@24 104 -- *** Scanning functions ***
contrebasse@24 105 do
contrebasse@24 106 local selectedTradeSkillIndex
contrebasse@107 107 local stateSaved
contrebasse@107 108 local filtersState = {}
contrebasse@24 109 local headersState = {}
contrebasse@24 110
contrebasse@107 111 local function ApplyFilters()
contrebasse@107 112 TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp);
contrebasse@107 113 TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials);
contrebasse@107 114 SetTradeSkillSubClassFilter(TradeSkillFrame.filterTbl.subClassValue, 1, 1);
contrebasse@107 115 SetTradeSkillInvSlotFilter(TradeSkillFrame.filterTbl.slotValue, 1, 1);
contrebasse@107 116 TradeSkillUpdateFilterBar();
contrebasse@107 117 CloseDropDownMenus();
contrebasse@107 118 end
contrebasse@107 119
contrebasse@82 120 function A.SaveActiveFilters(headerName)
contrebasse@82 121 A.blockScan = true
contrebasse@82 122
contrebasse@107 123 -- Save filters
contrebasse@108 124 filtersState.text = GetTradeSkillItemNameFilter()
contrebasse@108 125 filtersState.minLevel, filtersState.maxLevel = GetTradeSkillItemLevelFilter()
contrebasse@107 126 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials
contrebasse@107 127 filtersState.hasSkillUp = TradeSkillFrame.filterTbl.hasSkillUp
contrebasse@107 128 filtersState.subClassValue = TradeSkillFrame.filterTbl.subClassValue
contrebasse@107 129 filtersState.slotValue = TradeSkillFrame.filterTbl.slotValue
contrebasse@24 130
contrebasse@107 131 -- Remove all filters
contrebasse@108 132 SetTradeSkillItemNameFilter(nil)
contrebasse@108 133 SetTradeSkillItemLevelFilter(0, 0)
contrebasse@107 134 TradeSkillFrame.filterTbl.hasMaterials = false
contrebasse@107 135 TradeSkillFrame.filterTbl.hasSkillUp = false
contrebasse@107 136 TradeSkillFrame.filterTbl.subClassValue = -1
contrebasse@107 137 TradeSkillFrame.filterTbl.slotValue = -1
contrebasse@107 138 ApplyFilters()
contrebasse@24 139
contrebasse@24 140 -- Headers
contrebasse@107 141 headersState.headerName = headerName
contrebasse@24 142 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories
contrebasse@82 143 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i)
contrebasse@108 144 if (skillType == "header") and skillName==headerName then
contrebasse@108 145 if not isExpanded then
contrebasse@108 146 ExpandTradeSkillSubClass(i)
contrebasse@108 147 table.insert(headersState,true)
contrebasse@108 148 else
contrebasse@108 149 table.insert(headersState,false)
contrebasse@24 150 end
contrebasse@108 151 end
contrebasse@24 152 end
contrebasse@24 153
contrebasse@108 154 stateSaved = true
contrebasse@108 155 A.blockScan = nil
contrebasse@108 156
contrebasse@107 157 --@todo Scroll down to the selected recipe
contrebasse@107 158 -- with TradeSkillSkillXX:Show() ?
contrebasse@24 159 end
contrebasse@24 160
contrebasse@24 161 function A.RestoreActiveFilters()
contrebasse@107 162 if not stateSaved then return end
contrebasse@82 163 A.blockScan = true
contrebasse@82 164
contrebasse@107 165 -- restore headers
contrebasse@24 166 for i = GetNumTradeSkills(), 1, -1 do
contrebasse@107 167 local skillName, skillType = GetTradeSkillInfo(i)
contrebasse@107 168 if (skillType == "header") and skillName==headersState.headerName and table.remove(headersState,1) then
contrebasse@24 169 CollapseTradeSkillSubClass(i)
contrebasse@24 170 end
contrebasse@24 171 end
contrebasse@24 172 wipe(headersState)
contrebasse@107 173
contrebasse@107 174 -- restore filters
contrebasse@108 175 SetTradeSkillItemNameFilter(filtersState.text)
contrebasse@108 176 SetTradeSkillItemLevelFilter(filtersState.minLevel, filtersState.maxLevel)
contrebasse@107 177 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials
contrebasse@107 178 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp
contrebasse@107 179 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue
contrebasse@107 180 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue
contrebasse@107 181 ApplyFilters()
contrebasse@107 182
contrebasse@108 183 stateSaved = nil
contrebasse@108 184 A.blockScan = nil
contrebasse@107 185
contrebasse@108 186 --@todo Scroll down to the selected recipe
contrebasse@108 187 -- with TradeSkillSkillXX:Show() ?
contrebasse@24 188 end
contrebasse@24 189 end
contrebasse@73 190
contrebasse@73 191 function A.isRecipeUnique(itemData)
contrebasse@73 192 local unique = true
contrebasse@107 193
contrebasse@73 194 -- Check if the item is made by only one recipe. If not, return
contrebasse@73 195 if #itemData>1 then
contrebasse@73 196 local spellLink
contrebasse@73 197 for _,v in ipairs(itemData) do
contrebasse@73 198 if not spellLink then
contrebasse@73 199 spellLink = v.spellLink
contrebasse@73 200 else
contrebasse@73 201 if v.spellLink ~= spellLink then
contrebasse@73 202 unique = nil
contrebasse@73 203 break
contrebasse@73 204 end
contrebasse@73 205 end
contrebasse@73 206 end
contrebasse@73 207 end
contrebasse@107 208
contrebasse@73 209 return unique
contrebasse@73 210 end
contrebasse@76 211
contrebasse@76 212 --[[
contrebasse@76 213 function A.isTradeskillUnique(itemData)
contrebasse@85 214 local spellName = itemData[1].spellName
contrebasse@107 215
contrebasse@76 216 -- Check if the item is made by only one recipe. If not, return
contrebasse@76 217 if #itemData>1 then
contrebasse@76 218 for _,v in ipairs(itemData) do
contrebasse@85 219 if v.spellName ~= spellName then
contrebasse@85 220 spellName = nil
contrebasse@76 221 break
contrebasse@76 222 end
contrebasse@76 223 end
contrebasse@76 224 end
contrebasse@89 225
contrebasse@85 226 return spellName
contrebasse@76 227 end
contrebasse@107 228 --]]