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.

211 lines
6.5 KiB

-- module independent variables --
----------------------------------
local addon, ns = ...
local C, L, I = ns.LC.color, ns.L, ns.I
if ns.client_version<2 then return end
-- module own local variables and local cached functions --
-----------------------------------------------------------
local name,tt,module = "Tracking" -- TRACKING L["ModDesc-Tracking"]
-- register icon names and default files --
-------------------------------------------
I[name] = {iconfile="Interface\\minimap\\tracking\\none"}; --IconName::Tracking--
-- some local functions --
--------------------------
local function updateTracking()
local tActive = 0
local n = {}
for i = 1, (C_Minimap and C_Minimap.GetNumTrackingTypes or GetNumTrackingTypes)() do
local name, tex, active, category = (C_Minimap and C_Minimap.GetTrackingInfo or GetTrackingInfo)(i)
if (active) then
tActive = tActive + 1
n[tActive] = {["Name"] = name, ["Texture"] = tex}
end
end
return tActive, n
end
local function updateBroker()
-- broker button text
local numActive, trackActive = updateTracking()
local n = TRACKING;
local dataobj = ns.LDB:GetDataObjectByName(module.ldbName)
if ns.profile[name].displaySelection then
if numActive == 0 then
n = "None";
else
for i = 1, numActive, 1 do
n = trackActive[i]["Name"];
end
end
end
dataobj.text = n;
end
-- module variables for registration --
---------------------------------------
module = {
events = {
"MINIMAP_UPDATE_TRACKING",
"PLAYER_LOGIN"
},
config_defaults = {
enabled = false,
displaySelection = true,
hideMinimapButton = false
}
}
function module.options()
return {
broker = {
displaySelection={ type="toggle", name=L["Display selection"], desc=L["Display one of the selected tracking options in broker text."] },
},
tooltip = nil,
misc = {
hideMinimapButton={ type="toggle", order=1, name=L["Hide minimap button"], desc=L["Hide blizzard's tracking button on minimap"], width="full", disabled=ns.coexist.IsNotAlone },
hideMinimapButtonInfo={ type="description", order=2, name=ns.coexist.optionInfo, fontSize="medium", hidden=ns.coexist.IsNotAlone }
}
}
end
function module.init()
if (not ns.coexist.IsNotAlone()) and ns.profile[name].hideMinimapButton then
ns.hideFrames("MiniMapTracking",true);
ns.hideFrames("MiniMapTrackingButton",true);
end
end
function module.onevent(self,event,msg)
if event=="BE_UPDATE_CFG" then
if not ns.coexist.IsNotAlone() then
ns.hideFrames("MiniMapTracking",ns.profile[name].hideMinimapButton);
ns.hideFrames("MiniMapTrackingButton",ns.profile[name].hideMinimapButton);
end
elseif event=="MINIMAP_UPDATE_TRACKING" and _G.LibDropDownMenu_List1:IsShown() then
ns.EasyMenu:Refresh();
end
updateBroker();
end
-- function module.optionspanel(panel) end
-- function module.onmousewheel(self,direction) end
function module.ontooltip(tooltip)
tt=tooltip;
if (ns.tooltipChkOnShowModifier(false)) then tt:Hide(); return; end
local numActive, trackActive = updateTracking()
tt:AddLine(TRACKING)
tt:AddLine(" ")
if numActive == 0 then
tt:AddLine(C("white",L["No tracking option active."]))
else
for i = 1, numActive do
tt:AddDoubleLine("|T"..trackActive[i]["Texture"]..":16:16:0:0:64:64:4:60:4:60|t "..C("white",trackActive[i]["Name"]))
end
end
if ns.profile.GeneralOptions.showHints then
tt:AddLine(" ")
tt:AddLine(C("copper",L["MouseBtn"]).." || "..C("green",L["Open tracking menu"]))
end
end
-- function module.onenter(self) end
-- function module.onleave(self) end
local trackingMenuOnClick
local trackingIsActive = MiniMapTrackingDropDownButton_IsActive
do
local SetTracking = C_Minimap and C_Minimap.SetTracking or SetTracking;
local GetTrackingInfo = C_Minimap and C_Minimap.GetTrackingInfo or GetTrackingInfo;
function trackingMenuOnClick(button)
SetTracking(button.arg1,not select(3,GetTrackingInfo(button.arg1)));
end
if not trackingIsActive then
trackingIsActive = trackingIsActive or function(button)
local name, texture, active, category = GetTrackingInfo(button.arg1);
return active;
end
end
end
function module.onclick(self,button)
if tt then tt:Hide(); end
local Name, texture, active, category, nested, Type = 1,2,3,4,5,6;
local list,count = {},(C_Minimap and C_Minimap.GetNumTrackingTypes or GetNumTrackingTypes)();
local _, class = UnitClass("player");
ns.EasyMenu:InitializeMenu();
ns.EasyMenu:AddEntry({label=L["Tracking options"], title=true});
ns.EasyMenu:AddEntry({label=MINIMAP_TRACKING_NONE, checked=MiniMapTrackingDropDown_IsNoTrackingActive, func=function() (C_Minimap and C_Minimap.ClearAllTracking or ClearAllTracking)(); end });
ns.EasyMenu:AddEntry({separator=true});
local numTracking,hunterHeader,townHeader = 0,false;
for id=1, count do
local tmp={(C_Minimap and C_Minimap.GetTrackingInfo or GetTrackingInfo)(id)};
local Name, texture, active, category, nested = unpack(tmp);
if nested~=HUNTER_TRACKING and nested~=TOWNSFOLK then
local entry={label=Name, icon=texture, arg1=id, checked=trackingIsActive, func=trackingMenuOnClick};
if category=="spell" then
entry.tCoordLeft = 0.0625;
entry.tCoordRight = 0.9;
entry.tCoordTop = 0.0625;
entry.tCoordBottom = 0.9;
end
ns.EasyMenu:AddEntry(entry);
end
tinsert(list,tmp);
end
for id=1, #list do
local Name, texture, active, category, nested = unpack(list[id]);
local entry;
if nested == HUNTER_TRACKING and class == "HUNTER" then
if not hunterHeader then
ns.EasyMenu:AddEntry({separator=true});
ns.EasyMenu:AddEntry({label=HUNTER_TRACKING_TEXT, title=true});
hunterHeader=true;
end
entry = {label=Name, icon=texture, arg1=id, checked=trackingIsActive, func=trackingMenuOnClick};
elseif nested == TOWNSFOLK then
if not townHeader then
ns.EasyMenu:AddEntry({separator=true});
ns.EasyMenu:AddEntry({label=TOWNSFOLK_TRACKING_TEXT, title=true});
townHeader=true
end
entry = {label=Name, icon=texture, arg1=id, checked=trackingIsActive, func=trackingMenuOnClick};
end
if entry then
if category=="spell" then
entry.tCoordLeft = 0.0625;
entry.tCoordRight = 0.9;
entry.tCoordTop = 0.0625;
entry.tCoordBottom = 0.9;
end
ns.EasyMenu:AddEntry(entry);
end
end
ns.EasyMenu:ShowMenu(self,-20);
end
-- function module.ondblclick(self,button) end
-- final module registration --
-------------------------------
ns.modules[name] = module;