ESOUI SVN TaosGroupUltimate

[/] [trunk/] [TaosGroupUltimate/] [ui/] [SimpleList.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 Taonnor-14572
local LOG_ACTIVE = false
11 46 Taonnor-14572
 
12 56 Taonnor-14572
local REFRESHRATE = 1000 -- ms; RegisterForUpdate is in miliseconds
13 Taonnor-14572
local TIMEOUT = 4 -- s; GetTimeStamp() is in seconds
14 Taonnor-14572
 
15 37 Taonnor-14572
local _logger = nil
16 46 Taonnor-14572
local _control = nil
17 56 Taonnor-14572
local _players = {}
18 12 Taonnor-14572
 
19 Taonnor-14572
--[[
20 37 Taonnor-14572
        Table TGU_SimpleList
21 12 Taonnor-14572
]]--
22 37 Taonnor-14572
TGU_SimpleList = {}
23 Taonnor-14572
TGU_SimpleList.__index = TGU_SimpleList
24 12 Taonnor-14572
 
25 Taonnor-14572
--[[
26 37 Taonnor-14572
        Table Members
27 12 Taonnor-14572
]]--
28 56 Taonnor-14572
TGU_SimpleList.IsMocked = false
29 12 Taonnor-14572
 
30 Taonnor-14572
--[[
31 Taonnor-14572
        Sets visibility of labels
32 Taonnor-14572
]]--
33 37 Taonnor-14572
function TGU_SimpleList.RefreshList()
34 Taonnor-14572
        if (LOG_ACTIVE) then _logger:logTrace("TGU_SimpleList.RefreshList") end
35 12 Taonnor-14572
 
36 56 Taonnor-14572
    for i=1, GROUP_SIZE_MAX, 1 do
37 Taonnor-14572
        local row = TGU_SimpleListControlContainerScrollChild:GetNamedChild("Row" .. i)
38 Taonnor-14572
        local listPlayer = _players[i]
39 Taonnor-14572
 
40 Taonnor-14572
        if (listPlayer ~= nil) then
41 Taonnor-14572
            local isPlayerNotGrouped = IsUnitGrouped(listPlayer.PingTag) == false
42 Taonnor-14572
 
43 Taonnor-14572
            if (TGU_SimpleList.IsMocked) then
44 Taonnor-14572
                isPlayerNotGrouped = false
45 Taonnor-14572
            end
46 Taonnor-14572
 
47 Taonnor-14572
            local isPlayerTimedOut = (GetTimeStamp() - listPlayer.LastMapPingTimestamp) > TIMEOUT
48 Taonnor-14572
 
49 Taonnor-14572
            if (isPlayerNotGrouped or isPlayerTimedOut) then
50 Taonnor-14572
                if (LOG_ACTIVE) then _logger:logDebug("Player invalid, hide row: " .. tostring(i)) end
51 Taonnor-14572
 
52 Taonnor-14572
                row:SetHidden(true)
53 Taonnor-14572
                table.remove(_players, i)
54 Taonnor-14572
            end
55 12 Taonnor-14572
        else
56 56 Taonnor-14572
            if (LOG_ACTIVE) then _logger:logDebug("Row empty, hide: " .. tostring(i)) end
57 Taonnor-14572
            row:SetHidden(true)
58 12 Taonnor-14572
        end
59 56 Taonnor-14572
    end
60 Taonnor-14572
 
61 Taonnor-14572
        if (TGU_SettingsHandler.SavedVariables.IsSortingActive) then
62 Taonnor-14572
                -- Sort list with all players
63 Taonnor-14572
                TGU_SimpleList.SortList()
64 12 Taonnor-14572
        end
65 Taonnor-14572
end
66 Taonnor-14572
 
67 Taonnor-14572
--[[
68 56 Taonnor-14572
        Sorts swimlane
69 Taonnor-14572
]]--
70 Taonnor-14572
function TGU_SimpleList.SortList()
71 Taonnor-14572
        if (LOG_ACTIVE) then _logger:logTrace("TGU_SimpleList.SortList") end
72 Taonnor-14572
 
73 Taonnor-14572
    -- Comparer
74 Taonnor-14572
    function compare(playerLeft, playerRight)
75 59 Taonnor-14572
        if (playerLeft.RelativeUltimate == playerRight.RelativeUltimate) then
76 Taonnor-14572
            return playerLeft.PingTag < playerRight.PingTag
77 Taonnor-14572
        else
78 Taonnor-14572
            return playerLeft.RelativeUltimate > playerRight.RelativeUltimate
79 Taonnor-14572
        end
80 56 Taonnor-14572
    end
81 Taonnor-14572
 
82 Taonnor-14572
    table.sort(_players, compare)
83 Taonnor-14572
 
84 Taonnor-14572
    -- Update sorted swimlane list
85 Taonnor-14572
    for i,listPlayer in ipairs(_players) do
86 Taonnor-14572
        TGU_SimpleList.UpdateListRow(TGU_SimpleListControlContainerScrollChild:GetNamedChild("Row" .. i), listPlayer)
87 Taonnor-14572
    end
88 Taonnor-14572
end
89 Taonnor-14572
 
90 Taonnor-14572
--[[
91 12 Taonnor-14572
        Updates list row
92 Taonnor-14572
]]--
93 56 Taonnor-14572
function TGU_SimpleList.UpdateListRow(row, player)
94 12 Taonnor-14572
        if (LOG_ACTIVE) then
95 37 Taonnor-14572
        _logger:logTrace("TGU_SimpleList.UpdateListRow")
96 12 Taonnor-14572
    end
97 Taonnor-14572
 
98 56 Taonnor-14572
    local localizedUltimateName = zo_strformat(SI_ABILITY_TOOLTIP_NAME, player.UltimateName)
99 Taonnor-14572
    local nameLength = string.len(localizedUltimateName)
100 12 Taonnor-14572
 
101 56 Taonnor-14572
    if (nameLength > 22) then
102 Taonnor-14572
        localizedUltimateName = string.sub(localizedUltimateName, 0, 22) .. "..."
103 Taonnor-14572
    end
104 19 Taonnor-14572
 
105 56 Taonnor-14572
    row:GetNamedChild("SenderNameValueLabel"):SetText(player.PlayerName)
106 Taonnor-14572
        row:GetNamedChild("UltimateValueLabel"):SetText(localizedUltimateName)
107 Taonnor-14572
        row:GetNamedChild("ReadyValueLabel"):SetText(player.RelativeUltimate)
108 12 Taonnor-14572
 
109 56 Taonnor-14572
        if (player.IsPlayerDead) then
110 Taonnor-14572
        row:GetNamedChild("SenderNameValueLabel"):SetColor(1.0, 0.0, 0.0, 1)
111 Taonnor-14572
                row:GetNamedChild("UltimateValueLabel"):SetColor(1.0, 0.0, 0.0, 1)
112 Taonnor-14572
                row:GetNamedChild("ReadyValueLabel"):SetColor(1.0, 0.0, 0.0, 1)
113 Taonnor-14572
    elseif (player.RelativeUltimate == 100) then
114 Taonnor-14572
                row:GetNamedChild("SenderNameValueLabel"):SetColor(0.0, 1.0, 0.0, 1)
115 Taonnor-14572
                row:GetNamedChild("UltimateValueLabel"):SetColor(0.0, 1.0, 0.0, 1)
116 Taonnor-14572
                row:GetNamedChild("ReadyValueLabel"):SetColor(0.0, 1.0, 0.0, 1)
117 Taonnor-14572
        else
118 Taonnor-14572
                row:GetNamedChild("SenderNameValueLabel"):SetColor(1.0, 1.0, 1.0, 1)
119 Taonnor-14572
                row:GetNamedChild("UltimateValueLabel"):SetColor(1.0, 1.0, 1.0, 1)
120 Taonnor-14572
                row:GetNamedChild("ReadyValueLabel"):SetColor(1.0, 1.0, 1.0, 1)
121 Taonnor-14572
        end
122 55 Taonnor-14572
 
123 56 Taonnor-14572
    if (row:IsHidden()) then
124 Taonnor-14572
                row:SetHidden(false)
125 12 Taonnor-14572
        end
126 Taonnor-14572
end
127 Taonnor-14572
 
128 Taonnor-14572
--[[
129 56 Taonnor-14572
        Updates list row
130 Taonnor-14572
]]--
131 Taonnor-14572
function TGU_SimpleList.UpdatePlayer(player)
132 Taonnor-14572
        if (LOG_ACTIVE) then
133 Taonnor-14572
        _logger:logTrace("TGU_SimpleList.UpdatePlayer")
134 Taonnor-14572
    end
135 Taonnor-14572
 
136 Taonnor-14572
        if (player) then
137 Taonnor-14572
        local row = nil
138 Taonnor-14572
 
139 Taonnor-14572
        for i,listPlayer in ipairs(_players) do
140 Taonnor-14572
            if (LOG_ACTIVE) then _logger:logDebug(listPlayer.PlayerName .. " == " .. player.PlayerName) end
141 Taonnor-14572
                    if (listPlayer.PlayerName == player.PlayerName) then
142 Taonnor-14572
                row = TGU_SimpleListControlContainerScrollChild:GetNamedChild("Row" .. i)
143 Taonnor-14572
            end
144 Taonnor-14572
            end
145 Taonnor-14572
 
146 Taonnor-14572
        -- Update timestamp
147 Taonnor-14572
                if (row ~= nil) then
148 Taonnor-14572
            for i,listPlayer in ipairs(_players) do
149 Taonnor-14572
                        if (listPlayer.PlayerName == player.PlayerName) then
150 Taonnor-14572
                    listPlayer.LastMapPingTimestamp = GetTimeStamp()
151 Taonnor-14572
                    listPlayer.IsPlayerDead = player.IsPlayerDead
152 Taonnor-14572
                    listPlayer.RelativeUltimate = player.RelativeUltimate
153 Taonnor-14572
                    break
154 Taonnor-14572
                end
155 Taonnor-14572
                end
156 Taonnor-14572
        else
157 Taonnor-14572
            -- Add new player
158 Taonnor-14572
            local nextFreeRow = 1
159 Taonnor-14572
 
160 Taonnor-14572
            for i,player in ipairs(_players) do
161 Taonnor-14572
                        nextFreeRow = nextFreeRow + 1
162 Taonnor-14572
                end
163 Taonnor-14572
 
164 Taonnor-14572
            if (nextFreeRow <= GROUP_SIZE_MAX) then
165 Taonnor-14572
                if (LOG_ACTIVE) then
166 Taonnor-14572
                    _logger:logDebug("TGU_SimpleList.UpdatePlayer, add player " .. tostring(player.PlayerName) .. " to row " .. tostring(nextFreeRow))
167 Taonnor-14572
                end
168 Taonnor-14572
 
169 Taonnor-14572
                player.LastMapPingTimestamp = GetTimeStamp()
170 Taonnor-14572
                _players[nextFreeRow] = player
171 Taonnor-14572
                row = TGU_SimpleListControlContainerScrollChild:GetNamedChild("Row" .. nextFreeRow)
172 Taonnor-14572
            else
173 Taonnor-14572
                if (LOG_ACTIVE) then _logger:logDebug("TGU_SimpleList.UpdatePlayer, too much players for list" .. tostring(nextFreeRow)) end
174 Taonnor-14572
            end
175 Taonnor-14572
        end
176 Taonnor-14572
 
177 Taonnor-14572
        -- Only update if player in a row
178 Taonnor-14572
        if (row ~= nil) then
179 Taonnor-14572
            -- Directly update row with player, sorting will be triggered on RefreshList
180 Taonnor-14572
                        TGU_SimpleList.UpdateListRow(row, player)
181 Taonnor-14572
        end
182 Taonnor-14572
    end
183 Taonnor-14572
end
184 Taonnor-14572
 
185 Taonnor-14572
--[[
186 12 Taonnor-14572
        SetControlMovable sets the Movable and MouseEnabled flag in UI elements
187 Taonnor-14572
]]--
188 37 Taonnor-14572
function TGU_SimpleList.SetControlMovable(isMovable)
189 12 Taonnor-14572
    if (LOG_ACTIVE) then
190 37 Taonnor-14572
        _logger:logTrace("TGU_SimpleList.SetControlMovable")
191 Taonnor-14572
        _logger:logDebug("isMovable", isMovable)
192 12 Taonnor-14572
    end
193 Taonnor-14572
 
194 46 Taonnor-14572
    _control:GetNamedChild("MovableControl"):SetHidden(isMovable == false)
195 28 Taonnor-14572
 
196 46 Taonnor-14572
    _control:SetMovable(isMovable)
197 Taonnor-14572
        _control:SetMouseEnabled(isMovable)
198 12 Taonnor-14572
end
199 Taonnor-14572
 
200 Taonnor-14572
--[[
201 37 Taonnor-14572
        RestorePosition sets TGU_SimpleList on settings position
202 12 Taonnor-14572
]]--
203 37 Taonnor-14572
function TGU_SimpleList.RestorePosition(posX, posY)
204 12 Taonnor-14572
    if (LOG_ACTIVE) then
205 37 Taonnor-14572
        _logger:logTrace("TGU_SimpleList.RestorePosition")
206 Taonnor-14572
        _logger:logDebug("posX, posY", posX, posY)
207 12 Taonnor-14572
    end
208 Taonnor-14572
 
209 46 Taonnor-14572
        _control:ClearAnchors()
210 Taonnor-14572
        _control:SetAnchor(TOPLEFT, GuiRoot, TOPLEFT, posX, posY)
211 12 Taonnor-14572
end
212 Taonnor-14572
 
213 Taonnor-14572
--[[
214 37 Taonnor-14572
        OnSimpleListMoveStop saves current TGU_SimpleList position to settings
215 12 Taonnor-14572
]]--
216 37 Taonnor-14572
function TGU_SimpleList.OnSimpleListMoveStop()
217 Taonnor-14572
    if (LOG_ACTIVE) then _logger:logTrace("TGU_SimpleList.OnSimpleListMoveStop") end
218 12 Taonnor-14572
 
219 46 Taonnor-14572
        local left = _control:GetLeft()
220 Taonnor-14572
        local top = _control:GetTop()
221 12 Taonnor-14572
 
222 37 Taonnor-14572
    TGU_SettingsHandler.SavedVariables.PosX = left
223 Taonnor-14572
    TGU_SettingsHandler.SavedVariables.PosY = top
224 12 Taonnor-14572
 
225 Taonnor-14572
    if (LOG_ACTIVE) then
226 37 Taonnor-14572
        _logger:logDebug("PosX, PosY", TGU_SettingsHandler.SavedVariables.PosX, TGU_SettingsHandler.SavedVariables.PosY)
227 12 Taonnor-14572
    end
228 Taonnor-14572
end
229 Taonnor-14572
 
230 Taonnor-14572
--[[
231 Taonnor-14572
        SetControlHidden sets hidden on control
232 Taonnor-14572
]]--
233 50 Taonnor-14572
function TGU_SimpleList.SetControlHidden(isHidden)
234 12 Taonnor-14572
    if (LOG_ACTIVE) then
235 37 Taonnor-14572
        _logger:logTrace("TGU_SimpleList.SetControlHidden")
236 50 Taonnor-14572
        _logger:logDebug("isHidden", isHidden)
237 12 Taonnor-14572
    end
238 Taonnor-14572
 
239 58 Taonnor-14572
    if (TGU_GroupHandler.IsGrouped) then
240 Taonnor-14572
        _control:SetHidden(isHidden)
241 Taonnor-14572
    else
242 Taonnor-14572
        _control:SetHidden(true)
243 Taonnor-14572
    end
244 50 Taonnor-14572
end
245 Taonnor-14572
 
246 Taonnor-14572
--[[
247 Taonnor-14572
        SetControlActive sets hidden on control
248 Taonnor-14572
]]--
249 Taonnor-14572
function TGU_SimpleList.SetControlActive()
250 Taonnor-14572
    if (LOG_ACTIVE) then
251 Taonnor-14572
        _logger:logTrace("TGU_SimpleList.SetControlActive")
252 Taonnor-14572
    end
253 Taonnor-14572
 
254 37 Taonnor-14572
    local isHidden = TGU_SettingsHandler.IsSimpleListVisible() == false
255 Taonnor-14572
    if (LOG_ACTIVE) then _logger:logDebug("isHidden", isHidden) end
256 50 Taonnor-14572
 
257 58 Taonnor-14572
    TGU_SimpleList.SetControlHidden(isHidden or CurrentHudHiddenState())
258 15 Taonnor-14572
 
259 19 Taonnor-14572
    if (isHidden) then
260 56 Taonnor-14572
                -- Stop timeout timer
261 Taonnor-14572
            EVENT_MANAGER:UnregisterForUpdate(TGU_SimpleList.Name)
262 Taonnor-14572
 
263 38 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TGU_GROUP_CHANGED, TGU_SimpleList.RefreshList)
264 56 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TGU_PLAYER_DATA_CHANGED, TGU_SimpleList.UpdatePlayer)
265 38 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TGU_MOVABLE_CHANGED, TGU_SimpleList.SetControlMovable)
266 50 Taonnor-14572
        CALLBACK_MANAGER:UnregisterCallback(TUI_HUD_HIDDEN_STATE_CHANGED, TGU_SimpleList.SetControlHidden)
267 19 Taonnor-14572
    else
268 37 Taonnor-14572
        TGU_SimpleList.SetControlMovable(TGU_SettingsHandler.SavedVariables.Movable)
269 Taonnor-14572
        TGU_SimpleList.RestorePosition(TGU_SettingsHandler.SavedVariables.PosX, TGU_SettingsHandler.SavedVariables.PosY)
270 24 Taonnor-14572
 
271 56 Taonnor-14572
                -- Start timeout timer
272 Taonnor-14572
            EVENT_MANAGER:RegisterForUpdate(TGU_SimpleList.Name, REFRESHRATE, TGU_SimpleList.RefreshList)
273 Taonnor-14572
 
274 38 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_GROUP_CHANGED, TGU_SimpleList.RefreshList)
275 56 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_PLAYER_DATA_CHANGED, TGU_SimpleList.UpdatePlayer)
276 38 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TGU_MOVABLE_CHANGED, TGU_SimpleList.SetControlMovable)
277 50 Taonnor-14572
        CALLBACK_MANAGER:RegisterCallback(TUI_HUD_HIDDEN_STATE_CHANGED, TGU_SimpleList.SetControlHidden)
278 19 Taonnor-14572
    end
279 12 Taonnor-14572
end
280 Taonnor-14572
 
281 Taonnor-14572
--[[
282 Taonnor-14572
        CreateSimpleListRows creates simple list rows
283 Taonnor-14572
]]--
284 37 Taonnor-14572
function TGU_SimpleList.CreateSimpleListRows()
285 Taonnor-14572
    if (LOG_ACTIVE) then _logger:logTrace("TGU_SimpleList.CreateSimpleListRows") end
286 12 Taonnor-14572
 
287 Taonnor-14572
        for i=1, GROUP_SIZE_MAX, 1 do
288 37 Taonnor-14572
                local row = CreateControlFromVirtual("$(parent)Row", TGU_SimpleListControlContainerScrollChild, "GroupUltimateSimpleListRow", i)
289 Taonnor-14572
        if (LOG_ACTIVE) then _logger:logDebug("Row created " .. row:GetName()) end
290 12 Taonnor-14572
 
291 Taonnor-14572
                row:SetHidden(true) -- initial not visible
292 Taonnor-14572
 
293 Taonnor-14572
                if i == 1 then
294 37 Taonnor-14572
            row:SetAnchor(TOPLEFT, TGU_SimpleListControlContainerScrollChild, TOPLEFT, 0, 0)
295 12 Taonnor-14572
        else
296 Taonnor-14572
            row:SetAnchor(TOP, lastRow, BOTTOM, 0, 0)
297 Taonnor-14572
        end
298 Taonnor-14572
 
299 Taonnor-14572
                lastRow = row
300 Taonnor-14572
        end
301 Taonnor-14572
end
302 Taonnor-14572
 
303 Taonnor-14572
--[[
304 37 Taonnor-14572
        Initialize initializes TGU_SimpleList
305 12 Taonnor-14572
]]--
306 56 Taonnor-14572
function TGU_SimpleList.Initialize(logger, isMocked)
307 12 Taonnor-14572
    if (LOG_ACTIVE) then
308 37 Taonnor-14572
        logger:logTrace("TGU_SimpleList.Initialize")
309 12 Taonnor-14572
    end
310 Taonnor-14572
 
311 37 Taonnor-14572
    _logger = logger
312 46 Taonnor-14572
    _control = TGU_SimpleListControl
313 56 Taonnor-14572
 
314 Taonnor-14572
    TGU_SimpleList.IsMocked = isMocked
315 12 Taonnor-14572
 
316 37 Taonnor-14572
    TGU_SimpleList.CreateSimpleListRows()
317 Taonnor-14572
 
318 50 Taonnor-14572
    CALLBACK_MANAGER:RegisterCallback(TGU_STYLE_CHANGED, TGU_SimpleList.SetControlActive)
319 Taonnor-14572
    CALLBACK_MANAGER:RegisterCallback(TGU_IS_ZONE_CHANGED, TGU_SimpleList.SetControlActive)
320 58 Taonnor-14572
    CALLBACK_MANAGER:RegisterCallback(TGU_UNIT_GROUPED_CHANGED, TGU_SimpleList.SetControlActive)
321 5 Taonnor-14572
end