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
99 lines
1.9 KiB
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
|