annotate Modules/LFGFrame.lua @ 136:414e37af1b1b v8.0.1-20180718

8.0.1 "pre-patch" updates - disabled PaperDoll, ArtifactPower, and Social/LFG modules
author Nenue
date Wed, 18 Jul 2018 15:31:15 -0400
parents 4979b5cca6de
children 6e2f20230190
rev   line source
Nenue@135 1
Nenue@135 2 local print = DEVIAN_WORKSPACE and function(...) print('LFGFrame', ...) end or nop
Nenue@135 3
Nenue@135 4 VeneerRosterKunMixin = {
Nenue@135 5 anchorFrame = 'LFGListFrame',
Nenue@135 6 anchorPoint = 'TOPLEFT',
Nenue@135 7
Nenue@135 8 InvasionsDirty = true,
Nenue@135 9 AchievementsDirty = true,
Nenue@135 10 GuildInfoDirty = true,
Nenue@135 11 blocks = {},
Nenue@135 12 }
Nenue@135 13
Nenue@135 14
Nenue@135 15 local module = VeneerRosterKunMixin
Nenue@135 16
Nenue@135 17 function module:OnLoad()
Nenue@135 18 Veneer:AddHandler(self, self.anchorPoint)
Nenue@135 19 self:RegisterEvent('ADDON_LOADED')
Nenue@135 20
Nenue@135 21 hooksecurefunc("LFGListCategorySelection_StartFindGroup", function(panel, questID)
Nenue@135 22 print('LFGListCategorySelection_StartFindGroup', panel:GetParent(), questID)
Nenue@135 23 end)
Nenue@135 24 hooksecurefunc("LFGListCategorySelection_SelectCategory", function(panel, categoryID, filters)
Nenue@135 25 print('LFGListCategorySelection_SelectCategory', panel:GetParent(), categoryID, filters)
Nenue@135 26 print('\n',debugstack(3))
Nenue@135 27 end)
Nenue@135 28 hooksecurefunc("LFGListSearchPanel_SetCategory", function(panel, categoryID, filters, baseFilters)
Nenue@135 29 print('LFGListSearchPanel_SetCategory', panel:GetParent(), categoryID, filters, baseFilters)
Nenue@135 30 end)
Nenue@135 31 end
Nenue@135 32
Nenue@135 33 function module:Setup()
Nenue@135 34 VeneerHandlerMixin.Setup(self)
Nenue@135 35 self:SetParent(LFGListFrame)
Nenue@135 36 self:SetPoint('TOPLEFT', LFGListFrame,'TOPRIGHT')
Nenue@135 37 self:SetShown(true)
Nenue@135 38 end
Nenue@135 39
Nenue@135 40 function module:SetDirty()
Nenue@135 41 if self:IsVisible() then
Nenue@135 42 self:Update()
Nenue@135 43 else
Nenue@135 44 self.GuildInfoDirty = true
Nenue@135 45 self.AchievementsDirty = true
Nenue@135 46 self.InvasionsDirty = true
Nenue@135 47 end
Nenue@135 48 end
Nenue@135 49 local firstLoad = true
Nenue@135 50 function module:OnShow()
Nenue@135 51 print('|cFF00FFFFOnShow()|r')
Nenue@135 52 self:Update(firstLoad)
Nenue@135 53 firstLoad = nil
Nenue@135 54
Nenue@135 55 local locationName = GetRealZoneText()
Nenue@135 56
Nenue@135 57 if not C_LFGList.GetActiveEntryInfo() and locationName and locationName:match('Invasion') and not InCombatLockdown() then
Nenue@135 58 PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub);
Nenue@135 59 local panel = LFGListFrame.CategorySelection
Nenue@135 60 LFGListCategorySelection_SelectCategory(panel, 6, 0);
Nenue@136 61
Nenue@136 62 local bossName = locationName:match('Greater Invasion Point: (.+)')
Nenue@136 63
Nenue@136 64 LFGListCategorySelection_StartFindGroup(panel, bossName or locationName);
Nenue@135 65 end
Nenue@135 66 end
Nenue@135 67
Nenue@135 68 function module:UpdateGuildInfo()
Nenue@135 69 local numMembers = GetNumGuildMembers()
Nenue@135 70 print(numMembers)
Nenue@135 71 for i = 1, numMembers do
Nenue@135 72 --print(GetGuildRosterInfo(i))
Nenue@135 73 end
Nenue@135 74 self.GuildInfoDirty = nil
Nenue@135 75 end
Nenue@135 76
Nenue@135 77 -- cheevos to link
Nenue@135 78 local overlaps = {
Nenue@135 79 [11781] = 11875,
Nenue@135 80 [12002] = 12111,
Nenue@135 81 }
Nenue@135 82 local cheevos = {
Nenue@135 83 -- Mythic Prog
Nenue@135 84 {
Nenue@135 85 -- Antorus
Nenue@135 86 12002, -- argus
Nenue@135 87 12001, -- aggramar
Nenue@135 88 12000, -- coven
Nenue@135 89 11999, -- barry
Nenue@135 90 11998, -- kin'garoth
Nenue@135 91 11997, -- imonar
Nenue@135 92 11996, -- eonar
Nenue@135 93 11995, -- portal keeper
Nenue@135 94 11994, -- high command
Nenue@135 95 11993, -- doggos
Nenue@135 96 11992, -- worldbreaker
Nenue@135 97
Nenue@135 98 -- Tomb of Sargeras
Nenue@135 99 11781, -- kj
Nenue@135 100 11780, -- avatar
Nenue@135 101 11779, -- maiden
Nenue@135 102 11776, -- mistress
Nenue@135 103 11778, -- host,
Nenue@135 104 11777, -- sisters
Nenue@135 105 11775, -- harjatan,
Nenue@135 106 11774, -- di,
Nenue@135 107 11773, -- goroth
Nenue@135 108 },
Nenue@135 109 -- Completion
Nenue@135 110 {
Nenue@135 111 12111, -- CE Argus,
Nenue@135 112 12110, -- AotC Argus,
Nenue@135 113 11875, -- CE KJ
Nenue@135 114 11874, -- AotC KJ
Nenue@135 115 11790 -- Deceiver's Fall,
Nenue@135 116
Nenue@135 117
Nenue@135 118 },
Nenue@135 119 -- Mythic+
Nenue@135 120 {
Nenue@135 121 11162, -- master
Nenue@135 122 11185, -- conqueror
Nenue@135 123 }
Nenue@135 124 }
Nenue@135 125
Nenue@135 126 local invasion = {}
Nenue@135 127 local cheev = {}
Nenue@135 128
Nenue@135 129 function cheev:OnClick()
Nenue@135 130 local resultID = LFGListFrame.SearchPanel.selectedResult or self:GetParent().selectedID
Nenue@135 131 print('current selection = ', resultID)
Nenue@135 132 if ACTIVE_CHAT_EDIT_BOX then
Nenue@135 133 ChatEdit_InsertLink(self.link)
Nenue@135 134 elseif resultID then
Nenue@135 135 local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = C_LFGList.GetSearchResultInfo(resultID);
Nenue@135 136 --print(name, comment, leaderName)
Nenue@135 137 ChatFrame_OpenChat("/w "..leaderName.." "..self.link, DEFAULT_CHAT_FRAME)
Nenue@135 138 end
Nenue@135 139 end
Nenue@135 140
Nenue@135 141 function invasion:OnClick()
Nenue@135 142 if not InCombatLockdown() then
Nenue@135 143 PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub);
Nenue@135 144 local panel = LFGListFrame.CategorySelection
Nenue@135 145 LFGListCategorySelection_SelectCategory(panel, 6, 0);
Nenue@135 146 LFGListCategorySelection_StartFindGroup(panel, self.searchText);
Nenue@135 147 end
Nenue@135 148
Nenue@135 149 end
Nenue@135 150
Nenue@135 151 local listed = {}
Nenue@135 152
Nenue@135 153
Nenue@135 154 function module:Update(forced)
Nenue@135 155 if self.GuildInfoDirty or forced then
Nenue@135 156 self:UpdateGuildInfo()
Nenue@135 157 end
Nenue@135 158 local numBlocks = 0
Nenue@135 159 if self.AchievementsDirty or forced then
Nenue@135 160 numBlocks = self:UpdateAchievementLinks(numBlocks)
Nenue@135 161 end
Nenue@135 162
Nenue@135 163 if self.InvasionsDirty or forced then
Nenue@135 164 numBlocks = self:UpdateInvasionButtons(numBlocks)
Nenue@135 165 end
Nenue@135 166
Nenue@135 167 local lastBlock
Nenue@135 168 local contentsHeight = 0
Nenue@135 169 for index, block in ipairs(self.blocks) do
Nenue@135 170 if index > numBlocks then
Nenue@135 171 block:Hide()
Nenue@135 172 else
Nenue@135 173 block:ClearAllPoints()
Nenue@135 174 if lastBlock then
Nenue@135 175 block:SetPoint('TOPLEFT', lastBlock, 'BOTTOMLEFT', 0, -2)
Nenue@135 176 else
Nenue@135 177 block:SetPoint('TOPLEFT', LFGListFrame, 'TOPRIGHT', 0, 0)
Nenue@135 178 end
Nenue@135 179 block:Show()
Nenue@135 180 lastBlock = block
Nenue@135 181
Nenue@135 182 contentsHeight = contentsHeight + block:GetHeight()
Nenue@135 183 end
Nenue@135 184 end
Nenue@135 185 self:SetHeight(contentsHeight)
Nenue@135 186 end
Nenue@135 187
Nenue@135 188
Nenue@135 189 function module:GetBlock(index)
Nenue@135 190
Nenue@135 191 local block =self.blocks[index]
Nenue@135 192 if not block then
Nenue@135 193 block = CreateFrame('Button', 'VeneerRosterKunBlock'..index, self, 'VeneerRosterKunBlock')
Nenue@135 194
Nenue@135 195 block:SetID(index)
Nenue@135 196 self.blocks[index] = block
Nenue@135 197 end
Nenue@135 198 return block
Nenue@135 199 end
Nenue@135 200
Nenue@135 201 function module:UpdateInvasionButtons(offset)
Nenue@135 202 print('UpdateInvasionButtons()')
Nenue@135 203 offset = offset or 0
Nenue@135 204 local lastBlock = self.lastAchievement
Nenue@135 205
Nenue@135 206 local contentsHeight = 0
Nenue@135 207 local areaPOIs = C_WorldMap.GetAreaPOIForMap(GetCurrentMapAreaID(), 1);
Nenue@135 208 if areaPOIs then
Nenue@135 209
Nenue@135 210
Nenue@135 211 for i, areaPoiID in ipairs(areaPOIs) do
Nenue@135 212 local poiInfo = C_WorldMap.GetAreaPOIInfo(GetCurrentMapAreaID(), areaPoiID, 1);
Nenue@135 213
Nenue@135 214 offset = offset + 1
Nenue@135 215 --print(index)
Nenue@135 216 local block = self:GetBlock(offset)
Nenue@135 217 block:SetScript('OnClick', invasion.OnClick)
Nenue@135 218 block.Label:SetText(poiInfo.description)
Nenue@135 219 block.Icon:SetAtlas(poiInfo.atlasName)
Nenue@135 220 block.searchText = poiInfo.description
Nenue@135 221 block.buttonType = 'group-poi'
Nenue@135 222 end
Nenue@135 223 end
Nenue@135 224 return offset, contentsHeight
Nenue@135 225 end
Nenue@135 226
Nenue@135 227 function module:UpdateAchievementLinks(offset)
Nenue@135 228 print('UpdateAchievementLinks()')
Nenue@135 229 offset = offset or 0
Nenue@135 230 local resultID = LFGListFrame.SearchPanel.selectedResult or self.selectedID
Nenue@135 231 self:Show()
Nenue@135 232
Nenue@135 233
Nenue@135 234 local contentsHeight = 0
Nenue@135 235 for _, group in ipairs(cheevos) do
Nenue@135 236 for _, id in ipairs(group) do
Nenue@135 237 local _, name, points, completed, month, day, year, description, flags, icon = GetAchievementInfo(id)
Nenue@135 238 if completed then
Nenue@135 239 -- if the highest mythic kill
Nenue@135 240 if listed[overlaps[id]] then
Nenue@135 241 break
Nenue@135 242 end
Nenue@135 243 offset = offset + 1
Nenue@135 244 local block = self:GetBlock(offset)
Nenue@135 245 block:SetScript('OnClick', cheev.OnClick)
Nenue@135 246 --print(index)
Nenue@135 247
Nenue@135 248 block.link = GetAchievementLink(id)
Nenue@135 249 block.Icon:SetTexture(icon)
Nenue@135 250 block.Label:SetText(name)
Nenue@135 251 block.buttonType = 'cheevo'
Nenue@135 252
Nenue@135 253 contentsHeight = contentsHeight + block:GetHeight()
Nenue@135 254
Nenue@135 255 --print(index, name, icon)
Nenue@135 256 listed[id] = true
Nenue@135 257 break;
Nenue@135 258 end
Nenue@135 259 end
Nenue@135 260 end
Nenue@135 261
Nenue@135 262 self.lastAchievement = lastBlock
Nenue@135 263
Nenue@135 264 return offset, contentsHeight
Nenue@135 265
Nenue@135 266 --[[
Nenue@135 267 --]]
Nenue@135 268
Nenue@135 269
Nenue@135 270 end
Nenue@135 271
Nenue@135 272 function module:SetupGuildUI()
Nenue@135 273 self:UnregisterEvent('ADDON_LOADED')
Nenue@135 274 end
Nenue@135 275 function module:OnEvent(event, ...)
Nenue@135 276 print('|cFFFF0088OnEvent()|r', event, ...)
Nenue@135 277 if event == 'ADDON_LOADED' then
Nenue@135 278 local addon = ...
Nenue@135 279 if addon == 'Blizzard_GuildUI' then
Nenue@135 280 self:SetupGuildUI()
Nenue@135 281 end
Nenue@135 282 elseif event == 'LFG_LIST_SEARCH_RESULTS_RECEIVED' then
Nenue@135 283 elseif event == 'LFG_LIST_SEARCH_RESULT_UPDATED' then
Nenue@135 284 end
Nenue@135 285 end