annotate FilterBar.lua @ 84:a12f782571c5 v1.4.5

- Fixed more filter bar issues
author Nenue
date Mon, 10 Apr 2017 17:50:06 -0400
parents 26d736fbfe67
children 98b5e08b75ed
rev   line source
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