Mercurial > wow > worldplan
comparison FilterBar.lua @ 95:b29b35cb8539
- Fixed quest completion checking and handling
- Changed animation method to hopefully stop weird flickering.
- Pins are now visible before full reward data is loaded
- Filter bar redesigned:
- aligned horizontally along the top of the map display
- filter buttons display a '+' when there are matches in both current and other zones, and '*' when there only matches in other zones
- button tooltips separate local and global quests
- button categories are highlighted and labeled when the cursor is over them
- Fixed invalid POI targets appearing when the spell targeting cursor is active
- ClassOrderPlan can be closed with the game menu button
| author | Nenue |
|---|---|
| date | Mon, 08 May 2017 22:38:52 -0400 |
| parents | 98b5e08b75ed |
| children | b67ba1078824 |
comparison
equal
deleted
inserted
replaced
| 94:dfd53f7c0fe5 | 95:b29b35cb8539 |
|---|---|
| 21 | 21 |
| 22 local HEADERS_SPACING = 3 | 22 local HEADERS_SPACING = 3 |
| 23 local BUTTONS_SPACING = 1 | 23 local BUTTONS_SPACING = 1 |
| 24 local BUTTONS_HEIGHT = 20 | 24 local BUTTONS_HEIGHT = 20 |
| 25 local TOGGLE_SIZE = 20 | 25 local TOGGLE_SIZE = 20 |
| 26 local HEADERS_HEIGHT = 40 | 26 local HEADERS_HEIGHT = 24 |
| 27 | 27 |
| 28 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP | 28 local LE_QUEST_TAG_TYPE_PVP = LE_QUEST_TAG_TYPE_PVP |
| 29 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE | 29 local LE_QUEST_TAG_TYPE_PET_BATTLE = LE_QUEST_TAG_TYPE_PET_BATTLE |
| 30 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON | 30 local LE_QUEST_TAG_TYPE_DUNGEON = LE_QUEST_TAG_TYPE_DUNGEON |
| 31 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION | 31 local LE_QUEST_TAG_TYPE_PROFESSION = LE_QUEST_TAG_TYPE_PROFESSION |
| 199 | 199 |
| 200 ToggleButton.OnShow(self.Toggle) | 200 ToggleButton.OnShow(self.Toggle) |
| 201 end | 201 end |
| 202 | 202 |
| 203 function Module:Reset() | 203 function Module:Reset() |
| 204 | |
| 205 | |
| 206 | |
| 204 self:UpdateFilters('SUMMARY_RESET') | 207 self:UpdateFilters('SUMMARY_RESET') |
| 205 self:UpdateMatches('SUMMARY_RESET') | 208 self:UpdateMatches('SUMMARY_RESET') |
| 206 self:UpdateLayout('SUMMARY_RESET') | 209 self:UpdateLayout('SUMMARY_RESET') |
| 207 end | 210 end |
| 208 | 211 |
| 220 print('|cFF00FFFF'..self:GetName()..':GetFilters()', event) | 223 print('|cFF00FFFF'..self:GetName()..':GetFilters()', event) |
| 221 | 224 |
| 222 wipe(db.FilterList) | 225 wipe(db.FilterList) |
| 223 | 226 |
| 224 for index, info in ipairs(db.DefaultFilters) do | 227 for index, info in ipairs(db.DefaultFilters) do |
| 228 info.used = true | |
| 225 tinsert(db.FilterList, info) | 229 tinsert(db.FilterList, info) |
| 226 end | 230 end |
| 227 self.bounties = db.Bounties | 231 self.bounties = db.Bounties |
| 228 self.BountyFilters = {} | 232 self.BountyFilters = {} |
| 233 local numBounties = 0 | |
| 229 for index, data in ipairs(self.bounties) do | 234 for index, data in ipairs(self.bounties) do |
| 230 if not IsQuestComplete(data.questID) then | 235 if not IsQuestComplete(data.questID) then |
| 231 | 236 numBounties = numBounties + 1 |
| 232 local info = self.BountyFilters[index] | 237 local info = self.BountyFilters[index] |
| 233 if not info then | 238 if not info then |
| 234 info = {} | 239 info = {} |
| 235 self.BountyFilters[index] = info | 240 self.BountyFilters[index] = info |
| 236 layoutDirty = true | 241 layoutDirty = true |
| 239 layoutDirty = true | 244 layoutDirty = true |
| 240 end | 245 end |
| 241 end | 246 end |
| 242 | 247 |
| 243 local questTitle = GetQuestLogTitle(GetQuestLogIndexByID(data.questID)) | 248 local questTitle = GetQuestLogTitle(GetQuestLogIndexByID(data.questID)) |
| 249 info.used = true | |
| 244 info.filterKey = 'factionID' | 250 info.filterKey = 'factionID' |
| 245 info.filterFunc = IsBountyCriteria | 251 info.filterFunc = IsBountyCriteria |
| 246 info.filterValue = data.questID | 252 info.filterValue = data.questID |
| 247 info.label = questTitle | 253 info.label = questTitle |
| 248 info.texture = data.icon | 254 info.texture = data.icon |
| 249 print('loading emissary', questTitle) | 255 print('loading emissary', questTitle) |
| 250 | 256 |
| 251 tinsert(db.FilterList, info) | 257 tinsert(db.FilterList, info) |
| 252 --{ filterKey= 'worldQuestType', filterValue = LE_QUEST_TAG_TYPE_PROFESSION, label = 'Profession', texture = "Interface\\LFGFRAME\\UI-LFR-PORTRAIT", }, | 258 --{ filterKey= 'worldQuestType', filterValue = LE_QUEST_TAG_TYPE_PROFESSION, label = 'Profession', texture = "Interface\\LFGFRAME\\UI-LFR-PORTRAIT", }, |
| 253 end | 259 end |
| 254 | 260 end |
| 255 end | 261 |
| 262 for i = numBounties + 1, #self.BountyFilters do | |
| 263 self.BountyFilters[i].used = nil | |
| 264 end | |
| 265 | |
| 256 end | 266 end |
| 257 | 267 |
| 258 function Module:UpdateMatches(event) | 268 function Module:UpdateMatches(event) |
| 259 print('|cFF00FF00UpdateMatches()', event) | 269 print('|cFF00FF00UpdateMatches()', event) |
| 260 local quests = db.QuestsByID | 270 local quests = db.QuestsByID |
| 266 wipe(info.GlobalMatches) | 276 wipe(info.GlobalMatches) |
| 267 wipe(info.LocalMatches) | 277 wipe(info.LocalMatches) |
| 268 print(info.filterKey, info.filterValue, info.filterFunc and 'func test' or 'compare') | 278 print(info.filterKey, info.filterValue, info.filterFunc and 'func test' or 'compare') |
| 269 for questID, pin in pairs(quests) do | 279 for questID, pin in pairs(quests) do |
| 270 print('', questID, pin.dataLoaded, (not IsQuestComplete(questID))) | 280 print('', questID, pin.dataLoaded, (not IsQuestComplete(questID))) |
| 271 if pin.dataLoaded and not IsQuestComplete(questID) then | 281 if pin.dataLoaded and (not IsQuestComplete(questID)) then |
| 272 | |
| 273 local keyName, keyValue = info.filterKey, info.filterValue | 282 local keyName, keyValue = info.filterKey, info.filterValue |
| 274 local isMatch | 283 local isMatch |
| 275 if info.filterFunc then | 284 if info.filterFunc then |
| 276 | |
| 277 isMatch = info.filterFunc(pin, keyValue) | 285 isMatch = info.filterFunc(pin, keyValue) |
| 278 print(' running special function, result =', isMatch) | 286 print(' running special function, result =', isMatch) |
| 279 | |
| 280 elseif pin[keyName] and (pin[keyName] == keyValue) then | 287 elseif pin[keyName] and (pin[keyName] == keyValue) then |
| 281 isMatch = true | 288 isMatch = true |
| 282 print(' rote match') | 289 print(' rote match') |
| 283 end | 290 end |
| 284 if isMatch then | 291 if isMatch then |
| 285 tinsert(info.GlobalMatches, pin) | 292 tinsert(info.GlobalMatches, pin) |
| 286 if questsForMap[questID] then | 293 if questsForMap[questID] then |
| 287 print(' local map') | 294 print(' local map') |
| 288 tinsert(info.LocalMatches, pin) | 295 tinsert(info.LocalMatches, pin) |
| 289 end | 296 end |
| 290 | 297 end |
| 291 end | 298 end |
| 292 end | |
| 293 | |
| 294 end | 299 end |
| 295 print('global', #info.GlobalMatches, 'local', #info.LocalMatches) | 300 print('global', #info.GlobalMatches, 'local', #info.LocalMatches) |
| 296 end | 301 end |
| 297 end | 302 end |
| 298 | 303 |
| 409 if currentHeader then | 414 if currentHeader then |
| 410 currentHeader:SetSize(headerWidth - BUTTONS_SPACING + HEADERS_SPACING, HEADERS_HEIGHT) | 415 currentHeader:SetSize(headerWidth - BUTTONS_SPACING + HEADERS_SPACING, HEADERS_HEIGHT) |
| 411 layoutWidth = layoutWidth + headerWidth + HEADERS_SPACING | 416 layoutWidth = layoutWidth + headerWidth + HEADERS_SPACING |
| 412 end | 417 end |
| 413 | 418 |
| 414 self:SetSize(layoutWidth, BUTTONS_HEIGHT + BUTTONS_SPACING * 2) | 419 self:SetSize(layoutWidth, BUTTONS_HEIGHT + (BUTTONS_SPACING * 2)) |
| 415 self:ClearAllPoints() | 420 self:ClearAllPoints() |
| 416 self:SetPoint('TOP') | 421 self:SetPoint('BOTTOM') |
| 417 self.isStale = nil | 422 self.isStale = nil |
| 418 layoutDirty = nil | 423 layoutDirty = nil |
| 419 end | 424 end |
| 420 | 425 |
| 421 function Module:Cleanup() | 426 function Module:Cleanup() |
