ESOUI SVN TaosGroupUltimate

[/] [trunk/] [TaosGroupUltimate/] [ui/] [SwimlaneList.lua] - Blame information for rev 59

Details | Compare with Previous | View Log

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