vanilla-wow-addons – Rev 1
?pathlinks?
--[[
MoveAnything! vJ.11000.2
Based on MA! 1.12 by Skrag
Read the ReadMe
]]
local function Error( msg )
Print( msg, 1.0, 0.2, 0.2 );
end
function Print(msg, r, g, b, frame)
if (not r) then r = 1.0; end
if (not g) then g = 1.0; end
if (not b) then b = 1.0; end
if ( frame ) then
frame:AddMessage(msg,r,g,b);
else
if ( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage(msg, r, g, b);
end
end
end
function table.find( table, value )
for i, v in table do
if( v == value ) then
return i;
end
end
return nil;
end
------------------------------------------------
BINDING_HEADER_MOVEANYTHING = "MoveAnything!";
MA_LEFTARROW = "<";
MA_RIGHTARROW = ">";
CurrentMover = 1;
StaticPopupDialogs["MOVEANYTHING_RESET_CONFIRM"] = {
text = "Reset all MoveAnything Data?",
button1 = TEXT(YES),
button2 = TEXT(NO),
OnAccept = function()
MoveAnythingOptions_ResetAll();
end,
timeout = 0,
exclusive = 1,
showAlert = 1
};
MOVEANYTHING_MOVEATONETIME = 20;
MOVEANYTHING_SCROLL_HEIGHT = 25;
function MoveAnything_ToggleVisibilityOnFrame(frame)
if ( not frame ) then return; end
local opt = MoveAnything_FindFrameOptions(frame:GetName(),"ShowFrame");
if( opt and opt.hidden == true ) then
MoveAnything_ShowFrame(frame)
else
MoveAnything_HideFrame(frame)
end
end
function TestPos( frame, x, y )
frame:ClearAllPoints();
if( frame.HiddenSetPoint ) then
frame:HiddenSetPoint( "BOTTOMLEFT", frame:GetParent():GetName(), "BOTTOMLEFT", x, y );
else
frame:SetPoint( "BOTTOMLEFT", frame:GetParent():GetName(), "BOTTOMLEFT", x, y );
end
end
function TestInfo()
Print( "PlayerFrame "..PlayerFrame:GetLeft()..", "..PlayerFrame:GetBottom().." ("..PlayerFrame:GetScale()..")" );
Print( "PetFrame "..PetFrame:GetLeft()..", "..PetFrame:GetBottom().." ("..PetFrame:GetScale()..")" );
end
function ListFrameOptions()
local count = 0;
for i, v in MoveAnything_FrameOptions do
count = count + 1;
end
Print( count.." frame options" );
for i, v in MoveAnything_FrameOptions do
Print( "FrameOptions: "..v.name );
end
end
function ListCustomFrames()
Print( table.getn( MoveAnything_CustomFrames ).." custom frames" );
for i, v in MoveAnything_CustomFrames do
Print( v.name );
end
end
function MADebOpt( frameName )
for i, v in MoveAnything_FrameOptions[ frameName ] do
Print( frameName.."."..i.." = "..tostring(v) );
end
end
function MADeb()
ListCustomFrames();
ListFrameOptions();
end
function MALocate()
if( not MALocator:IsVisible() ) then
MALocator:Show();
end
end
function MoveAnythingUpdater_OnUpdate(arg1)
if MoveAnythingUpdater:GetScale() == UIParent:GetScale() then
MoveAnythingUpdater:SetScale(0.2)
MoveAnything_RefreshPositions()
end
end
MoveAnything_Frames = {};
MoveAnything_CustomFrames = {};
MoveAnything_CharacterSettings = {};
MoveAnything_UseCharacterSettings = false;
MoveAnything_InitRun = false;
MoveAnything_FrameOptions = nil;
MoveAnything_NoScale = { TooltipMover = true, FramerateMover = true };
MoveAnything_ScaleWH = { MainMenuExpBar = true };
MoveAnything_DetachFromParent = { MainMenuBarPerformanceBarFrame = true };
MoveAnything_NoHide = { MAOptions = true };
MoveAnything_HideList = {};
MoveAnything_HideList["MainMenuBar"] = {
{ "MainMenuBarArtFrame", "BACKGROUND","ARTWORK"},
{ "PetActionBarFrame", "OVERLAY"},
{ "ShapeshiftBarFrame", "OVERLAY"},
{ "MainMenuBar", "DISABLEMOUSE"},
{ "BonusActionBarFrame", "OVERLAY", "DISABLEMOUSE"},
};
MoveAnything_HideList["MainMenuExpBar"] = {
{ "MainMenuExpBar", "WH", "BORDER", "OVERLAY"},
{ "ExhaustionTick", "FRAME"},
{ "MainMenuExpBar", function( show )
if( show ) then
MoveAnything_AllowExternalVisibility( MainMenuExpBar.TextString );
else
MoveAnything_PreventExternalVisibility( MainMenuExpBar.TextString );
end
end},
};
MoveAnything_HideUsingWH = { MainMenuExpBar = true };
MoveAnything_MoveOnlyWhenVisible = {};
MoveAnything_MoveOnlyWhenVisible["GroupLootFrame1"] = true;
MoveAnything_MoveOnlyWhenVisible["GroupLootFrame2"] = true;
MoveAnything_MoveOnlyWhenVisible["GroupLootFrame3"] = true;
MoveAnything_MoveOnlyWhenVisible["GroupLootFrame4"] = true;
MoveAnything_DefaultFrameList = {
{ "MAOptions", "MoveAnything! Options Window" },
{ "Separator", "**** Standard Party Frames ****" },
{ "PlayerFrame", "Player" },
{ "TargetFrame", "Target" },
{ "PartyMemberFrame1", "Party Member 1" },
{ "PartyMemberFrame2", "Party Member 2" },
{ "PartyMemberFrame3", "Party Member 3" },
{ "PartyMemberFrame4", "Party Member 4" },
{ "Separator", "**** Pets ****" },
{ "PetFrame", "Pet" },
{ "PartyMemberFrame1PetFrame", "Party Pet 1" },
{ "PartyMemberFrame2PetFrame", "Party Pet 2" },
{ "PartyMemberFrame3PetFrame", "Party Pet 3" },
{ "PartyMemberFrame4PetFrame", "Party Pet 4" },
{ "Separator", "**** Bags ****" },
{ "BagFrame1", "Bag 1 (Backpack)" },
{ "BagFrame2", "Bag 2" },
{ "BagFrame3", "Bag 3" },
{ "BagFrame4", "Bag 4" },
{ "BagFrame5", "Bag 5" },
{ "Separator", "**** Bank ****" },
{ "BankFrame", "Bank Teller Window" },
{ "BankBagFrame1", "Bank Bag 1" },
{ "BankBagFrame2", "Bank Bag 2" },
{ "BankBagFrame3", "Bank Bag 3" },
{ "BankBagFrame4", "Bank Bag 4" },
{ "BankBagFrame5", "Bank Bag 5" },
{ "BankBagFrame6", "Bank Bag 6" },
{ "Separator", "**** Bottom Bar ****" },
{ "MainMenuBar", "Bottom Bar" },
{ "MainMenuBarArtFrame", "Art Frame" },
{ "MainMenuBarMaxLevelBar", "Max Level Bar" },
{ "MainMenuExpBar", "Experience Bar" },
{ "MainMenuBarPerformanceBarFrame", "Lag Meter" },
{ "Separator", "**** Action Button Bars ****" },
{ "BasicActionButtonsMover", "Action Buttons" },
{ "BasicActionButtonsVerticalMover", "Action Buttons (Vertical)" },
{ "PetActionButtonsMover", "Pet Action Buttons" },
{ "PetActionButtonsVerticalMover", "Pet Action Buttons (Vertical)" },
{ "ShapeshiftButtonsMover", "Stance / Aura / Shapeshift Buttons" },
{ "ShapeshiftButtonsVerticalMover", "Stance / Aura / Shapeshift (Vertical)" },
{ "Separator", "**** Bag and Micro Button Bars ****" },
{ "BagButtonsMover", "Bag Buttons" },
{ "BagButtonsVerticalMover", "Bag Buttons (Vertical)" },
{ "MicroButtonsMover", "Micro Buttons" },
{ "MicroButtonsVerticalMover", "Micro Buttons (Vertical)" },
{ "Separator", "**** Extra Action Bars ****" },
{ "MultiBarBottomLeft", "Bottom Left ActionBar" },
{ "MultiBarBottomRight", "Bottom Right ActionBar" },
{ "MultiBarRight", "Right ActionBar" },
{ "MultiBarLeft", "Right ActionBar 2" },
{ "Separator", "**** Minimap and Minimap Hangers ****" },
{ "MinimapCluster", "MiniMap" },
{ "MinimapZoneTextButton", "MiniMap Zone Text" },
{ "MinimapZoomIn", "MiniMap Zoom In Button" },
{ "MinimapZoomOut", "MiniMap Zoom Out Button" },
{ "MiniMapMailFrame", "MiniMap Mail Notification" },
{ "MiniMapTrackingFrame", "MiniMap Tracking" },
{ "MiniMapMeetingStoneFrame", "MiniMap Meeting Stone" },
{ "MiniMapBattlefieldFrame", "MiniMap Battlefield" },
{ "GameTimeFrame", "MiniMap Day-Night Clock" },
{ "Separator", "**** Battle Grounds Elements ****" },
{ "WorldStateAlwaysUpFrame", "Flags Frame"},
{ "AlwaysUpFrame1", "Alliance Flag"},
{ "AlwaysUpFrame2", "Horde Flag"},
{ "Separator", "**** Dice Roll Frames ****" },
{ "GroupLootFrame1", "Dice Roll Frame 1" },
{ "GroupLootFrame2", "Dice Roll Frame 2" },
{ "GroupLootFrame3", "Dice Roll Frame 3" },
{ "GroupLootFrame4", "Dice Roll Frame 4" },
{ "Separator", "**** Miscellaneous Screen Items ****" },
{ "StaticPopup1", "Static Popup Frame" },
{ "UIErrorsFrame", "UI Errors Frame" },
{ "CastingBarFrame", "Casting Bar" },
{ "BuffFrame", "Buff Window" },
{ "TemporaryEnchantFrame", "Item buff/Debuff Windows" },
{ "TooltipMover", "Tooltip" },
{ "FramerateMover", "Framerate" },
{ "DurabilityFrame", "Durability Damage Portrait" },
{ "QuestWatchFrame", "Quest Tracker" },
{ "QuestTimerFrame", "Quest Timer" },
{ "ComboFrame", "Rogue Combo point counter" },
{ "MirrorTimer1", "Breath/Fatigue Bar" },
{ "Separator", "**** General Info Panel Placement ****" },
{ "UIPanelMover1", "Info Panel 1" },
{ "UIPanelMover2", "Info Panel 2" },
{ "Separator", "**** Specific Info Panels ****" },
{ "CharacterFrame", "Character / Pet / Reputation / Skills" },
{ "TradeSkillFrame", "Trade Skills" },
{ "InspectFrame", "Inspect View" },
{ "SpellBookFrame", "Spell Book" },
{ "LootFrame", "Looting Window" },
{ "TaxiFrame", "Flight Paths" },
{ "QuestLogFrame", "Quest Log" },
{ "MerchantFrame", "Merchant Inventory" },
{ "TradeFrame", "Trade Window" },
{ "FriendsFrame", "Friends / Who / Guild / Raid" },
{ "MacroFrame", "Macros" },
{ "MailFrame", "Mailbox" },
{ "TalentFrame", "Talent Tree" },
{ "PetStableFrame", "Pet Stable" },
{ "AuctionFrame", "Auction House" },
}
function MoveAnything_AddPredefinedFrames( frameList )
for i, val in frameList do
if( val[1] ) then
if( val[1] == "Separator" ) then
MoveAnything_AddSeparator( val[2], true );
else
MoveAnything_AddFrameToMovableList( val[1], val[2], true );
end
end
end
end
function MoveAnything_AddDefaultFrames()
MoveAnything_AddPredefinedFrames( MoveAnything_DefaultFrameList );
MoveAnything_AddPredefinedFrames( MoveAnything_PredefinedCustomFrameList );
end
function MoveAnything_ScaleAllowed( frameName )
if( MoveAnything_NoScale[ frameName ] or MoveAnything_ScaleWH[ frameName ] ) then
return false;
end
return true;
end
function MAGetParent( frame )
if ( not frame or not frame.GetParent ) then return; end
if( frame:GetParent() == nil ) then
return UIParent;
end
return frame:GetParent();
end
function MAGetScale( frame, effective )
if( frame:GetScale() == nil ) then
return 1;
end
if ( effective ) then
return frame:GetEffectiveScale();
else
return frame:GetScale();
end
end
function MoveAnything_RefreshPositions()
if( not MoveAnything_InitRun ) then
return;
end
local frame, parent;
for i, opt in MoveAnything_FrameOptions do
frame = getglobal( opt.name );
if( frame ) then
if( opt.movable or opt.hidden ) then
MoveAnything_HookFrame( opt.name );
end
if( opt.movable ) then
if( MoveAnything_DetachFromParent[ opt.name ] ) then
parent = UIParent;
else
parent = MAGetParent( frame );
end
frame:HiddenClearAllPoints();
frame:HiddenSetPoint( "BOTTOMLEFT", parent:GetName(), "BOTTOMLEFT", opt.x, opt.y );
if( opt.scale ) then
frame:HiddenSetScale( opt.scale );
if( frame.attachedChildren ) then
for i, v in frame.attachedChildren do
v:HiddenSetScale( opt.scale );
end
end
end
end
if( opt.hidden ) then
MoveAnything_HideFrame( frame );
end
end
end
end
function MoveAnything_CurrentSettingsName()
local settingname = "default";
if( MoveAnything_UseCharacterSettings ) then
settingname = GetCVar( "realmName" ).." "..UnitName( "player" );
end
return settingname;
end
function MoveAnything_CopySettings( fromName, toName )
if( MoveAnything_CharacterSettings[toName] == nil ) then
MoveAnything_CharacterSettings[toName] = {};
end
for i, val in MoveAnything_CharacterSettings[fromName] do
MoveAnything_CharacterSettings[toName][i] = val;
end
MoveAnything_FrameOptions = MoveAnything_CharacterSettings[MoveAnything_CurrentSettingsName()];
MoveAnything_RefreshPositions();
end
function MoveAnything_Init()
if( MoveAnything_InitRun ) then
return;
end
MoveAnything_AddDefaultFrames();
-- update settings from old versions
if( MoveAnything_FrameOptions ~= nil ) then
MoveAnything_CharacterSettings["default"] = MoveAnything_FrameOptions;
MoveAnything_FrameOptions = nil;
end
local settingname = MoveAnything_CurrentSettingsName();
if( MoveAnything_CharacterSettings[settingname] == nil ) then
MoveAnything_CharacterSettings[settingname] = {};
end
MoveAnything_FrameOptions = MoveAnything_CharacterSettings[settingname];
-- now add all the custom frames
for i, v in MoveAnything_CustomFrames do
if( not MoveAnything_FindFrame( v.name ) ) then
-- pass true for isDefault, so it doesn't get re-added to the custom list
MoveAnything_AddFrameToMovableList( v.name, v.helpfulname, true );
end
end
MoveAnything_InitRun = true;
MoveAnything_RefreshPositions();
end
function MoveAnything_GetFrameCount()
return table.getn( MoveAnything_Frames );
end
function MoveAnything_ClearFrameOptions( frameName )
MoveAnything_FrameOptions[frameName] = nil;
MoveAnything_RemoveIfCustom( frameName );
end
function MoveAnything_FindFrameOptions( frameName, why )
if( MoveAnything_FrameOptions == nil ) then
return;
end
return MoveAnything_FrameOptions[frameName];
end
function MoveAnything_FindFrame( frameName )
for i in MoveAnything_Frames do
if( MoveAnything_Frames[i].name == frameName ) then
return MoveAnything_Frames[i];
end
end
return nil;
end
function MoveAnything_RemoveIfCustom( frameName )
local removed = false;
for i,v in MoveAnything_CustomFrames do
if( v.name == frameName ) then
table.remove( MoveAnything_CustomFrames, i );
removed = true;
break;
end
end
if( removed ) then
for i,v in MoveAnything_Frames do
if( v.name == frameName ) then
table.remove( MoveAnything_Frames, i );
break;
end
end
end
end
function MoveAnything_PreventExternalVisibility( frame )
frame.MAWantsToBeVisible = frame:IsVisible();
frame:Hide();
frame.HiddenShow = frame.Show;
frame.HiddenHide = frame.Hide;
frame.HiddenIsVisible = frame.IsVisible;
frame.Show = MoveAnything_HiddenShow;
frame.Hide = MoveAnything_HiddenHide;
frame.IsVisible = MoveAnything_HiddenIsVisible;
if( frame.attachedChildren ) then
for i, val in frame.attachedChildren do
MoveAnything_PreventExternalVisibility( val );
end
end
end
function MoveAnything_AllowExternalVisibility( frame )
frame.Show = frame.HiddenShow;
frame.Hide = frame.HiddenHide;
frame.IsVisible = frame.HiddenIsVisible;
frame.HiddenShow = nil;
frame.HiddenHide = nil;
frame.HiddenIsVisible = nil;
if( frame.MAWantsToBeVisible ) then
frame.MAWantsToBeVisible = nil
frame:Show();
end
if( frame.attachedChildren ) then
for i, val in frame.attachedChildren do
MoveAnything_AllowExternalVisibility( val );
end
end
end
function MoveAnything_PreventExternalMovement( frame )
if( frame.HiddenSetPoint == nil ) then
frame.HiddenSetPoint = frame.SetPoint;
frame.SetPoint = function() end;
end
if( frame.HiddenSetAllPoints == nil ) then
frame.HiddenSetAllPoints = frame.SetAllPoints;
frame.SetAllPoints = function() end;
end
if( frame.HiddenClearAllPoints == nil ) then
frame.HiddenClearAllPoints = frame.ClearAllPoints;
frame.ClearAllPoints = function() end;
end
if( frame.HiddenSetScale == nil ) then
frame.HiddenSetScale = frame.SetScale;
frame.SetScale = function() end;
end
if( frame.attachedChildren ) then
for i, val in frame.attachedChildren do
MoveAnything_PreventExternalMovement( val );
end
end
end
function MoveAnything_AllowExternalMovement( frame )
if( frame.HiddenSetPoint ) then
frame.SetPoint = frame.HiddenSetPoint;
frame.HiddenSetPoint = nil;
end
if( frame.HiddenSetAllPoints ) then
frame.SetAllPoints = frame.HiddenSetAllPoints;
frame.HiddenSetAllPoints = nil;
end
if( frame.HiddenClearAllPoints ) then
frame.ClearAllPoints = frame.HiddenClearAllPoints;
frame.HiddenClearAllPoints = nil;
end
if( frame.HiddenSetScale ) then
frame.SetScale = frame.HiddenSetScale;
frame.HiddenSetScale = nil;
end
if( frame.attachedChildren ) then
for i, val in frame.attachedChildren do
MoveAnything_AllowExternalMovement( val );
end
end
end
function MoveAnything_HookFrame( frameName )
local frame = getglobal( frameName );
if( not MoveAnything_IsFrameHooked( frameName ) ) then
local opt = MoveAnything_FindFrameOptions( frameName, "HookFrame" );
if( opt == nil ) then
MoveAnything_FrameOptions[frameName] = {};
opt = MoveAnything_FrameOptions[frameName];
opt.movable = false;
opt.hidden = false;
end
opt.name = frameName;
opt.originalLeft, opt.originalBottom = MoveAnything_GetRelativeBottomLeft( frame );
if( MoveAnything_ScaleWH[ frameName ] ) then
opt.originalWidth = frame:GetWidth();
opt.originalHeight = frame:GetHeight();
opt.originalScale = nil;
else
opt.originalWidth = nil;
opt.originalHeight = nil;
opt.originalScale = MAGetScale( frame );
end
end
if( UIPanelWindows[frame:GetName()] ) then
local left = GetLeftFrame();
local center = GetCenterFrame();
if( frame == left ) then
UIParent.left = nil;
if( center ) then
MovePanelToLeft();
end
elseif( frame == center and left ) then
UIParent.center = nil;
end
local opt = MoveAnything_FindFrameOptions( frameName, "Hook UIPanel" );
if( opt ) then
opt.UIPanelWindows = UIPanelWindows[frame:GetName()];
end
UIPanelWindows[frame:GetName()] = nil;
end
if( frame.OnMoveAnythingHook ) then
frame.OnMoveAnythingHook( frame );
end
MoveAnything_PreventExternalMovement( frame );
end
function MoveAnything_IsFrameHooked( frameName )
if( frameName == nil ) then return; end
local opt = MoveAnything_FindFrameOptions( frameName, "IsFrameHooked "..frameName );
if( opt ) then
if( opt.movable or opt.hidden ) then
return true;
end
end
return false;
end
function MoveAnything_IsFrameHidden( frameName )
if( frameName == nil ) then return; end
local opt = MoveAnything_FindFrameOptions( frameName, "IsFrameHooked "..frameName );
if( opt ) then
if( opt.hidden ) then
return true;
end
end
return false;
end
function MoveAnything_AddFrameToMovableList( frameName, helpfulName, isDefault )
if( not MoveAnything_FindFrame( frameName ) ) then
local frame = getglobal( frameName );
local listOptions = {};
listOptions.name = frameName;
listOptions.helpfulName = helpfulName;
if( listOptions.helpfulName == nil ) then
listOptions.helpfulName = listOptions.name;
end
table.insert( MoveAnything_Frames, listOptions );
-- if this is not a built-in default frame, we also need to add it to CustomFrames
if( not isDefault ) then
table.insert( MoveAnything_CustomFrames, listOptions );
end
if( MAOptions:IsVisible() ) then
MoveAnythingOptions_Update();
end
end
end
function MoveAnything_AddSeparator( separatorText, isDefault )
local listOptions = {};
listOptions.name = nil;
listOptions.helpfulName = separatorText;
table.insert( MoveAnything_Frames, listOptions );
-- if this is not a built-in default frame, we also need to add it to CustomFrames
if( not isDefault ) then
table.insert( MoveAnything_CustomFrames, listOptions );
end
if( MAOptions:IsVisible() ) then
MoveAnythingOptions_Update();
end
end
function MoveAnything_SizingAnchor( button )
local s, e = string.find( button:GetName(), "Resize_" )
local anchorto = string.sub( this:GetName(), e + 1 );
local anchor;
if( anchorto == "LEFT" ) then anchor = "RIGHT";
elseif( anchorto == "RIGHT" ) then anchor = "LEFT";
elseif( anchorto == "TOP" ) then anchor = "BOTTOM";
elseif( anchorto == "BOTTOM" ) then anchor = "TOP";
end
return anchorto, anchor;
end
function MoveAnything_Move( moveFrameName, helpfulName )
if( MoveAnything_MoveOnlyWhenVisible[ moveFrameName ] ) then
local frame = getglobal( moveFrameName );
if( frame == nil or not frame:IsVisible() ) then
Error( "That window may only be moved when it is visible" );
return;
end
end
if( not MoveAnything_FindMAFrame( moveFrameName ) ) then
local frame = MoveAnything_FindAvailableFrame();
if( frame == nil ) then
Error( "You can only move "..MOVEANYTHING_MOVEATONETIME.." frames at once." );
elseif( getglobal( moveFrameName ) == nil ) then
Error( "\""..moveFrameName.."\" is not a valid frame name." );
else
local moveFrame = getglobal( moveFrameName );
MoveAnything_AddFrameToMovableList( moveFrameName, helpfulName );
MoveAnything_HookFrame( moveFrameName );
MoveAnything_Attach( frame, getglobal( moveFrameName ) );
if( moveFrame.OnMoveAnythingPostAttach ) then
moveFrame.OnMoveAnythingPostAttach( moveFrame );
end
if( MAOptions:IsVisible() ) then
MoveAnythingOptions_Update();
end
end
end
end
function MA_Mover(dir)
if ( dir > 0 ) then
if ( CurrentMover < 20 ) then
CurrentMover = CurrentMover + 1;
else
return;
end
else
if ( CurrentMover > 1 ) then
CurrentMover = CurrentMover - 1;
else
return;
end
end
MA_NudgerFrameRefresh();
end
function MA_GetFirstMover()
for i = 1, 20 do
if ( getglobal("MoveAnything"..i):IsVisible() ) then
return i;
end
end
end
function MoveAnythingOptions_OnHide()
MA_MoverOnHide();
end
function MA_MoverOnShow()
ResizingNudger:Show();
CurrentMover = tonumber(this:GetID());
MA_NudgerFrameRefresh();
end
function MA_MoverOnHide()
if ( MA_GetFirstMover() ) then
CurrentMover = MA_GetFirstMover();
MA_NudgerFrameRefresh();
elseif ( MAOptions:IsVisible() ) then
CurrentMover = 1;
MA_NudgerFrameRefresh(1);
else
ResizingNudger:Hide();
end
end
function MA_NudgerOnShow()
MA_NudgerFrameRefresh();
end
function MA_NudgerFrameRefresh(reset)
if ( CurrentMover < 20 ) then
ResizingNudger_MoverPlus:Enable();
else
ResizingNudger_MoverPlus:Disable();
end
if ( CurrentMover > 1 ) then
ResizingNudger_MoverMinus:Enable();
else
ResizingNudger_MoverMinus:Disable();
end
local labelText = "MA "..CurrentMover.."/20";
if ( not reset and getglobal("MoveAnything"..CurrentMover).tagged ) then
labelText = labelText.."\n"..getglobal("MoveAnything"..CurrentMover).tagged:GetName();
end
ResizingNudgerTitle:SetText(labelText);
end
function MA_NudgerOnUpdate()
-- This code is ripped from DiscordART :)
local obj = GetMouseFocus();
local text = "MouseOver: ";
local label = ResizingNudgerMouseOver;
if (obj and obj ~= WorldFrame and obj:GetName()) then
text = text..obj:GetName();
if (obj:GetParent() and obj:GetParent() ~= WorldFrame and obj:GetParent():GetName() ) then
text = text.."\nParent: "..obj:GetParent():GetName();
if (obj:GetParent():GetParent() and obj:GetParent():GetParent() ~= WorldFrame and obj:GetParent():GetParent():GetName()) then
text = text.."\nParent's Parent: "..obj:GetParent():GetParent():GetName();
end
end
end
if ( not string.find(text, "ResizingNudger") ) then
label:SetText(text);
else
label:SetText("MouseOver: ");
end
end
function MoveAnything_MoveFrameUnderCursor()
local obj = GetMouseFocus();
if (obj and obj ~= WorldFrame and obj ~= UIParent and obj:GetName()) then
MoveAnything_ToggleMove( obj:GetName() );
end
end
function MA_Center(lock)
local mover = getglobal("MoveAnything"..CurrentMover);
if ( lock == 0 ) then
-- Both
mover:ClearAllPoints();
mover:SetPoint("CENTER",0,0);
else
local x, y;
x = mover:GetLeft();
y = mover:GetBottom();
mover:ClearAllPoints();
if ( lock == 1 ) then
--Horizontal
mover:SetPoint("CENTER",0,0);
x = mover:GetLeft();
mover:ClearAllPoints();
mover:SetPoint("BOTTOMLEFT",x,y);
elseif ( lock == 2 ) then
-- Vertical
mover:SetPoint("CENTER",0,0);
y = mover:GetBottom();
mover:ClearAllPoints();
mover:SetPoint("BOTTOMLEFT",x,y);
end
end
MoveAnything_UpdatePosition(mover);
end
function MA_Nudge(dir, button)
local x, y, offsetX, offsetY, parent, mover, offsetAmount;
mover = getglobal("MoveAnything"..CurrentMover);
if ( not mover:IsVisible() ) then
return;
end
x = mover:GetLeft();
y = mover:GetBottom();
if ( button == "RightButton" ) then
if ( IsShiftKeyDown() ) then
offsetAmount = 250;
else
offsetAmount = 50;
end
else
if ( IsShiftKeyDown() ) then
offsetAmount = 10;
else
offsetAmount = 1;
end
end
if ( dir == 1 ) then
offsetX = 0;
offsetY = offsetAmount;
elseif ( dir == 2 ) then
offsetX = 0;
offsetY = -offsetAmount;
elseif ( dir == 3 ) then
offsetX = -offsetAmount;
offsetY = 0;
elseif ( dir == 4 ) then
offsetX = offsetAmount;
offsetY = 0;
end
mover:ClearAllPoints();
mover:SetPoint("BOTTOMLEFT","UIParent","BOTTOMLEFT",x + offsetX, y + offsetY);
MoveAnything_UpdatePosition(mover);
end
function MoveAnything_UpdatePosition( moveFrame )
local x, y, parent;
x = nil;
y = nil;
parent = nil;
if( moveFrame.tagged ) then
if( MoveAnything_DetachFromParent[ moveFrame.tagged:GetName() ] ) then
x = moveFrame.tagged:GetLeft();
y = moveFrame.tagged:GetBottom();
parent = UIParent;
else
x, y = MoveAnything_GetRelativeBottomLeft( moveFrame.tagged );
parent = MAGetParent( moveFrame.tagged );
end
local opt = MoveAnything_FindFrameOptions( moveFrame.tagged:GetName(), "UpdatePosition" );
opt.x = x;
opt.y = y;
end
return x, y, parent;
end
function MoveAnything_StopMoving( moveFrameName )
local frame = MoveAnything_FindMAFrame( moveFrameName );
if( frame ) then
MoveAnything_Detach( frame );
if( MAOptions:IsVisible() ) then
MoveAnythingOptions_Update();
end
end
end
function MoveAnything_ToggleMove( moveFrameName )
if( MoveAnything_FindMAFrame( moveFrameName ) ) then
MoveAnything_StopMoving( moveFrameName );
else
MoveAnything_Move( moveFrameName );
end
end
function MoveAnything_FindMAFrame( moveFrameName )
local frame;
for i = 1, MOVEANYTHING_MOVEATONETIME, 1 do
frame = getglobal( "MoveAnything"..i );
if( type(frame) ~= "nil" and frame:IsVisible() and frame.tagged == getglobal( moveFrameName ) ) then
return frame;
end
end
return nil;
end
function MoveAnything_FindAvailableFrame()
local frame;
for i = 1, MOVEANYTHING_MOVEATONETIME, 1 do
frame = getglobal( "MoveAnything"..i );
if( not( frame:IsVisible() ) ) then
return frame;
end
end
return nil;
end
function MoveAnything_OnSizeChanged( this )
if( this.tagged ) then
local s, w, h, opt;
opt = MoveAnything_FindFrameOptions( this.tagged:GetName(), "OnSizeChanged" );
if( MoveAnything_ScaleWH[ this.tagged:GetName() ] ) then
this.tagged:SetHeight( this:GetHeight() );
this.tagged:SetWidth( this:GetWidth() );
-- if this ever needs to apply to a frame with attached children,
-- we're going to have to figure out what to do, since setting
-- the W and H directly is definitely incorrect
if( opt ) then
opt.width = this:GetHeight();
opt.height = this:GetHeight();
end
else
if( this.MASizingAnchor == "LEFT" or this.MASizingAnchor == "RIGHT" ) then
w = this:GetWidth();
h = w * (this.tagged:GetHeight() / this.tagged:GetWidth());
if( h < 16 ) then
h = 16;
w = h * (this.tagged:GetWidth() / this.tagged:GetHeight());
end
else
h = this:GetHeight();
w = h * (this.tagged:GetWidth() / this.tagged:GetHeight());
if( w < 16 ) then
w = 16;
h = w * (this.tagged:GetHeight() / this.tagged:GetWidth());
end
end
s = this:GetWidth() / this.tagged:GetWidth();
s = s / MAGetScale( this.tagged:GetParent(), 1 ) * UIParent:GetScale();
if( MoveAnything_ScaleAllowed( this.tagged:GetName() ) ) then
if( opt ) then
opt.scale = s;
end
this.tagged:HiddenSetScale( s );
if( this.tagged.attachedChildren ) then
for i, v in this.tagged.attachedChildren do
v:HiddenSetScale( s );
end
end
end
this:SetWidth( w );
this:SetHeight( h );
end
end
end
function MoveAnything_GetParentScaleRatio( frame )
return MAGetScale( frame, 1 );
end
--[[
function MoveAnything_GetRelativeBottomLeft( tagFrame )
x = tagFrame:GetLeft();
if( x ) then
x = x - MAGetParent( tagFrame ):GetLeft() * MAGetScale( tagFrame );
end
y = tagFrame:GetBottom();
if( y ) then
y = y - MAGetParent( tagFrame ):GetBottom() * MAGetScale( tagFrame );
end
return x,y;
end
]]
function MoveAnything_GetRelativeBottomLeft( tagFrame )
x = tagFrame:GetLeft();
if( x ) then
x = x - MAGetParent( tagFrame ):GetLeft() * MAGetScale( MAGetParent( tagFrame ) ) / MAGetScale( tagFrame );
end
y = tagFrame:GetBottom();
if( y ) then
y = y - MAGetParent( tagFrame ):GetBottom() * MAGetScale( MAGetParent( tagFrame ) ) / MAGetScale( tagFrame );
end
return x,y;
end
function MoveAnything_Attach( moveFrame, tagFrame )
if( moveFrame.tagged ) then
MoveAnything_Detach( moveFrame );
end
local listOptions = MoveAnything_FindFrame( tagFrame:GetName() );
local frameOptions = MoveAnything_FindFrameOptions( tagFrame:GetName(), "Attach" );
frameOptions.movable = true;
moveFrame.helpfulName = listOptions.helpfulName;
if( tagFrame.OnBeginMove ) then
if( not tagFrame:OnBeginMove() ) then
MoveAnything_Detach( moveFrame );
return;
end
end
local x, y;
if( tagFrame:GetLeft() == nil ) then tagFrame:Show(); tagFrame:Hide(); end
x = tagFrame:GetLeft() * MAGetScale( tagFrame, 1 ) / UIParent:GetScale();
x = x - MAGetParent( tagFrame ):GetLeft() * MAGetScale( MAGetParent( tagFrame ), 1 ) / UIParent:GetScale();
y = tagFrame:GetBottom() * MAGetScale( tagFrame, 1 ) / UIParent:GetScale();
y = y - MAGetParent( tagFrame ):GetBottom() * MAGetScale( MAGetParent( tagFrame ), 1 ) / UIParent:GetScale();
moveFrame:ClearAllPoints();
moveFrame:SetPoint( "BOTTOMLEFT", MAGetParent( tagFrame ):GetName(), "BOTTOMLEFT", x, y );
moveFrame:SetWidth( tagFrame:GetWidth() * MAGetScale( tagFrame , 1 ) / UIParent:GetScale() );
moveFrame:SetHeight( tagFrame:GetHeight() * MAGetScale( tagFrame, 1 ) / UIParent:GetScale() ); moveFrame:SetFrameLevel( tagFrame:GetFrameLevel() + 1 );
tagFrame:HiddenClearAllPoints();
tagFrame:HiddenSetPoint( "BOTTOMLEFT", moveFrame:GetName(), "BOTTOMLEFT", 0, 0 );
moveFrame.tagged = tagFrame;
moveFrame:Show();
end
function MoveAnything_Detach( moveFrame )
if( moveFrame.tagged ) then
local x, y, parent = MoveAnything_UpdatePosition( moveFrame );
moveFrame.tagged:HiddenClearAllPoints();
moveFrame.tagged:HiddenSetPoint( "BOTTOMLEFT", parent:GetName(), "BOTTOMLEFT", x, y );
end
moveFrame:Hide();
moveFrame.tagged = nil;
end
function MoveAnything_ResetFrameOptions( frameName )
MoveAnything_StopMoving( frameName );
local frame = getglobal( frameName );
if ( not frame ) then return; end
if( frame.OnMoveAnythingPreReset ) then
frame.OnMoveAnythingPreReset( frame );
end
MoveAnything_AllowExternalMovement( frame );
local opt = MoveAnything_FindFrameOptions( frameName, "Reset Frame Options" );
local left = nil;
local bottom = nil;
local hidden = false;
local width = nil;
local height = nil;
if( opt ) then
left = opt.originalLeft;
bottom = opt.originalBottom;
width = opt.originalWidth;
height = opt.originalHeight;
if( opt.hidden ) then
opt.hidden = false;
MoveAnything_ShowFrame( frame );
end
end
frame:ClearAllPoints();
frame:SetPoint( "BOTTOMLEFT", MAGetParent( frame ):GetName(), "BOTTOMLEFT", left, bottom );
if( MoveAnything_ScaleAllowed( frame:GetName() ) ) then
frame:SetScale( opt.originalScale );
end
if( width ) then frame:SetWidth( width ); end
if( height ) then frame:SetHeight( height ); end
if( frame.attachedChildren ) then
for i, v in frame.attachedChildren do
if( MoveAnything_ScaleAllowed( frame:GetName() ) ) then
v:SetScale( opt.originalScale );
end
end
end
if( frame.OnMoveAnythingPostReset ) then
frame.OnMoveAnythingPostReset( frame );
end
frame.attachedChildren = nil;
if( opt and opt.UIPanelWindows ) then
UIPanelWindows[frameName] = opt.UIPanelWindows;
if( frame:IsVisible() ) then
frame:Hide();
ShowUIPanel( frame );
end
end
MoveAnything_ClearFrameOptions( frameName );
if( MAOptions:IsVisible() ) then
MoveAnythingOptions_Update();
end
end
function MoveAnything_ToggleOptionsMenu()
if( MAOptions:IsVisible() ) then
MAOptions:Hide();
else
MAOptions:Show();
end
end
function MoveAnythingOptions_OnShow()
ResizingNudger:Show();
MoveAnythingOptions_Update();
end
function MoveAnything_GetIndex( frame )
local index = tonumber( string.sub( frame:GetName(), string.len( "MAMove" ) + 1, -1 ) );
return index + FauxScrollFrame_GetOffset( MAScrollFrame );
end
function MoveAnything_GetMovableFrame( optionsListFrame )
local index = MoveAnything_GetIndex( optionsListFrame );
return getglobal( MoveAnything_Frames[index].name );
end
function MoveAnything_OnMoveCheck( button )
local frame = MoveAnything_GetMovableFrame( MAGetParent( button ) );
if ( not frame ) then return; end
if( button:GetChecked() ) then
MoveAnything_Move( frame:GetName() );
else
MoveAnything_StopMoving( frame:GetName() );
end
if( MAOptions:IsVisible() ) then
MoveAnythingOptions_Update();
end
end
function MoveAnything_HiddenShow( this )
this.MAWantsToBeVisible = true;
end
function MoveAnything_HiddenHide( this )
this.MAWantsToBeVisible = false;
end
function MoveAnything_HiddenIsVisible( this )
return this.MAWantsToBeVisible;
end
function MoveAnything_HideFrame( frame )
if ( not frame ) then return; end
if ( not MoveAnything_IsFrameHooked( frame:GetName() ) ) then
MoveAnything_HookFrame( frame:GetName() );
end
local opt = MoveAnything_FindFrameOptions( frame:GetName(), "HideFrame" );
opt.hidden = true;
frame.MAWantsToBeVisible = frame:IsVisible();
if( MoveAnything_HideList[ frame:GetName() ] ) then
for hIndex, hideEntry in MoveAnything_HideList[ frame:GetName() ] do
local val = getglobal( hideEntry[1] );
local hideType;
for i = 2, table.getn( hideEntry ) do
hideType = hideEntry[i];
if( type( hideType ) == "function" ) then
hideType( false );
elseif( hideType == "DISABLEMOUSE" ) then
val:EnableMouse( false );
elseif( hideType == "FRAME" ) then
MoveAnything_PreventExternalVisibility( val );
elseif( hideType == "WH" ) then
MoveAnything_StopMoving( frame:GetName() );
val:SetWidth( 1 );
val:SetHeight( 1 );
else
val:DisableDrawLayer( hideType );
end
end
end
elseif( MoveAnything_HideUsingWH[ frame:GetName() ] ) then
MoveAnything_StopMoving( frame:GetName() );
frame:SetWidth( 1 );
frame:SetHeight( 1 );
else
MoveAnything_PreventExternalVisibility( frame );
end
end
function MoveAnything_ShowFrame( frame )
-- if being hidden is the only thing we're controlling with this frame
-- do a full reset instead of a simple show
if ( not frame ) then return; end
local opt = MoveAnything_FindFrameOptions( frame:GetName(), "ShowFrame" );
if( opt and opt.hidden ) then
if( not opt.movable ) then
MoveAnything_ResetFrameOptions( frame:GetName() );
return;
end
end
if( opt ) then
opt.hidden = false;
end
if( MoveAnything_HideList[ frame:GetName() ] ) then
for hIndex, hideEntry in MoveAnything_HideList[ frame:GetName() ] do
local val = getglobal( hideEntry[1] );
local hideType;
for i = 2, table.getn( hideEntry ) do
hideType = hideEntry[i];
if( type( hideType ) == "function" ) then
hideType( true );
elseif( hideType == "DISABLEMOUSE" ) then
val:EnableMouse( true );
elseif( hideType == "FRAME" ) then
MoveAnything_AllowExternalVisibility( val );
elseif( hideType == "WH" ) then
val:SetWidth( opt.originalWidth );
val:SetHeight( opt.originalHeight );
else
val:EnableDrawLayer( hideType );
end
end
end
elseif( MoveAnything_HideUsingWH[ frame:GetName() ] ) then
frame:SetWidth( opt.originalWidth );
frame:SetHeight( opt.originalHeight );
else
MoveAnything_AllowExternalVisibility( frame );
end
end
function MoveAnything_OnHideCheck( button )
local frame = MoveAnything_GetMovableFrame( MAGetParent( button ) );
if ( not frame ) then return; end
if( button:GetChecked() ) then
MoveAnything_HideFrame( frame );
else
MoveAnything_ShowFrame( frame );
end
MoveAnythingOptions_Update();
end
function MoveAnything_OnResetCheck( button )
local frame = MoveAnything_GetMovableFrame( MAGetParent( button ) );
if ( not frame ) then return; end
MoveAnything_ResetFrameOptions( frame:GetName() );
end
function MoveAnything_OnCheckCharacterSpecific( button )
local oldName = MoveAnything_CurrentSettingsName();
if( button:GetChecked() ) then
MoveAnything_UseCharacterSettings = true;
MoveAnything_CopySettings( oldName, MoveAnything_CurrentSettingsName() );
else
MoveAnything_UseCharacterSettings = false;
MoveAnything_CopySettings( oldName, MoveAnything_CurrentSettingsName() );
end
MoveAnythingOptions_Update();
end
function MoveAnythingOptions_Update()
FauxScrollFrame_Update(MAScrollFrame, MoveAnything_GetFrameCount(), 10, MOVEANYTHING_SCROLL_HEIGHT );
for i=1, 10, 1 do
local index = FauxScrollFrame_GetOffset(MAScrollFrame) + i;
if( index <= MoveAnything_GetFrameCount() ) then
local f = getglobal( "MAMove"..i.."FrameNameText" );
f:SetText( MoveAnything_Frames[index].helpfulName );
if( MoveAnything_Frames[index] ) then
getglobal( "MAMove"..i ):Show();
end
local opt = MoveAnything_FindFrameOptions( MoveAnything_Frames[index].name, "MAOptions Update" );
if( MoveAnything_Frames[index].name ) then
getglobal( "MAMove"..i.."Backdrop" ):Show();
getglobal( "MAMove"..i.."Move" ):Show();
else
getglobal( "MAMove"..i.."Backdrop" ):Hide();
getglobal( "MAMove"..i.."Move" ):Hide();
end
if( MoveAnything_FindMAFrame( MoveAnything_Frames[index].name ) ) then
getglobal( "MAMove"..i.."Move" ):SetChecked( 1 );
else
getglobal( "MAMove"..i.."Move" ):SetChecked( nil );
end
if( opt and opt.hidden ) then
getglobal( "MAMove"..i.."Hide" ):SetChecked( 1 );
else
getglobal( "MAMove"..i.."Hide" ):SetChecked( nil );
end
-- disallow hiding?
if( not MoveAnything_Frames[index].name or
MoveAnything_NoHide[ MoveAnything_Frames[index].name ] ) then
getglobal( "MAMove"..i.."Hide" ):Hide();
else
getglobal( "MAMove"..i.."Hide" ):Show();
end
-- add a reset button if it's movable
if( MoveAnything_IsFrameHooked( MoveAnything_Frames[index].name ) ) then
getglobal( "MAMove"..i.."Reset" ):Show();
else
getglobal( "MAMove"..i.."Reset" ):Hide();
end
else
getglobal( "MAMove"..i ):Hide();
end
end
if( MoveAnything_UseCharacterSettings ) then
MAOptionsCharacterSpecific:SetChecked( 1 );
else
MAOptionsCharacterSpecific:SetChecked( nil );
end
end
function FuckMe()
MoveAnything_FrameOptions = {};
end
function MoveAnythingOptions_ResetAll()
for i,v in MoveAnything_FrameOptions do
MoveAnything_ResetFrameOptions( v.name );
end
MoveAnything_FrameOptions = {};
end
function MoveAnything_FindContainerFrame( id )
local i = 1;
local container;
while( 1 ) do
container = getglobal( "ContainerFrame"..i );
if( not container ) then break; end
if( container:IsVisible() and container:GetID() == id ) then
return container;
end
i = i + 1;
end
return nil;
end
function MoveAnything_GrabContainerFrame( container, movableBag )
if( movableBag and MoveAnything_IsFrameHooked( movableBag:GetName() ) ) then
MoveAnything_PreventExternalMovement( container );
container.MAContainerOriginalScale = MAGetScale( container );
movableBag:Show();
container:HiddenClearAllPoints();
container:HiddenSetScale( MAGetScale( movableBag ) );
--container:HiddenSetPoint( "BOTTOMLEFT", "UIParent", "BOTTOMLEFT", movableBag:GetLeft(), movableBag:GetBottom() );
container:HiddenSetPoint( "BOTTOMLEFT", movableBag:GetName(), "BOTTOMLEFT", 0, 0 );
movableBag.attachedChildren = {};
table.insert( movableBag.attachedChildren, container );
end
end
function MoveAnything_RemoveContainerFromList( container )
-- Remove this bag from the list and collapse the rest of the entries
local index = 1;
local tempIndex;
while ContainerFrame1.bags[index] do
if ( ContainerFrame1.bags[index] == container:GetName() ) then
ContainerFrame1.bagsShown = ContainerFrame1.bagsShown - 1;
local tempIndex = index;
while ContainerFrame1.bags[tempIndex] do
if ( ContainerFrame1.bags[tempIndex + 1] ) then
ContainerFrame1.bags[tempIndex] = ContainerFrame1.bags[tempIndex + 1];
else
ContainerFrame1.bags[tempIndex] = nil;
end
tempIndex = tempIndex + 1;
end
end
index = index + 1;
end
updateContainerFrameAnchors();
end
-- TOOLTIP HOOKS
MoveAnything_OriginalSetDefaultAnchor = GameTooltip_SetDefaultAnchor;
function GameTooltip_SetDefaultAnchor(tooltip, parent)
if( MoveAnything_IsFrameHooked( "TooltipMover" ) and tooltip == GameTooltip ) then
-- anchor the tooltip to the side of the mover that is closest to the edge
local l, r, t, b, a, anchor;
l = TooltipMover:GetLeft() - UIParent:GetLeft();
r = UIParent:GetRight() - TooltipMover:GetRight();
t = UIParent:GetTop() - TooltipMover:GetTop();
b = TooltipMover:GetBottom() - UIParent:GetBottom();
a = t;
anchor = "TOP";
if( l < a ) then a = l; anchor = "LEFT"; end
if( r < a ) then a = r; anchor = "RIGHT"; end
if( b < a ) then a = b; anchor = "BOTTOM"; end
tooltip:ClearAllPoints();
tooltip:SetOwner(parent, "ANCHOR_NONE");
tooltip:SetPoint( anchor, "TooltipMover", anchor, 0, 0 );
tooltip.default = 1;
else
tooltip:ClearAllPoints();
MoveAnything_OriginalSetDefaultAnchor( tooltip, parent );
end
end
MoveAnything_OriginalGameTooltip_OnHide = GameTooltip_OnHide;
function GameTooltip_OnHide()
MoveAnything_AllowExternalMovement( this );
MoveAnything_OriginalGameTooltip_OnHide();
end
-- BAG FRAME HOOKS
MoveAnything_BagFrames = {};
MoveAnything_OriginalGenerateFrame = ContainerFrame_GenerateFrame;
function ContainerFrame_GenerateFrame(frame, size, id)
local bag = MoveAnything_BagFrames[id]
MoveAnything_OriginalGenerateFrame( frame, size, id );
MoveAnything_GrabContainerFrame( frame, bag );
end
MoveAnything_OriginalOnHide = ContainerFrame_OnHide;
function ContainerFrame_OnHide()
local bag = MoveAnything_BagFrames[this:GetID()];
if( bag and MoveAnything_IsFrameHooked( bag:GetName() ) ) then
MoveAnything_AllowExternalMovement( this );
if( this.MAContainerOriginalScale ) then
this:SetScale( this.MAContainerOriginalScale );
this.MAContainerOriginalScale = nil;
end
this:ClearAllPoints();
-- we removed the container from the list before, but now we have to add
-- it back, since the container code is going to try to remove it, and doesn't
-- particularly care if it's already gone
ContainerFrame1.bagsShown = ContainerFrame1.bagsShown + 1;
ContainerFrame1.bags[ContainerFrame1.bagsShown] = this:GetName();
end
MoveAnything_OriginalOnHide();
end
MoveAnything_OriginalOnShow = ContainerFrame_OnShow;
function ContainerFrame_OnShow()
MoveAnything_OriginalOnShow();
local bag = MoveAnything_BagFrames[this:GetID()];
if( bag and MoveAnything_IsFrameHooked( bag:GetName() ) ) then
MoveAnything_RemoveContainerFromList( this );
end
end
-- TALENT BUTTON HOOK
MoveAnything_OriginalUpdateTalentButton = UpdateTalentButton;
function UpdateTalentButton()
if( MoveAnything_IsFrameHooked( "MicroButtonsVerticalMover" ) ) then
if ( UnitLevel("player") < 10 ) then
TalentMicroButton:Hide();
QuestLogMicroButton:SetPoint("TOPLEFT", "TalentMicroButton", "TOPLEFT", 0, 0);
else
TalentMicroButton:Show();
QuestLogMicroButton:SetPoint("TOPLEFT", "TalentMicroButton", "BOTTOMLEFT", 0, 24);
end
else
MoveAnything_OriginalUpdateTalentButton();
end
end
--- UI PANEL HOOKS
function MoveAnything_SetLeftFrameLocation()
local left = GetLeftFrame();
if( left ) then
if( MoveAnything_IsFrameHooked( "UIPanelMover1" ) ) then
left:ClearAllPoints();
left:SetPoint( "TOPLEFT", "UIPanelMover1", "TOPLEFT" );
left:SetScale( MAGetScale( UIPanelMover1 ), 1 );
else
left:SetScale( 1 );
end
end
end
function MoveAnything_SetCenterFrameLocation()
-- don't mess with the normal center panels, just the ones
-- that are pushed over from the left
if( GetLeftFrame() ) then
local center = GetCenterFrame();
if( center ) then
if( MoveAnything_IsFrameHooked( "UIPanelMover2" ) ) then
center:ClearAllPoints();
center:SetPoint( "TOPLEFT", "UIPanelMover2", "TOPLEFT" );
center:SetScale( MAGetScale( UIPanelMover2 ), 1 );
else
center:SetScale( 1 );
end
end
end
end
MoveAnything_OriginalShowUIPanel = ShowUIPanel;
function ShowUIPanel(frame)
MoveAnything_OriginalShowUIPanel(frame);
MoveAnything_SetLeftFrameLocation();
MoveAnything_SetCenterFrameLocation();
end
MoveAnything_OriginalMovePanelToLeft = MovePanelToLeft;
function MovePanelToLeft()
MoveAnything_OriginalMovePanelToLeft();
MoveAnything_SetLeftFrameLocation();
end
MoveAnything_OriginalMovePanelToCenter = MovePanelToCenter;
function MovePanelToCenter()
MoveAnything_OriginalMovePanelToCenter();
MoveAnything_SetCenterFrameLocation();
end
MoveAnything_OriginalCloseAllWindows = CloseAllWindows;
function CloseAllWindows(ignoreCenter)
local closed = nil, oclosed;
for i, v in MoveAnything_Frames do
if( MoveAnything_IsFrameHooked( v.name ) ) then
local opt = MoveAnything_FindFrameOptions( v.name, "CloseAllWindows" );
if( opt and opt.UIPanelWindows ) then
if ( type(getglobal(v.name)) ~= "nil" ) then
if( getglobal( v.name ):IsVisible() ) then
getglobal( v.name ):Hide();
closed = true;
end
end
end
end
end
oclosed = MoveAnything_OriginalCloseAllWindows( ignoreCenter );
if( oclosed or closed ) then
return true;
end
return nil;
end
--- ACTION BUTTON HOOKS
MoveAnything_OriginalShowBonusActionBar = ShowBonusActionBar;
function ShowBonusActionBar()
if( MoveAnything_IsFrameHooked( "BasicActionButtonsMover" ) or
MoveAnything_IsFrameHooked( "BasicActionButtonsVerticalMover" ) or
MoveAnything_IsFrameHidden( "MainMenuBar" ) ) then
for i = 1, 12, 1 do
getglobal( "ActionButton"..i ):Hide();
MoveAnything_PreventExternalVisibility( getglobal( "ActionButton"..i ) );
end
end
MoveAnything_OriginalShowBonusActionBar();
end
MoveAnything_OriginalHideBonusActionBar = HideBonusActionBar;
function HideBonusActionBar()
local hooked = nil;
local opt = nil;
if( MoveAnything_IsFrameHooked( "BasicActionButtonsMover" ) ) then
hooked = "BasicActionButtonsMover";
elseif( MoveAnything_IsFrameHooked( "BasicActionButtonsVerticalMover" ) ) then
hooked = "BasicActionButtonsVerticalMover";
end
if( hooked ) then
opt = MoveAnything_FindFrameOptions( hooked, "HideBonusActionBar" );
end
if( hooked or MoveAnything_IsFrameHidden( "MainMenuBar" ) ) then
for i = 1, 12, 1 do
getglobal( "ActionButton"..i ):Show();
if( (not opt) or (not opt.hidden) ) then
MoveAnything_AllowExternalVisibility( getglobal( "ActionButton"..i ) );
end
end
end
MoveAnything_OriginalHideBonusActionBar();
end
SLASH_MOVEANYTHING1 = "/move"
SlashCmdList["MOVEANYTHING"] = function( msg )
if( msg == nil or string.len( msg ) == 0 ) then
MoveAnything_ToggleOptionsMenu();
else
MoveAnything_ToggleMove( msg );
end
end
SLASH_UNMOVEANYTHING1 = "/unmove"
SlashCmdList["UNMOVEANYTHING"] = function( msg )
if( msg ) then
MoveAnything_StopMoving( msg );
local frame = getglobal( msg );
MoveAnything_AllowExternalMovement( frame );
frame:ClearAllPoints();
frame:SetPoint( "CENTER", MAGetParent( frame ):GetName(), "CENTER", 0, 0 );
end
end
SLASH_MOVEANYTHINGCOPYSETTINGS1 = "/movecopy"
SlashCmdList["MOVEANYTHINGCOPYSETTINGS"] = function( msg )
if( msg == nil or string.len( msg ) == 0 ) then
Error( "Syntax: /movecopy ServerName PlayerName" );
Error( "Use /movelist to see a current list of valid settings" );
return;
end
if( MoveAnything_CharacterSettings[msg] == nil ) then
Error( "No settings for server/character "..msg );
Error( "Use /movelist to see a current list of valid settings" );
return;
end
MoveAnything_CopySettings( msg, MoveAnything_CurrentSettingsName() );
end
SLASH_MOVEANYTHINGLISTSETTINGS1 = "/movelist"
SlashCmdList["MOVEANYTHINGLISTSETTINGS"] = function( msg )
Print( "Server/Character Settings List:", 1.0, 1.0, 0.2 );
Print( "-------------------------------", 1.0, 1.0, 0.2 );
for i, val in MoveAnything_CharacterSettings do
local str = i;
if( val == MoveAnything_FrameOptions ) then
str = str.." (Current)";
end
Print( str, 1.0, 1.0, 0.2 );
end
end
SLASH_MOVEANYTHINGDELETESETTINGS1 = "/movedelete"
SLASH_MOVEANYTHINGDELETESETTINGS2 = "/movedel"
SlashCmdList["MOVEANYTHINGDELETESETTINGS"] = function( msg )
if( msg == nil or string.len( msg ) == 0 ) then
Error( "Syntax: /movedelete ServerName PlayerName" );
Error( "Use /movelist to see a current list of valid settings" );
return;
end
if( MoveAnything_CharacterSettings[msg] == nil ) then
Error( "No settings for server/character "..msg );
Error( "Use /movelist to see a current list of valid settings" );
return;
end
if( msg == MoveAnything_CurrentSettingsName() ) then
MoveAnythingOptions_ResetAll();
else
MoveAnything_CharacterSettings[msg] = nil;
end
MoveAnything_FrameOptions = MoveAnything_CharacterSettings[MoveAnything_CurrentSettingsName()];
MoveAnything_RefreshPositions();
end
function GameMenu_AddButton( button )
if( GameMenu_InsertAfter == nil ) then
GameMenu_InsertAfter = GameMenuButtonMacros;
end
if( GameMenu_InsertBefore == nil ) then
GameMenu_InsertBefore = GameMenuButtonLogout;
end
button:ClearAllPoints();
button:SetPoint( "TOP", GameMenu_InsertAfter:GetName(), "BOTTOM", 0, -1 );
GameMenu_InsertBefore:SetPoint( "TOP", button:GetName(), "BOTTOM", 0, -1 );
GameMenu_InsertAfter = button;
GameMenuFrame:SetHeight( GameMenuFrame:GetHeight() + button:GetHeight() + 2 );
end
if ( GameMenuButtonAddOns ) then
GameMenu_AddButton(GameMenuButtonAddOns);
end
--TODO:
--ChatFrameEditBox move