Mercurial > wow > reagentmaker
comparison utils.lua @ 107:d64a19e5a47d
Bypass the filtering. Not fully tested, but mostly works.
author | contrebasse |
---|---|
date | Thu, 02 Jun 2011 00:57:17 +0200 |
parents | 8dd86b6b76d8 |
children | 618163a6d970 |
comparison
equal
deleted
inserted
replaced
106:f857e01b067e | 107:d64a19e5a47d |
---|---|
71 | 71 |
72 -- Taken from Datastore_Crafts | 72 -- Taken from Datastore_Crafts |
73 -- *** Scanning functions *** | 73 -- *** Scanning functions *** |
74 do | 74 do |
75 local selectedTradeSkillIndex | 75 local selectedTradeSkillIndex |
76 local subClasses, subClassID | 76 local stateSaved |
77 local invSlots, invSlotID | 77 local filtersState = {} |
78 local haveMats | |
79 local headersState = {} | 78 local headersState = {} |
80 | 79 |
81 local function GetSubClassID() | 80 local function GetSubClassID() |
82 -- The purpose of this function is to get the subClassID in a UI independant way | 81 -- The purpose of this function is to get the subClassID in a UI independant way |
83 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name. | 82 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name. |
110 return i+1 -- ex: 3rd element of the invSlots array, but 4th in the dropdown due to "All Slots", so return i+1 | 109 return i+1 -- ex: 3rd element of the invSlots array, but 4th in the dropdown due to "All Slots", so return i+1 |
111 end | 110 end |
112 end | 111 end |
113 end | 112 end |
114 | 113 |
114 local function ApplyFilters() | |
115 TradeSkillOnlyShowSkillUps(TradeSkillFrame.filterTbl.hasSkillUp); | |
116 TradeSkillOnlyShowMakeable(TradeSkillFrame.filterTbl.hasMaterials); | |
117 SetTradeSkillSubClassFilter(TradeSkillFrame.filterTbl.subClassValue, 1, 1); | |
118 SetTradeSkillInvSlotFilter(TradeSkillFrame.filterTbl.slotValue, 1, 1); | |
119 TradeSkillUpdateFilterBar(); | |
120 CloseDropDownMenus(); | |
121 end | |
122 | |
115 function A.SaveActiveFilters(headerName) | 123 function A.SaveActiveFilters(headerName) |
116 A.blockScan = true | 124 A.blockScan = true |
117 | 125 |
118 --[[ | 126 -- Save filters |
119 print("save") | 127 filtersState.hasMaterials = TradeSkillFrame.filterTbl.hasMaterials |
120 print(GetNumTradeSkills()) | 128 filtersState.hasSkillUp = TradeSkillFrame.filterTbl.hasSkillUp |
121 selectedTradeSkillIndex = GetTradeSkillSelectionIndex() | 129 filtersState.subClassValue = TradeSkillFrame.filterTbl.subClassValue |
122 | 130 filtersState.slotValue = TradeSkillFrame.filterTbl.slotValue |
123 subClasses = { GetTradeSkillSubClasses() } | 131 |
124 invSlots = { GetTradeSkillInvSlots() } | 132 -- Remove all filters |
125 subClassID = GetSubClassID() | 133 TradeSkillFrame.filterTbl.hasMaterials = false |
126 invSlotID = GetInvSlotID() | 134 TradeSkillFrame.filterTbl.hasSkillUp = false |
127 | 135 TradeSkillFrame.filterTbl.subClassValue = -1 |
128 -- Subclasses | 136 TradeSkillFrame.filterTbl.slotValue = -1 |
129 SetTradeSkillSubClassFilter(0, 1, 1) -- this checks "All subclasses" | 137 ApplyFilters() |
130 if TradeSkillSubClassDropDown then | |
131 UIDropDownMenu_SetSelectedID(TradeSkillSubClassDropDown, 1) | |
132 end | |
133 print(GetNumTradeSkills()) | |
134 | |
135 -- Inventory slots | |
136 SetTradeSkillInvSlotFilter(0, 1, 1) -- this checks "All slots" | |
137 if TradeSkillInvSlotDropDown then | |
138 UIDropDownMenu_SetSelectedID(TradeSkillInvSlotDropDown, 1) | |
139 end | |
140 print(GetNumTradeSkills()) | |
141 | |
142 -- Have Materials | |
143 if TradeSkillFrameAvailableFilterCheckButton then | |
144 haveMats = TradeSkillFrameAvailableFilterCheckButton:GetChecked() -- nil or true | |
145 TradeSkillFrameAvailableFilterCheckButton:SetChecked(false) | |
146 end | |
147 TradeSkillOnlyShowMakeable(false) | |
148 print(GetNumTradeSkills()) | |
149 --]] | |
150 | 138 |
151 -- Headers | 139 -- Headers |
152 --local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique. | 140 --local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique. |
141 headersState.headerName = headerName | |
153 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories | 142 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories |
154 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) | 143 local skillName, skillType, _, isExpanded = GetTradeSkillInfo(i) |
155 if (skillType == "header") then | 144 if (skillType == "header") and skillName==headerName then |
156 --headerCount = headerCount + 1 | 145 if not isExpanded then |
157 if not isExpanded and skillName==headerName then | 146 ExpandTradeSkillSubClass(i) |
158 ExpandTradeSkillSubClass(i) | 147 table.insert(headersState,true) |
159 --print(GetNumTradeSkills()) | 148 else |
160 --headersState[headerCount] = true | 149 table.insert(headersState,false) |
150 end | |
161 end | 151 end |
162 end | 152 end |
163 end | 153 |
164 | 154 --@todo Scroll down to the selected recipe |
165 --print("saved") | 155 -- with TradeSkillSkillXX:Show() ? |
156 | |
157 stateSaved = true | |
166 | 158 |
167 A.blockScan = nil | 159 A.blockScan = nil |
168 end | 160 end |
169 | 161 |
170 function A.RestoreActiveFilters() | 162 function A.RestoreActiveFilters() |
163 if not stateSaved then return end | |
164 | |
171 A.blockScan = true | 165 A.blockScan = true |
172 | 166 |
173 print("restore") | 167 -- restore headers |
174 -- Subclasses | |
175 SetTradeSkillSubClassFilter(subClassID-1, 1, 1) -- this checks the previously checked value | |
176 | |
177 local frame = TradeSkillSubClassDropDown | |
178 if frame then -- other addons might nil this frame (delayed load, etc..), so secure DDM calls | |
179 local text = (subClassID == 1) and ALL_SUBCLASSES or subClasses[subClassID-1] | |
180 UIDropDownMenu_SetSelectedID(frame, subClassID) | |
181 UIDropDownMenu_SetText(frame, text); | |
182 end | |
183 | |
184 subClassID = nil | |
185 wipe(subClasses) | |
186 subClasses = nil | |
187 | |
188 -- Inventory slots | |
189 invSlotID = invSlotID or 1 | |
190 SetTradeSkillInvSlotFilter(invSlotID-1, 1, 1) -- this checks the previously checked value | |
191 | |
192 frame = TradeSkillInvSlotDropDown | |
193 if frame then | |
194 local text = (invSlotID == 1) and ALL_INVENTORY_SLOTS or invSlots[invSlotID-1] | |
195 UIDropDownMenu_SetSelectedID(frame, invSlotID) | |
196 UIDropDownMenu_SetText(frame, text); | |
197 end | |
198 | |
199 invSlotID = nil | |
200 wipe(invSlots) | |
201 invSlots = nil | |
202 | |
203 -- Have Materials | |
204 if TradeSkillFrameAvailableFilterCheckButton then | |
205 TradeSkillFrameAvailableFilterCheckButton:SetChecked(haveMats or false) | |
206 end | |
207 TradeSkillOnlyShowMakeable(haveMats or false) | |
208 haveMats = nil | |
209 | |
210 SelectTradeSkill(selectedTradeSkillIndex) | |
211 selectedTradeSkillIndex = nil | |
212 | |
213 -- Headers | |
214 local headerCount = 0 | |
215 for i = GetNumTradeSkills(), 1, -1 do | 168 for i = GetNumTradeSkills(), 1, -1 do |
216 local _, skillType = GetTradeSkillInfo(i) | 169 local skillName, skillType = GetTradeSkillInfo(i) |
217 if (skillType == "header") then | 170 if (skillType == "header") and skillName==headersState.headerName and table.remove(headersState,1) then |
218 headerCount = headerCount + 1 | |
219 if headersState[headerCount] then | |
220 CollapseTradeSkillSubClass(i) | 171 CollapseTradeSkillSubClass(i) |
221 end | |
222 end | 172 end |
223 end | 173 end |
224 wipe(headersState) | 174 wipe(headersState) |
225 end | 175 |
226 print("restored") | 176 -- restore filters |
227 | 177 TradeSkillFrame.filterTbl.hasMaterials = filtersState.hasMaterials |
228 A.blockScan = nil | 178 TradeSkillFrame.filterTbl.hasSkillUp = filtersState.hasSkillUp |
179 TradeSkillFrame.filterTbl.subClassValue = filtersState.subClassValue | |
180 TradeSkillFrame.filterTbl.slotValue = filtersState.slotValue | |
181 ApplyFilters() | |
182 | |
183 | |
184 --print("restored") | |
185 | |
186 stateSaved = nil | |
187 | |
188 A.blockScan = nil | |
189 end | |
229 end | 190 end |
230 | 191 |
231 function A.isRecipeUnique(itemData) | 192 function A.isRecipeUnique(itemData) |
232 local unique = true | 193 local unique = true |
233 | 194 |
234 -- Check if the item is made by only one recipe. If not, return | 195 -- Check if the item is made by only one recipe. If not, return |
235 if #itemData>1 then | 196 if #itemData>1 then |
236 local spellLink | 197 local spellLink |
237 for _,v in ipairs(itemData) do | 198 for _,v in ipairs(itemData) do |
238 if not spellLink then | 199 if not spellLink then |
243 break | 204 break |
244 end | 205 end |
245 end | 206 end |
246 end | 207 end |
247 end | 208 end |
248 | 209 |
249 return unique | 210 return unique |
250 end | 211 end |
251 | 212 |
252 --[[ | 213 --[[ |
253 function A.isTradeskillUnique(itemData) | 214 function A.isTradeskillUnique(itemData) |
254 local spellName = itemData[1].spellName | 215 local spellName = itemData[1].spellName |
255 | 216 |
256 -- Check if the item is made by only one recipe. If not, return | 217 -- Check if the item is made by only one recipe. If not, return |
257 if #itemData>1 then | 218 if #itemData>1 then |
258 for _,v in ipairs(itemData) do | 219 for _,v in ipairs(itemData) do |
259 if v.spellName ~= spellName then | 220 if v.spellName ~= spellName then |
260 spellName = nil | 221 spellName = nil |