View Single Post
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