vanilla-wow-addons – Rev 1
?pathlinks?
--[[ MovableBags.lua
Author: Pos
Version 1.1a
24/12/2004 - Initial Release
24/12/2004 - Updated to include bank bags
25/12/2004 - bug fixes and streamlined code
01/01/2005 - fix for dead areas on screen
02/01/2005 - Better Default Positions
13/01/2005 - Fixed up by CTMod developers
]]
MOVABLEBAGS_NUMBAGS = 11;
MOVABLEBAGS_LOWID = 0;
MOVABLEBAGS_HIGHID = 10;
MovableBags_Config = { };
-- 0-4 are the normal bags, 5-10 are bank bags
MovableBags_DefaultPositions = {
[-2] = { "BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -250, 650 },
[0] = { "BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -50, 300 },
[1] = { "BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -250, 300 },
[2] = { "BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -450, 300 },
[3] = { "BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -50, 500 },
[4] = { "BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -250, 500 },
[5] = { "TOPLEFT", "UIParent", "TOPLEFT", 50, -650 },
[6] = { "TOPLEFT", "UIParent", "TOPLEFT", 250, -650 },
[7] = { "TOPLEFT", "UIParent", "TOPLEFT", 450, -650 },
[8] = { "TOPLEFT", "UIParent", "TOPLEFT", 650, -650 },
[9] = { "TOPLEFT", "UIParent", "TOPLEFT", 400, -50 },
[10] = { "TOPLEFT", "UIParent", "TOPLEFT", 400, -300 },
};
function MovableBags_updateContainerFrameAnchors()
movablebags_oldupdateContainerFrameAnchors();
for i=1, NUM_CONTAINER_FRAMES, 1 do
local containerFrame = getglobal("ContainerFrame"..i);
local id = containerFrame:GetID();
if ( MovableBags_DefaultPositions[id] ) then
containerFrame:ClearAllPoints();
containerFrame:SetPoint("TOPRIGHT","Bag"..id.."Mover","TOPRIGHT",34,0);
end
end
end
--called to update the visibility of the movers, depending on locked status and visibility of the bags
function MovableBags_UpdateVisible()
local i = 0;
MovableBags_HideAll();
if(MovableBags_Config.Mode == "Locked") then
--no checking if bags are visible to show movers
return;
end
for i=1, NUM_CONTAINER_FRAMES, 1 do
local containerFrame = getglobal("ContainerFrame"..i);
local id = containerFrame:GetID();
if ( MovableBags_DefaultPositions[id] ) then
local mover = getglobal("Bag"..id.."Mover");
if (containerFrame:IsVisible() ) then
mover:Show();
end
end
end
end
function MovableBags_HideAll()
for k, v in MovableBags_DefaultPositions do
local mover = getglobal("Bag"..k.."Mover");
mover:Hide();
end
end
--hooks into the containerframes on show/hide, to show/hide the movers
function MovableBags_ContainerFrame_OnHide()
movablebags_oldContainerFrame_OnHide();
if ( this:GetID() < MOVABLEBAGS_NUMBAGS ) then
local mover = getglobal("Bag"..this:GetID().."Mover");
if ( not mover and this:GetID() == KEYRING_CONTAINER ) then
MovableBags_UpdateVisible();
return;
end
mover:Hide();
end
end
function MovableBags_ContainerFrame_OnShow()
movablebags_oldContainerFrame_OnShow();
if ( this:GetID() < MOVABLEBAGS_NUMBAGS and MovableBags_Config.Mode == "Movable") then
local mover = getglobal("Bag"..this:GetID().."Mover");
if ( not mover and this:GetID() == KEYRING_CONTAINER ) then
local shownContainerID = IsBagOpen(KEYRING_CONTAINER);
mover = getglobal("Bag"..shownContainerID.."Mover");
end
mover:Show();
end
end
function MovableBags_OnLoad()
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("UNIT_NAME_UPDATE");
end
function MovableBags_OnEvent()
if (event == "VARIABLES_LOADED") then
SlashCmdList["MOVABLEBAGS"] = MovableBags_SlashHandler;
SLASH_MOVABLEBAGS1 = "/movablebags";
SLASH_MOVABLEBAGS2 = "/bags";
MovableBags_UpdateVisible();
--function hooks
--hooking in VARIABLES_LOADED so if something else hooks the functions, hopefully they do it before me, so they dont interfere
movablebags_oldupdateContainerFrameAnchors = updateContainerFrameAnchors;
updateContainerFrameAnchors = MovableBags_updateContainerFrameAnchors;
movablebags_oldContainerFrame_OnShow = ContainerFrame_OnShow;
ContainerFrame_OnShow = MovableBags_ContainerFrame_OnShow;
movablebags_oldContainerFrame_OnHide = ContainerFrame_OnHide;
ContainerFrame_OnHide = MovableBags_ContainerFrame_OnHide;
return;
end
end
function MovableBags_SlashHandler(arg)
arg = string.lower(arg);
if (arg == "lock") then
MovableBags_Config.Mode = "Locked";
MovableBags_UpdateVisible();
DEFAULT_CHAT_FRAME:AddMessage("Bags are now LOCKED");
elseif (arg == "unlock") then
MovableBags_Config.Mode = "Movable";
MovableBags_UpdateVisible();
DEFAULT_CHAT_FRAME:AddMessage("Bags are now UNLOCKED");
elseif (arg == "reset") then
for i=0,10,1 do
local mover = getglobal("Bag"..i.."Mover");
local pos = MovableBags_DefaultPositions[i];
mover:ClearAllPoints();
mover:SetPoint(pos[1],pos[2],pos[3],pos[4],pos[5]);
end
else
DEFAULT_CHAT_FRAME:AddMessage("Usage: /movablebags unlock | lock | reset");
DEFAULT_CHAT_FRAME:AddMessage("unlock lets you move the bags around independantly of each other (default)");
DEFAULT_CHAT_FRAME:AddMessage("lock locks the bags into the position you last moved them to");
DEFAULT_CHAT_FRAME:AddMessage("Reset will return all bags to the default positions");
DEFAULT_CHAT_FRAME:AddMessage("Bags are currently "..MovableBags_Config.Mode);
end
end
function MovableBags_Function(modId)
local val = CT_Mods[modId]["modStatus"];
if ( val == "on" ) then
CT_Print("<CTMod> Bags are now movable.", 1.0, 1.0, 0);
for i=0,10,1 do
getglobal("Bag"..i.."Mover"):Show();
end
MovableBags_Config.Mode = "Movable";
MovableBags_UpdateVisible();
else
CT_Print("<CTMod> Bags are now locked to their positions.", 1.0, 1.0, 0);
for i=0,10,1 do
getglobal("Bag"..i.."Mover"):Hide();
end
MovableBags_Config.Mode = "Locked";
end
end
function MovableBags_InitFunction(modId)
local val = CT_Mods[modId]["modStatus"];
if ( val == "on" ) then
for i=0,10,1 do
getglobal("Bag"..i.."Mover"):Show();
end
MovableBags_Config.Mode = "Movable";
MovableBags_UpdateVisible();
else
for i=0,10,1 do
getglobal("Bag"..i.."Mover"):Hide();
end
MovableBags_Config.Mode = "Locked";
end
end
function MovableBags_ResetPositions()
CT_Print("<CTMod> Bag positions have been reset.", 1, 1, 0);
for i=0,10,1 do
local mover = getglobal("Bag"..i.."Mover");
local pos = MovableBags_DefaultPositions[i];
mover:ClearAllPoints();
mover:SetPoint(pos[1],pos[2],pos[3],pos[4],pos[5]);
end
end
if ( CT_RegisterMod ) then
CT_RegisterMod("Movable Bags", "Unlocks bags", 5, "Interface\\Icons\\INV_Misc_Bag_10", "Allows you to move your bags wherever you want them.\nMove by holding and dragging the bag nameplate.", "off", nil, MovableBags_Function, MovableBags_InitFunction);
CT_RegisterMod("Reset Bags", "Resets bags", 5, "Interface\\Icons\\INV_Misc_Bag_10_Green", "Resets the bag position to the default positions.", "switch", nil, MovableBags_ResetPositions);
end
Generated by GNU Enscript 1.6.5.90.