vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
-- Name: TinyTip
-- Author: Thrae of Maelstrom (aka "Matthew Carras")
-- Release Date: 6-25-06
--
-- These functions allow you to change options via a
-- Dewdrop GUI. Loaded on demand by TinyTip.
--
-- This part does NOT need to be localized, look in
-- TinyTipChatLocale_xxXX.lua.
--]]

local _G = getfenv(0)
local dewdrop = _G.AceLibrary:GetInstance("Dewdrop-2.0")
local ddframe
local db

local function ToggleDB(k)
        db[k] = not db[k]
end

local function SetDB(k,v)
        db[k] = v
end

local function SetDBNum(k,v)
        db[k] = tonumber(v)
end

local function SetAnchor(k,v)
        db[k] = v
        if db[k] then 
                _G.TinyTipAnchor_Hook() 
        end
end

local function ToggleExtras(k)
        db[k] = not db[k]
        _G.TinyTip_LoDRun("TinyTipExtras","TinyTipExtras_Init", db, _G.TinyTipEventFrame)
end

local function SetExtras(k,v)
        db[k] = v 
        _G.TinyTip_LoDRun("TinyTipExtras","TinyTipExtras_Init", db, _G.TinyTipEventFrame)
end

local function SetExtrasNum(k,v)
        db[k] = tonumber(v)
        _G.TinyTip_LoDRun("TinyTipExtras","TinyTipExtras_Init", db, _G.TinyTipEventFrame)
end


local function SetTargets(k,v,v2)
        if v and v2 then
                v = tonumber(v2)
        end
        db[k] = v
        if db[k] then 
                _G.TinyTip_LoDRun("TinyTipExtras","TinyTipTargetsExists")
        end
end

local function DDAddArrow(opt)
        dewdrop:AddLine( 'text', _G["TinyTipChatLocale_Opt_" .. opt],
                                                                         'hasArrow', true,
                                                                         'value', opt,
                                                                         'tooltipTitle', "TinyTip",
                                                                         'tooltipText', _G["TinyTipChatLocale_Desc_" .. opt]
                                                                  )
end

local function DDAddChecked(opt, func)
        dewdrop:AddLine( 'text', _G["TinyTipChatLocale_Opt_" .. opt],
                                                                         'checked', db[opt],
                                                                         'func', func or ToggleDB,
                                                                         'arg1', opt,
                                                                         'tooltipTitle', "TinyTip",
                                                                         'tooltipText', _G["TinyTipChatLocale_Desc_" .. opt]
                                                                  )
end

local function DDAddEditBoxNum(opt, func, arg2)
        dewdrop:AddLine( 'text', _G["TinyTipChatLocale_Opt_" .. opt],
                                                                         'hasArrow', true,
                                                                         'hasEditBox', true,
                                                                         'editBoxText', db[ opt ],
                                                                         'editBoxFunc', func or SetDBNum,
                                                                         'editBoxArg1', opt,
                                                                         'editBoxArg2', arg2,
                                                                         'tooltipTitle', "TinyTip",
                                                                         'tooltipText', _G["TinyTipChatLocale_Desc_" .. opt]
                                                                  )
end

local function DDAddRadioBoxes(opt, map, func, default)
                        local k,v
                        dewdrop:AddLine('text', default or _G.TinyTipChatLocale_GameDefault,
                                                                                        'isRadio', true,
                                                                                        'checked', not db[opt],
                                                                                        'func', func or SetDB,
                                                                                        'arg1', opt )
                        for k,v in map do
                                dewdrop:AddLine('text', v,
                                                                                                'isRadio', true,
                                                                                                'checked', db[opt] == k,
                                                                                                'func', func or SetDB,
                                                                                                'arg1', opt,
                                                                                                'arg2', k )
                        end
end

local function DDAddScale(opt, func, default)
                        dewdrop:AddLine( 'text', _G["TinyTipChatLocale_Opt_" .. opt],
                                                                         'hasArrow', true,
                                                                         'hasSlider', true,
                                                                         'sliderMin', 0.01,
                                                                         'sliderMax', 2.0,
                                                                         'sliderIsPercent', true,
                                                                         'sliderValue', db[opt] or default or 1.0,
                                                                         'sliderFunc', func or _G.TinyTip_SetScale,
                                                                         'sliderArg1', opt,
                                                                         'tooltipTitle', "TinyTip",
                                                                         'tooltipText', _G["TinyTipChatLocale_Desc_" .. opt] )
end

function TinyTipOptions_CreateDDMenu(level,value)
        if not db then return end
        if level == 1 then
                dewdrop:AddLine( 'text', _G.TinyTipChatLocale_MenuTitle,
                                                                                 'isTitle', true
                                                                         )
                if _G.TinyTipAnchorExists then 
                        DDAddArrow("Main_Anchor") 
                end
                DDAddArrow("Main_Text")
                DDAddArrow("Main_Appearance")
                if _G.GetAddOnMetadata("TinyTipExtras", "Title") then
                        DDAddArrow("Main_Targets") 
                        DDAddArrow("Main_Extras")
                end
                
                dewdrop:AddLine()
                if _G.TinyTipDB then
                        dewdrop:AddLine('text', _G.TinyTipChatLocale_Opt_Profiles,
                                                                                        'checked', _G.TinyTipDB["_profile"],
                                                                                        'func', function() 
                                                                                                                        _G.TinyTipDB["_profile"] = not _G.TinyTipDB["_profile"] 
                                                                                                                        _G.TinyTip_UpdateProfiles()
                                                                                                                 end,
                                                                                        'tooltipTitle', "TinyTip",
                                                                                        'tooltipText', _G.TinyTipChatLocale_Desc_Profiles
                                                                                 )
                end
                dewdrop:AddLine()

                dewdrop:AddLine('text', _G.TinyTipChatLocale_Opt_Main_Default,
                                                                                'textR', 1, 'textG', 0.4, 'textB', 0.4,
                                                                                'func', _G.TinyTip_DefaultDB,
                                                                                'tooltipTitle', "TinyTip",
                                                                                'tooltipText', _G.TinyTipChatLocale_Desc_Main_Default)

        elseif level == 2 then
                if value == "Main_Anchor" then
                        DDAddArrow("MAnchor")
                        DDAddEditBoxNum("MOffX")
                        DDAddEditBoxNum("MOffY")

                        dewdrop:AddLine()

                        DDAddArrow("FAnchor")
                        DDAddEditBoxNum("FOffX")
                        DDAddEditBoxNum("FOffY")

                        dewdrop:AddLine()
                        DDAddChecked("AnchorAll")
                        DDAddChecked("AlwaysAnchor")
                        if db["ExtraTooltip"] then
                                dewdrop:AddLine()

                                DDAddArrow("ETAnchor")
                                DDAddEditBoxNum("ETOffX")
                                DDAddEditBoxNum("ETOffY")
                        end
                        if db["PvPIcon"] then
                                dewdrop:AddLine()

                                DDAddArrow("PvPIconAnchor1")
                                DDAddArrow("PvPIconAnchor2")
                                DDAddEditBoxNum("PvPIconOffX")
                                DDAddEditBoxNum("PvPIconOffY")
                        end
                        if db["RTIcon"] then
                                dewdrop:AddLine()

                                DDAddArrow("RTIconAnchor1")
                                DDAddArrow("RTIconAnchor2")
                                DDAddEditBoxNum("RTIconOffX")
                                DDAddEditBoxNum("RTIconOffY")
                        end
                        if db["Buffs"] then
                                dewdrop:AddLine()

                                DDAddArrow("BuffAnchor1")
                                DDAddArrow("BuffAnchor2")
                                DDAddEditBoxNum("BuffOffX")
                                DDAddEditBoxNum("BuffOffY")
                        end
                        if db["Debuffs"] then
                                dewdrop:AddLine()

                                DDAddArrow("DebuffAnchor1")
                                DDAddArrow("DebuffAnchor2")
                                DDAddEditBoxNum("DebuffOffX")
                                DDAddEditBoxNum("DebuffOffY")
                        end

                elseif value == "Main_Text" then
                        DDAddArrow("PvPRank")

                        dewdrop:AddLine()

                        DDAddChecked("HideLevelText")
                        DDAddChecked("HideRace")
                        DDAddChecked("KeyElite")
                        DDAddChecked("HideGuild")
                        DDAddChecked("ReactionText")
                        DDAddChecked("LevelGuess")
                elseif value == "Main_Appearance" then
                        DDAddScale("Scale")
                        DDAddArrow("BGColor")
                        DDAddArrow("Border")
                        DDAddArrow("Fade")
                        DDAddArrow("Friends")

                        dewdrop:AddLine()

                        DDAddChecked("SmoothBorder", TinyTip_SmoothBorder)
                        DDAddChecked("Compact")
                        DDAddChecked("HideInFrames")
                        DDAddChecked("FormatDisabled")

                        if db["PvPIcon"] or db["RTIcon"] or db["Buffs"] or db["Debuffs"] then
                                dewdrop:AddLine()
                        end
                        if db["PvPIcon"] then
                                DDAddScale("PvPIconScale", SetExtrasNum, 0.7)
                        end
                        if db["RTIcon"] then
                                DDAddScale("RTIconScale", SetExtrasNum, 0.1)
                        end
                        if db["Buffs"] or db["Debuffs"] then
                                DDAddScale("BuffScale", SetExtrasNum, 0.2)
                        end
                elseif value == "Main_Targets" then
                        DDAddArrow("ToT")
                        DDAddArrow("ToP")
                        DDAddArrow("ToR")
                elseif value == "Main_Extras" then
                        DDAddArrow("ExtraTooltip")
                        DDAddArrow("Buffs")
                        DDAddArrow("Debuffs")

                        dewdrop:AddLine()

                        DDAddChecked("PvPIcon", ToggleExtras)
                        DDAddChecked("RTIcon", ToggleExtras)
                        DDAddChecked("ManaBar", ToggleExtras)
                end
        elseif level == 3 then
                local k,v
                if value == "MAnchor" then
                        dewdrop:AddLine('text', _G.TinyTipChatLocale_GameDefault,
                                        'isRadio', true,
                                        'checked', db["MAnchor"] == "GAMEDEFAULT",
                                        'func', SetDB,
                                        'arg1', "MAnchor",
                                        'arg2', "GAMEDEFAULT")

                        dewdrop:AddLine('text', _G.TinyTipChatLocale_Anchor_Cursor,
                                        'isRadio', true,
                                        'checked', not db["MAnchor"],
                                        'func', SetAnchor,
                                        'arg1', "MAnchor")

                        for k,v in _G.TinyTipChatLocale_ChatMap_Anchor do
                                        dewdrop:AddLine('text', v,
                                                        'isRadio', true,
                                                        'checked', db["MAnchor"] == k,
                                                        'func', SetAnchor,
                                                        'arg1', "MAnchor",
                                                        'arg2', k )
                        end
                elseif value == "FAnchor" then
                        dewdrop:AddLine('text', _G.TinyTipChatLocale_GameDefault,
                                                                                        'isRadio', true,
                                                                                        'checked', not db["FAnchor"],
                                                                                        'func', SetDB,
                                                                                        'arg1', "FAnchor" )

                        dewdrop:AddLine('text', _G.TinyTipChatLocale_Anchor_Sticky,
                                                                                        'isRadio', true,
                                                                                        'checked', db["FAnchor"] == "STICKY",
                                                                                        'func', SetAnchor,
                                                                                        'arg1', "FAnchor",
                                                                                        'arg2', "STICKY" )

                        dewdrop:AddLine('text', _G.TinyTipChatLocale_Anchor_Cursor,
                                                                                        'isRadio', true,
                                                                                        'checked', db["FAnchor"] == "CURSOR",
                                                                                        'func', SetAnchor,
                                                                                        'arg1', "FAnchor",
                                                                                        'arg2', "CURSOR" )

                        for k,v in _G.TinyTipChatLocale_ChatMap_Anchor do
                                dewdrop:AddLine('text', v,
                                                                                                'isRadio', true,
                                                                                                'checked', db["FAnchor"] == k,
                                                                                                'func', SetAnchor,
                                                                                                'arg1', "FAnchor",
                                                                                                'arg2', k )
                        end
                elseif value == "PvPIconAnchor1" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "PvPIconAnchor2" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "RTIconAnchor1" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "RTIconAnchor2" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "BuffAnchor1" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)    
                elseif value == "BuffAnchor2" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)    
                elseif value == "DebuffAnchor1" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)    
                elseif value == "DebuffAnchor2" then
                        DDAddRadioBoxes(value,
                                                                                        _G.TinyTipChatLocale_ChatMap_Anchor,
                                                                                        SetExtras,
                                                                                        _G.TinyTipChatLocale_TinyTipDefault)    
                elseif value == "PvPRank" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_PvPRank, 
                                                                                 nil,  
                                                                                 _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "BGColor" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_BGColor,
                                                                                 nil,
                                                                                 _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "Border" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_Border,
                                                                                 nil,
                                                                                 _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "Fade" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_Fade )
                elseif value == "Friends" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_Friends,
                                                                                 nil,
                                                                                 _G.TinyTipChatLocale_TinyTipDefault)
                elseif value == "ToT" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_ToT,
                                                                                 SetTargets,
                                                                                 _G.TinyTipChatLocale_Off)
                elseif value == "ToP" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_ToP,
                                                                                 SetTargets,
                                                                                 _G.TinyTipChatLocale_Off)
                elseif value == "ToR" then
                        DDAddRadioBoxes(value, 
                                                                                 _G.TinyTipChatLocale_ChatIndex_ToR,
                                                                                 SetTargets,
                                                                                 _G.TinyTipChatLocale_Off)
                elseif value == "ExtraTooltip" then
                        DDAddRadioBoxes(value,
                                                                                _G.TinyTipChatLocale_ChatIndex_ExtraTooltip,
                                                                                SetExtras,
                                                                                _G.TinyTipChatLocale_Off)
                elseif value == "ETAnchor" then
                        dewdrop:AddLine('text', _G.TinyTipChatLocale_GameDefault,
                                                                                        'isRadio', true,
                                                                                        'checked', not db["ETAnchor"],
                                                                                        'func', SetDB,
                                                                                        'arg1', "ETAnchor" )

                        for k,v in _G.TinyTipChatLocale_ChatMap_Anchor do
                                        dewdrop:AddLine('text', v,
                                                                                                        'isRadio', true,
                                                                                                        'checked', db["ETAnchor"] == k,
                                                                                                        'func', SetAnchor,
                                                                                                        'arg1', "ETAnchor",
                                                                                                        'arg2', k )
                        end
                elseif value == "Buffs" then
                        DDAddRadioBoxes(value,
                                                                                _G.TinyTipChatLocale_ChatIndex_Buffs,
                                                                                SetExtras,
                                                                                _G.TinyTipChatLocale_Off)
                elseif value == "Debuffs" then
                        DDAddRadioBoxes(value,
                                                                                _G.TinyTipChatLocale_ChatIndex_Debuffs,
                                                                                SetExtras,
                                                                                _G.TinyTipChatLocale_Off)
                end
        end
end

function TinyTipOptions_SetLocals(_db)
        if _db then db = _db end
end

function TinyTipChat_SlashHandler(msg, _db)
        if _db then db = _db 
        elseif not db then return end

        msg = string.lower(msg)
        -- non saved variable options
        if msg == _G.TinyTipChatLocale_Opt_Slash_Default then
                _G.TinyTip_Msg( string.format("%s %s %s.", _G.TinyTipChatLocale_DefaultWarning, 
                                                            _G.SLASH_TINYTIP2, 
                                                            _G.TinyTipChatLocale_Confirm ) )
        elseif msg == _G.TinyTipChatLocale_Confirm then -- "hidden option"
                _G.TinyTip_DefaultDB()
        elseif msg == _G.TinyTipChatLocale_Opt_Slash_Report then
                local reportmap = _G.TinyTip_GetAllOptions()
                local k,v
                for _,v in reportmap do
                        _G.TinyTip_Msg( string.format("%s %s [|cFFFFCC00%s|r]", v,
                                                 _G.TinyTipChatLocale_IsSetTo,
                                                 ( db[v] and type(db[v]) == "boolean" 
                                                    and _G.TinyTipChatLocale_On ) or 
                                                 (db[v] and type(db[v]) == "string" and 
                                                 string.format('"%s"', db[v])) or
                                                 (type(db[v]) == "number" and db[v]) or 
                                                 _G.TinyTipChatLocale_Off ) )
                end
        elseif msg and string.len(msg) > 0 then
                _G.TinyTip_Msg( string.format('"|cFFFF2222%s|r" %s', msg, _G.TinyTipChatLocale_NotValidCommand) )
        else -- open up options window

                if not ddframe then
                                ddframe = _G.CreateFrame("Frame", nil, _G.UIParent)
                                ddframe:SetWidth(2)
                                ddframe:SetHeight(2)
                                ddframe:SetPoint("BOTTOMLEFT", _G.GetCursorPosition())
                                ddframe:SetClampedToScreen(true)
                                dewdrop:Register(ddframe, 'dontHook', true, 'children', _G.TinyTipOptions_CreateDDMenu )
                end
                local x,y = _G.GetCursorPosition()
                ddframe:SetPoint("BOTTOMLEFT", x / UIParent:GetScale(), y / UIParent:GetScale())
                dewdrop:Open(ddframe)

        end

end