Mercurial > wow > reagentmaker
comparison 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 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 107:d64a19e5a47d | 108:618163a6d970 | 
|---|---|
| 41 local GetTradeSkillInfo = GetTradeSkillInfo | 41 local GetTradeSkillInfo = GetTradeSkillInfo | 
| 42 local GetNumTradeSkills = GetNumTradeSkills | 42 local GetNumTradeSkills = GetNumTradeSkills | 
| 43 local GetTradeSkillItemLink = GetTradeSkillItemLink | 43 local GetTradeSkillItemLink = GetTradeSkillItemLink | 
| 44 | 44 | 
| 45 -- Gives the number of craftable objects | 45 -- Gives the number of craftable objects | 
| 46 --[[ | |
| 46 function A.numMakable(reagentID) | 47 function A.numMakable(reagentID) | 
| 47 -- Look for the recipe to make the item | 48 -- Look for the recipe to make the item | 
| 48 local reagentIndex = A.findSkillIndex(reagentID) | 49 local reagentIndex = A.findSkillIndex(reagentID) | 
| 49 if not reagentIndex then return end | 50 if not reagentIndex then return end | 
| 50 | 51 | 
| 51 -- Check how many items we can craft | 52 -- Check how many items we can craft | 
| 52 local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex) | 53 local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex) | 
| 53 return numReagentMakable, reagentIndex | 54 return numReagentMakable, reagentIndex | 
| 54 end | 55 end | 
| 56 --]] | |
| 57 function A.numMakable(reagentID) | |
| 58 -- No recipe | |
| 59 if not A.data[reagentID] then return 0 end | |
| 60 | |
| 61 -- Many recipes | |
| 62 local n = 0 | |
| 63 local itemCount | |
| 64 for _,recipe in pairs(A.data[reagentID]) do | |
| 65 if recipe[1] then -- only one reagent | |
| 66 itemCount = GetItemCount(recipe[1]) | |
| 67 if not itemCount then return end | |
| 68 n = n + math.floor(itemCount/recipe[2]) | |
| 69 else -- many reagents | |
| 70 local m | |
| 71 for _,reagent in pairs(recipe[2]) do | |
| 72 itemCount = GetItemCount(reagent[1]) | |
| 73 if not itemCount then return end | |
| 74 if not m then | |
| 75 m = math.floor(itemCount/reagent[2]) | |
| 76 else | |
| 77 m = math.min(m,math.floor(itemCount/reagent[2])) | |
| 78 end | |
| 79 if m==0 then break end | |
| 80 end | |
| 81 n = n + m | |
| 82 end -- if | |
| 83 end -- for | |
| 84 return n | |
| 85 end -- function | |
| 55 | 86 | 
| 56 -- Find the first tradeskill index of the recipe to make an item | 87 -- Find the first tradeskill index of the recipe to make an item | 
| 57 function A.findSkillIndex(itemID) | 88 function A.findSkillIndex(itemID) | 
| 58 for i = 1,GetNumTradeSkills() do | 89 for i = 1,GetNumTradeSkills() do | 
| 59 local _, skillType = GetTradeSkillInfo(i) | 90 local _, skillType = GetTradeSkillInfo(i) | 
| 75 local selectedTradeSkillIndex | 106 local selectedTradeSkillIndex | 
| 76 local stateSaved | 107 local stateSaved | 
| 77 local filtersState = {} | 108 local filtersState = {} | 
| 78 local headersState = {} | 109 local headersState = {} | 
| 79 | 110 | 
| 80 local function GetSubClassID() | |
| 81 -- The purpose of this function is to get the subClassID in a UI independant way | |
| 82 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name. | |
| 83 | |
| 84 if GetTradeSkillSubClassFilter(0) then -- if "All Subclasses" is selected, GetTradeSkillSubClassFilter() will return 1 for all indexes, including 0 | |
| 85 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown)) | |
| 86 end | |
| 87 | |
| 88 local filter | |
| 89 for i = 1, #subClasses do | |
| 90 filter = GetTradeSkillSubClassFilter(i) | |
| 91 if filter then | |
| 92 return i+1 -- ex: 3rd element of the subClasses array, but 4th in the dropdown due to "All Subclasses", so return i+1 | |
| 93 end | |
| 94 end | |
| 95 end | |
| 96 | |
| 97 local function GetInvSlotID() | |
| 98 -- The purpose of this function is to get the invSlotID in a UI independant way (same as GetSubClassID) | |
| 99 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown), which uses a hardcoded frame name. | |
| 100 | |
| 101 if GetTradeSkillInvSlotFilter(0) then -- if "All Slots" is selected, GetTradeSkillInvSlotFilter() will return 1 for all indexes, including 0 | |
| 102 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown)) | |
| 103 end | |
| 104 | |
| 105 local filter | |
| 106 for i = 1, #invSlots do | |
| 107 filter = GetTradeSkillInvSlotFilter(i) | |
| 108 if filter then | |
| 109 return i+1 -- ex: 3rd element of the invSlots array, but 4th in the dropdown due to "All Slots", so return i+1 | |
| 110 end | |
| 111 end | |
| 112 end | |
| 113 | |
| 114 local function ApplyFilters() | 111 local function ApplyFilters() | 
| 115 TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp); | 112 TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp); | 
| 116 TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials); | 113 TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials); | 
| 117 SetTradeSkillSubClassFilter(TradeSkillFrame.filterTbl.subClassValue, 1, 1); | 114 SetTradeSkillSubClassFilter(TradeSkillFrame.filterTbl.subClassValue, 1, 1); | 
| 118 SetTradeSkillInvSlotFilter(TradeSkillFrame.filterTbl.slotValue, 1, 1); | 115 SetTradeSkillInvSlotFilter(TradeSkillFrame.filterTbl.slotValue, 1, 1); | 
| 122 | 119 | 
| 123 function A.SaveActiveFilters(headerName) | 120 function A.SaveActiveFilters(headerName) | 
| 124 A.blockScan = true | 121 A.blockScan = true | 
| 125 | 122 | 
| 126 -- Save filters | 123 -- Save filters | 
| 124 filtersState.text = GetTradeSkillItemNameFilter() | |
| 125 filtersState.minLevel, filtersState.maxLevel = GetTradeSkillItemLevelFilter() | |
| 127 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials | 126 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials | 
| 128 filtersState.hasSkillUp = TradeSkillFrame.filterTbl.hasSkillUp | 127 filtersState.hasSkillUp = TradeSkillFrame.filterTbl.hasSkillUp | 
| 129 filtersState.subClassValue = TradeSkillFrame.filterTbl.subClassValue | 128 filtersState.subClassValue = TradeSkillFrame.filterTbl.subClassValue | 
| 130 filtersState.slotValue = TradeSkillFrame.filterTbl.slotValue | 129 filtersState.slotValue = TradeSkillFrame.filterTbl.slotValue | 
| 131 | 130 | 
| 132 -- Remove all filters | 131 -- Remove all filters | 
| 132 SetTradeSkillItemNameFilter(nil) | |
| 133 SetTradeSkillItemLevelFilter(0, 0) | |
| 133 TradeSkillFrame.filterTbl.hasMaterials = false | 134 TradeSkillFrame.filterTbl.hasMaterials = false | 
| 134 TradeSkillFrame.filterTbl.hasSkillUp = false | 135 TradeSkillFrame.filterTbl.hasSkillUp = false | 
| 135 TradeSkillFrame.filterTbl.subClassValue = -1 | 136 TradeSkillFrame.filterTbl.subClassValue = -1 | 
| 136 TradeSkillFrame.filterTbl.slotValue = -1 | 137 TradeSkillFrame.filterTbl.slotValue = -1 | 
| 137 ApplyFilters() | 138 ApplyFilters() | 
| 138 | 139 | 
| 139 -- Headers | 140 -- Headers | 
| 140 --local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique. | |
| 141 headersState.headerName = headerName | 141 headersState.headerName = headerName | 
| 142 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories | 142 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories | 
| 143 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) | 143 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) | 
| 144 if (skillType == "header") and skillName==headerName then | 144 if (skillType == "header") and skillName==headerName then | 
| 145 if not isExpanded then | 145 if not isExpanded then | 
| 146 ExpandTradeSkillSubClass(i) | 146 ExpandTradeSkillSubClass(i) | 
| 147 table.insert(headersState,true) | 147 table.insert(headersState,true) | 
| 148 else | 148 else | 
| 149 table.insert(headersState,false) | 149 table.insert(headersState,false) | 
| 150 end | |
| 151 end | 150 end | 
| 152 end | 151 end | 
| 152 end | |
| 153 | |
| 154 stateSaved = true | |
| 155 A.blockScan = nil | |
| 153 | 156 | 
| 154 --@todo Scroll down to the selected recipe | 157 --@todo Scroll down to the selected recipe | 
| 155 -- with TradeSkillSkillXX:Show() ? | 158 -- with TradeSkillSkillXX:Show() ? | 
| 156 | |
| 157 stateSaved = true | |
| 158 | |
| 159 A.blockScan = nil | |
| 160 end | 159 end | 
| 161 | 160 | 
| 162 function A.RestoreActiveFilters() | 161 function A.RestoreActiveFilters() | 
| 163 if not stateSaved then return end | 162 if not stateSaved then return end | 
| 164 | |
| 165 A.blockScan = true | 163 A.blockScan = true | 
| 166 | 164 | 
| 167 -- restore headers | 165 -- restore headers | 
| 168 for i = GetNumTradeSkills(), 1, -1 do | 166 for i = GetNumTradeSkills(), 1, -1 do | 
| 169 local skillName, skillType = GetTradeSkillInfo(i) | 167 local skillName, skillType = GetTradeSkillInfo(i) | 
| 172 end | 170 end | 
| 173 end | 171 end | 
| 174 wipe(headersState) | 172 wipe(headersState) | 
| 175 | 173 | 
| 176 -- restore filters | 174 -- restore filters | 
| 175 SetTradeSkillItemNameFilter(filtersState.text) | |
| 176 SetTradeSkillItemLevelFilter(filtersState.minLevel, filtersState.maxLevel) | |
| 177 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials | 177 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials | 
| 178 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp | 178 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp | 
| 179 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue | 179 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue | 
| 180 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue | 180 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue | 
| 181 ApplyFilters() | 181 ApplyFilters() | 
| 182 | 182 | 
| 183 | |
| 184 --print("restored") | |
| 185 | |
| 186 stateSaved = nil | 183 stateSaved = nil | 
| 187 | |
| 188 A.blockScan = nil | 184 A.blockScan = nil | 
| 185 | |
| 186 --@todo Scroll down to the selected recipe | |
| 187 -- with TradeSkillSkillXX:Show() ? | |
| 189 end | 188 end | 
| 190 end | 189 end | 
| 191 | 190 | 
| 192 function A.isRecipeUnique(itemData) | 191 function A.isRecipeUnique(itemData) | 
| 193 local unique = true | 192 local unique = true | 
