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