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.

99 lines
1.9 KiB

4 years ago
local MAX_PINS = 20;
local _, addon = ...
local p = {};
addon.PinUtil = p;
local isPinned = {};
local db;
function p:Load()
if not NarciAchievementOptions.pinnedStatistics then
NarciAchievementOptions.pinnedStatistics = {};
end
db = NarciAchievementOptions.pinnedStatistics;
for _, id in pairs(db) do
isPinned[id] = true;
end
end
function p:Pin(statID)
if not db then
self:Load();
end
if self:IsVacant() and (not isPinned[statID]) then
tinsert(db, 1, statID);
isPinned[statID] = true;
return true;
else
return false;
end
end
function p:IsPinned(statID)
return isPinned[statID]
end
function p:Unpin(statID)
if db and isPinned[statID] then
for i = 1, #db do
if db[i] == statID then
isPinned[statID] = nil;
table.remove(db, i);
return true;
end
end
end
end
function p:Toggle(statID)
-- 0-Unpinned 1-Pinned 2-Capped
if statID then
if isPinned[statID] then
self:Unpin(statID);
return 0
else
if self:IsVacant() then
self:Pin(statID);
return 1
else
return 2
end
end
else
return 0
end
end
function p:GetTotal()
if db then
return #db, MAX_PINS;
else
return 0, MAX_PINS;
end
end
function p:IsVacant()
return self:GetTotal() < MAX_PINS
end
function p:GetList()
if db then
return db;
else
return {};
end
end
function p:GetID(index)
if db then
return db[index]
end
end
function p:GetSummaryText()
local total = self:GetTotal();
return string.format("%d/%d", total, MAX_PINS); --Narci.L["Pinned Entry Format"]
end