vanilla-wow-addons – Rev 1
?pathlinks?
if not SimpleCombatLog then return end
local dewdrop = AceLibrary("Dewdrop-2.0")
local L = SimpleCombatLog.loc.filter
local sourceOrVictimArray = { 'source', 'victim' }
local isSourceArray = { true, false }
-- Available type filters.
SimpleCombatLog.typeFilters = {
'hit', 'heal', 'miss', 'cast', 'gain', 'drain', 'leech', 'dispel',
'buff', 'debuff', 'fade', 'interrupt', 'death', 'environment', 'extraattack', 'enchant',
}
-- Available name filters.
SimpleCombatLog.nameFilters = {
'player', 'pet', 'party', 'raid', 'target', 'targettarget', 'other',
}
function SimpleCombatLog:SetFilter(id, filterType, nameFilter, isSource, value)
if value == false then value = nil end
if not self.settings[id] then
self.settings[id] = {}
self.settingDB[id] = self.settings[id]
else
if self.settings[id].theme then
self.settings[id] = SimpleCombatLog.CopyTable({}, self.settings[id])
self.settings[id].theme = nil
self.settingDB[id] = self.settings[id]
end
end
if not self.settings[id].filters then
self.settings[id].filters = {}
end
if not self.settings[id].filters[filterType] then
self.settings[id].filters[filterType] = {}
end
local source
if isSource then source = 1 else source = 2 end
local flag = self.filterFlags[source][nameFilter]
self.settings[id].filters[filterType][flag] = value
end
function SimpleCombatLog:SetAllTypeFilters(id, nameFilter, isSource, value)
for i, type in pairs(self.typeFilters) do
self:SetFilter(id, type, nameFilter, isSource, value)
end
end
function SimpleCombatLog:IsAllTypeFiltersChecked(id, nameFilter, isSource)
for i, typeFilter in pairs(self.typeFilters) do
if not self:GetFilter(id, typeFilter, nameFilter, isSource) then
return false
end
end
return true
end
local function UpdateFilterTable(self, id, level, value)
if level == 1 then
dewdrop:AddLine(
'text', L["Filters"],
'hasArrow', true,
'value', 'filter',
'notCheckable', true
)
elseif level == 2 and value == 'filter' then
self.currMenuType = 'filter'
dewdrop:AddLine(
'text', L["Type Filters"],
'isTitle', true,
'notCheckable', true
)
dewdrop:AddLine(
'text', L["AllFilter"],
'hasArrow', true,
'value', 'AllFilter',
'tooltipTitle', L["AllFilter"],
'tooltipText', L.typeTooltip["AllFilter"],
'notCheckable', true
)
for i, v in pairs(self.typeFilters) do
dewdrop:AddLine(
'text', L[v],
'hasArrow', true,
'tooltipTitle', L[v],
'tooltipText', L.typeTooltip[v],
'value', v,
'notCheckable', true
)
end
elseif level == 3 and self.currMenuType == 'filter' then
if value == 'AllFilter' then
dewdrop:AddLine(
'text', string.format(L["Name Menu Title"], L["AllFilter"]),
'isTitle', true,
'notCheckable', true
)
for i, isSource in pairs(isSourceArray) do
local isSource = isSource
local sourceOrVictim = sourceOrVictimArray[i]
dewdrop:AddLine(
'text', L[sourceOrVictim],
'isTitle', true
)
for i, nameFilter in pairs(self.nameFilters) do
local nameFilter = nameFilter
local state = nil -- 0: none, 1: partial, 2: all
for j, type in pairs(self.typeFilters) do
local checked = self:GetFilter(id, type, nameFilter, isSource)
if not state then
if checked then
state = 2
else
state = 0
end
elseif state == 0 and checked then
state = 1
elseif state == 2 and not checked then
state = 1
end
end
local checked, checkIcon, func
if state == 0 then
checked = false
checkIcon = nil
func = function() self:SetAllTypeFilters(id, nameFilter, isSource, true) end
elseif state == 1 then
checked = true
checkIcon = "Interface\\Buttons\\UI-CheckBox-Check-Disabled"
func = function() self:SetAllTypeFilters(id, nameFilter, isSource, true) end
else
checked = true
checkIcon = nil
func = function() self:SetAllTypeFilters(id, nameFilter, isSource, nil) end
end
dewdrop:AddLine(
'text', L[nameFilter],
'checked', checked,
'checkIcon', checkIcon,
'func', func
)
end
end
else
local typeFilter = value
dewdrop:AddLine(
'text', string.format(L["Name Menu Title"], L[typeFilter]),
'isTitle', true,
'notCheckable', true
)
for i, isSource in pairs(isSourceArray) do
local isSource = isSource
local sourceOrVictim = sourceOrVictimArray[i]
dewdrop:AddLine(
'text', L[sourceOrVictim],
'isTitle', true
)
for i, nameFilter in pairs(self.nameFilters) do
local nameFilter = nameFilter
dewdrop:AddLine(
'text', L[nameFilter],
'func', function() self:SetFilter(id, typeFilter, nameFilter, isSource, not self:GetFilter(id, typeFilter, nameFilter, isSource) )end,
'checked', self:GetFilter(id, typeFilter, nameFilter, isSource)
)
end
end
end
end
end
if SimpleCombatLog.menuFunc then
SimpleCombatLog.menuFunc[1] = UpdateFilterTable
end