Nenue@30
|
1 -- WorldPlan
|
Nenue@30
|
2 -- FilterBar.lua
|
Nenue@30
|
3 -- Created: 10/27/2016 8:55 PM
|
Nenue@30
|
4 -- %file-revision%
|
Nenue@30
|
5 --
|
Nenue@40
|
6 local _, db = ...
|
Nenue@30
|
7 local print = DEVIAN_WORKSPACE and function(...) _G.print('FilterBar', ...) end or nop
|
Nenue@33
|
8 local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
|
Nenue@31
|
9 local wipe, ipairs, pairs = table.wipe, ipairs, pairs
|
Nenue@30
|
10
|
Nenue@30
|
11 local REWARD_CASH = WORLD_QUEST_REWARD_TYPE_FLAG_GOLD
|
Nenue@30
|
12 local REWARD_ARTIFACT_POWER = WORLD_QUEST_REWARD_TYPE_FLAG_ARTIFACT_POWER
|
Nenue@30
|
13 local REWARD_GEAR = WORLD_QUEST_REWARD_TYPE_FLAG_EQUIPMENT
|
Nenue@30
|
14 local REWARD_CURRENCY = WORLD_QUEST_REWARD_TYPE_FLAG_ORDER_RESOURCES
|
Nenue@30
|
15 local REWARD_REAGENT = WORLD_QUEST_REWARD_TYPE_FLAG_MATERIALS
|
Nenue@30
|
16
|
Nenue@30
|
17
|
Nenue@30
|
18 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP
|
Nenue@30
|
19 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE
|
Nenue@30
|
20 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON
|
Nenue@30
|
21 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION
|
Nenue@33
|
22
|
Nenue@33
|
23 local familiars = {
|
Nenue@33
|
24 [42159] = {npc = 106552, name = 'Nightwatcher Merayl'},
|
Nenue@33
|
25 [40277] = {npc = 97804, name = 'Tiffany Nelson'},
|
Nenue@33
|
26 [40298] = {npc = 99182, name = 'Sir Galveston'},
|
Nenue@33
|
27 [40282] = {npc= 99150, name = 'Grixis Tinypop'},
|
Nenue@33
|
28 [40278] = {npc = 98270, name = 'Robert Craig'},
|
Nenue@33
|
29 [48195] = {npc = 105250, name = 'Aulier'},
|
Nenue@33
|
30 [41990] = {npc = 105674, name = 'Varenne'},
|
Nenue@33
|
31 [41860] = {npc = 104970, name = 'Xorvasc'},
|
Nenue@33
|
32 [40299] = {npc = 99210, name = 'Bodhi Sunwayver'},
|
Nenue@33
|
33 [42442] = {npc = 107489, name = 'Amalia'},
|
Nenue@33
|
34 [40280] = {npc = 99077, name = 'Bredda Tenderhide'},
|
Nenue@33
|
35 [41687] = {npc = 104553, name = 'Odrogg'},
|
Nenue@33
|
36 [41944] = {npc = 105455, name = 'Trapper Jarrun'},
|
Nenue@33
|
37 [40337] = {npc = 97709, name = 'Master Tamer Flummox'},
|
Nenue@33
|
38 [40279] = {npc = 99035, name = 'Durian Strongfruit'}
|
Nenue@33
|
39 }
|
Nenue@33
|
40 local familiars_id = 9696
|
Nenue@33
|
41
|
Nenue@40
|
42 db.DefaultFilterType = {
|
Nenue@36
|
43 iconWidth = 24,
|
Nenue@40
|
44 iconHeight = 18,
|
Nenue@36
|
45 borderWidth = 3,
|
Nenue@36
|
46 highlightWidth = 2,
|
Nenue@30
|
47 TagSize = 12,
|
Nenue@30
|
48 TimeleftStage = 3,
|
Nenue@30
|
49 showNumber = true,
|
Nenue@30
|
50 numberFontObject = 'WorldPlanNumberFontThin'
|
Nenue@30
|
51 }
|
Nenue@40
|
52 db.DefaultFilters = {
|
Nenue@30
|
53 { label = 'Filters', texture = "Interface\\WorldMap\\WorldMap-Icon" },
|
Nenue@30
|
54 { filterKey= 'rewardType', cVar = 'worldQuestFilterArtifactPower', filterValue = REWARD_ARTIFACT_POWER, label = 'Artifact Power', texture = "Interface\\ICONS\\inv_7xp_inscription_talenttome01" },
|
Nenue@31
|
55 { filterKey= 'rewardType', cVar = 'worldQuestFilterOrderResources', filterValue = REWARD_CURRENCY,label = 'Order Resources', texture = "Interface\\Icons\\inv_orderhall_orderresources" },
|
Nenue@30
|
56 { filterKey= 'rewardType', cVar = 'worldQuestFilterEquipment', filterValue = REWARD_GEAR, label = 'Equipment', texture = "Interface\\ICONS\\garrison_bluearmorupgrade" },
|
Nenue@30
|
57 { filterKey= 'rewardType', cVar = 'worldQuestFilterProfessionMaterials', filterValue = REWARD_REAGENT, label = 'Materials', texture = 1417744 },
|
Nenue@30
|
58 { filterKey= 'rewardType', cVar = 'worldQuestFilterGold', filterValue = REWARD_CASH, label = 'Gold', texture = "Interface\\Buttons\\UI-GroupLoot-Coin-Up" },
|
Nenue@30
|
59 { filterKey= 'worldQuestType', filterValue = LE_QUEST_TAG_TYPE_PVP, label = 'PvP', texture = "Interface\\Icons\\Ability_PVP_GladiatorMedallion", spacing = 10 },
|
Nenue@30
|
60 { filterKey= 'worldQuestType', filterValue = LE_QUEST_TAG_TYPE_PET_BATTLE, label = 'Pet Battle', texture = "Interface\\Icons\\PetJournalPortrait", },
|
Nenue@30
|
61 { filterKey= 'worldQuestType', filterValue = LE_QUEST_TAG_TYPE_DUNGEON, label = 'Dungeon', texture = "Interface\\LFGFRAME\\UI-LFR-PORTRAIT", },
|
Nenue@30
|
62 { filterKey= 'worldQuestType', filterValue = LE_QUEST_TAG_TYPE_PROFESSION, label = 'Profession', texture = "Interface\\ICONS\\70_professions_scroll_02", },
|
Nenue@30
|
63 }
|
Nenue@30
|
64 local defaults = {}
|
Nenue@30
|
65
|
Nenue@40
|
66 WorldPlanSummaryMixin = WorldPlanSummaryMixin or {}
|
Nenue@41
|
67 local Module = WorldPlanSummaryMixin
|
Nenue@41
|
68 Module.selectedBountyIndex = {}
|
Nenue@41
|
69 Module.bounties = {}
|
Nenue@41
|
70 Module.filterList = {}
|
Nenue@41
|
71 Module.buttons = {}
|
Nenue@41
|
72 Module.cvarFiltersDirty = false
|
Nenue@30
|
73 WorldPlanFilterPinMixin = {}
|
Nenue@41
|
74 local Pin = WorldPlanFilterPinMixin
|
Nenue@30
|
75
|
Nenue@41
|
76 function Module:OnLoad()
|
Nenue@45
|
77 self:SetParent(WorldMapFrame.UIElementsFrame)
|
Nenue@45
|
78 self:ClearAllPoints()
|
Nenue@45
|
79 self:SetPoint('TOPRIGHT')
|
Nenue@40
|
80 WorldPlan:AddHandler(self)
|
Nenue@69
|
81 --[[for index, info in ipairs(db.DefaultFilters) do
|
Nenue@40
|
82 info.zone = db.DefaultFilterType
|
Nenue@40
|
83 info.continent = db.DefaultFilterType
|
Nenue@30
|
84 info.pinMask = "Interface\\Minimap\\UI-Minimap-Background"
|
Nenue@30
|
85 WorldPlan:AddTypeInfo(self,index, info)
|
Nenue@30
|
86 end
|
Nenue@69
|
87 --]]
|
Nenue@30
|
88 end
|
Nenue@30
|
89
|
Nenue@30
|
90
|
Nenue@57
|
91 function Module:OnEvent(event, arg)
|
Nenue@33
|
92 print('|cFF00FF88'..self:GetName()..':OnEvent()', event)
|
Nenue@57
|
93 if (event == 'QUEST_LOG_UPDATE') and arg then
|
Nenue@57
|
94 if db.QuestsByID[arg] then
|
Nenue@57
|
95 if db.QuestsByID[arg].factionID then
|
Nenue@57
|
96
|
Nenue@57
|
97 end
|
Nenue@57
|
98 end
|
Nenue@57
|
99 end
|
Nenue@57
|
100
|
Nenue@33
|
101 self.isStale = true
|
Nenue@30
|
102 end
|
Nenue@30
|
103
|
Nenue@30
|
104 local bountyIndex
|
Nenue@30
|
105 local debug_headers = {}
|
Nenue@30
|
106
|
Nenue@41
|
107 function Module:Setup()
|
Nenue@33
|
108 print('|cFF00FF88'..self:GetName()..':Setup()')
|
Nenue@45
|
109 self.isStale = true
|
Nenue@84
|
110 self:SetShown(true)
|
Nenue@30
|
111 end
|
Nenue@30
|
112
|
Nenue@30
|
113
|
Nenue@41
|
114 function Module:OnUpdate()
|
Nenue@33
|
115 if self.isStale then
|
Nenue@33
|
116 wprint('|cFF00FF00pushing update')
|
Nenue@33
|
117 self:Refresh()
|
Nenue@33
|
118 end
|
Nenue@30
|
119 end
|
Nenue@33
|
120
|
Nenue@84
|
121 function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen)
|
Nenue@84
|
122 print('|cFFFFFF00OnMapInfo()', isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen)
|
Nenue@41
|
123 if not isBrokenIsle then
|
Nenue@41
|
124 self:SetShown(false)
|
Nenue@41
|
125 else
|
Nenue@84
|
126 if self:IsShown() then
|
Nenue@84
|
127 self:Refresh()
|
Nenue@84
|
128 end
|
Nenue@41
|
129 self:SetShown(true)
|
Nenue@41
|
130 end
|
Nenue@41
|
131 end
|
Nenue@41
|
132
|
Nenue@41
|
133 function Module:OnShow()
|
Nenue@33
|
134 print('|cFF00FF88'..self:GetName()..':OnShow()')
|
Nenue@32
|
135 if self.isStale then
|
Nenue@32
|
136 self:Refresh()
|
Nenue@32
|
137 end
|
Nenue@32
|
138 end
|
Nenue@30
|
139
|
Nenue@41
|
140 local tinsert, GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID = tinsert, GetQuestBountyInfoForMapID, GetQuestLogTitle, GetQuestLogIndexByID
|
Nenue@41
|
141 function Module:GetFilters()
|
Nenue@30
|
142
|
Nenue@33
|
143 print('|cFF00FFFF'..self:GetName()..':GetFilters()')
|
Nenue@30
|
144
|
Nenue@30
|
145 wipe(self.filterList)
|
Nenue@30
|
146
|
Nenue@40
|
147 for index, info in ipairs(db.DefaultFilters) do
|
Nenue@30
|
148 tinsert(self.filterList, info)
|
Nenue@30
|
149 end
|
Nenue@40
|
150 self.bounties, self.numBounties = GetQuestBountyInfoForMapID(db.currentMapID)
|
Nenue@30
|
151 self.BountyFilters = {}
|
Nenue@30
|
152 for index, data in ipairs(self.bounties) do
|
Nenue@30
|
153 local info = self.BountyFilters[index]
|
Nenue@30
|
154 if not info then
|
Nenue@30
|
155 info = {}
|
Nenue@30
|
156 self.BountyFilters[index] = info
|
Nenue@30
|
157 end
|
Nenue@30
|
158
|
Nenue@30
|
159 local questTitle = GetQuestLogTitle(GetQuestLogIndexByID(data.questID))
|
Nenue@30
|
160
|
Nenue@30
|
161 info.filterKey = 'factionID'
|
Nenue@30
|
162 info.filterValue = data.factionID
|
Nenue@30
|
163 info.label = questTitle
|
Nenue@30
|
164 info.texture = data.icon
|
Nenue@30
|
165 print('loading emissary', questTitle)
|
Nenue@30
|
166
|
Nenue@30
|
167 tinsert(self.filterList, info)
|
Nenue@30
|
168 --{ filterKey= 'worldQuestType', filterValue = LE_QUEST_TAG_TYPE_PROFESSION, label = 'Profession', texture = "Interface\\LFGFRAME\\UI-LFR-PORTRAIT", },
|
Nenue@30
|
169 end
|
Nenue@30
|
170 end
|
Nenue@30
|
171
|
Nenue@41
|
172 function Module:Reset()
|
Nenue@30
|
173 self:GetFilters()
|
Nenue@30
|
174 end
|
Nenue@30
|
175
|
Nenue@41
|
176 function Module:Refresh()
|
Nenue@40
|
177 self:GetFilters()
|
Nenue@33
|
178 self:Update()
|
Nenue@30
|
179 end
|
Nenue@30
|
180
|
Nenue@30
|
181 local filterFill = "Interface\\BUTTONS\\YELLOWORANGE64"
|
Nenue@30
|
182 local filterMask = "Interface\\Minimap\\UI-Minimap-Background"
|
Nenue@31
|
183
|
Nenue@31
|
184 local questResults = {{}}
|
Nenue@41
|
185 function Module:Update()
|
Nenue@30
|
186 local blocks = self.buttons
|
Nenue@40
|
187
|
Nenue@45
|
188 local relativeFrame = self
|
Nenue@40
|
189
|
Nenue@40
|
190 local numHeaders = 0
|
Nenue@82
|
191 print('|cFF00FF88'..self:GetName()..':Update()|r', 'currentMap=',db.currentMapID)
|
Nenue@30
|
192
|
Nenue@40
|
193
|
Nenue@40
|
194 local layout = db.DefaultFilterType
|
Nenue@36
|
195 local borderWidth = layout.iconWidth + (layout.borderWidth * 2)
|
Nenue@36
|
196 local highlightWidth = borderWidth + (layout.highlightWidth * 2)
|
Nenue@40
|
197 local mapQuests = db.QuestsByZone[db.currentMapID] or db.QuestsByID
|
Nenue@84
|
198 local n = 0
|
Nenue@84
|
199 for _ in pairs(mapQuests) do
|
Nenue@84
|
200 n = n + 1
|
Nenue@84
|
201 end
|
Nenue@84
|
202 print(n, 'pins to work with')
|
Nenue@84
|
203
|
Nenue@57
|
204 local firstCvar, lastCvar
|
Nenue@30
|
205 for index, info in ipairs(self.filterList) do
|
Nenue@40
|
206 local numQuestsHere = 0
|
Nenue@40
|
207 local numQuestsTotal = 0
|
Nenue@40
|
208 info.questList = info.questList or {}
|
Nenue@40
|
209 wipe(info.questList)
|
Nenue@84
|
210 print(info.filterKey, info.filterValue)
|
Nenue@40
|
211
|
Nenue@40
|
212 for questID, pin in pairs(db.QuestsByID) do
|
Nenue@45
|
213 --print(pin.worldQuestType ~= LE_QUEST_TAG_TYPE_PROFESSION, (db.Config.ShowAllProfessionQuests or pin.isKnownProfession))
|
Nenue@59
|
214 if pin.used then
|
Nenue@59
|
215
|
Nenue@84
|
216 print(pin.title, mapQuests[questID])
|
Nenue@59
|
217 if (pin.worldQuestType ~= LE_QUEST_TAG_TYPE_PROFESSION) or (db.Config.ShowAllProfessionQuests or pin.isKnownProfession) then
|
Nenue@82
|
218
|
Nenue@59
|
219 if not info.filterKey then
|
Nenue@59
|
220 if mapQuests[questID] then
|
Nenue@59
|
221 numQuestsHere = numQuestsHere + 1
|
Nenue@59
|
222 end
|
Nenue@59
|
223 numQuestsTotal = numQuestsTotal + 1
|
Nenue@59
|
224 elseif pin[info.filterKey] == info.filterValue then
|
Nenue@59
|
225 if mapQuests[questID] then
|
Nenue@40
|
226 numQuestsHere = numQuestsHere + 1
|
Nenue@59
|
227 tinsert(info.questList, pin)
|
Nenue@59
|
228 end
|
Nenue@59
|
229 numQuestsTotal = numQuestsTotal + 1
|
Nenue@40
|
230 end
|
Nenue@30
|
231 end
|
Nenue@30
|
232 end
|
Nenue@59
|
233
|
Nenue@30
|
234 end
|
Nenue@40
|
235 --print('num here', numQuestsHere, numQuestsTotal)
|
Nenue@59
|
236 info.totalQuests = numQuestsTotal
|
Nenue@30
|
237
|
Nenue@40
|
238 --print(tostring(index).. ' ("'..tostring(info.label)..'" f('.. tostring(info.filterKey).. '='..tostring(info.filterValue) .. '), '..tostring(numQuests)..')')
|
Nenue@40
|
239
|
Nenue@40
|
240 if numQuestsTotal >= 1 then
|
Nenue@30
|
241 numHeaders = numHeaders + 1
|
Nenue@30
|
242 local button = blocks[numHeaders]
|
Nenue@30
|
243 if not blocks[numHeaders] then
|
Nenue@40
|
244 button = CreateFrame('Button', 'WorldPlanFilterButton'..numHeaders, self, 'WorldPlanFilterPin')
|
Nenue@40
|
245 button:SetSize(32,20)
|
Nenue@40
|
246 button.icon:SetTexCoord(0.1,.9,.1,(1 * (20/32)))
|
Nenue@30
|
247
|
Nenue@40
|
248 button.RewardBorder:ClearAllPoints()
|
Nenue@40
|
249 button.RewardBorder:SetPoint('TOPLEFT', button, 'TOPLEFT')
|
Nenue@40
|
250 button.RewardBorder:SetPoint('BOTTOMRIGHT', button, 'BOTTOMRIGHT')
|
Nenue@30
|
251
|
Nenue@40
|
252
|
Nenue@30
|
253 blocks[numHeaders] = button
|
Nenue@30
|
254 end
|
Nenue@30
|
255
|
Nenue@30
|
256 button.info = info
|
Nenue@40
|
257 button.numQuestsTotal = numQuestsTotal
|
Nenue@40
|
258 button.numQuestsHere = numQuestsHere
|
Nenue@40
|
259 button.questList = info.questList
|
Nenue@40
|
260 button.isFirst = (numHeaders == 1)
|
Nenue@30
|
261 button:SetID(index)
|
Nenue@40
|
262 button.spacing = ((relativeFrame.cVar and (not info.cVar)) or (relativeFrame.filterKey ~= info.filterKey)) and 5 or 1
|
Nenue@30
|
263 button.relativeFrame = relativeFrame
|
Nenue@40
|
264 button:Refresh()
|
Nenue@30
|
265 button:Show()
|
Nenue@30
|
266 relativeFrame = button
|
Nenue@40
|
267
|
Nenue@40
|
268 if info.cVar then
|
Nenue@40
|
269 firstCvar = firstCvar or button
|
Nenue@40
|
270 lastCvar = button
|
Nenue@40
|
271 end
|
Nenue@40
|
272
|
Nenue@30
|
273 end
|
Nenue@30
|
274 end
|
Nenue@30
|
275
|
Nenue@30
|
276 self.numHeaders = numHeaders
|
Nenue@30
|
277 for i = numHeaders + 1, #blocks do
|
Nenue@30
|
278 if blocks[i] then
|
Nenue@30
|
279 blocks[i]:Hide()
|
Nenue@57
|
280 wipe(blocks[i].questList)
|
Nenue@31
|
281 end
|
Nenue@30
|
282 end
|
Nenue@40
|
283
|
Nenue@40
|
284
|
Nenue@40
|
285
|
Nenue@32
|
286 self.isStale = nil
|
Nenue@30
|
287 end
|
Nenue@30
|
288
|
Nenue@41
|
289 function Module:Cleanup()
|
Nenue@30
|
290 -- hide trailing buttons
|
Nenue@30
|
291 end
|
Nenue@30
|
292
|
Nenue@31
|
293 local rgbWhite = {r = 1, g= 1, b= 1, hex = '|cFFFFFFFF'}
|
Nenue@41
|
294 function Pin:OnEnter()
|
Nenue@40
|
295 if #self.questList >= 1 then
|
Nenue@31
|
296 GameTooltip:SetOwner(self, 'ANCHOR_LEFT')
|
Nenue@31
|
297 GameTooltip:AddLine(self.info.label)
|
Nenue@31
|
298 for index, pin in ipairs(self.questList) do
|
Nenue@31
|
299 local colorInfo = (pin.quality and ITEM_QUALITY_COLORS[pin.quality]) or rgbWhite
|
Nenue@40
|
300 GameTooltip:AddLine('|T'.. tostring(pin.itemTexture)..':16:16|t ' .. tostring(pin.title) ..(pin.cheevos and " |cFFFFFF00!|R" or ''), colorInfo.r, colorInfo.g, colorInfo.b)
|
Nenue@31
|
301 end
|
Nenue@40
|
302 GameTooltip:AddLine(self.numQuestsTotal .. ' total')
|
Nenue@36
|
303 GameTooltip:Show()
|
Nenue@31
|
304 end
|
Nenue@30
|
305 end
|
Nenue@30
|
306
|
Nenue@41
|
307 function Pin:OnLeave()
|
Nenue@31
|
308 if GameTooltip:IsOwned(self) then
|
Nenue@31
|
309 GameTooltip:Hide()
|
Nenue@31
|
310 end
|
Nenue@31
|
311 end
|
Nenue@30
|
312
|
Nenue@41
|
313 function Pin:Refresh()
|
Nenue@30
|
314 local info = self.info
|
Nenue@30
|
315 self.filterKey = info.filterKey
|
Nenue@30
|
316 self.filterValue = info.filterValue
|
Nenue@30
|
317 self.tagID = info.tagID
|
Nenue@30
|
318
|
Nenue@30
|
319 self.icon:SetTexture(info.texture)
|
Nenue@40
|
320 self.count:SetText(self.numQuestsHere)
|
Nenue@30
|
321 self.cVar = info.cVar
|
Nenue@30
|
322
|
Nenue@30
|
323 self.itemTexture = self.texture
|
Nenue@30
|
324
|
Nenue@45
|
325 self:ClearAllPoints()
|
Nenue@40
|
326 if self.isFirst then
|
Nenue@45
|
327 self:SetPoint('TOPRIGHT', self.relativeFrame, 'TOPRIGHT', -5, -42)
|
Nenue@30
|
328 else
|
Nenue@45
|
329 self:SetPoint('TOPLEFT', self.relativeFrame, 'BOTTOMLEFT', 0, -(self.spacing or 0))
|
Nenue@30
|
330 end
|
Nenue@45
|
331 print('anchor', self.relativeFrame:IsShown(), self:GetPoint(1))
|
Nenue@30
|
332
|
Nenue@40
|
333 self.icon:SetDesaturated(self.numQuestsHere == 0)
|
Nenue@40
|
334
|
Nenue@40
|
335 local r, g, b, a = 0,0,0,1
|
Nenue@31
|
336 local desaturated = false
|
Nenue@40
|
337 if (self.numQuestsHere > 0) then
|
Nenue@40
|
338 if self.cVar then
|
Nenue@40
|
339 if GetCVarBool(self.cVar) then
|
Nenue@40
|
340 self.count:SetTextColor(1,1,1)
|
Nenue@41
|
341 r,g,b,a = 0, 0, 0, 1
|
Nenue@31
|
342 else
|
Nenue@40
|
343 self:GetParent().cvarFiltersDirty = true
|
Nenue@40
|
344 self.count:SetTextColor(1,0,0)
|
Nenue@40
|
345 self.icon:SetDesaturated(true)
|
Nenue@41
|
346 r,g,b,a = 1, 0, 0, 0.5
|
Nenue@31
|
347 end
|
Nenue@31
|
348 else
|
Nenue@40
|
349 if db.UsedFilters[self.filterKey] then
|
Nenue@40
|
350 if db.UsedFilters[self.filterKey] == self.filterValue then
|
Nenue@40
|
351 self.count:SetTextColor(0,1,0)
|
Nenue@41
|
352 r, g, b = 0, 1, 0
|
Nenue@40
|
353 else
|
Nenue@40
|
354 self.count:SetTextColor(1,0,0)
|
Nenue@40
|
355 r, g, b = 1, 0, 0
|
Nenue@40
|
356 end
|
Nenue@36
|
357 else
|
Nenue@36
|
358
|
Nenue@40
|
359 self.count:SetTextColor(1,1,1)
|
Nenue@40
|
360 if self.filterKey == 'worldQuestType' then
|
Nenue@40
|
361 r, g, b = 0, 0, 1
|
Nenue@40
|
362 elseif self.filterKey == 'factionID' then
|
Nenue@40
|
363 r, g, b = 1, 1, 0
|
Nenue@40
|
364 end
|
Nenue@36
|
365 end
|
Nenue@30
|
366 end
|
Nenue@30
|
367 end
|
Nenue@41
|
368 self.RewardBorder:SetColorTexture(r, g, b)
|
Nenue@41
|
369 self:SetAlpha(a)
|
Nenue@31
|
370
|
Nenue@30
|
371 --self:UpdateSize()
|
Nenue@30
|
372 end
|
Nenue@30
|
373
|
Nenue@41
|
374 function Pin:OnLoad()
|
Nenue@30
|
375 self:RegisterForClicks('AnyUp')
|
Nenue@30
|
376 self:SetFrameStrata('HIGH')
|
Nenue@30
|
377 self:SetFrameLevel(151)
|
Nenue@30
|
378 self:SetScript('OnUpdate', nil)
|
Nenue@40
|
379 self.questList = {}
|
Nenue@41
|
380 -- WORLD_MAP_UPDATE and PLAYER_ENTERING_WORLD are passed down from a higher level
|
Nenue@30
|
381 end
|
Nenue@30
|
382
|
Nenue@41
|
383 function Pin:OnUpdate ()
|
Nenue@30
|
384 end
|
Nenue@30
|
385
|
Nenue@30
|
386 -- shift-click: reset filter
|
Nenue@30
|
387 -- click: rotate through include(1), exclude(-1), ignore(nil)
|
Nenue@36
|
388 local filtered_report = {}
|
Nenue@40
|
389 local RESET_FILTER = "|cFFFFFFFF+%s|r"
|
Nenue@40
|
390 local FILTER_EXCLUDE_TYPE = '|cFFFF0000-%s|r'
|
Nenue@40
|
391 local FILTER_INCLUDE_TYPE = '|cFF00FF00+%s|r'
|
Nenue@41
|
392 function Pin:OnClick (button)
|
Nenue@30
|
393
|
Nenue@30
|
394 local filterKey = self.filterKey
|
Nenue@30
|
395 local filterValue = self.filterValue
|
Nenue@36
|
396 local cVar = self.cVar
|
Nenue@36
|
397 local parent = self:GetParent()
|
Nenue@40
|
398 local setDirty
|
Nenue@40
|
399
|
Nenue@40
|
400 print('|cFF00FF88'..self:GetName()..':OnClick()|r', filterKey, filterValue, cVar, parent)
|
Nenue@30
|
401
|
Nenue@36
|
402 local resetMode = (button == 'RightButton')
|
Nenue@36
|
403 wipe(filtered_report)
|
Nenue@36
|
404 if not (filterKey or cVar) then
|
Nenue@40
|
405 for i, info in ipairs(db.DefaultFilters) do
|
Nenue@33
|
406 if info.cVar then
|
Nenue@40
|
407 SetCVar(info.cVar, 1)
|
Nenue@40
|
408 elseif info.filterKey then
|
Nenue@40
|
409 if db.UsedFilters[info.filterKey] then
|
Nenue@40
|
410 db.UsedFilters[info.filterKey] = nil
|
Nenue@36
|
411 end
|
Nenue@33
|
412 end
|
Nenue@33
|
413 end
|
Nenue@40
|
414 parent.cvarFiltersDirty = false
|
Nenue@33
|
415
|
Nenue@40
|
416 --WorldPlan:print('All filters reset.')
|
Nenue@36
|
417 elseif cVar then
|
Nenue@40
|
418 if resetMode then
|
Nenue@40
|
419 print('|cFFFF4400cleaning dirty')
|
Nenue@40
|
420 for i, info in ipairs(db.DefaultFilters) do
|
Nenue@33
|
421 if info.cVar then
|
Nenue@40
|
422 parent.cvarFiltersDirty = false
|
Nenue@40
|
423 SetCVar(info.cVar, 1)
|
Nenue@33
|
424 end
|
Nenue@33
|
425 end
|
Nenue@40
|
426 --WorldPlan:print('Reward filters reset.')
|
Nenue@40
|
427 elseif parent.cvarFiltersDirty == true then
|
Nenue@40
|
428 if GetCVarBool(cVar) then
|
Nenue@40
|
429 tinsert(filtered_report, FILTER_EXCLUDE_TYPE:format(tostring(self.info.label)))
|
Nenue@40
|
430 SetCVar(cVar, 0)
|
Nenue@40
|
431 else
|
Nenue@40
|
432
|
Nenue@40
|
433 tinsert(filtered_report, FILTER_INCLUDE_TYPE:format(tostring(self.info.label)))
|
Nenue@40
|
434 SetCVar(cVar, 1)
|
Nenue@40
|
435 end
|
Nenue@40
|
436
|
Nenue@40
|
437 -- check the visible filters and consider it clean if they're all lit
|
Nenue@40
|
438 parent.cvarFiltersDirty = false
|
Nenue@40
|
439 for i, info in ipairs(parent.filterList) do
|
Nenue@40
|
440 if info.cVar and (#info.questList >= 1) then
|
Nenue@40
|
441 print(info.cVar, GetCVarBool(info.cVar))
|
Nenue@40
|
442 if GetCVarBool(info.cVar) == false then
|
Nenue@40
|
443 parent.cvarFiltersDirty = true
|
Nenue@40
|
444 print('|cFFFF4400still dirty')
|
Nenue@40
|
445 break
|
Nenue@40
|
446 end
|
Nenue@40
|
447 end
|
Nenue@36
|
448 end
|
Nenue@36
|
449 else
|
Nenue@40
|
450 print('|cFFFF4400making dirty')
|
Nenue@40
|
451 for i, info in ipairs(db.DefaultFilters) do
|
Nenue@40
|
452 if info.cVar then
|
Nenue@40
|
453 local msgType = (cVar == info.cVar) and FILTER_INCLUDE_TYPE or FILTER_EXCLUDE_TYPE
|
Nenue@40
|
454 SetCVar(info.cVar, ((cVar == info.cVar) and 1) or 0)
|
Nenue@40
|
455 tinsert(filtered_report, msgType:format(info.label))
|
Nenue@40
|
456 end
|
Nenue@40
|
457 end
|
Nenue@40
|
458 parent.cvarFiltersDirty = true
|
Nenue@36
|
459 end
|
Nenue@30
|
460 else
|
Nenue@40
|
461 if resetMode then
|
Nenue@40
|
462 wipe(db.UsedFilters)
|
Nenue@40
|
463 --WorldPlan:print('Type filters reset.')
|
Nenue@31
|
464 else
|
Nenue@40
|
465 if (db.UsedFilters[filterKey] == filterValue) or resetMode then
|
Nenue@40
|
466 db.UsedFilters[filterKey] = nil
|
Nenue@40
|
467 tinsert(filtered_report, FILTER_INCLUDE_TYPE:format(tostring(filterKey)))
|
Nenue@40
|
468 else
|
Nenue@40
|
469 db.UsedFilters[filterKey] = filterValue
|
Nenue@40
|
470 tinsert(filtered_report, FILTER_EXCLUDE_TYPE:format(tostring(filterKey)))
|
Nenue@40
|
471 end
|
Nenue@30
|
472 end
|
Nenue@30
|
473 end
|
Nenue@40
|
474 if #filtered_report >= 1 then
|
Nenue@40
|
475 --WorldPlan:print('Setting filter(s):', table.concat(filtered_report, ', '))
|
Nenue@40
|
476 end
|
Nenue@33
|
477 WorldPlan:Refresh(true)
|
Nenue@30
|
478 end |