TashDLPhraseList = ZO_SortFilterList:Subclass() function TashDLPhraseList:New(control, tooltipControl) local sorterKeys = { ["NPC"] = {}, ["timestamp"] = {tiebreaker="NPC"}, ["bodyText"] = {tiebreaker="NPC"}, ["optionText"] = {tiebreaker="NPC"}, } self.duplicatesMode = TashDialogueLog.savedVariables.duplicatesMode self.tooltipControl = tooltipControl self.authorSearchBox = GetControl(control, "AuthorSearchBox") self.authorSearchBox:SetHandler("OnTextChanged", function() self:OnSearchTextChanged(self.authorSearchBox) end) self.fullTextSearchBox = GetControl(control, "FullTextSearchBox") self.fullTextSearchBox:SetHandler("OnTextChanged", function() self:OnSearchTextChanged(self.fullTextSearchBox) end) ZO_SortFilterList.InitializeSortFilterList(self, control) self:BuildMasterList() ZO_ScrollList_AddDataType( self.list, 1, "TashDLPhraseRow", 70, function(control, data) self:SetupEntry(control, data) end ) ZO_ScrollList_EnableHighlight(self.list, "ZO_ThinListHighlight") self.currentSortKey = "timestamp" self.sortFunction = function(listEntry1, listEntry2) return ZO_TableOrderingFunction(listEntry1.data, listEntry2.data, self.currentSortKey, sorterKeys, control.currentSortOrder) end -- self.sortFunction = function(listEntry1, listEntry2) return 1 end -- Searching self:RefreshData() return self end function TashDLPhraseList:SetAuthor(NPCName) self.authorSearchBox:SetText(NPCName) end function TashDLPhraseList:OnSearchTextChanged(control) ZO_EditDefaultText_OnTextChanged(control) self:RefreshFilters() end function TashDLPhraseList:SortScrollList() local scrollData = ZO_ScrollList_GetDataList(self.list) table.sort(scrollData, self.sortFunction) end function TashDLPhraseList:FilterScrollList() -- If you want to add a filter local scrollData = ZO_ScrollList_GetDataList(self.list) ZO_ClearNumericallyIndexedTable(scrollData) local author = self.authorSearchBox:GetText():lower() local search_term = self.fullTextSearchBox:GetText():lower() for i = 1, #self.masterList do local data = self.masterList[i] local term_found = true if search_term ~= "" then term_found = zo_plainstrfind(data.bodyText:lower(), search_term) or zo_plainstrfind((data.optionText or ""):lower(), search_term) end local author_found = true if author ~= "" then author_found = zo_plainstrfind(data.NPC:lower(), author) end if term_found and author_found then table.insert(scrollData, ZO_ScrollList_CreateDataEntry(1, data)) end end end function TashDLPhraseList:BuildMasterList() self.masterList = TashDialogueLog:BuildPhrasesTable( function(data) return data.bodyText ~= nil end, self.duplicatesMode ) end function TashDLPhraseList:OnMouseEnter(control) self.tooltipControl:Update(control) self.tooltipControl:Show(control) self:Row_OnMouseEnter(control) end function TashDLPhraseList:OnMouseExit(control) self.tooltipControl:Hide() self:Row_OnMouseExit(control) end function TashDLPhraseList:OnShow() local tc = TashDialogueLog.constants local buttonAll = GetControl(self.control, "ShowDuplicatesAll") local buttonFirst = GetControl(self.control, "ShowDuplicatesFirst") local buttonLast = GetControl(self.control, "ShowDuplicatesLast") local buttons = { [tc.IGNORE_DUPLICATES_SHOW_ALL] = buttonAll, [tc.IGNORE_DUPLICATES_SHOW_FIRST] = buttonFirst, [tc.IGNORE_DUPLICATES_SHOW_LAST] = buttonLast, } local r,g,b = GetInterfaceColor(INTERFACE_COLOR_TYPE_TEXT_COLORS, INTERFACE_TEXT_COLOR_DISABLED) for i=1, #buttons do buttons[i]:SetColor(r, g, b) buttons[i].list = self end r,g,b = GetInterfaceColor(INTERFACE_COLOR_TYPE_TEXT_COLORS, INTERFACE_TEXT_COLOR_NORMAL) buttons[self.duplicatesMode]:SetColor(r, g, b) end function TashDLPhraseList:OnDuplicatesModeButtonClick(value) self.duplicatesMode = value self:RefreshData() self:OnShow() end function TashDLPhraseList:SetupEntry(control, data) control.data = data control.obj = self control.NPC = GetControl(control, "NPC") control.ts = GetControl(control, "Time") control.bodyText = GetControl(control, "BodyText") control.optionText = GetControl(control, "OptionText") control.NPC.normalColor = TashDialogueLog.colors.NPCNAME control.ts.normalColor = TashDialogueLog.colors.TIMESTAMP control.bodyText.normalColor = TashDialogueLog.colors.BODYTEXT control.optionText.normalColor = TashDialogueLog.colors.OPTIONTEXT control.NPC:SetText(data.NPC) control.ts:SetText(TashDialogueLog:FormatTimestamp(data.timestamp)) control.optionText:SetText(data.optionText) control.bodyText:SetText(data.bodyText) ZO_SortFilterList.SetupRow(self, control, data) end