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.
210 lines
6.5 KiB
210 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;
|
|
|