You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
588 lines
19 KiB
588 lines
19 KiB
|
|
local addon, ns = ...
|
|
local addonLabel = addon;
|
|
local C, L, I = ns.LC.color, ns.L, ns.I;
|
|
local setmetatable,type,rawget,tostring=setmetatable,type,rawget,tostring;
|
|
local ipairs,pairs,wipe,strsplit,tremove=ipairs,pairs,wipe,strsplit,tremove;
|
|
|
|
local dbDefaults,db = {
|
|
profile = {
|
|
GeneralOptions = {
|
|
suffixColour = true,
|
|
showHints = true,
|
|
iconset = "NONE",
|
|
iconcolor = {1,1,1,1},
|
|
goldColor = "white",
|
|
goldCoins = true,
|
|
usePrefix = false,
|
|
maxTooltipHeight = 60,
|
|
scm = false,
|
|
ttModifierKey1 = "NONE",
|
|
ttModifierKey2 = "NONE",
|
|
goldHide = "0",
|
|
separateThousands = true,
|
|
showAddOnLoaded = true,
|
|
chatCommands = true
|
|
}
|
|
}
|
|
};
|
|
|
|
ns.showCharsFrom_Values = { -- used in xp.lua to display current mode in tooltip
|
|
["1"] = ns.realm,
|
|
["2"] = L["Connected realms"],
|
|
["4"] = L["All realms"]
|
|
};
|
|
|
|
local goldHideValues = {
|
|
["0"]=ADDON_DISABLED,
|
|
["1"]=L["HideMoneyCopper"],
|
|
["2"]=L["HideMoneySilver"],
|
|
["3"]=L["HideMoneyZeros"],
|
|
["4"]=L["ShowHighestOnly"]
|
|
};
|
|
|
|
local nsProfileMT
|
|
|
|
-- some values tables and functions
|
|
local ttModifierValues = {NONE = L["ModKeyDefault"]};
|
|
for i,v in pairs(ns.tooltipModifiers) do ttModifierValues[i] = L["ModKey"..v.l]; end
|
|
|
|
local function calcDataSize(info,obj)
|
|
if info then
|
|
local key = info[#info];
|
|
return "~"..ns.FormatLargeNumber(true,calcDataSize(nil,Broker_Everything_CharacterDB[key])).."B";
|
|
end
|
|
local obj_t = type(obj);
|
|
if obj_t=="table" then
|
|
local sum = 0;
|
|
for k,v in pairs(obj) do
|
|
if type(k)=="string" then
|
|
sum = sum + 40 + strlen(k);
|
|
else
|
|
sum = sum + 16;
|
|
end
|
|
sum = sum + calcDataSize(nil,v);
|
|
end
|
|
return sum + 40;
|
|
elseif obj_t=="boolean" then
|
|
return 2;
|
|
elseif obj_t=="number" then
|
|
return (floor(obj/2147483647)+1)*8;
|
|
end
|
|
return strlen(tostring(obj));
|
|
end
|
|
|
|
local function getIconSets()
|
|
local t = {NONE=NONE}
|
|
local l = ns.LSM:List((addon.."_Iconsets"):lower())
|
|
if type(l)=="table" then
|
|
for i,v in pairs(l) do
|
|
t[v] = v
|
|
end
|
|
end
|
|
return t
|
|
end
|
|
|
|
local function toggleAllModules(info)
|
|
local state = info[#info];
|
|
if not (state=="enable" or state=="disable" or state=="default") then
|
|
return;
|
|
end
|
|
for modName,modObject in pairs(ns.modules) do
|
|
if not modObject.isHiddenModule then
|
|
local newValue
|
|
if state=="enable" and db.profile[modName].enabled==false then
|
|
newValue = true;
|
|
elseif state=="disable" and db.profile[modName].enabled==true then
|
|
newValue = false;
|
|
elseif state=="default" and db.profile[modName].enabled~=ns.modules[modName].config_defaults.enabled then
|
|
newValue = ns.modules[modName].config_defaults.enabled;
|
|
end
|
|
if newValue~=nil then
|
|
db.profile[modName].enabled = newValue;
|
|
if newValue then
|
|
ns.moduleInit(modName);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- option set/get function
|
|
local function opt(info,value,...)
|
|
if not db then return end
|
|
-- section = GeneralOptions or module names
|
|
local key,section,isModEnable = info[#info],info[#info-2],(info[#info-1]=="modEnable");
|
|
if #info>=5 then
|
|
local modOptDepth = nil;
|
|
for i=#info, 1, -1 do
|
|
if info[i]=="modOptions" then
|
|
modOptDepth = i+1;
|
|
break;
|
|
end
|
|
end
|
|
if modOptDepth~=nil then
|
|
section = info[modOptDepth];
|
|
end
|
|
end
|
|
if value~=nil then
|
|
if isModEnable then
|
|
db.profile[key].enabled = value;
|
|
if value then
|
|
-- init module
|
|
ns.moduleInit(key);
|
|
end
|
|
elseif key=="minimap" then
|
|
db.profile[section][key].hide = not value;
|
|
ns.updateMinimapButton(section);
|
|
else
|
|
if ... then value={value,...}; end -- color table
|
|
db.profile[section][key]=value;
|
|
if section=="GeneralOptions" then
|
|
for modName,mod in pairs(ns.modules)do
|
|
if mod.isEnabled and mod.onevent then
|
|
mod.onevent(mod.eventFrame,"BE_UPDATE_CFG",key);
|
|
end
|
|
end
|
|
if key=="iconcolor" then
|
|
ns.updateIcons(true,"color");
|
|
elseif key=="iconset" then
|
|
ns.updateIcons(true,"icon");
|
|
end
|
|
elseif ns.modules[section].onevent then
|
|
ns.modules[section].onevent(ns.modules[section].eventFrame,"BE_UPDATE_CFG",key);
|
|
end
|
|
end
|
|
end
|
|
if isModEnable then
|
|
return (db and key and db.profile and db.profile[key] and db.profile[key].enabled);
|
|
elseif key=="minimap" then
|
|
return not db.profile[section][key].hide;
|
|
else
|
|
if type(db.profile[section][key])=="table" then
|
|
return unpack(db.profile[section][key]);
|
|
end
|
|
return db.profile[section][key];
|
|
end
|
|
end
|
|
|
|
ns.option=opt; -- used in shared.lua (EasyMenu wrapper)
|
|
|
|
local options = {
|
|
type = "group",
|
|
name = addon,
|
|
get=opt, set=opt,
|
|
childGroups = "tab",
|
|
args = {
|
|
GeneralOptions = {
|
|
type = "group", order = 1,
|
|
name = GENERAL,
|
|
args = {
|
|
misc = {
|
|
type = "group", order = 1, inline = true,
|
|
name = C("ff00aaff",AUCTION_SUBCATEGORY_OTHER),
|
|
args = {
|
|
showAddOnLoaded = { type="toggle",order=1,name=L["AddOnLoaded"],desc=L["AddOnLoadedDesc"].."|n|n|cff44ff44"..L["AddOnLoadedDescAlt"].."|r" },
|
|
suffixColour = { type="toggle",order=2,name=L["SuffixColor"],desc=L["SuffixColorDesc"] },
|
|
usePrefix = { type="toggle",order=3,name=L["Prefix"],desc=L["PrefixDesc"] },
|
|
chatCommands = { type="toggle",order=4,name=L["ChatCommands"],desc=L["ChatCommandsDesc"] },
|
|
}
|
|
},
|
|
gold = {
|
|
type = "group", order = 2, inline = true,
|
|
name = C("ff00aaff",BONUS_ROLL_REWARD_MONEY),
|
|
args = {
|
|
goldColor = {type="select",order=1,name=L["GoldColor"],desc=L["GoldColorDesc"],values={_none=ADDON_DISABLED,color=L["GoldColorCoin"],white=L["GoldColorWhite"]} },
|
|
goldCoins = {type="toggle",order=2,name=L["GoldCoins"],desc=L["GoldCoinsDesc"]},
|
|
separateThousands = {type="toggle",order=3,name=L["DigitGroup"],desc=L["DigitGroupDesc"]},
|
|
goldHide = {type="select",order=4,name=L["HideMoney"],desc=L["HideMoneyDescEverywhere"], width = "double", values= goldHideValues }
|
|
}
|
|
},
|
|
tooltip = {
|
|
type = "group", order = 3, inline = true,
|
|
name = C("ff00aaff",L["Tooltip"]),
|
|
args = {
|
|
scm = {type="toggle",order=1,name=L["OptSCM"],desc=L["OptSCMDesc"]},
|
|
showHints = {type="toggle",order=2,name=L["OptTTHints"],desc=L["OptTTHintsDesc"]},
|
|
maxTooltipHeight = {type="range", order=3,name=L["TTMaxHeight"],desc=L["TTMaxHeightDesc"],min=10, max=90},
|
|
ttModifierKey1 = {type="select",order=4,name=L["TTShowMod"],desc=L["TTShowModDesc"],values=ttModifierValues,width="double"},
|
|
ttModifierKey2 = {type="select",order=5,name=L["TTMouse"],desc=L["TTMouseDesc"],values=ttModifierValues,width="double"},
|
|
}
|
|
},
|
|
icons = {
|
|
type = "group", order = 4, inline = true,
|
|
name = C("ff00aaff",L["Icons"]),
|
|
args = {
|
|
iconcolor = {type="color", order=1,name=L["IconColor"],desc=L["IconColorDesc"]},
|
|
iconset = {type="select",order=2,name=L["IconSets"],desc=L["IconSetsDesc"],values=getIconSets(),width="double"},
|
|
iconsetinfo = {
|
|
type = "description", order = 3, fontSize = "medium",
|
|
name = C("dkyellow",L["IconSetsInfo"])
|
|
},
|
|
iconsetlink = {
|
|
type = "input", order = 4, width = "full",
|
|
name = "",
|
|
get = function() return "http://www.wowinterface.com/downloads/info22790.html"; end,
|
|
set = function() end
|
|
}
|
|
}
|
|
},
|
|
}
|
|
},
|
|
modEnable = {
|
|
type = "group", order = 2,
|
|
name = L["ModsToggle"],
|
|
desc = L["ModsToggleDesc"],
|
|
childGroups = "tab",
|
|
args = {
|
|
info = {
|
|
type = "group", order = 0, inline = true,
|
|
name = "",
|
|
args = {
|
|
desc = { type="description", order=0, fontSize="medium", width="double", name=C("orange",L["ModsToggleInfo"]) },
|
|
reload = { type="execute", order=1, name=L["ReloadUI"], func=C_UI.Reload },
|
|
|
|
enable = { type="execute", order=2, name=ENABLE_ALL_ADDONS, func=toggleAllModules },
|
|
disable = { type="execute", order=3, name=DISABLE_ALL_ADDONS, func=toggleAllModules },
|
|
default = { type="execute", order=4, name=DEFAULT, func=toggleAllModules }
|
|
}
|
|
},
|
|
}
|
|
},
|
|
modOptions = { -- dummy group
|
|
type = "group", order = 3,
|
|
name = L["Modules"],
|
|
desc = L["ModulesDesc"],
|
|
childGroups="tree",
|
|
args = {},
|
|
},
|
|
chars = {
|
|
type = "group", order = 4, --fontSize="normal",
|
|
name = L["OptCharData"],
|
|
desc = L["OptCharDataDesc"],
|
|
childGroups="tab",
|
|
args = {
|
|
infoheader = { type = "description", order=1, name=C("dkyellow",L["OptCharInfoHeader"]), fontSize="medium" },
|
|
info1_2 = {
|
|
type = "description", order= 2,
|
|
name = C("ltgreen",L["OptCharInfo1"]) .. "\n" .. L["OptCharInfo1Desc"].. "\n\n" ..
|
|
C("ltgreen",L["OptCharInfo2"]) .. "\n" .. L["OptCharInfo2Desc"] .."\n "
|
|
},
|
|
info3 = { type="description", order=6, name=C("ltgreen",L["OptCharInfo3"]), width="normal"},
|
|
delete = {
|
|
type = "execute", order=7, width="double",
|
|
name = L["OptCharDelAll"], desc = L["OptCharDelAllDesc"]
|
|
},
|
|
list = {
|
|
type = "group", order=8,
|
|
name = L["OptCharList"],
|
|
childGroups="tab",
|
|
args = {
|
|
}
|
|
}
|
|
}
|
|
},
|
|
-- profiles = {}, -- created by AceDBOptions
|
|
}
|
|
}
|
|
|
|
ns.sharedOptions = {
|
|
shortNumbers = { type="toggle", name=L["ShortNum"], desc=L["ShortNumDesc"]},
|
|
showAllFactions = { type="toggle", name=L["AllFactions"], desc=L["AllFactionsDesc"]},
|
|
showRealmNames = { type="toggle", name=L["RealmNames"], desc=L["RealmNamesDesc"]},
|
|
showChars = { type="toggle", name=L["ShowChars"], desc=L["ShowCharsDesc"], customDescFormat="ShowCharsDesc-%s" }, -- TODO: translation ShowCharsDesc
|
|
showCharsFrom = { type="select", name=L["CharsFrom"], desc=L["CharsFromDesc"], values=ns.showCharsFrom_Values },
|
|
goldHideBB = { type="select", name=L["HideMoney"], desc=L["HideMoneyDescBrokerButton"], width = "double", values = goldHideValues },
|
|
goldHideTT = { type="select", name=L["HideMoney"], desc=L["HideMoneyDescTooltip"], width = "double", values = goldHideValues },
|
|
}
|
|
|
|
local sharedDefaults = {
|
|
shortNumbers = true,
|
|
showChars = true,
|
|
showAllFactions = true,
|
|
showRealmNames = true,
|
|
showCharsFrom = "2",
|
|
minimap = {hide=false}
|
|
}
|
|
|
|
local coords=nil;
|
|
local function Icon(info)
|
|
local key=info[#info];
|
|
if key=="modOptions" then return end
|
|
local icon = I[key..(ns.modules[key].icon_suffix or "")];
|
|
coords = icon.coords or {.1,.9,.1,.9};
|
|
return icon.iconfile;
|
|
end
|
|
|
|
function ns.getModOptionTable(modName)
|
|
if modName and options.args.modOptions.args[modName] then
|
|
return options.args.modOptions.args[modName].args;
|
|
end
|
|
return {};
|
|
end
|
|
|
|
local function IconCoords(info)
|
|
if info[#info]=="modOptions" then return end
|
|
return coords;
|
|
end
|
|
|
|
local function optionWalker(modName,group,lst)
|
|
for k, v in pairs(lst)do
|
|
local tV,customModDesc = type(v);
|
|
if tV=="table" and #v>0 then
|
|
-- short table {<order[number|bool]>, <customModDesc>}
|
|
customModDesc,v,tV = v[2],v[1],type(v[1]);
|
|
end
|
|
if tV=="number" or tV=="boolean" then
|
|
if ns.sharedOptions[k] then
|
|
local shared = CopyTable(ns.sharedOptions[k]);
|
|
if tV=="number" then
|
|
shared.order = v;
|
|
end
|
|
if customModDesc then
|
|
local LStr = "";
|
|
if customModDesc==true then
|
|
customModDesc = modName;
|
|
end
|
|
if shared.customDescFormat then
|
|
LStr = L[shared.customDescFormat:format(customModDesc)];
|
|
shared.customDescFormat = nil;
|
|
else
|
|
LStr = L[customModDesc];
|
|
end
|
|
if LStr~="" then
|
|
shared.desc = LStr;
|
|
end
|
|
end
|
|
lst[k] = shared;
|
|
dbDefaults.profile[modName][k] = sharedDefaults[k];
|
|
else
|
|
lst[k]=nil;
|
|
end
|
|
elseif tV=="table" then
|
|
if v.type=="separator" then
|
|
v.type = "description";
|
|
v.name = " ";
|
|
end
|
|
if v.type=="slider" or v.type=="desc" then
|
|
lst[k]=nil;
|
|
end
|
|
if (v.default or v.inMenuInvisible or v.text or v.isSubMenu or v.alpha or v.tooltip or v.label or v.format or v.rep or v.minText or v.maxText)~=nil then
|
|
lst[k]=nil;
|
|
end
|
|
end
|
|
end
|
|
if group=="broker" then
|
|
lst.minimap = {
|
|
type = "toggle", order = 0,
|
|
name = L["OptMinimap"], desc=L["OptMinimapDesc"]
|
|
}
|
|
end
|
|
end
|
|
|
|
local function ModName(info)
|
|
local key=info[#info];
|
|
if not ns.profile[key].enabled then
|
|
return C("gray",L[key]);
|
|
end
|
|
return L[key];
|
|
end
|
|
|
|
local function ModDesc(info)
|
|
local key=info[#info];
|
|
if not ns.profile[key].enabled then
|
|
return C("red","("..ADDON_DISABLED..")").."\n"..C("gray",L["ModDesc-"..key]);
|
|
end
|
|
return L["ModDesc-"..key];
|
|
end
|
|
|
|
function ns.Options_RegisterDefaults() -- re-registration for dbDefaults after 'db = LibStub("AceDB-3.0"):New("Broker_Everything_AceDB",dbDefaults,true);'
|
|
db:RegisterDefaults(dbDefaults);
|
|
end
|
|
|
|
function ns.Options_RegisterModule(modName)
|
|
local mod,modOptions = ns.modules[modName],{};
|
|
|
|
-- defaults
|
|
if nsProfileMT then -- namespace profile metatable for debugging; not present in normal release versions. ;-)
|
|
ns.profile[modName] = setmetatable({section=modName},nsProfileMT);
|
|
end
|
|
|
|
-- normal defaults
|
|
dbDefaults.profile[modName] = mod.config_defaults or {enabled=false};
|
|
|
|
if not mod.isHiddenModule then
|
|
if dbDefaults.profile[modName].minimap==nil then
|
|
dbDefaults.profile[modName].minimap = {hide=false};
|
|
end
|
|
|
|
-- add toggle to ModToggleTab
|
|
options.args.modEnable.args[modName] = {type="toggle",name=L[modName],desc=L["ModDesc-"..modName]};
|
|
|
|
-- add shared option defaults
|
|
if type(mod.options)=="function" then
|
|
modOptions = mod.options();
|
|
for _,group in pairs(modOptions)do
|
|
for key,value in pairs(group)do
|
|
if sharedDefaults[key]~=nil and dbDefaults.profile[modName][key]==nil then
|
|
dbDefaults.profile[modName][key] = sharedDefaults[key];
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- add own tree entry per module
|
|
options.args.modOptions.args[modName] = {
|
|
type = "group",
|
|
name = ModName, desc = ModDesc,
|
|
icon = Icon, iconCoords = IconCoords, -- currently ace ignore IconCoords
|
|
args = {
|
|
}
|
|
}
|
|
|
|
if mod.clickOptions then
|
|
ns.ClickOpts.createOptions(modName,modOptions);
|
|
end
|
|
|
|
local hasBrokerOpts = false;
|
|
for k in pairs(modOptions)do
|
|
if k:find("^broker") then
|
|
hasBrokerOpts = true;
|
|
break;
|
|
end
|
|
end
|
|
if not hasBrokerOpts then
|
|
modOptions.broker = {};
|
|
end
|
|
for k, v in pairs(modOptions)do
|
|
local name, order = v.name, v.order;
|
|
v.name,v.order = nil,nil;
|
|
if k:find("^broker") then
|
|
name = name or L["Broker"];
|
|
order = order or 1;
|
|
elseif k:find("^tooltip") then
|
|
name = name or L["Tooltip"];
|
|
order = order or 2;
|
|
elseif k:find("^misc") then
|
|
name = name or AUCTION_SUBCATEGORY_OTHER;
|
|
order = order or 98;
|
|
elseif k:find("^ClickOpts") then
|
|
name = name or L["ClickOptions"];
|
|
order = 99;
|
|
end
|
|
optionWalker(modName,k,v);
|
|
options.args.modOptions.args[modName].args[k] = {
|
|
type="group", name=C("ff00aaff",name), order=order, inline=true, args=v
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
local function buildCharDataOptions()
|
|
wipe(options.args.chars.args.list.args);
|
|
local lst = options.args.chars.args.list.args;
|
|
-- Broker_Everything_CharacterDB
|
|
-- Broker_Everything_CharacterDB.order
|
|
for order,name_realm in ipairs(Broker_Everything_CharacterDB.order)do
|
|
if Broker_Everything_CharacterDB[name_realm] then
|
|
local charName, realm = strsplit("%-",name_realm,2);
|
|
local label,hasError = "",false
|
|
if Broker_Everything_CharacterDB[name_realm].class and charName and realm then
|
|
label = C(Broker_Everything_CharacterDB[name_realm].class or "ffff0000",charName or "error").."\n"..C("gray",realm or "error");
|
|
else
|
|
label = C("ffff0000",charName) .. "\n" .. C("gray",realm);
|
|
hasError = true;
|
|
end
|
|
lst[name_realm] = {
|
|
type = "group", order = order, inline=true,
|
|
name = "",
|
|
args = {
|
|
label = {
|
|
type = "description", order=1, width="normal", fontSize = "medium",
|
|
name = label,
|
|
},
|
|
[name_realm] = {
|
|
type = "description", order = 2, width = "half",
|
|
name = calcDataSize,
|
|
},
|
|
up = {type="execute", order=3, width="half", name=L["Up"], desc=label, disabled=(order==1) },
|
|
down = {type="execute", order=4, width="half", name=L["Down"], desc=label, disabled=(order==#Broker_Everything_CharacterDB.order) },
|
|
del = {type="execute", order=5, width="half", name=DELETE, desc=label, disabled=(name_realm==ns.player.name_realm) },
|
|
error = {type = "description", order=6, fontSize = "medium", name = C("red",L["CharDataError"].." "..name_realm).."\n"..L["CharDataErrorTODO"], hidden=not hasError },
|
|
}
|
|
}
|
|
end
|
|
end
|
|
end
|
|
|
|
function options.args.chars.func(info) -- function for buttons 'Up', 'Down' and 'Delete' for single character and 'Delete all'
|
|
local key,char = info[#info],info[#info-1];
|
|
if key=="up" or key=="down" then
|
|
local cur
|
|
for i,v in ipairs(Broker_Everything_CharacterDB.order)do
|
|
if char==v then
|
|
cur = i;
|
|
break;
|
|
end
|
|
end
|
|
if key=="up" then
|
|
Broker_Everything_CharacterDB.order[cur],Broker_Everything_CharacterDB.order[cur-1] = Broker_Everything_CharacterDB.order[cur-1],Broker_Everything_CharacterDB.order[cur];
|
|
else -- down
|
|
Broker_Everything_CharacterDB.order[cur],Broker_Everything_CharacterDB.order[cur+1] = Broker_Everything_CharacterDB.order[cur+1],Broker_Everything_CharacterDB.order[cur];
|
|
end
|
|
buildCharDataOptions();
|
|
elseif key=="del" then -- delete single character
|
|
Broker_Everything_CharacterDB[char] = nil;
|
|
for i,v in ipairs(Broker_Everything_CharacterDB.order)do
|
|
if char==v then
|
|
tremove(Broker_Everything_CharacterDB.order,i);
|
|
break;
|
|
end
|
|
end
|
|
buildCharDataOptions();
|
|
elseif key=="delete" then -- delete all
|
|
Broker_Everything_CharacterDB = {};
|
|
C_UI.Reload();
|
|
end
|
|
end
|
|
|
|
function ns.RegisterOptions()
|
|
if Broker_Everything_AceDB==nil then
|
|
Broker_Everything_AceDB = {};
|
|
end
|
|
|
|
buildCharDataOptions();
|
|
|
|
db = LibStub("AceDB-3.0"):New("Broker_Everything_AceDB",dbDefaults,true);
|
|
if not nsProfileMT then
|
|
ns.profile = db.profile;
|
|
end
|
|
|
|
options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(db);
|
|
options.args.profiles.order=-1;
|
|
|
|
LibStub("AceConfig-3.0"):RegisterOptionsTable(addonLabel, options);
|
|
local opts = LibStub("AceConfigDialog-3.0"):AddToBlizOptions(addonLabel);
|
|
LibStub("HizurosSharedTools").BlizzOptions_ExpandOnShow(opts);
|
|
LibStub("HizurosSharedTools").AddCredit(addon);
|
|
|
|
local goldColor = ns.profile.GeneralOptions.goldColor;
|
|
if type(goldColor)~="string" then
|
|
ns.profile.GeneralOptions.goldColor = goldColor and "color" or "white";
|
|
end
|
|
end
|
|
|
|
function ns.ToggleBlizzOptionPanel()
|
|
InterfaceOptionsFrame_OpenToCategory(addon);
|
|
InterfaceOptionsFrame_OpenToCategory(addon);
|
|
end
|
|
|
|
if AddonCompartmentFrame then
|
|
AddonCompartmentFrame:RegisterAddon({
|
|
icon = 892831,
|
|
text = addon,
|
|
notCheckable = true,
|
|
func = ns.ToggleBlizzOptionPanel
|
|
})
|
|
end
|
|
|
|
|