vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
local dewdrop = DewdropLib:GetInstance('1.0')
local tablet = TabletLib:GetInstance('1.0')
local metro = Metrognome:GetInstance('1')
local crayon = CrayonLib:GetInstance("1.0")

DamageMetersFu = FuBarPlugin:GetInstance("1.2"):new({
        name          = DamageMetersFuLocals.NAME,
        description   = DamageMetersFuLocals.DESCRIPTION,
        version       = "1.2.1",
        releaseDate   = "05-27-2006",
        aceCompatible = 103,
        fuCompatible  = 102,
        author        = "Blindchuck <Ropetown>",
        email         = "c@chuckg.org",
        website       = "http://chuckg.wowinterface.com",
        category      = "combat", -- Set this to the appropriate category.
        db            = AceDatabase:new("DamageMetersFuDB"),
        
        defaults      = {
                short_display = false,
                color_display = false,
                use_dm_colors = false,
                shownValues = {},
                shownRanks = {},
                shownLeaders = {}
        },
        
        cmd           = AceChatCmd:new(DamageMetersFuLocals.COMMANDS, DamageMetersFuLocals.CMD_OPTIONS),
        loc           = DamageMetersFuLocals,
        hasIcon       = "Interface\\AddOns\\FuBaR_DamageMetersFu\\DamageMeters.blp",
        cannotDetachTooltip = TRUE
})

function DamageMetersFu:IsQuantityShown(var, quantity)
        -- Check to see if there is currently a quantity type being shown for this type.
        if ( self.data["shown"..var][quantity]) then
                return true
        else
                return false
        end
end

function DamageMetersFu:ToggleQuantity(var, quantity)
        if ( self.data["shown" .. var][quantity] ~= nil ) then
                self.data["shown" .. var][quantity] = not self.data["shown" .. var][quantity]
        else
                self.data["shown" .. var][quantity] = true
        end
        
        -- We always need to update if the user has selected a new variable to show so the appropriate variables are displayed.
        self:Update()
end

function DamageMetersFu:ToggleOption(var, doUpdate)
        if self.data[var] then
                self.data[var] = not self.data[var]
        else
                self.data[var] = true
        end
        
        if doUpdate then
                self:Update()
        end
end

function DamageMetersFu:Initialize()
        -- Check if DM is loaded and setup our variable we use for checking.
        self.DMEnabled = self:IsDamageMetersLoaded();
end

function DamageMetersFu:Enable()
        -- put something that would be run every time this is enabled. Happens at the very start as well, after Initialize.
        if ( self.DMEnabled ) then
                if ( not self.rankTable ) then
                        -- Setup our rankTable references for differing versions of DM; namely 4.2.1 vs 4.3.x
                        if ( DamageMeters_VERSION == 4500 ) then
                                self.rankTable = DamageMeters_rankTables[DMT_ACTIVE]
                        else 
                                self.rankTable = "DamageMeters_rankTable"
                                self.rankTableGlobal = true
                        end
                end
                
                metro:Register(self.name, self.OnUpdate, 1, self)
                metro:Start(self.name)
        end
end

function DamageMetersFu:Disable()
        -- you do not need to unregister the event here, all events/hooks are unregistered on disable implicitly.
        if ( self.DMEnabled ) then
                metro:Unregister(self.name)
        end
end

function DamageMetersFu:OnUpdate() 
        self:Update()   
end

function DamageMetersFu:OnClick()
        if (self.DMEnabled) then
                DamageMeters_ToggleShow()
        end
end

function DamageMetersFu:MenuSettings(level, value)
        if ( self.DMEnabled ) then
                if ( level == 1 ) then
                        -- Display None
                        dewdrop:AddLine(
                                'text', self.loc.MENU_DISPLAY_NONE,
                                'func', function() 
                                                        self.data.shownValues = {}
                                                        self.data.shownRanks = {}
                                                        self.data.shownLeaders = {}
                                                end
                        )
                        
                        -- Value 
                        dewdrop:AddLine(
                                'text', self.loc.MENU_VALUE,
                                'hasArrow', true, 
                                'value',  self.loc.MENU_VALUE
                        )
        
                        -- Rank
                        dewdrop:AddLine(
                                'text', self.loc.MENU_RANK, 
                                'hasArrow', true, 
                                'value', self.loc.MENU_RANK
                        )
                        
                        -- Leader 
                        dewdrop:AddLine(
                                'text', self.loc.MENU_LEADER,
                                'hasArrow',  true, 
                                'value', self.loc.MENU_LEADER
                        )               
                        
                        dewdrop:AddLine();
                        
                        -- The other stuff; reset position, pause parsing, and clear current.
                        dewdrop:AddLine(
                                'text', self.loc.MENU_RESET_POSITION,
                                'arg1', self,
                                'func', "DMResetPos"
                        )
                        
                        dewdrop:AddLine(
                                'text', self.loc.MENU_PAUSE,
                                'arg1', self,
                                'func', "DMTogglePause",
                                'checked', self:DMGetPauseState()
                        )
                        
                        dewdrop:AddLine(
                                'text', self.loc.MENU_CLEAR,
                                'arg1', self,
                                'func', "DMClear"
                        )
                        
                        dewdrop:AddLine()
                        
                        -- Basic Settings
                        dewdrop:AddLine(
                                'text', self.loc.MENU_SHORT_DISPLAY,
                                'func', function()
                                                        self:ToggleOption("short_display", true)
                                                end,
                                'checked', self.data.short_display
                        )
                        
                        dewdrop:AddLine(
                                'text', self.loc.MENU_COLOR_DISPLAY,
                                'func', function()
                                                        self:ToggleOption("color_display", true)
                                                end,
                                'checked', self.data.color_display
                        )
                        
                        dewdrop:AddLine(
                                'text', self.loc.MENU_USE_DM_COLORS,
                                'func', function()
                                                        self:ToggleOption("use_dm_colors", true)
                                                end,
                                'checked', self.data.use_dm_colors
                        )
                        
                elseif ( level == 2 ) then
                        -- value = text from the arrow pointing here.
                        -- now our quantity types, they're the same through all menu types so we don't bother checking the value.
                        
                        for i,e in self.loc.DAMAGEMETERS_QUANT do
                                dewdrop:AddLine(
                                        'text', crayon:Colorize(self:GetQuantityColorCode(i), e.name),
                                        'arg1', self,
                                        'func', "ToggleQuantity",
                                        'arg2', value,
                                        'arg3', i,
                                        'checked', self:IsQuantityShown(value, i)
                                )
                        end
                end
        end
end

function DamageMetersFu:UpdateText()
        if ( not self.DMEnabled ) then 
                -- DM not installed message
                self:SetText(crayon:Red(self.loc.DAMAGEMETERS_MISSING))
        else
                local text = ""
                
                -- run through selected values
                for i,e in self.data.shownValues do
                        if ( self.data.shownValues[i] ) then
                                text = text .. " " .. self:GetValueText(i)
                        end
                end
                
                -- run through the selected ranks
                local playerRanks = ( self.rankTableGlobal and getglobal(self.rankTable) or self.rankTable )[UnitName("Player")]
                for i,e in self.data.shownRanks do
                        if ( self.data.shownRanks[i] ) then
                                if ( playerRanks ~= nil ) then
                                        text = text .. " " .. self:GetRankText(i, playerRanks[i])
                                else
                                        text = text .. " " .. self:GetRankText(i, nil)
                                end
                        end
                        
                        
                end
                
                -- run through the selected leader boards
                for i,e in self.data.shownLeaders do
                        if ( self.data.shownLeaders[i] ) then
                                text = text .. " " .. self:GetLeaderText(i)
                        end
                end
                
                -- user hasn't selected anything to display or we're in a paused state.
                if ( text == "" or  self:DMGetPauseState() ) then
                        text = crayon:White(self.loc.TEXT)
                end
                
                -- set the text
                self:SetText(text);
        end
end

function DamageMetersFu:GetValueText(quantity)
        -- short display
        if ( self.data.short_display ) then
                -- color the whole string or color just the descriptor.
                if ( self.data.color_display ) then 
                        return crayon:Colorize(self:GetQuantityColorCode(quantity), self.loc.DAMAGEMETERS_QUANT[quantity].abbr) .. crayon:White("=" .. DamageMeters_GetQuantityValueString(quantity, UnitName("Player")))
                else
                        return crayon:Yellow(self.loc.DAMAGEMETERS_QUANT[quantity].abbr) .. crayon:White("=" .. DamageMeters_GetQuantityValueString(quantity, UnitName("Player")))
                end
        else
                if ( self.data.color_display ) then 
                        return crayon:Colorize(self:GetQuantityColorCode(quantity), self.loc.DAMAGEMETERS_QUANT[quantity].name) .. crayon:White("=" .. DamageMeters_GetQuantityValueString(quantity, UnitName("Player")))
                else
                        return crayon:Yellow(self.loc.DAMAGEMETERS_QUANT[quantity].name) .. crayon:White("=" .. DamageMeters_GetQuantityValueString(quantity, UnitName("Player")))
                end
        end
end

function DamageMetersFu:GetRankText(quantity, rank)
        if ( rank == nil or rank == "") then
                rank = "-"
        end
        
        -- short display
        if ( self.data.short_display ) then
                -- color the whole string or color just the descriptor.
                if ( self.data.color_display ) then 
                        return crayon:Colorize(self:GetQuantityColorCode(quantity), self.loc.DAMAGEMETERS_QUANT[quantity].abbr .. "#") .. crayon:White("=" .. rank)
                else
                        return crayon:Yellow(self.loc.DAMAGEMETERS_QUANT[quantity].abbr .. "#") .. crayon:White("=" .. rank)
                end
        else
                if ( self.data.color_display ) then 
                        return crayon:Colorize(self:GetQuantityColorCode(quantity), self.loc.DAMAGEMETERS_QUANT[quantity].name .. "#") .. crayon:White("=" .. rank)
                else
                        return crayon:Yellow(self.loc.DAMAGEMETERS_QUANT[quantity].name .. "#") .. crayon:White("=" .. rank)
                end
        end
end

function DamageMetersFu:GetLeaderText(quantity)
        -- short display
        if ( self.data.short_display ) then
                -- color the whole string or color just the descriptor.
                if ( self.data.color_display ) then 
                        return crayon:Colorize(self:GetQuantityColorCode(quantity), self.loc.DAMAGEMETERS_QUANT[quantity].abbr .. "L") .. crayon:White("=" .. self:GetLeaderName(quantity))
                else
                        return crayon:Yellow(self.loc.DAMAGEMETERS_QUANT[quantity].abbr .. "L") .. crayon:White("=" .. self:GetLeaderName(quantity))
                end
        else
                if ( self.data.color_display ) then 
                        return crayon:Colorize(self:GetQuantityColorCode(quantity), self.loc.DAMAGEMETERS_QUANT[quantity].name .. "L") .. crayon:White("=" .. self:GetLeaderName(quantity))
                else
                        return crayon:Yellow(self.loc.DAMAGEMETERS_QUANT[quantity].name .. "L") .. crayon:White("=" .. self:GetLeaderName(quantity))
                end
        end
end

function DamageMetersFu:GetLeaderName(quantity)
        if ( self.DMEnabled ) then
                for player, struct in ( self.rankTableGlobal and getglobal(self.rankTable) or self.rankTable ) do
                        if (struct[quantity] == 1) then
                                return player;
                        end
                end
                
                return "-"
        end
end

-- Retrieve color codes from DM or builtin
function DamageMetersFu:GetQuantityColorCode(quantity) 
        -- Damage Meters default codes, + cff
        if ( self.data.use_dm_colors ) then
                return string.format("%02X%02X%02X",
                        DamageMeters_quantityColor[quantity][1]*255,
                        DamageMeters_quantityColor[quantity][2]*255,
                        DamageMeters_quantityColor[quantity][3]*255)
        else
                return self.loc.DAMAGEMETERS_QUANT[quantity].color
        end
end

function DamageMetersFu:UpdateTooltip()
        -- DM is loaded, so click to show/hide the window. Otherwise, learn to install the right mods newbert.
        if (self.DMEnabled) then 
                tablet:SetHint(self.loc.HINT)
        else
                tablet:SetHint(self.loc.DAMAGEMETERS_MISSING_DESC)
        end
end

--
-- Utility Functions
--

function DamageMetersFu:PrintD(msg)
        DEFAULT_CHAT_FRAME:AddMessage(msg,0.50,0.50,1.00);
end

function DamageMetersFu:IsDamageMetersLoaded()
        local _, _, _, enabled, _, _, _ = GetAddOnInfo("DamageMeters")

        if (enabled == 1) then                  -- We know Fubar is running, so check DamageMeters
                self:PrintD("DamageMeters: FuBaR Plugin Available")             -- for the plugin
                return true                                                     -- return 1
        else                                                    -- otherwise Fubar is running but DamageMeters is not
                self:PrintD("DamageMeters: DamageMetersNot Loaded.")            -- so let us know
                return false                                                    -- and return 
        end
end

-- 
-- Access to damage meters functions/data.
--

-- Reset frame position
function DamageMetersFu:DMResetPos()
        if (self.DMEnabled) then
                DamageMeters_ResetPos()
        end
end

-- Pause parsing
function DamageMetersFu:DMTogglePause()
        if (self.DMEnabled) then
                DamageMeters_TogglePause()
        end
end

-- Retrieve the status of the pause state.
function DamageMetersFu:DMGetPauseState()
        if ( DamageMeters_pauseState == 1 ) then
                return true
        else 
                return false
        end
end

-- Clear current data
function DamageMetersFu:DMClear()
        if (self.DMEnabled) then
                DamageMeters_Clear()
        end
end

DamageMetersFu:RegisterForLoad()

Generated by GNU Enscript 1.6.5.90.