vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
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