You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.9 KiB

--Add a search box to the AddonList
local _, addon = ...
local GetAddOnInfo = C_AddOns.GetAddOnInfo;
local StripHyperlinks = StripHyperlinks;
local sub = string.sub;
local find = string.find;
local lower = string.lower;
local AddonDataProvider = {};
function AddonDataProvider:LoadNames()
if self.dict then return end;
self.dict = {};
self.names = {};
self.total = C_AddOns.GetNumAddOns();
local name, firstLetter;
local lastLetter;
local letterRange = 0;
for i = 1, self.total do
name = GetAddOnInfo(i);
name = StripHyperlinks(name);
firstLetter = sub(lower(name), 1, 1);
if lastLetter and firstLetter ~= lastLetter then
self.dict[lastLetter][2] = letterRange;
letterRange = 0;
end
letterRange = letterRange + 1;
if not self.dict[firstLetter] then
self.dict[firstLetter] = {i};
end
lastLetter = firstLetter;
self.names[i] = name;
end
end
function AddonDataProvider:FindIndexByName(name)
self:LoadNames();
name = lower(name);
local firstLetter = sub(name, 1, 1);
if self.dict[firstLetter] then
local from, range = self.dict[firstLetter][1], self.dict[firstLetter][2];
local to = (range and from + range) or self.total;
for i = from, to do
if find(lower(self.names[i]), name) then
print(self.names[i])
return i
end
end
end
end
function ScrollToAddOnName(name)
local index = AddonDataProvider:FindIndexByName(name);
if index then
local alignment = 0; --ScrollBoxConstants.AlignBegin
local noInterpolation = true;
AddonList.ScrollBox:ScrollToElementDataIndex(index, alignment, noInterpolation);
return true
end
end