--[[ -- 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