LeoAltholicWritsList = ZO_SortFilterList:Subclass() function LeoAltholicWritsList:New(control) ZO_SortFilterList.InitializeSortFilterList(self, control) local sorterKeys = { ["name"] = {}, } self.masterList = {} self.currentSortKey = "name" self.currentSortOrder = ZO_SORT_ORDER_UP ZO_ScrollList_AddDataType(self.list, 1, "LeoAltholicWritsListTemplate", 32, function(control, data) self:SetupEntry(control, data) end) self.sortFunction = function(listEntry1, listEntry2) return ZO_TableOrderingFunction(listEntry1.data, listEntry2.data, self.currentSortKey, sorterKeys, self.currentSortOrder) end return self end function LeoAltholicWritsList:SetupEntry(control, data) control.data = data control.name = GetControl(control, "Name") control.name:SetText(data.name) local child, texture for _, craft in pairs(LeoAltholic.allCrafts) do child = GetControl(control, "Craft"..craft.."Status") texture = GetControl(control, "Craft"..craft.."Icon") local icon = "esoui/art/tutorial/menubar_help_up.dds" local color = LeoAltholic.color.rgba.white local ago = "" local tooltip = "" for _, writ in pairs(data.writs) do if craft == writ.craft then local inProgress = true if writ.lastDone ~= nil and LeoAltholic.IsAfterReset(writ.lastDone) then color = LeoAltholic.color.rgba.green icon = "esoui/art/buttons/accept_up.dds" elseif writ.lastPreDeliver ~= nil and LeoAltholic.IsAfterReset(writ.lastPreDeliver) then color = LeoAltholic.color.rgba.yellow icon = "esoui/art/loot/loot_finesseItem.dds" elseif writ.lastUpdated ~= nil and LeoAltholic.IsAfterReset(writ.lastUpdated) then color = LeoAltholic.color.rgba.orange icon = "esoui/art/buttons/pointsplus_up.dds" elseif writ.lastStarted ~= nil and LeoAltholic.IsAfterReset(writ.lastStarted) then color = LeoAltholic.color.rgba.white icon = "esoui/art/buttons/pointsminus_up.dds" else inProgress = false color = LeoAltholic.color.rgba.red icon = "esoui/art/buttons/decline_up.dds" end if writ.lastDone ~= nil then local diff = GetTimeStamp() - writ.lastDone if diff < 3600 then ago = ZO_CachedStrFormat(GetString(SI_TIME_FORMAT_MINUTES), math.floor(diff / 60)) elseif diff < 86400 then ago = ZO_CachedStrFormat(GetString(SI_TIME_FORMAT_HOURS), math.floor(diff / 3600)) else ago = ZO_CachedStrFormat(GetString(SI_TIME_FORMAT_DAYS), math.floor(diff / 86400)) end tooltip = ZO_CachedStrFormat(GetString(SI_TIME_DURATION_AGO), ago) else ago = '?' tooltip = ZO_CachedStrFormat(GetString(SI_STR_TIME_UNKNOWN)) end tooltip = ZO_CachedStrFormat(GetString(SI_TRACKED_QUEST_STEP_DONE), tooltip) break end end texture:SetTexture(icon) texture:SetColor(unpack(color)) child:SetText(ago) child:SetColor(unpack(color)) if tooltip ~= "" then child:SetHandler("OnMouseEnter", function(control) InitializeTooltip(InformationTooltip, control, TOPLEFT, 50, 0, TOPLEFT) SetTooltipText(InformationTooltip, tooltip) end) child:SetHandler("OnMouseExit", function(self) ClearTooltip(InformationTooltip) end) child:SetMouseEnabled(true) else child:SetMouseEnabled(true) end end ZO_SortFilterList.SetupRow(self, control, data) end function LeoAltholicWritsList:ColorRow(control, data, mouseIsOver) local color = ZO_SECOND_CONTRAST_TEXT local r, g, b = GetInterfaceColor(INTERFACE_COLOR_TYPE_ITEM_QUALITY_COLORS, ITEM_QUALITY_MAGIC) local child = GetControl(control, "Name") if data.name == LeoAltholic.CharName then child:SetColor(r, g, b) else child:SetColor(color:UnpackRGBA()) end end function LeoAltholicWritsList:BuildMasterList() self.masterList = {} local list = LeoAltholic.ExportCharacters(true) for k, v in ipairs(list) do local data = { name = v.bio.name, writs = v.quests.writs or {} } data.queueIndex = k table.insert(self.masterList, data) end end function LeoAltholicWritsList:SortScrollList() local scrollData = ZO_ScrollList_GetDataList(self.list) table.sort(scrollData, self.sortFunction) end function LeoAltholicWritsList: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