If you want to display stuff in a controll which is scrollable, just do :
Lua Code:
<TopLevelControl name="MyXMLControl" hidden="true">
<Controls>
<Control name="$(parent)Container" inherits="ZO_ScrollContainer">
<OnInitialized>
ZO_Scroll_Initialize(self)
</OnInitialized>
<Dimensions x="850" y="630"/>
<Anchor point="BOTTOMLEFT" relativeTo="$(parent)" relativePoint="TOPLEFT" offsetX="50" offsetY="650" />
</Control>
<Label name="$(parent)Blabla">
<Dimensions x="830" />
<OnInitialized>
self:SetParent(GetControl("MyXMLControlContainerScrollChild"))
self:SetAnchor(TOPLEFT, MyXMLControlContainerScrollChild, TOPLEFT, 4, 4)
</OnInitialized>
</Label>
<!-- Add other controlls here, same as previous -->
<Controls>
</TopLevelControl>
If you want to create a Scroll list (Aka : A list of data which is scrollable)
XML
A row :
Lua Code:
<Control name="KillCounterKillerRowTemplate" virtual="true" mouseEnabled="true">
<OnMouseEnter>
KillCounter_HoverRowOfDeaths(self)
</OnMouseEnter>
<OnMouseExit>
KillCounter_ExitRowOfDeaths(self)
</OnMouseExit>
<Dimensions x="600" y="30" />
<Controls>
<Texture name="$(parent)BG" inherits="ZO_ThinListBgStrip" />
<Texture name="$(parent)Alliance" font="ZoFontGame" verticalAlignment="CENTER">
<Dimensions x="32" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)" />
</Texture>
<Texture name="$(parent)Rank" font="ZoFontGame" verticalAlignment="CENTER">
<Dimensions x="32" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)Alliance" relativePoint="TOPRIGHT" offsetX="5"/>
</Texture>
<Texture name="$(parent)PlayerClass" font="ZoFontGame" verticalAlignment="CENTER">
<Dimensions x="32" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)Rank" relativePoint="TOPRIGHT" offsetX="5"/>
<OnMouseEnter>
KillCounter_Deaths_PlayerClassOnMouseEnter(self)
</OnMouseEnter>
<OnMouseExit>
KillCounter_Deaths_PlayerClassOnMouseExit(self)
</OnMouseExit>
</Texture>
<Texture name="$(parent)Veteran" mouseEnabled="true" layer="OVERLAY">
<Anchor point="LEFT" relativePoint="RIGHT" relativeTo="$(parent)PlayerClass" offsetX="5" />
<Dimensions x="32" y="32"/>
</Texture>
<Label name="$(parent)PlayerLevel" font="ZoFontGame" verticalAlignment="CENTER">
<Dimensions x="32" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)Veteran" relativePoint="TOPRIGHT"/>
</Label>
<Label name="$(parent)PlayerName" font="ZoFontGame" verticalAlignment="CENTER">
<Dimensions x="150" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)PlayerLevel" relativePoint="TOPRIGHT"/>
</Label>
<Label name="$(parent)PlayerAccount" font="ZoFontGame" verticalAlignment="CENTER">
<Dimensions x="150" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)PlayerName" relativePoint="TOPRIGHT" />
</Label>
<Label name="$(parent)PlayerDeaths" font="ZoFontGame" verticalAlignment="CENTER">
<Dimensions x="75" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)PlayerAccount" relativePoint="TOPRIGHT" />
</Label>
</Controls>
</Control>
The list itself :
In the list we define the headers and the list.
Here I used sortable headers (the ones with the little triangles to sort).
ZO_SortHeader_Initialize is used to make an header with a name
ZO_SortHeader_InitializeArrowHeader is used to make an header without
Lua Code:
<TopLevelControl name="Scene_KC_Menu_Deaths" inherits="ZO_RightPanelFootPrint" hidden="true">
<Controls>
<Control name="$(parent)Headers">
<Dimensions x="600" y="32" />
<Anchor point="TOPLEFT" relativeTo="$(parent)" relativePoint="TOPLEFT" offsetX="300" offsetY="50"/>
<Controls>
<Control name="$(parent)Alliance" inherits="ZO_SortHeaderIcon">
<OnInitialized>
ZO_SortHeader_InitializeArrowHeader(self, "alliance", ZO_SORT_ORDER_DOWN)
ZO_SortHeader_SetTooltip(self, GetString(SI_FRIENDS_LIST_PANEL_TOOLTIP_ALLIANCE))
</OnInitialized>
<Anchor point="TOPLEFT" relativeTo="$(parent)" offsetX="12"/>
<Dimensions x="16" y="32" />
</Control>
<Control name="$(parent)Rank" inherits="ZO_SortHeaderIcon">
<OnInitialized>
ZO_SortHeader_InitializeArrowHeader(self, "rank", ZO_SORT_ORDER_DOWN)
ZO_SortHeader_SetTooltip(self, GetString(SI_STATS_ALLIANCE_RANK))
</OnInitialized>
<Anchor point="TOPLEFT" relativeTo="$(parent)Alliance" relativePoint="TOPRIGHT" offsetX="17"/>
<Dimensions x="16" y="32" />
</Control>
<Control name="$(parent)PlayerClass" inherits="ZO_SortHeaderIcon">
<OnInitialized>
ZO_SortHeader_InitializeArrowHeader(self, "playerclass", ZO_SORT_ORDER_DOWN)
ZO_SortHeader_SetTooltip(self, GetString(SI_FRIENDS_LIST_PANEL_TOOLTIP_CLASS))
</OnInitialized>
<Anchor point="TOPLEFT" relativeTo="$(parent)Rank" relativePoint="TOPRIGHT" offsetX="20"/>
<Dimensions x="16" y="32" />
</Control>
<Control name="$(parent)PlayerLevel" inherits="ZO_SortHeaderIcon">
<OnInitialized>
ZO_SortHeader_InitializeArrowHeader(self, "playerlevel", ZO_SORT_ORDER_DOWN)
ZO_SortHeader_SetTooltip(self, GetString(SI_FRIENDS_LIST_PANEL_TOOLTIP_LEVEL))
</OnInitialized>
<Anchor point="TOPLEFT" relativeTo="$(parent)PlayerClass" relativePoint="TOPRIGHT" offsetX="28"/>
<Dimensions x="16" y="32" />
</Control>
<Control name="$(parent)PlayerName" inherits="ZO_SortHeader">
<OnInitialized>
ZO_SortHeader_Initialize(self, "Name", "playername", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
</OnInitialized>
<Anchor point="TOPLEFT" relativeTo="$(parent)PlayerLevel" relativePoint="TOPRIGHT" offsetX="35"/>
<Dimensions x="150" y="32" />
</Control>
<Control name="$(parent)PlayerAccount" inherits="ZO_SortHeader">
<OnInitialized>
ZO_SortHeader_Initialize(self, "Account", "playeraccount", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
</OnInitialized>
<Anchor point="TOPLEFT" relativeTo="$(parent)PlayerName" relativePoint="TOPRIGHT"/>
<Dimensions x="150" y="32" />
</Control>
<Control name="$(parent)PlayerDeaths" inherits="ZO_SortHeader">
<OnInitialized>
ZO_SortHeader_Initialize(self, "Deaths", "deaths", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
</OnInitialized>
<Anchor point="TOPLEFT" relativeTo="$(parent)PlayerAccount" relativePoint="TOPRIGHT"/>
<Dimensions x="75" y="32" />
</Control>
</Controls>
</Control>
<Control name="$(parent)List" inherits="ZO_ScrollList">
<Dimensions x="600" y="575" />
<Anchor point="TOPLEFT" relativeTo="$(parent)Headers" relativePoint="TOPLEFT" offsetX="0" offsetY="40" />
</Control>
</Controls>
</TopLevelControl>
Then, in Lua :
Lua Code:
local myList = ZO_SortFilterList:Subclass()
function myList:New(control)
ZO_SortFilterList.InitializeSortFilterList(self, control)
-- tiebreaker is used when values are equal. You can also add isNumeric = true if needed.
local sorterKeys =
{
["deaths"] = {},
["alliance"] = {tiebreaker = "deaths"},
["rank"] = {tiebreaker = "deaths"},
["playername"] = {tiebreaker = "deaths"},
["playeraccount"] = {tiebreaker = "deaths"},
["playerclass"] = {tiebreaker = "deaths"},
["veteranrank"] = { tiebreaker = "deaths"},
["playerlevel"] = { tiebreaker = "veteranrank"},
}
self.masterList = {}
ZO_ScrollList_AddDataType(self.list, 1, "KillCounterKillerRowTemplate", 32, function(control, data) self:SetupEntry(control, data) end) -- Add my row
ZO_ScrollList_EnableHighlight(self.list, "ZO_ThinListHighlight") -- Enable the highlight (the turquoise color)
self.currentSortKey = "deaths" -- defaut sort
self.sortFunction = function(listEntry1, listEntry2) return ZO_TableOrderingFunction(listEntry1.data, listEntry2.data, self.currentSortKey, sorterKeys, self.currentSortOrder) end -- my sort function
self:SetAlternateRowBackgrounds(true) -- Alternate background, one dark, one grey
return self
end
function myList:SetupEntry(control, data)
-- Setup a row
control.data = data
control.alliance = GetControl(control, "Alliance")
control.rank = GetControl(control, "Rank")
control.playername = GetControl(control, "PlayerName")
control.playeraccount = GetControl(control, "PlayerAccount")
control.playerclass = GetControl(control, "PlayerClass")
control.playerlevel = GetControl(control, "PlayerLevel")
control.deaths = GetControl(control, "PlayerDeaths")
local veteran = GetControl(control, "Veteran")
control.alliance:SetTexture(GetAllianceSymbolIcon(data.alliance))
if data.rank >= 0 and data.rank <= 50 then
control.rank:SetTexture(GetAvARankIcon(data.rank))
else
control.rank:SetHidden(true)
end
if GetClassIcon(data.playerclass) then
control.playerclass:SetTexture(GetClassIcon(data.playerclass))
else
control.playerclass:SetHidden(true)
end
control.playerlevel:SetText(GetLevelOrVeteranRankStringNoIcon(data.playerlevel, data.veteranrank))
if data.veteranrank and data.veteranrank > 0 then
veteran:SetTexture(GetVeteranRankIcon())
else
veteran:SetHidden(true)
end
control.playername:SetText(data.playername)
control.playeraccount:SetText(data.playeraccount)
control.deaths:SetText(data.deaths)
ZO_SortFilterList.SetupRow(self, control, data)
end
function myList:BuildMasterList()
self.masterList = {}
local killingList = db.killingList
if killingList then
for k, v in ipairs(killingList) do
local data = v
table.insert(self.masterList, data)
end
end
end
function myList:SortScrollList()
local scrollData = ZO_ScrollList_GetDataList(self.list)
table.sort(scrollData, self.sortFunction)
end
function myList:FilterScrollList()
-- If you want to add a filter
local scrollData = ZO_ScrollList_GetDataList(self.list)
ZO_ClearNumericallyIndexedTable(scrollData)
for i = 1, #self.masterList do
local data = self.masterList[i]
table.insert(scrollData, ZO_ScrollList_CreateDataEntry(1, data))
end
end
function KillCounter_HoverRowOfDeaths(control)
myList:Row_OnMouseEnter(control)
end
function KillCounter_ExitRowOfDeaths(control)
myList:Row_OnMouseExit(control)
end
->