ESOUI SVN TaosGroupUltimate

[/] [trunk/] [TaosGroupUltimate/] [ui/] [CompactSwimlaneList.lua] - Blame information for rev 63

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 20 Taonnor-14572
--[[
2 Taonnor-14572
        Addon: Taos Group Ultimate
3 Taonnor-14572
        Author: TProg Taonnor
4 Taonnor-14572
        Created by @Taonnor
5 Taonnor-14572
]]--
6 Taonnor-14572
 
7 Taonnor-14572
--[[
8 37 Taonnor-14572
        Local variables
9 20 Taonnor-14572
]]--
10 Taonnor-14572
local LOG_ACTIVE = false
11 37 Taonnor-14572
 
12 20 Taonnor-14572
local SWIMLANES = 6
13 Taonnor-14572
local ROWS = 6
14 56 Taonnor-14572
local REFRESHRATE = 1000 -- ms; RegisterForUpdate is in miliseconds
15 20 Taonnor-14572
local TIMEOUT = 4 -- s; GetTimeStamp() is in seconds
16 Taonnor-14572
 
17 46 Taonnor-14572
local _logger = nil
18 Taonnor-14572
local _control = nil
19 Taonnor-14572
 
20 20 Taonnor-14572
--[[
21 37 Taonnor-14572
        Table CompactSwimlaneList
22 20 Taonnor-14572
]]--
23 37 Taonnor-14572
TGU_CompactSwimlaneList = {}
24 Taonnor-14572
TGU_CompactSwimlaneList.__index = TGU_CompactSwimlaneList
25 20 Taonnor-14572
 
26 Taonnor-14572
--[[
27 37 Taonnor-14572
        Table Members
28 20 Taonnor-14572
]]--
29 37 Taonnor-14572
TGU_CompactSwimlaneList.Name = "TGU-CompactSwimlaneList"
30 Taonnor-14572
TGU_CompactSwimlaneList.IsMocked = false
31 Taonnor-14572
TGU_CompactSwimlaneList.Swimlanes = {}
32 20 Taonnor-14572
 
33 Taonnor-14572
--[[
34 Taonnor-14572
        Sets visibility of labels
35 Taonnor-14572
]]--
36 37 Taonnor-14572
function TGU_CompactSwimlaneList.RefreshList()
37 Taonnor-14572
        if (LOG_ACTIVE) then _logger:logTrace("TGU_CompactSwimlaneList.RefreshList") end
38 20 Taonnor-14572
 
39 Taonnor-14572
    -- Check all swimlanes
40 37 Taonnor-14572
    for i,swimlane in ipairs(TGU_CompactSwimlaneList.Swimlanes) do
41 Taonnor-14572
        TGU_CompactSwimlaneList.ClearPlayersFromSwimlane(swimlane)
42 20 Taonnor-14572
        end
43 Taonnor-14572
end
44 Taonnor-14572
 
45 Taonnor-14572
--[[
46 55 Taonnor-14572
        Sorts swimlane
47 Taonnor-14572
]]--
48 Taonnor-14572
function TGU_CompactSwimlaneList.SortSwimlane(swimlane)
49 Taonnor-14572
        if (LOG_ACTIVE) then _logger:logTrace("TGU_CompactSwimlaneList.SortSwimlane") end
50 Taonnor-14572
 
51 Taonnor-14572
    -- Comparer
52 Taonnor-14572
    function compare(playerLeft, playerRight)
53 59 Taonnor-14572
        if (playerLeft.RelativeUltimate == playerRight.RelativeUltimate) then
54 Taonnor-14572
            return playerLeft.PingTag < playerRight.PingTag
55 Taonnor-14572
        else
56 Taonnor-14572
            return playerLeft.RelativeUltimate > playerRight.RelativeUltimate
57 Taonnor-14572
        end
58 55 Taonnor-14572
    end
59 Taonnor-14572
 
60 Taonnor-14572
    table.sort(swimlane.Players, compare)
61 Taonnor-14572
 
62 59 Taonnor-14572
    -- Sort by name
63 Taonnor-14572
 
64 55 Taonnor-14572
    -- Update sorted swimlane list
65 Taonnor-14572
    for i,swimlanePlayer in ipairs(swimlane.Players) do
66 56 Taonnor-14572
        TGU_CompactSwimlaneList.UpdateListRow(swimlane.SwimlaneControl:GetNamedChild("Row" .. i), swimlanePlayer)
67 55 Taonnor-14572
    end
68 Taonnor-14572
end
69 Taonnor-14572
 
70 Taonnor-14572
--[[
71 20 Taonnor-14572
        Updates list row
72 Taonnor-14572
]]--
73 55 Taonnor-14572
function TGU_CompactSwimlaneList.UpdateListRow(row, player)
74 20 Taonnor-14572
        if (LOG_ACTIVE) then
75 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.UpdateListRow")
76 20 Taonnor-14572
    end
77 Taonnor-14572
 
78 55 Taonnor-14572
    local playerName = player.PlayerName
79 Taonnor-14572
    local nameLength = string.len(playerName)
80 Taonnor-14572
 
81 Taonnor-14572
    if (nameLength > 6) then
82 Taonnor-14572
        playerName = string.sub(playerName, 0, 5) .. ".."
83 Taonnor-14572
    end
84 Taonnor-14572
 
85 Taonnor-14572
    row:GetNamedChild("SenderNameValueLabel"):SetText(playerName)
86 Taonnor-14572
    row:GetNamedChild("RelativeUltimateStatusBar"):SetValue(player.RelativeUltimate)
87 Taonnor-14572
 
88 Taonnor-14572
        if (player.IsPlayerDead) then
89 Taonnor-14572
        -- Dead Color
90 Taonnor-14572
        row:GetNamedChild("SenderNameValueLabel"):SetColor(0.5, 0.5, 0.5, 0.8)
91 Taonnor-14572
        row:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.8, 0.03, 0.03, 0.7)
92 Taonnor-14572
    elseif (player.RelativeUltimate == 100) then
93 Taonnor-14572
                -- Ready Color
94 Taonnor-14572
        row:GetNamedChild("SenderNameValueLabel"):SetColor(1, 1, 1, 1)
95 Taonnor-14572
        row:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.03, 0.7, 0.03, 0.7)
96 Taonnor-14572
        else
97 Taonnor-14572
                -- Inprogress Color
98 Taonnor-14572
        row:GetNamedChild("SenderNameValueLabel"):SetColor(1, 1, 1, 0.8)
99 Taonnor-14572
        row:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.03, 0.03, 0.7, 0.7)
100 Taonnor-14572
        end
101 Taonnor-14572
 
102 Taonnor-14572
    row:SetHidden(false)
103 Taonnor-14572
end
104 Taonnor-14572
 
105 Taonnor-14572
--[[
106 Taonnor-14572
        Updates list row
107 Taonnor-14572
]]--
108 Taonnor-14572
function TGU_CompactSwimlaneList.UpdatePlayer(player)
109 Taonnor-14572
        if (LOG_ACTIVE) then
110 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.UpdatePlayer")
111 Taonnor-14572
    end
112 Taonnor-14572
 
113 20 Taonnor-14572
        if (player) then
114 37 Taonnor-14572
        local swimLane = TGU_CompactSwimlaneList.GetSwimLane(player.UltimateGroup.GroupAbilityId)
115 20 Taonnor-14572
 
116 Taonnor-14572
        if (swimLane) then
117 55 Taonnor-14572
            local row = TGU_CompactSwimlaneList.GetSwimLaneRow(swimLane, player.PlayerName)
118 20 Taonnor-14572
 
119 Taonnor-14572
            -- Update timestamp
120 Taonnor-14572
            if (row ~= nil) then
121 Taonnor-14572
                for i,swimlanePlayer in ipairs(swimLane.Players) do
122 Taonnor-14572
                            if (swimlanePlayer.PlayerName == player.PlayerName) then
123 Taonnor-14572
                        swimlanePlayer.LastMapPingTimestamp = GetTimeStamp()
124 56 Taonnor-14572
                        swimlanePlayer.IsPlayerDead = player.IsPlayerDead
125 55 Taonnor-14572
                        swimlanePlayer.RelativeUltimate = player.RelativeUltimate
126 20 Taonnor-14572
                        break
127 Taonnor-14572
                    end
128 Taonnor-14572
                    end
129 Taonnor-14572
            else
130 Taonnor-14572
                -- Add new player
131 Taonnor-14572
                local nextFreeRow = 1
132 Taonnor-14572
 
133 Taonnor-14572
                for i,player in ipairs(swimLane.Players) do
134 Taonnor-14572
                            nextFreeRow = nextFreeRow + 1
135 Taonnor-14572
                    end
136 Taonnor-14572
 
137 Taonnor-14572
                if (nextFreeRow <= ROWS) then
138 Taonnor-14572
                    if (LOG_ACTIVE) then
139 55 Taonnor-14572
                        _logger:logDebug("TGU_CompactSwimlaneList.UpdatePlayer, add player " .. tostring(player.PlayerName) .. " to row " .. tostring(nextFreeRow))
140 20 Taonnor-14572
                    end
141 Taonnor-14572
 
142 Taonnor-14572
                    player.LastMapPingTimestamp = GetTimeStamp()
143 Taonnor-14572
                    swimLane.Players[nextFreeRow] = player
144 Taonnor-14572
                    row = swimLane.SwimlaneControl:GetNamedChild("Row" .. nextFreeRow)
145 Taonnor-14572
                else
146 55 Taonnor-14572
                    if (LOG_ACTIVE) then _logger:logDebug("TGU_CompactSwimlaneList.UpdatePlayer, too much players for one swimlane " .. tostring(nextFreeRow)) end
147 20 Taonnor-14572
                end
148 Taonnor-14572
            end
149 55 Taonnor-14572
 
150 56 Taonnor-14572
            -- Only update if player in a row
151 Taonnor-14572
            if (row ~= nil) then
152 Taonnor-14572
                if (TGU_SettingsHandler.SavedVariables.IsSortingActive) then
153 Taonnor-14572
                    -- Sort swimlane with all players
154 Taonnor-14572
                    TGU_CompactSwimlaneList.SortSwimlane(swimLane)
155 Taonnor-14572
                else
156 Taonnor-14572
                    -- Directly update row with player
157 Taonnor-14572
                    TGU_CompactSwimlaneList.UpdateListRow(row, player)
158 Taonnor-14572
                end
159 55 Taonnor-14572
            end
160 20 Taonnor-14572
        else
161 55 Taonnor-14572
            if (LOG_ACTIVE) then _logger:logDebug("TGU_CompactSwimlaneList.UpdatePlayer, swimlane not found for ultimategroup " .. tostring(ultimateGroup.GroupName)) end
162 20 Taonnor-14572
        end
163 Taonnor-14572
        end
164 Taonnor-14572
end
165 Taonnor-14572
 
166 Taonnor-14572
--[[
167 Taonnor-14572
        Get swimlane from current SwimLanes
168 Taonnor-14572
]]--
169 37 Taonnor-14572
function TGU_CompactSwimlaneList.GetSwimLane(ultimateGroupId)
170 20 Taonnor-14572
    if (LOG_ACTIVE) then
171 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.GetSwimLane")
172 Taonnor-14572
        _logger:logDebug("ultimateGroupId", ultimateGroupId)
173 20 Taonnor-14572
    end
174 Taonnor-14572
 
175 Taonnor-14572
    if (ultimateGroupId ~= 0) then
176 37 Taonnor-14572
        for i,swimLane in ipairs(TGU_CompactSwimlaneList.Swimlanes) do
177 20 Taonnor-14572
                    if (swimLane.UltimateGroupId == ultimateGroupId) then
178 Taonnor-14572
                return swimLane
179 Taonnor-14572
            end
180 Taonnor-14572
            end
181 Taonnor-14572
 
182 37 Taonnor-14572
        if (LOG_ACTIVE) then _logger:logDebug("TGU_CompactSwimlaneList.GetSwimLane, swimLane not found " .. tostring(ultimateGroupId)) end
183 20 Taonnor-14572
        return nil
184 Taonnor-14572
    else
185 37 Taonnor-14572
        _logger:logError("TGU_CompactSwimlaneList.GetSwimLane, ultimateGroupId is 0")
186 20 Taonnor-14572
        return nil
187 Taonnor-14572
    end
188 Taonnor-14572
end
189 Taonnor-14572
 
190 Taonnor-14572
--[[
191 Taonnor-14572
        Get Player Row from current players in swimlane
192 Taonnor-14572
]]--
193 37 Taonnor-14572
function TGU_CompactSwimlaneList.GetSwimLaneRow(swimLane, playerName)
194 20 Taonnor-14572
    if (LOG_ACTIVE) then
195 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.GetSwimLaneRow")
196 Taonnor-14572
        _logger:logDebug("swimLane ID", swimLane.Id)
197 20 Taonnor-14572
    end
198 Taonnor-14572
 
199 Taonnor-14572
    if (swimLane) then
200 Taonnor-14572
        for i,player in ipairs(swimLane.Players) do
201 37 Taonnor-14572
            if (LOG_ACTIVE) then _logger:logDebug(player.PlayerName .. " == " .. playerName) end
202 20 Taonnor-14572
                    if (player.PlayerName == playerName) then
203 Taonnor-14572
                return swimLane.SwimlaneControl:GetNamedChild("Row" .. i)
204 Taonnor-14572
            end
205 Taonnor-14572
            end
206 Taonnor-14572
 
207 37 Taonnor-14572
        if (LOG_ACTIVE) then _logger:logDebug("TGU_CompactSwimlaneList.GetSwimLane, player not found " .. tostring(playerName)) end
208 20 Taonnor-14572
        return nil
209 Taonnor-14572
    else
210 37 Taonnor-14572
        _logger:logError("TGU_CompactSwimlaneList.GetSwimLane, swimLane is nil")
211 20 Taonnor-14572
        return nil
212 Taonnor-14572
    end
213 Taonnor-14572
end
214 Taonnor-14572
 
215 Taonnor-14572
--[[
216 Taonnor-14572
        Clears all players in swimlane
217 Taonnor-14572
]]--
218 37 Taonnor-14572
function TGU_CompactSwimlaneList.ClearPlayersFromSwimlane(swimlane)
219 20 Taonnor-14572
    if (LOG_ACTIVE) then
220 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.ClearPlayersFromSwimlane")
221 Taonnor-14572
        _logger:logDebug("swimlane ID", swimlane.Id)
222 20 Taonnor-14572
    end
223 Taonnor-14572
 
224 Taonnor-14572
    if (swimlane) then
225 Taonnor-14572
        for i=1, ROWS, 1 do
226 Taonnor-14572
            local row = swimlane.SwimlaneControl:GetNamedChild("Row" .. i)
227 Taonnor-14572
            local swimlanePlayer = swimlane.Players[i]
228 Taonnor-14572
 
229 Taonnor-14572
            if (swimlanePlayer ~= nil) then
230 Taonnor-14572
                local isPlayerNotGrouped = IsUnitGrouped(swimlanePlayer.PingTag) == false
231 Taonnor-14572
 
232 37 Taonnor-14572
                if (TGU_CompactSwimlaneList.IsMocked) then
233 20 Taonnor-14572
                    isPlayerNotGrouped = false
234 Taonnor-14572
                end
235 Taonnor-14572
 
236 Taonnor-14572
                local isPlayerTimedOut = (GetTimeStamp() - swimlanePlayer.LastMapPingTimestamp) > TIMEOUT
237 Taonnor-14572
                local isPlayerUltimateNotCorrect = swimlane.UltimateGroupId ~= swimlanePlayer.UltimateGroup.GroupAbilityId
238 Taonnor-14572
 
239 Taonnor-14572
                if (isPlayerNotGrouped or isPlayerTimedOut or isPlayerUltimateNotCorrect) then
240 37 Taonnor-14572
                    if (LOG_ACTIVE) then _logger:logDebug("Player invalid, hide row: " .. tostring(i)) end
241 20 Taonnor-14572
 
242 Taonnor-14572
                    row:SetHidden(true)
243 Taonnor-14572
                    table.remove(swimlane.Players, i)
244 Taonnor-14572
                end
245 Taonnor-14572
            else
246 37 Taonnor-14572
                if (LOG_ACTIVE) then _logger:logDebug("Row empty, hide: " .. tostring(i)) end
247 20 Taonnor-14572
 
248 Taonnor-14572
                row:SetHidden(true)
249 Taonnor-14572
            end
250 Taonnor-14572
        end
251 Taonnor-14572
    end
252 Taonnor-14572
end
253 Taonnor-14572
 
254 Taonnor-14572
--[[
255 Taonnor-14572
        SetControlMovable sets the Movable and MouseEnabled flag in UI elements
256 Taonnor-14572
]]--
257 37 Taonnor-14572
function TGU_CompactSwimlaneList.SetControlMovable(isMovable)
258 20 Taonnor-14572
    if (LOG_ACTIVE) then
259 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.SetControlMovable")
260 Taonnor-14572
        _logger:logDebug("isMovable", isMovable)
261 20 Taonnor-14572
    end
262 Taonnor-14572
 
263 46 Taonnor-14572
    _control:GetNamedChild("MovableControl"):SetHidden(isMovable == false)
264 28 Taonnor-14572
 
265 46 Taonnor-14572
    _control:SetMovable(isMovable)
266 Taonnor-14572
        _control:SetMouseEnabled(isMovable)
267 20 Taonnor-14572
end
268 Taonnor-14572
 
269 Taonnor-14572
--[[
270 37 Taonnor-14572
        RestorePosition sets TGU_CompactSwimlaneList on settings position
271 20 Taonnor-14572
]]--
272 37 Taonnor-14572
function TGU_CompactSwimlaneList.RestorePosition(posX, posY)
273 20 Taonnor-14572
    if (LOG_ACTIVE) then
274 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.RestorePosition")
275 Taonnor-14572
        _logger:logDebug("posX, posY", posX, posY)
276 20 Taonnor-14572
    end
277 Taonnor-14572
 
278 46 Taonnor-14572
        _control:ClearAnchors()
279 Taonnor-14572
        _control:SetAnchor(TOPLEFT, GuiRoot, TOPLEFT, posX, posY)
280 20 Taonnor-14572
end
281 Taonnor-14572
 
282 Taonnor-14572
--[[
283 37 Taonnor-14572
        OnTGU_CompactSwimlaneListMoveStop saves current TGU_CompactSwimlaneList position to settings
284 20 Taonnor-14572
]]--
285 37 Taonnor-14572
function TGU_CompactSwimlaneList.OnCompactSwimlaneListMoveStop()
286 Taonnor-14572
    if (LOG_ACTIVE) then _logger:logTrace("TGU_CompactSwimlaneList.OnCompactSwimlaneListMoveStop") end
287 20 Taonnor-14572
 
288 46 Taonnor-14572
        local left = _control:GetLeft()
289 Taonnor-14572
        local top = _control:GetTop()
290 20 Taonnor-14572
 
291 37 Taonnor-14572
    TGU_SettingsHandler.SavedVariables.PosX = left
292 Taonnor-14572
    TGU_SettingsHandler.SavedVariables.PosY = top
293 20 Taonnor-14572
 
294 Taonnor-14572
    if (LOG_ACTIVE) then
295 37 Taonnor-14572
        _logger:logDebug("PosX, PosY", TGU_SettingsHandler.SavedVariables.PosX, TGU_SettingsHandler.SavedVariables.PosY)
296 20 Taonnor-14572
    end
297 Taonnor-14572
end
298 Taonnor-14572
 
299 Taonnor-14572
--[[
300 Taonnor-14572
        SetControlHidden sets hidden on control
301 Taonnor-14572
]]--
302 50 Taonnor-14572
function TGU_CompactSwimlaneList.SetControlHidden(isHidden)
303 20 Taonnor-14572
    if (LOG_ACTIVE) then
304 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.SetControlHidden")
305 50 Taonnor-14572
        _logger:logDebug("isHidden", isHidden)
306 20 Taonnor-14572
    end
307 Taonnor-14572
 
308 58 Taonnor-14572
    if (TGU_GroupHandler.IsGrouped) then
309 Taonnor-14572
        _control:SetHidden(isHidden)
310 Taonnor-14572
    else
311 Taonnor-14572
        _control:SetHidden(true)
312 Taonnor-14572
    end
313 50 Taonnor-14572
end
314 Taonnor-14572
 
315 Taonnor-14572
--[[
316 Taonnor-14572
        SetControlActive sets hidden on control
317 Taonnor-14572
]]--
318 Taonnor-14572
function TGU_CompactSwimlaneList.SetControlActive()
319 Taonnor-14572
    if (LOG_ACTIVE) then
320 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.SetControlActive")
321 Taonnor-14572
    end
322 Taonnor-14572
 
323 37 Taonnor-14572
    local isHidden = TGU_SettingsHandler.IsCompactSwimlaneListVisible() == false
324 Taonnor-14572
    if (LOG_ACTIVE) then _logger:logDebug("isHidden", isHidden) end
325 50 Taonnor-14572
 
326 58 Taonnor-14572
    TGU_CompactSwimlaneList.SetControlHidden(isHidden or CurrentHudHiddenState())
327 20 Taonnor-14572
 
328 Taonnor-14572
    if (isHidden) then
329 Taonnor-14572
        -- Start timeout timer
330 37 Taonnor-14572
            EVENT_MANAGER:UnregisterForUpdate(TGU_CompactSwimlaneList.Name)
331 20 Taonnor-14572
 
332 38 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TGU_GROUP_CHANGED, TGU_CompactSwimlaneList.RefreshList)
333 55 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TGU_PLAYER_DATA_CHANGED, TGU_CompactSwimlaneList.UpdatePlayer)
334 38 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TGU_MOVABLE_CHANGED, TGU_CompactSwimlaneList.SetControlMovable)
335 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TGU_SWIMLANE_ULTIMATE_GROUP_ID_CHANGED, TGU_CompactSwimlaneList.SetSwimlaneUltimate)
336 50 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TUI_HUD_HIDDEN_STATE_CHANGED, TGU_CompactSwimlaneList.SetControlHidden)
337 63 Taonnor-14572
 
338 Taonnor-14572
        -- Invis
339 Taonnor-14572
        TGU_CompactSwimlaneList.SetControlHidden(isHidden)
340 20 Taonnor-14572
    else
341 37 Taonnor-14572
        TGU_CompactSwimlaneList.SetControlMovable(TGU_SettingsHandler.SavedVariables.Movable)
342 Taonnor-14572
        TGU_CompactSwimlaneList.RestorePosition(TGU_SettingsHandler.SavedVariables.PosX, TGU_SettingsHandler.SavedVariables.PosY)
343 24 Taonnor-14572
 
344 20 Taonnor-14572
        -- Start timeout timer
345 37 Taonnor-14572
            EVENT_MANAGER:RegisterForUpdate(TGU_CompactSwimlaneList.Name, REFRESHRATE, TGU_CompactSwimlaneList.RefreshList)
346 20 Taonnor-14572
 
347 38 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_GROUP_CHANGED, TGU_CompactSwimlaneList.RefreshList)
348 55 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_PLAYER_DATA_CHANGED, TGU_CompactSwimlaneList.UpdatePlayer)
349 38 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_MOVABLE_CHANGED, TGU_CompactSwimlaneList.SetControlMovable)
350 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_SWIMLANE_ULTIMATE_GROUP_ID_CHANGED, TGU_CompactSwimlaneList.SetSwimlaneUltimate)
351 50 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TUI_HUD_HIDDEN_STATE_CHANGED, TGU_CompactSwimlaneList.SetControlHidden)
352 20 Taonnor-14572
    end
353 Taonnor-14572
end
354 Taonnor-14572
 
355 Taonnor-14572
--[[
356 Taonnor-14572
        OnSwimlaneHeaderClicked called on header clicked
357 Taonnor-14572
]]--
358 37 Taonnor-14572
function TGU_CompactSwimlaneList.OnSwimlaneHeaderClicked(button, swimlaneId)
359 20 Taonnor-14572
    if (LOG_ACTIVE) then
360 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.OnSwimlaneHeaderClicked")
361 Taonnor-14572
        _logger:logDebug("swimlaneId", swimlaneId)
362 20 Taonnor-14572
    end
363 Taonnor-14572
 
364 Taonnor-14572
    if (button ~= nil) then
365 38 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_SET_ULTIMATE_GROUP, TGU_CompactSwimlaneList.OnSetUltimateGroup)
366 Taonnor-14572
        CALLBACK_MANAGER:FireCallbacks(TGU_SHOW_ULTIMATE_GROUP_MENU, button, swimlaneId)
367 20 Taonnor-14572
    else
368 37 Taonnor-14572
        _logger:logError("TGU_CompactSwimlaneList.OnSwimlaneHeaderClicked, button nil")
369 20 Taonnor-14572
    end
370 Taonnor-14572
end
371 Taonnor-14572
 
372 Taonnor-14572
--[[
373 Taonnor-14572
        OnSetUltimateGroup called on header clicked
374 Taonnor-14572
]]--
375 37 Taonnor-14572
function TGU_CompactSwimlaneList.OnSetUltimateGroup(group, swimlaneId)
376 20 Taonnor-14572
    if (LOG_ACTIVE) then
377 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.OnSetUltimateGroup")
378 Taonnor-14572
        _logger:logDebug("group.GroupName, swimlaneId", group.GroupName, swimlaneId)
379 20 Taonnor-14572
    end
380 Taonnor-14572
 
381 38 Taonnor-14572
    CALLBACK_MANAGER:UnregisterCallback(TGU_SET_ULTIMATE_GROUP, TGU_CompactSwimlaneList.OnSetUltimateGroup)
382 20 Taonnor-14572
 
383 Taonnor-14572
    if (group ~= nil and swimlaneId ~= nil and swimlaneId >= 1 and swimlaneId <= 6) then
384 37 Taonnor-14572
        TGU_SettingsHandler.SetSwimlaneUltimateGroupIdSettings(swimlaneId, group)
385 20 Taonnor-14572
    else
386 37 Taonnor-14572
        _logger:logError("TGU_UltimateGroupMenu.ShowUltimateGroupMenu, group nil or swimlaneId invalid")
387 20 Taonnor-14572
    end
388 Taonnor-14572
end
389 Taonnor-14572
 
390 Taonnor-14572
--[[
391 Taonnor-14572
        SetSwimlaneUltimate sets the swimlane header icon in base of ultimateGroupId
392 Taonnor-14572
]]--
393 37 Taonnor-14572
function TGU_CompactSwimlaneList.SetSwimlaneUltimate(swimlaneId, ultimateGroup)
394 20 Taonnor-14572
    if (LOG_ACTIVE) then
395 37 Taonnor-14572
        _logger:logTrace("TGU_CompactSwimlaneList.SetSwimlaneUltimate")
396 Taonnor-14572
        _logger:logDebug("ultimateGroup.GroupName, swimlaneId", ultimateGroup.GroupName, swimlaneId)
397 20 Taonnor-14572
    end
398 Taonnor-14572
 
399 37 Taonnor-14572
    local swimlaneObject = TGU_CompactSwimlaneList.Swimlanes[swimlaneId]
400 20 Taonnor-14572
    local iconControl = swimlaneObject.SwimlaneControl:GetNamedChild("Header"):GetNamedChild("SelectorButtonControl"):GetNamedChild("Icon")
401 Taonnor-14572
 
402 Taonnor-14572
    if (ultimateGroup ~= nil and iconControl ~= nil) then
403 Taonnor-14572
        iconControl:SetTexture(GetAbilityIcon(ultimateGroup.GroupAbilityId))
404 Taonnor-14572
 
405 Taonnor-14572
        swimlaneObject.UltimateGroupId = ultimateGroup.GroupAbilityId
406 37 Taonnor-14572
        TGU_CompactSwimlaneList.ClearPlayersFromSwimlane(swimlaneObject)
407 20 Taonnor-14572
    else
408 37 Taonnor-14572
        _logger:logError("TGU_CompactSwimlaneList.SetSwimlaneUltimateIcon, icon is " .. tostring(icon) .. ";" .. tostring(iconControl) .. ";" .. tostring(ultimateGroup))
409 20 Taonnor-14572
    end
410 Taonnor-14572
end
411 Taonnor-14572
 
412 Taonnor-14572
--[[
413 Taonnor-14572
        CreateCompactSwimlaneListHeaders creates swimlane list headers
414 Taonnor-14572
]]--
415 37 Taonnor-14572
function TGU_CompactSwimlaneList.CreateCompactSwimlaneListHeaders()
416 Taonnor-14572
    if (LOG_ACTIVE) then _logger:logTrace("TGU_CompactSwimlaneList.CreateCompactSwimlaneListHeaders") end
417 20 Taonnor-14572
 
418 Taonnor-14572
        for i=1, SWIMLANES, 1 do
419 37 Taonnor-14572
        local ultimateGroupId = TGU_SettingsHandler.SavedVariables.SwimlaneUltimateGroupIds[i]
420 Taonnor-14572
        local ultimateGroup = TGU_UltimateGroupHandler.GetUltimateGroupByAbilityId(ultimateGroupId)
421 28 Taonnor-14572
 
422 20 Taonnor-14572
        local swimlaneControlName = "Swimlane" .. tostring(i)
423 46 Taonnor-14572
        local swimlaneControl = _control:GetNamedChild(swimlaneControlName)
424 28 Taonnor-14572
 
425 Taonnor-14572
        -- Add button
426 20 Taonnor-14572
        local button = swimlaneControl:GetNamedChild("Header"):GetNamedChild("SelectorButtonControl"):GetNamedChild("Button")
427 37 Taonnor-14572
        button:SetHandler("OnClicked", function() TGU_CompactSwimlaneList.OnSwimlaneHeaderClicked(button, i) end)
428 20 Taonnor-14572
 
429 28 Taonnor-14572
        local swimLane = {}
430 Taonnor-14572
        swimLane.Id = i
431 Taonnor-14572
        swimLane.SwimlaneControl = swimlaneControl
432 Taonnor-14572
        swimLane.Players = {}
433 Taonnor-14572
 
434 Taonnor-14572
        if (ultimateGroup ~= nil) then
435 20 Taonnor-14572
            if (LOG_ACTIVE) then
436 37 Taonnor-14572
                _logger:logDebug("Create Swimlane", i)
437 Taonnor-14572
                _logger:logDebug("ultimateGroup.GroupName", ultimateGroup.GroupName)
438 Taonnor-14572
                _logger:logDebug("swimlaneControlName", swimlaneControlName)
439 20 Taonnor-14572
            end
440 Taonnor-14572
 
441 28 Taonnor-14572
            local icon = swimlaneControl:GetNamedChild("Header"):GetNamedChild("SelectorButtonControl"):GetNamedChild("Icon")
442 20 Taonnor-14572
            icon:SetTexture(GetAbilityIcon(ultimateGroup.GroupAbilityId))
443 Taonnor-14572
 
444 Taonnor-14572
            swimLane.UltimateGroupId = ultimateGroup.GroupAbilityId
445 Taonnor-14572
        else
446 37 Taonnor-14572
            _logger:logError("TGU_CompactSwimlaneList.CreateCompactSwimlaneListHeaders, ultimateGroup nil.")
447 20 Taonnor-14572
        end
448 28 Taonnor-14572
 
449 37 Taonnor-14572
        TGU_CompactSwimlaneList.CreateCompactSwimlaneListRows(swimlaneControl)
450 Taonnor-14572
            TGU_CompactSwimlaneList.Swimlanes[i] = swimLane
451 20 Taonnor-14572
        end
452 Taonnor-14572
end
453 Taonnor-14572
 
454 Taonnor-14572
--[[
455 Taonnor-14572
        CreateCompactSwimlaneListRows creates swimlane lsit rows
456 Taonnor-14572
]]--
457 37 Taonnor-14572
function TGU_CompactSwimlaneList.CreateCompactSwimlaneListRows(swimlaneControl)
458 Taonnor-14572
    if (LOG_ACTIVE) then _logger:logTrace("TGU_CompactSwimlaneList.CreateCompactSwimlaneListRows") end
459 20 Taonnor-14572
 
460 Taonnor-14572
    if (swimlaneControl ~= nil) then
461 Taonnor-14572
            for i=1, ROWS, 1 do
462 Taonnor-14572
                    local row = CreateControlFromVirtual("$(parent)Row", swimlaneControl, "CompactGroupUltimateSwimlaneRow", i)
463 37 Taonnor-14572
            if (LOG_ACTIVE) then _logger:logDebug("Row created " .. row:GetName()) end
464 20 Taonnor-14572
 
465 Taonnor-14572
                    row:SetHidden(true) -- initial not visible
466 Taonnor-14572
 
467 56 Taonnor-14572
                    if (i == 1) then
468 20 Taonnor-14572
                row:SetAnchor(TOPLEFT, swimlaneControl, TOPLEFT, 0, 50)
469 56 Taonnor-14572
            elseif (i == 5) then -- Fix pixelbug, Why the hell ZOS?!
470 Taonnor-14572
                row:SetAnchor(TOPLEFT, lastRow, BOTTOMLEFT, 0, 0)
471 20 Taonnor-14572
            else
472 56 Taonnor-14572
                                row:SetAnchor(TOPLEFT, lastRow, BOTTOMLEFT, 0, -1)
473 Taonnor-14572
                        end
474 20 Taonnor-14572
 
475 Taonnor-14572
                    lastRow = row
476 Taonnor-14572
            end
477 Taonnor-14572
    else
478 37 Taonnor-14572
        _logger:logError("TGU_CompactSwimlaneList.CreateCompactSwimlaneListRows, swimlaneControl nil.")
479 20 Taonnor-14572
    end
480 Taonnor-14572
end
481 Taonnor-14572
 
482 Taonnor-14572
--[[
483 37 Taonnor-14572
        Initialize initializes TGU_CompactSwimlaneList
484 20 Taonnor-14572
]]--
485 37 Taonnor-14572
function TGU_CompactSwimlaneList.Initialize(logger, isMocked)
486 20 Taonnor-14572
    if (LOG_ACTIVE) then
487 37 Taonnor-14572
        logger:logTrace("TGU_CompactSwimlaneList.Initialize")
488 20 Taonnor-14572
    end
489 Taonnor-14572
 
490 37 Taonnor-14572
    _logger = logger
491 46 Taonnor-14572
    _control = TGU_CompactSwimlaneListControl
492 20 Taonnor-14572
 
493 37 Taonnor-14572
    TGU_CompactSwimlaneList.IsMocked = isMocked
494 Taonnor-14572
 
495 Taonnor-14572
    TGU_CompactSwimlaneList.CreateCompactSwimlaneListHeaders()
496 20 Taonnor-14572
 
497 50 Taonnor-14572
    CALLBACK_MANAGER:RegisterCallback(TGU_STYLE_CHANGED, TGU_CompactSwimlaneList.SetControlActive)
498 Taonnor-14572
    CALLBACK_MANAGER:RegisterCallback(TGU_IS_ZONE_CHANGED, TGU_CompactSwimlaneList.SetControlActive)
499 58 Taonnor-14572
    CALLBACK_MANAGER:RegisterCallback(TGU_UNIT_GROUPED_CHANGED, TGU_CompactSwimlaneList.SetControlActive)
500 20 Taonnor-14572
end