Thread Tools Display Modes
Prev Previous Post   Next Post Next
09/12/16, 05:51 PM   #1
tomtomhotep
 
tomtomhotep's Avatar
AddOn Author - Click to view addons
Join Date: Sep 2015
Posts: 21
Question ZO_SortFilterList -- What am i doing wrong??? :(

I'm trying to make a scroll list with columns.
I started by downloading "ScrollListExample" addon, which didn't work.
I fixed it by comparing it's code to MailR. Then it worked.

Then I copied the code into my add-on and I'm getting this error:




Here's my code:


Code:
UI_OrdersList = ZO_SortFilterList:Subclass()

UI_OrdersList.defaults = {}

UI_OrdersList.SORT_KEYS = {
  ["name"] = {},
  ["race"] = {tiebreaker="name"},
  ["class"] = {tiebreaker="name"},
  ["zone"] = {tiebreaker="name"}
}

function UI_OrdersList:New()
  local units = ZO_SortFilterList.New(self, HotepCGS_UI_main)
  
  units.masterList = {}
  
  ZO_ScrollList_AddDataType(units.list, 1, "HotepCGS_UI_main_OrdersList_Row", 30, function(control, data) self:SetupOrderRow(control, data) end)
  
  ZO_ScrollList_EnableHighlight(units.list, "ZO_ThinListHighlight")
  
  units.sortFunction = function(listEntry1, listEntry2)
      return ZO_TableOrderingFunction(listEntry1.data, listEntry2.data, units.currentSortKey, UI_OrdersList.SORT_KEYS, units.currentSortOrder)
    end
  
  units:RefreshData()
  
  return units
end


function UI_OrdersList:SetupOrderRow(rowControl, data)
  
  rowControl.data = data
  rowControl.name = GetControl(rowControl, "Name")
  rowControl.race = GetControl(rowControl, "Race")
  rowControl.class = GetControl(rowControl, "Class")
  rowControl.zone = GetControl(rowControl, "Zone")
  
  rowControl.name:SetText(data.name)
  rowControl.race:SetText(data.race)
  rowControl.class:SetText(data.class)
  rowControl.zone:SetText(data.zone)
  
  local DEFAULT_TEXT = ZO_ColorDef:New(0.4627, 0.737, 0.7647, 1)
  
  rowControl.name.normalColor = DEFAULT_TEXT
  rowControl.race.normalColor = DEFAULT_TEXT
  rowControl.class.normalColor = DEFAULT_TEXT
  rowControl.zone.normalColor = DEFAULT_TEXT
  
  
  ZO_SortFilterList.SetupRow(self, rowControl, data)
end


function UI_OrdersList:BuildMasterList()
  self.masterList = HotepCGS.GetOrdersList()
end


function UI_OrdersList:FilterScrollList()
    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 UI_OrdersList:SortScrollList()
    local scrollData = ZO_ScrollList_GetDataList(self.list)
    table.sort(scrollData, self.sortFunction)
end



function UI_OrdersList:Refresh()
  self:RefreshData()
end



function HotepCGS.test3()
  SCENE_MANAGER:ToggleTopLevel(HotepCGS_UI_main)
end


function HotepCGS.MainMenuSwitch(orderstatus)
  local headings = {
    [ORDER_STATUS_WAITING] = "Viewing all Waiting orders",
    [ORDER_STATUS_CLAIMED] = "Viewing all Claimed orders",
    [ORDER_STATUS_DELIVERED] = "Viewing all Delivered orders",
  }
  
  HotepCGS_UI_main_OrdersHeading:SetText(headings[orderstatus])
  HotepCGS.UI_OrdersList:Refresh()
end


function HotepCGS.GetOrdersList(orderstatus)
  
  local dataItems = {}
  
  for emoteIndex=1, GetNumEmotes() do
    local emoteSlashName, emoteCategory, emoteId = GetEmoteInfo(emoteIndex)
    
    -- Organize your data for each item inside of a table
    local data =   {
      name = string.sub(emoteSlashName,2),
      race = tostring(emoteId),
      class = tostring(emoteCategory),
      zone = tostring(emoteIndex),
    }
    
    -- and use table.insert to put them into the dataItems table
    table.insert(dataItems, data)
  end
  
  return dataItems
end


function HotepCGS.OnOrderSelect(control, button, upInside)
    
    d(control.data)
end


function HotepCGS.InitOrdersList()
  
  SCENE_MANAGER:RegisterTopLevel(HotepCGS_UI_main, false)
  
  HotepCGS.UI_OrdersList = UI_OrdersList:New()
  
  HotepCGS.MainMenuSwitch(ORDER_STATUS_WAITING)
end




function HotepCGS:Initialize()
  
  EVENT_MANAGER:RegisterForEvent(self.name, EVENT_PLAYER_ACTIVATED, function()
      EVENT_MANAGER:UnregisterForEvent(self.name, EVENT_PLAYER_ACTIVATED)
      msgWithName("Loaded.")
      HotepCGS.InitOrdersList()
    end
  )
  
  -- ... other stuff ...
  
end


function HotepCGS.OnAddOnLoaded(event, addonName)
  if (addonName == HotepCGS.name) then
    EVENT_MANAGER:UnregisterForEvent(HotepCGS.name, EVENT_ADD_ON_LOADED)
    math.randomseed(GetTimeStamp())
    HotepCGS:Initialize()
  end
end


EVENT_MANAGER:RegisterForEvent(HotepCGS.name, EVENT_ADD_ON_LOADED, HotepCGS.OnAddOnLoaded)

Code:
<GuiXml>
  <Controls>
    <TopLevelControl name="HotepCGS_UI_main" mouseEnabled="true" movable="true" clampedToScreen="true" hidden="true">
      <Dimensions x="750" y="800" />
      <Anchor point="CENTER" />
      <Controls>
        
        <Backdrop name="$(parent)_BG" inherits="ZO_DefaultBackdrop" />
        
        <Label name="$(parent)_WindowTitle" font="ZoFontWindowTitle" text="|c3366ffHotep|r |cff6633Crafting Guild Service|r">
          <Anchor point="TOPLEFT" relativeTo="$(parent)" relativePoint="TOPLEFT" />
        </Label>
        
        <Texture name="$(parent)_TopDivider" textureFile="/esoui/art/miscellaneous/horizontaldivider.dds" tier="HIGH">
          <Dimensions x="800" y="4"/>
          <Anchor point="TOP" relativeTo="$(parent)" offsetY="38" />
        </Texture>
        
        <Button name="$(parent)_Button_Close" inherits="ZO_ButtonBehaviorClickSound">
          <Dimensions x="40" y="40" />
          <Anchor point="TOPRIGHT" relativeTo="$(parent)" relativePoint="TOPRIGHT" offsetX="15" />
          <Textures normal="EsoUI/Art/Buttons/closebutton_up.dds"
            pressed="EsoUI/Art/Buttons/closebutton_down.dds"
            mouseOver="EsoUI/Art/Buttons/closebutton_mouseover.dds"
            disabled="EsoUI/Art/Buttons/closebutton_disabled.dds"/>
          <OnClicked>
            HotepCGS.test3()
          </OnClicked>
        </Button>
        
        <Button name="$(parent)_Button_Waiting" inherits="ZO_DefaultButton" text="Waiting Orders">
          <Anchor point="TOPLEFT" relativeTo="$(parent)" relativePoint="TOPLEFT" offsetX="30" offsetY="46" />
          <OnClicked>
            HotepCGS.MainMenuSwitch("waiting")
          </OnClicked>
        </Button>
        
        <Button name="$(parent)_Button_Claimed" inherits="ZO_DefaultButton" text="Claimed Orders">
          <Anchor point="TOP" relativeTo="$(parent)" relativePoint="TOP" offsetX="0" offsetY="46" />
          <OnClicked>
            HotepCGS.MainMenuSwitch("claimed")
          </OnClicked>
        </Button>
        
        <Button name="$(parent)_Button_Delivered" inherits="ZO_DefaultButton" text="Delivered Orders">
          <Anchor point="TOPRIGHT" relativeTo="$(parent)" relativePoint="TOPRIGHT" offsetX="-30" offsetY="46" />
          <OnClicked>
            HotepCGS.MainMenuSwitch("delivered")
          </OnClicked>
        </Button>
        
        <Label name="$(parent)_OrdersHeading" font="ZoFontHeader4" text="">
          <Anchor point="TOP" relativeTo="$(parent)_Button_Claimed" relativePoint="BOTTOM" offsetY="6" />
          <Dimensions x="700" />
        </Label>
        
        <Control name="$(parent)_OrdersListHeaders">
          <Anchor point="TOPLEFT" relativeTo="$(parent)_OrdersHeading" relativePoint="BOTTOMLEFT" offsetX="0" offsetY="16"/>
          <Dimensions y="32" />
          <Controls>
            <Control name="$(parent)Name" inherits="ZO_SortHeader">
              <OnInitialized>
                ZO_SortHeader_Initialize(self, "Name", "name", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
              </OnInitialized>
              <Anchor point="TOPLEFT" />
              <Dimensions x="128" y="32" />
            </Control>
            <Control name="$(parent)Race" inherits="ZO_SortHeader">
              <OnInitialized>
                ZO_SortHeader_Initialize(self, "Race", "status", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
              </OnInitialized>
              <Anchor point="TOPLEFT" relativeTo="$(parent)Name" relativePoint="TOPRIGHT"/>
              <Dimensions x="128" y="32" />
            </Control>
            <Control name="$(parent)Class" inherits="ZO_SortHeader">
              <OnInitialized>
                ZO_SortHeader_Initialize(self, "Class", "rankName", ZO_SORT_ORDER_DOWN, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
              </OnInitialized>
              <Anchor point="TOPLEFT" relativeTo="$(parent)Race" relativePoint="TOPRIGHT" />
              <Dimensions x="128" y="32" />
            </Control>
            <Control name="$(parent)Zone" inherits="ZO_SortHeader">
              <OnInitialized>
                ZO_SortHeader_Initialize(self, "Zone", "recipient", ZO_SORT_ORDER_UP, TEXT_ALIGN_LEFT, "ZoFontGameLargeBold")
              </OnInitialized>
              <Anchor point="TOPLEFT" relativeTo="$(parent)Class" relativePoint="TOPRIGHT" />
              <Dimensions x="128" y="32" />
            </Control>
          </Controls>
        </Control>
        
        <Control name="$(parent)_OrdersList" inherits="ZO_ScrollList">
          <Anchor point="TOPLEFT" relativeTo="$(parent)_OrdersListHeaders" relativePoint="BOTTOMLEFT" />
          <Dimensions x="700" y="650" />
        </Control>
        
      </Controls>
    </TopLevelControl>
    
    <Button name="HotepCGS_UI_main_OrdersList_Row" virtual="true">
      <Dimensions y="30" />
      <Anchor point="RIGHT" relativeTo="$(parent)" />
      <OnMouseEnter>
          HotepCGS.UI_OrdersList:Row_OnMouseEnter(self)
      </OnMouseEnter>
      <OnMouseExit>
          HotepCGS.UI_OrdersList:Row_OnMouseExit(self)
      </OnMouseExit>
      <OnMouseUp>
          HotepCGS.OnOrderSelect(self, button, upInside)
      </OnMouseUp>
      <Controls>
        <Label name="$(parent)Name" font="ZoFontWinH4" wrapMode="ELLIPSIS">
          <Anchor point="TOPLEFT" relativeTo="$(parent)" />
          <Dimensions x="128" y="32" />
        </Label>
        <Label name="$(parent)Race" font="ZoFontWinH4" wrapMode="ELLIPSIS">
          <Anchor point="TOPLEFT" relativeTo="$(parent)Name" relativePoint="TOPRIGHT" />
          <Dimensions x="128" y="32" />
        </Label>
        <Label name="$(parent)Class" font="ZoFontWinH4" wrapMode="ELLIPSIS">
          <Anchor point="TOPLEFT" relativeTo="$(parent)Race"  relativePoint="TOPRIGHT" />
          <Dimensions x="128" y="32" />
        </Label>
        <Label name="$(parent)Zone" font="ZoFontWinH4" wrapMode="ELLIPSIS">
          <Anchor point="TOPLEFT" relativeTo="$(parent)Class" relativePoint="TOPRIGHT" />
          <Dimensions x="128" y="32" />
        </Label>
      </Controls>
    </Button>
    
  </Controls>
</GuiXml>

Please Help. I've been pulling my hair out for a week.
  Reply With Quote
 

ESOUI » Developer Discussions » Lua/XML Help » ZO_SortFilterList -- What am i doing wrong??? :(


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off