LeoAltholicResearchList = ZO_SortFilterList:Subclass() function LeoAltholicResearchList: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, "LeoAltholicResearchListTemplate", 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 LeoAltholicResearchList:SetupEntry(control, data) control.data = data control.name = GetControl(control, "Name") control.name:SetText(data.name) local color control.craft = {} for _,craft in pairs(LeoAltholic.craftResearch) do local researching = #data.research.doing[craft] control.craft[craft] = GetControl(control, "Craft" .. craft) local first local list = {} for _, research in pairs(data.research.doing[craft]) do if first == nil then first = research end local lineName, lineIcon = GetSmithingResearchLineInfo(craft, research.line) local traitType = GetSmithingResearchLineTraitInfo(craft, research.line, research.trait) local traitName = GetString('SI_ITEMTRAITTYPE', traitType) table.insert(list, { craft = craft, line = research.line, trait = research.trait, lineName = lineName, lineIcon = lineIcon, traitName = traitName, time = research.time, timer = LeoAltholic.FormatTime(research.time, false, true) }) end color = '|c'..LeoAltholic.color.hex.green if researching < data.research.done[craft].max then color = '|c'..LeoAltholic.color.hex.red end if researching > data.research.done[craft].max then researching = data.research.done[craft].max end local output = color .. researching .. '/' .. data.research.done[craft].max .. '|r' color = '|c'..LeoAltholic.color.hex.white if first and first.time <= 3600 then color = '|c'..LeoAltholic.color.hex.yellow end if #list > 0 then output = output .. " " .. color..LeoAltholic.FormatTime(first.time, false, true) .. '|r' end control.craft[craft]:SetText(output) control.craft[craft].list = list end ZO_SortFilterList.SetupRow(self, control, data) end function LeoAltholicResearchList: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 LeoAltholicResearchList:BuildMasterList() self.masterList = {} local list = LeoAltholic.ExportCharacters(true) for k, v in ipairs(list) do local data = { name = v.bio.name, research = v.research } data.queueIndex = k table.insert(self.masterList, data) end end function LeoAltholicResearchList:SortScrollList() local scrollData = ZO_ScrollList_GetDataList(self.list) table.sort(scrollData, self.sortFunction) end function LeoAltholicResearchList: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 local function addLine(tooltip, text, color) if not color then color = ZO_TOOLTIP_DEFAULT_COLOR end local r, g, b = color:UnpackRGB() tooltip:AddLine(text, "", r, g, b, CENTER, MODIFY_TEXT_TYPE_NONE, TEXT_ALIGN_LEFT, true) end local function addLineTitle(tooltip, text, color) if not color then color = ZO_SELECTED_TEXT end local r, g, b = color:UnpackRGB() tooltip:AddLine(text, "ZoFontHeader3", r, g, b, CENTER, MODIFY_TEXT_TYPE_NONE, TEXT_ALIGN_CENTER, true) end function LeoAltholicUI.TooltipResearch(control, visible) if visible then if #control.list == 0 then return end if not parent then parent = control end InitializeTooltip(InformationTooltip, control, LEFT, -30, 0) addLineTitle(InformationTooltip, GetCraftingSkillName(control.list[1].craft)) for _, trait in pairs(control.list) do addLine(InformationTooltip, "|t30:30:"..trait.lineIcon.."|t "..trait.lineName.." "..trait.traitName.." |cff0000"..trait.timer) end InformationTooltip:SetHidden(false) else ClearTooltip(InformationTooltip) InformationTooltip:SetHidden(true) end end function LeoAltholicUI:updateResearch() LeoAltholicUI.researchList:RefreshData() end