comparison utils.lua @ 111:af23986010ef v1.1beta0

Rewrote the main part to clarify things, should have removed some hidden nasty bugs.
author contrebasse
date Thu, 02 Jun 2011 23:07:23 +0200
parents d60d6b4cab0c
children 7ce304c296b0
comparison
equal deleted inserted replaced
110:d60d6b4cab0c 111:af23986010ef
1 local addonName, A = ... 1 local addonName, A = ...
2
3 -- GLOBALS: UIErrorsFrame, UIErrorsFrame_OnEvent
2 4
3 -- Lua functions 5 -- Lua functions
4 local tonumber = tonumber 6 local tonumber = tonumber
5 local select = select 7 local select = select
6 local sfind = string.find 8 local sfind = string.find
9 local min = math.min
10 local floor = math.floor
11 local pairs = pairs
12 local ipairs = ipairs
13 local wipe = wipe
14 local tinsert = tinsert
15 local tremove = tremove
7 16
8 -- Wow functions 17 -- Wow functions
9 18 local GetItemCount = GetItemCount
10 -- DEBUG Print
11 function A.DEBUG(msg)
12 -- GLOBALS: DEFAULT_CHAT_FRAME
13 DEFAULT_CHAT_FRAME:AddMessage(msg or "nil",1,0,0)
14 end -- function
15 19
16 -- Messages to the user 20 -- Messages to the user
17 function A.Warn(msg) 21 function A.Warn(msg)
18 if not msg then return end 22 if not msg then return end
19 local event = "UI_INFO_MESSAGE" 23 local event = "UI_INFO_MESSAGE"
39 do 43 do
40 -- Wow functions 44 -- Wow functions
41 local GetTradeSkillInfo = GetTradeSkillInfo 45 local GetTradeSkillInfo = GetTradeSkillInfo
42 local GetNumTradeSkills = GetNumTradeSkills 46 local GetNumTradeSkills = GetNumTradeSkills
43 local GetTradeSkillItemLink = GetTradeSkillItemLink 47 local GetTradeSkillItemLink = GetTradeSkillItemLink
48 local GetTradeSkillRecipeLink = GetTradeSkillRecipeLink
44 49
45 function A.numRecipeMakable(reagentIDIfUnique,reagents) 50 function A.numRecipeMakable(reagentIDIfUnique,reagents)
51 local itemCount
46 if reagentIDIfUnique then -- only one reagent 52 if reagentIDIfUnique then -- only one reagent
47 itemCount = GetItemCount(reagentIDIfUnique) 53 itemCount = GetItemCount(reagentIDIfUnique)
48 if not itemCount then return end 54 if not itemCount then return end
49 return math.floor(itemCount/reagents) 55 return floor(itemCount/reagents)
50 else -- many reagents 56 else -- many reagents
51 local m 57 local m
52 for _,reagent in pairs(reagents) do 58 for _,reagent in pairs(reagents) do
53 itemCount = GetItemCount(reagent[1]) 59 itemCount = GetItemCount(reagent[1])
54 if not itemCount then return end 60 if not itemCount then return end
55 if not m then 61 if not m then
56 m = math.floor(itemCount/reagent[2]) 62 m = floor(itemCount/reagent[2])
57 else 63 else
58 m = math.min(m,math.floor(itemCount/reagent[2])) 64 m = min(m,floor(itemCount/reagent[2]))
59 end 65 end
60 if m==0 then break end 66 if m==0 then break end
61 end 67 end
62 return m 68 return m
63 end -- if 69 end -- if
64 end 70 end
65 71
66 -- Gives the number of craftable objects 72 -- Gives the total number of craftable objects
67 function A.numMakable(reagentID) 73 function A.numMakable(reagentID)
68 -- No recipe 74 -- No recipe
69 if not A.data[reagentID] then return 0 end 75 if not A.data[reagentID] then return 0 end
70 76
71 -- Many recipes 77 -- Many recipes
86 end -- if 92 end -- if
87 end -- for 93 end -- for
88 end -- function 94 end -- function
89 95
90 -- Find the exact tradeskill index of the recipe to make an item 96 -- Find the exact tradeskill index of the recipe to make an item
91 function A.findExactSkillIndex(itemID,recipeName) 97 function A.findExactSkillIndex(itemID,recipeLink)
92 if not itemID or not recipeName then return end 98 if not itemID or not recipeLink then return end
93 for i = 1,GetNumTradeSkills() do 99 for i = 1,GetNumTradeSkills() do
94 local skillName, skillType = GetTradeSkillInfo(i) 100 if select(2,GetTradeSkillInfo(i)) ~= "header" and GetTradeSkillRecipeLink(i)==recipeLink and A.link2ID(GetTradeSkillItemLink(i)) == itemID then
95 if skillType ~= "header" and skillName==recipeName and A.link2ID(GetTradeSkillItemLink(i)) == itemID then
96 return i 101 return i
97 end -- if 102 end -- if
98 end -- for 103 end -- for
99 end -- function 104 end -- function
100 end -- do 105 end -- do
116 CloseDropDownMenus(); 121 CloseDropDownMenus();
117 end 122 end
118 123
119 function A.SaveActiveFilters(headerName) 124 function A.SaveActiveFilters(headerName)
120 A.blockScan = true 125 A.blockScan = true
126
127 -- Save position
128 filtersState.positionOffset = FauxScrollFrame_GetOffset(TradeSkillListScrollFrame)
129 filtersState.positionValue = TradeSkillListScrollFrameScrollBar:GetValue()
121 130
122 -- Save filters 131 -- Save filters
123 filtersState.text = GetTradeSkillItemNameFilter() 132 filtersState.text = GetTradeSkillItemNameFilter()
124 filtersState.minLevel, filtersState.maxLevel = GetTradeSkillItemLevelFilter() 133 filtersState.minLevel, filtersState.maxLevel = GetTradeSkillItemLevelFilter()
125 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials 134 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials
141 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories 150 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories
142 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) 151 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i)
143 if (skillType == "header") and skillName==headerName then 152 if (skillType == "header") and skillName==headerName then
144 if not isExpanded then 153 if not isExpanded then
145 ExpandTradeSkillSubClass(i) 154 ExpandTradeSkillSubClass(i)
146 table.insert(headersState,true) 155 tinsert(headersState,true)
147 else 156 else
148 table.insert(headersState,false) 157 tinsert(headersState,false)
149 end 158 end
150 end 159 end
151 end 160 end
152 161
153 stateSaved = true 162 stateSaved = true
162 A.blockScan = true 171 A.blockScan = true
163 172
164 -- restore headers 173 -- restore headers
165 for i = GetNumTradeSkills(), 1, -1 do 174 for i = GetNumTradeSkills(), 1, -1 do
166 local skillName, skillType = GetTradeSkillInfo(i) 175 local skillName, skillType = GetTradeSkillInfo(i)
167 if (skillType == "header") and skillName==headersState.headerName and table.remove(headersState,1) then 176 if (skillType == "header") and skillName==headersState.headerName and tremove(headersState,1) then
168 CollapseTradeSkillSubClass(i) 177 CollapseTradeSkillSubClass(i)
169 end 178 end
170 end 179 end
171 wipe(headersState) 180 wipe(headersState)
172 181
176 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials 185 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials
177 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp 186 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp
178 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue 187 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue
179 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue 188 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue
180 ApplyFilters() 189 ApplyFilters()
190
191 -- Re set position
192 FauxScrollFrame_SetOffset(TradeSkillListScrollFrame,filtersState.positionOffset)
193 TradeSkillListScrollFrameScrollBar:SetValue(filtersState.positionValue)
181 194
182 stateSaved = nil 195 stateSaved = nil
183 A.blockScan = nil 196 A.blockScan = nil
184 197
185 --@todo Scroll down to the selected recipe 198 --@todo Scroll down to the selected recipe