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@3
|
16 -- Returns the item ID from its link
|
contrebasse@3
|
17 function A.link2ID(link)
|
contrebasse@16
|
18 return tonumber(select(3,sfind(link or "", "-*:(%d+)[:|].*")) or "")
|
contrebasse@3
|
19 end -- function
|
contrebasse@3
|
20
|
contrebasse@3
|
21 -- Returns the button number for the reagents buttons
|
contrebasse@3
|
22 function A.buttonNumber(btn)
|
contrebasse@3
|
23 -- "TradeSkillReagentN"
|
contrebasse@3
|
24 return tonumber(btn:GetName():sub(-1))
|
contrebasse@0
|
25 end
|
contrebasse@0
|
26
|
contrebasse@16
|
27 do
|
contrebasse@16
|
28 -- Wow functions
|
contrebasse@16
|
29 local GetTradeSkillInfo = GetTradeSkillInfo
|
contrebasse@16
|
30 local GetNumTradeSkills = GetNumTradeSkills
|
contrebasse@16
|
31 local GetTradeSkillItemLink = GetTradeSkillItemLink
|
contrebasse@0
|
32
|
contrebasse@16
|
33 -- Gives the number of craftable objects
|
contrebasse@16
|
34 function A.numMakable(reagentID)
|
contrebasse@16
|
35 -- Look for the recipe to make the item
|
contrebasse@16
|
36 local reagentIndex = A.findSkillIndex(reagentID)
|
contrebasse@16
|
37 if not reagentIndex then return 0 end
|
contrebasse@3
|
38
|
contrebasse@16
|
39 -- Check how many items we can craft
|
contrebasse@16
|
40 local skillName, skillType, numReagentMakable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(reagentIndex)
|
contrebasse@16
|
41 return numReagentMakable or 0, reagentIndex
|
contrebasse@16
|
42 end
|
contrebasse@16
|
43
|
contrebasse@16
|
44 -- Find the first tradeskill index of the recipe to make an item
|
contrebasse@16
|
45 function A.findSkillIndex(itemID)
|
contrebasse@16
|
46 for i = 1,GetNumTradeSkills() do
|
contrebasse@16
|
47 local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(i)
|
contrebasse@16
|
48 if skillType == "header" then
|
contrebasse@16
|
49 else
|
contrebasse@16
|
50 if skillName then
|
contrebasse@16
|
51 local ID = A.link2ID(GetTradeSkillItemLink(i))
|
contrebasse@16
|
52 if ID and ID == itemID then
|
contrebasse@16
|
53 return i
|
contrebasse@16
|
54 end -- if
|
contrebasse@3
|
55 end -- if
|
contrebasse@3
|
56 end -- if
|
contrebasse@16
|
57 end -- for
|
contrebasse@16
|
58 A.DEBUG("Tradeskill not found for "..itemID)
|
contrebasse@16
|
59 end -- function
|
contrebasse@16
|
60 end -- do
|
contrebasse@24
|
61
|
contrebasse@24
|
62
|
contrebasse@24
|
63 -- Taken from Datastore_Crafts
|
contrebasse@24
|
64 -- *** Scanning functions ***
|
contrebasse@24
|
65 do
|
contrebasse@24
|
66 local selectedTradeSkillIndex
|
contrebasse@24
|
67 local subClasses, subClassID
|
contrebasse@24
|
68 local invSlots, invSlotID
|
contrebasse@24
|
69 local haveMats
|
contrebasse@24
|
70 local headersState = {}
|
contrebasse@24
|
71
|
contrebasse@24
|
72 local function GetSubClassID()
|
contrebasse@24
|
73 -- The purpose of this function is to get the subClassID in a UI independant way
|
contrebasse@24
|
74 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown), which uses a hardcoded frame name.
|
contrebasse@24
|
75
|
contrebasse@24
|
76 if GetTradeSkillSubClassFilter(0) then -- if "All Subclasses" is selected, GetTradeSkillSubClassFilter() will return 1 for all indexes, including 0
|
contrebasse@24
|
77 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillSubClassDropDown))
|
contrebasse@24
|
78 end
|
contrebasse@24
|
79
|
contrebasse@24
|
80 local filter
|
contrebasse@24
|
81 for i = 1, #subClasses do
|
contrebasse@24
|
82 filter = GetTradeSkillSubClassFilter(i)
|
contrebasse@24
|
83 if filter then
|
contrebasse@24
|
84 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
|
85 end
|
contrebasse@24
|
86 end
|
contrebasse@24
|
87 end
|
contrebasse@24
|
88
|
contrebasse@24
|
89 local function GetInvSlotID()
|
contrebasse@24
|
90 -- The purpose of this function is to get the invSlotID in a UI independant way (same as GetSubClassID)
|
contrebasse@24
|
91 -- ie: without relying on UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown), which uses a hardcoded frame name.
|
contrebasse@24
|
92
|
contrebasse@24
|
93 if GetTradeSkillInvSlotFilter(0) then -- if "All Slots" is selected, GetTradeSkillInvSlotFilter() will return 1 for all indexes, including 0
|
contrebasse@24
|
94 return 1 -- thus return 1 as selected id (as would be returned by UIDropDownMenu_GetSelectedID(TradeSkillInvSlotDropDown))
|
contrebasse@24
|
95 end
|
contrebasse@24
|
96
|
contrebasse@24
|
97 local filter
|
contrebasse@24
|
98 for i = 1, #invSlots do
|
contrebasse@24
|
99 filter = GetTradeSkillInvSlotFilter(i)
|
contrebasse@24
|
100 if filter then
|
contrebasse@24
|
101 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
|
102 end
|
contrebasse@24
|
103 end
|
contrebasse@24
|
104 end
|
contrebasse@24
|
105
|
contrebasse@24
|
106 function A.SaveActiveFilters()
|
contrebasse@24
|
107 print("save")
|
contrebasse@24
|
108 selectedTradeSkillIndex = GetTradeSkillSelectionIndex()
|
contrebasse@24
|
109
|
contrebasse@24
|
110 subClasses = { GetTradeSkillSubClasses() }
|
contrebasse@24
|
111 invSlots = { GetTradeSkillInvSlots() }
|
contrebasse@24
|
112 subClassID = GetSubClassID()
|
contrebasse@24
|
113 invSlotID = GetInvSlotID()
|
contrebasse@24
|
114
|
contrebasse@24
|
115 -- Subclasses
|
contrebasse@24
|
116 SetTradeSkillSubClassFilter(0, 1, 1) -- this checks "All subclasses"
|
contrebasse@24
|
117 if TradeSkillSubClassDropDown then
|
contrebasse@24
|
118 UIDropDownMenu_SetSelectedID(TradeSkillSubClassDropDown, 1)
|
contrebasse@24
|
119 end
|
contrebasse@24
|
120
|
contrebasse@24
|
121 -- Inventory slots
|
contrebasse@24
|
122 SetTradeSkillInvSlotFilter(0, 1, 1) -- this checks "All slots"
|
contrebasse@24
|
123 if TradeSkillInvSlotDropDown then
|
contrebasse@24
|
124 UIDropDownMenu_SetSelectedID(TradeSkillInvSlotDropDown, 1)
|
contrebasse@24
|
125 end
|
contrebasse@24
|
126
|
contrebasse@24
|
127 -- Have Materials
|
contrebasse@24
|
128 if TradeSkillFrameAvailableFilterCheckButton then
|
contrebasse@24
|
129 haveMats = TradeSkillFrameAvailableFilterCheckButton:GetChecked() -- nil or true
|
contrebasse@24
|
130 TradeSkillFrameAvailableFilterCheckButton:SetChecked(false)
|
contrebasse@24
|
131 end
|
contrebasse@24
|
132 TradeSkillOnlyShowMakeable(false)
|
contrebasse@24
|
133
|
contrebasse@24
|
134 -- Headers
|
contrebasse@24
|
135 local headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique.
|
contrebasse@24
|
136
|
contrebasse@24
|
137 for i = GetNumTradeSkills(), 1, -1 do -- 1st pass, expand all categories
|
contrebasse@24
|
138 local _, skillType, _, isExpanded = GetTradeSkillInfo(i)
|
contrebasse@24
|
139 if (skillType == "header") then
|
contrebasse@24
|
140 headerCount = headerCount + 1
|
contrebasse@24
|
141 if not isExpanded then
|
contrebasse@24
|
142 ExpandTradeSkillSubClass(i)
|
contrebasse@24
|
143 headersState[headerCount] = true
|
contrebasse@24
|
144 end
|
contrebasse@24
|
145 end
|
contrebasse@24
|
146 end
|
contrebasse@24
|
147
|
contrebasse@24
|
148 print("saved")
|
contrebasse@24
|
149 end
|
contrebasse@24
|
150
|
contrebasse@24
|
151 function A.RestoreActiveFilters()
|
contrebasse@24
|
152 print("restore")
|
contrebasse@24
|
153 -- Subclasses
|
contrebasse@24
|
154 SetTradeSkillSubClassFilter(subClassID-1, 1, 1) -- this checks the previously checked value
|
contrebasse@24
|
155
|
contrebasse@24
|
156 local frame = TradeSkillSubClassDropDown
|
contrebasse@24
|
157 if frame then -- other addons might nil this frame (delayed load, etc..), so secure DDM calls
|
contrebasse@24
|
158 local text = (subClassID == 1) and ALL_SUBCLASSES or subClasses[subClassID-1]
|
contrebasse@24
|
159 UIDropDownMenu_SetSelectedID(frame, subClassID)
|
contrebasse@24
|
160 UIDropDownMenu_SetText(frame, text);
|
contrebasse@24
|
161 end
|
contrebasse@24
|
162
|
contrebasse@24
|
163 subClassID = nil
|
contrebasse@24
|
164 wipe(subClasses)
|
contrebasse@24
|
165 subClasses = nil
|
contrebasse@24
|
166
|
contrebasse@24
|
167 -- Inventory slots
|
contrebasse@24
|
168 invSlotID = invSlotID or 1
|
contrebasse@24
|
169 SetTradeSkillInvSlotFilter(invSlotID-1, 1, 1) -- this checks the previously checked value
|
contrebasse@24
|
170
|
contrebasse@24
|
171 frame = TradeSkillInvSlotDropDown
|
contrebasse@24
|
172 if frame then
|
contrebasse@24
|
173 local text = (invSlotID == 1) and ALL_INVENTORY_SLOTS or invSlots[invSlotID-1]
|
contrebasse@24
|
174 UIDropDownMenu_SetSelectedID(frame, invSlotID)
|
contrebasse@24
|
175 UIDropDownMenu_SetText(frame, text);
|
contrebasse@24
|
176 end
|
contrebasse@24
|
177
|
contrebasse@24
|
178 invSlotID = nil
|
contrebasse@24
|
179 wipe(invSlots)
|
contrebasse@24
|
180 invSlots = nil
|
contrebasse@24
|
181
|
contrebasse@24
|
182 -- Have Materials
|
contrebasse@24
|
183 if TradeSkillFrameAvailableFilterCheckButton then
|
contrebasse@24
|
184 TradeSkillFrameAvailableFilterCheckButton:SetChecked(haveMats or false)
|
contrebasse@24
|
185 end
|
contrebasse@24
|
186 TradeSkillOnlyShowMakeable(haveMats or false)
|
contrebasse@24
|
187 haveMats = nil
|
contrebasse@24
|
188
|
contrebasse@24
|
189 SelectTradeSkill(selectedTradeSkillIndex)
|
contrebasse@24
|
190 selectedTradeSkillIndex = nil
|
contrebasse@24
|
191
|
contrebasse@24
|
192 -- Headers
|
contrebasse@24
|
193 local headerCount = 0
|
contrebasse@24
|
194 for i = GetNumTradeSkills(), 1, -1 do
|
contrebasse@24
|
195 local _, skillType = GetTradeSkillInfo(i)
|
contrebasse@24
|
196 if (skillType == "header") then
|
contrebasse@24
|
197 headerCount = headerCount + 1
|
contrebasse@24
|
198 if headersState[headerCount] then
|
contrebasse@24
|
199 CollapseTradeSkillSubClass(i)
|
contrebasse@24
|
200 end
|
contrebasse@24
|
201 end
|
contrebasse@24
|
202 end
|
contrebasse@24
|
203 wipe(headersState)
|
contrebasse@24
|
204 end
|
contrebasse@24
|
205 print("restored")
|
contrebasse@24
|
206 end
|