vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 --[[
2 MoveAnything! vJ.11000.2
3 Based on MA! 1.12 by Skrag
4  
5 Read the ReadMe
6 ]]
7 local function Error( msg )
8 Print( msg, 1.0, 0.2, 0.2 );
9 end
10  
11 function Print(msg, r, g, b, frame)
12 if (not r) then r = 1.0; end
13 if (not g) then g = 1.0; end
14 if (not b) then b = 1.0; end
15 if ( frame ) then
16 frame:AddMessage(msg,r,g,b);
17 else
18 if ( DEFAULT_CHAT_FRAME ) then
19 DEFAULT_CHAT_FRAME:AddMessage(msg, r, g, b);
20 end
21 end
22 end
23  
24 function table.find( table, value )
25 for i, v in table do
26 if( v == value ) then
27 return i;
28 end
29 end
30 return nil;
31 end
32  
33 ------------------------------------------------
34  
35 BINDING_HEADER_MOVEANYTHING = "MoveAnything!";
36 MA_LEFTARROW = "<";
37 MA_RIGHTARROW = ">";
38 CurrentMover = 1;
39  
40 StaticPopupDialogs["MOVEANYTHING_RESET_CONFIRM"] = {
41 text = "Reset all MoveAnything Data?",
42 button1 = TEXT(YES),
43 button2 = TEXT(NO),
44 OnAccept = function()
45 MoveAnythingOptions_ResetAll();
46 end,
47 timeout = 0,
48 exclusive = 1,
49 showAlert = 1
50 };
51  
52 MOVEANYTHING_MOVEATONETIME = 20;
53 MOVEANYTHING_SCROLL_HEIGHT = 25;
54  
55 function MoveAnything_ToggleVisibilityOnFrame(frame)
56 if ( not frame ) then return; end
57  
58 local opt = MoveAnything_FindFrameOptions(frame:GetName(),"ShowFrame");
59  
60 if( opt and opt.hidden == true ) then
61  
62 MoveAnything_ShowFrame(frame)
63 else
64 MoveAnything_HideFrame(frame)
65  
66 end
67  
68 end
69  
70 function TestPos( frame, x, y )
71 frame:ClearAllPoints();
72 if( frame.HiddenSetPoint ) then
73 frame:HiddenSetPoint( "BOTTOMLEFT", frame:GetParent():GetName(), "BOTTOMLEFT", x, y );
74 else
75 frame:SetPoint( "BOTTOMLEFT", frame:GetParent():GetName(), "BOTTOMLEFT", x, y );
76 end
77 end
78  
79 function TestInfo()
80 Print( "PlayerFrame "..PlayerFrame:GetLeft()..", "..PlayerFrame:GetBottom().." ("..PlayerFrame:GetScale()..")" );
81 Print( "PetFrame "..PetFrame:GetLeft()..", "..PetFrame:GetBottom().." ("..PetFrame:GetScale()..")" );
82 end
83  
84 function ListFrameOptions()
85 local count = 0;
86 for i, v in MoveAnything_FrameOptions do
87 count = count + 1;
88 end
89 Print( count.." frame options" );
90 for i, v in MoveAnything_FrameOptions do
91 Print( "FrameOptions: "..v.name );
92 end
93 end
94  
95 function ListCustomFrames()
96 Print( table.getn( MoveAnything_CustomFrames ).." custom frames" );
97 for i, v in MoveAnything_CustomFrames do
98 Print( v.name );
99 end
100 end
101  
102 function MADebOpt( frameName )
103 for i, v in MoveAnything_FrameOptions[ frameName ] do
104 Print( frameName.."."..i.." = "..tostring(v) );
105 end
106 end
107  
108 function MADeb()
109 ListCustomFrames();
110 ListFrameOptions();
111 end
112  
113 function MALocate()
114 if( not MALocator:IsVisible() ) then
115 MALocator:Show();
116 end
117 end
118  
119 function MoveAnythingUpdater_OnUpdate(arg1)
120 if MoveAnythingUpdater:GetScale() == UIParent:GetScale() then
121 MoveAnythingUpdater:SetScale(0.2)
122 MoveAnything_RefreshPositions()
123 end
124 end
125  
126 MoveAnything_Frames = {};
127 MoveAnything_CustomFrames = {};
128 MoveAnything_CharacterSettings = {};
129 MoveAnything_UseCharacterSettings = false;
130 MoveAnything_InitRun = false;
131 MoveAnything_FrameOptions = nil;
132  
133 MoveAnything_NoScale = { TooltipMover = true, FramerateMover = true };
134 MoveAnything_ScaleWH = { MainMenuExpBar = true };
135 MoveAnything_DetachFromParent = { MainMenuBarPerformanceBarFrame = true };
136 MoveAnything_NoHide = { MAOptions = true };
137 MoveAnything_HideList = {};
138 MoveAnything_HideList["MainMenuBar"] = {
139 { "MainMenuBarArtFrame", "BACKGROUND","ARTWORK"},
140 { "PetActionBarFrame", "OVERLAY"},
141 { "ShapeshiftBarFrame", "OVERLAY"},
142 { "MainMenuBar", "DISABLEMOUSE"},
143 { "BonusActionBarFrame", "OVERLAY", "DISABLEMOUSE"},
144 };
145 MoveAnything_HideList["MainMenuExpBar"] = {
146 { "MainMenuExpBar", "WH", "BORDER", "OVERLAY"},
147 { "ExhaustionTick", "FRAME"},
148 { "MainMenuExpBar", function( show )
149 if( show ) then
150 MoveAnything_AllowExternalVisibility( MainMenuExpBar.TextString );
151 else
152 MoveAnything_PreventExternalVisibility( MainMenuExpBar.TextString );
153 end
154 end},
155 };
156  
157 MoveAnything_HideUsingWH = { MainMenuExpBar = true };
158  
159 MoveAnything_MoveOnlyWhenVisible = {};
160 MoveAnything_MoveOnlyWhenVisible["GroupLootFrame1"] = true;
161 MoveAnything_MoveOnlyWhenVisible["GroupLootFrame2"] = true;
162 MoveAnything_MoveOnlyWhenVisible["GroupLootFrame3"] = true;
163 MoveAnything_MoveOnlyWhenVisible["GroupLootFrame4"] = true;
164  
165 MoveAnything_DefaultFrameList = {
166  
167 { "MAOptions", "MoveAnything! Options Window" },
168  
169 { "Separator", "**** Standard Party Frames ****" },
170 { "PlayerFrame", "Player" },
171 { "TargetFrame", "Target" },
172 { "PartyMemberFrame1", "Party Member 1" },
173 { "PartyMemberFrame2", "Party Member 2" },
174 { "PartyMemberFrame3", "Party Member 3" },
175 { "PartyMemberFrame4", "Party Member 4" },
176  
177 { "Separator", "**** Pets ****" },
178 { "PetFrame", "Pet" },
179 { "PartyMemberFrame1PetFrame", "Party Pet 1" },
180 { "PartyMemberFrame2PetFrame", "Party Pet 2" },
181 { "PartyMemberFrame3PetFrame", "Party Pet 3" },
182 { "PartyMemberFrame4PetFrame", "Party Pet 4" },
183  
184 { "Separator", "**** Bags ****" },
185 { "BagFrame1", "Bag 1 (Backpack)" },
186 { "BagFrame2", "Bag 2" },
187 { "BagFrame3", "Bag 3" },
188 { "BagFrame4", "Bag 4" },
189 { "BagFrame5", "Bag 5" },
190  
191 { "Separator", "**** Bank ****" },
192 { "BankFrame", "Bank Teller Window" },
193 { "BankBagFrame1", "Bank Bag 1" },
194 { "BankBagFrame2", "Bank Bag 2" },
195 { "BankBagFrame3", "Bank Bag 3" },
196 { "BankBagFrame4", "Bank Bag 4" },
197 { "BankBagFrame5", "Bank Bag 5" },
198 { "BankBagFrame6", "Bank Bag 6" },
199  
200 { "Separator", "**** Bottom Bar ****" },
201 { "MainMenuBar", "Bottom Bar" },
202 { "MainMenuBarArtFrame", "Art Frame" },
203 { "MainMenuBarMaxLevelBar", "Max Level Bar" },
204 { "MainMenuExpBar", "Experience Bar" },
205 { "MainMenuBarPerformanceBarFrame", "Lag Meter" },
206  
207 { "Separator", "**** Action Button Bars ****" },
208 { "BasicActionButtonsMover", "Action Buttons" },
209 { "BasicActionButtonsVerticalMover", "Action Buttons (Vertical)" },
210 { "PetActionButtonsMover", "Pet Action Buttons" },
211 { "PetActionButtonsVerticalMover", "Pet Action Buttons (Vertical)" },
212 { "ShapeshiftButtonsMover", "Stance / Aura / Shapeshift Buttons" },
213 { "ShapeshiftButtonsVerticalMover", "Stance / Aura / Shapeshift (Vertical)" },
214  
215 { "Separator", "**** Bag and Micro Button Bars ****" },
216 { "BagButtonsMover", "Bag Buttons" },
217 { "BagButtonsVerticalMover", "Bag Buttons (Vertical)" },
218 { "MicroButtonsMover", "Micro Buttons" },
219 { "MicroButtonsVerticalMover", "Micro Buttons (Vertical)" },
220  
221 { "Separator", "**** Extra Action Bars ****" },
222 { "MultiBarBottomLeft", "Bottom Left ActionBar" },
223 { "MultiBarBottomRight", "Bottom Right ActionBar" },
224 { "MultiBarRight", "Right ActionBar" },
225 { "MultiBarLeft", "Right ActionBar 2" },
226  
227 { "Separator", "**** Minimap and Minimap Hangers ****" },
228 { "MinimapCluster", "MiniMap" },
229 { "MinimapZoneTextButton", "MiniMap Zone Text" },
230 { "MinimapZoomIn", "MiniMap Zoom In Button" },
231 { "MinimapZoomOut", "MiniMap Zoom Out Button" },
232 { "MiniMapMailFrame", "MiniMap Mail Notification" },
233 { "MiniMapTrackingFrame", "MiniMap Tracking" },
234 { "MiniMapMeetingStoneFrame", "MiniMap Meeting Stone" },
235 { "MiniMapBattlefieldFrame", "MiniMap Battlefield" },
236 { "GameTimeFrame", "MiniMap Day-Night Clock" },
237  
238 { "Separator", "**** Battle Grounds Elements ****" },
239 { "WorldStateAlwaysUpFrame", "Flags Frame"},
240 { "AlwaysUpFrame1", "Alliance Flag"},
241 { "AlwaysUpFrame2", "Horde Flag"},
242  
243 { "Separator", "**** Dice Roll Frames ****" },
244 { "GroupLootFrame1", "Dice Roll Frame 1" },
245 { "GroupLootFrame2", "Dice Roll Frame 2" },
246 { "GroupLootFrame3", "Dice Roll Frame 3" },
247 { "GroupLootFrame4", "Dice Roll Frame 4" },
248  
249 { "Separator", "**** Miscellaneous Screen Items ****" },
250 { "StaticPopup1", "Static Popup Frame" },
251 { "UIErrorsFrame", "UI Errors Frame" },
252 { "CastingBarFrame", "Casting Bar" },
253 { "BuffFrame", "Buff Window" },
254 { "TemporaryEnchantFrame", "Item buff/Debuff Windows" },
255 { "TooltipMover", "Tooltip" },
256 { "FramerateMover", "Framerate" },
257 { "DurabilityFrame", "Durability Damage Portrait" },
258 { "QuestWatchFrame", "Quest Tracker" },
259 { "QuestTimerFrame", "Quest Timer" },
260 { "ComboFrame", "Rogue Combo point counter" },
261 { "MirrorTimer1", "Breath/Fatigue Bar" },
262  
263 { "Separator", "**** General Info Panel Placement ****" },
264 { "UIPanelMover1", "Info Panel 1" },
265 { "UIPanelMover2", "Info Panel 2" },
266  
267 { "Separator", "**** Specific Info Panels ****" },
268 { "CharacterFrame", "Character / Pet / Reputation / Skills" },
269 { "TradeSkillFrame", "Trade Skills" },
270 { "InspectFrame", "Inspect View" },
271 { "SpellBookFrame", "Spell Book" },
272 { "LootFrame", "Looting Window" },
273 { "TaxiFrame", "Flight Paths" },
274 { "QuestLogFrame", "Quest Log" },
275 { "MerchantFrame", "Merchant Inventory" },
276 { "TradeFrame", "Trade Window" },
277 { "FriendsFrame", "Friends / Who / Guild / Raid" },
278 { "MacroFrame", "Macros" },
279 { "MailFrame", "Mailbox" },
280 { "TalentFrame", "Talent Tree" },
281 { "PetStableFrame", "Pet Stable" },
282 { "AuctionFrame", "Auction House" },
283 }
284  
285 function MoveAnything_AddPredefinedFrames( frameList )
286 for i, val in frameList do
287 if( val[1] ) then
288 if( val[1] == "Separator" ) then
289 MoveAnything_AddSeparator( val[2], true );
290 else
291 MoveAnything_AddFrameToMovableList( val[1], val[2], true );
292 end
293 end
294 end
295 end
296  
297 function MoveAnything_AddDefaultFrames()
298 MoveAnything_AddPredefinedFrames( MoveAnything_DefaultFrameList );
299 MoveAnything_AddPredefinedFrames( MoveAnything_PredefinedCustomFrameList );
300 end
301  
302 function MoveAnything_ScaleAllowed( frameName )
303 if( MoveAnything_NoScale[ frameName ] or MoveAnything_ScaleWH[ frameName ] ) then
304 return false;
305 end
306 return true;
307 end
308  
309 function MAGetParent( frame )
310 if ( not frame or not frame.GetParent ) then return; end
311 if( frame:GetParent() == nil ) then
312 return UIParent;
313 end
314  
315 return frame:GetParent();
316 end
317  
318 function MAGetScale( frame, effective )
319 if( frame:GetScale() == nil ) then
320 return 1;
321 end
322  
323 if ( effective ) then
324 return frame:GetEffectiveScale();
325 else
326 return frame:GetScale();
327 end
328 end
329  
330 function MoveAnything_RefreshPositions()
331 if( not MoveAnything_InitRun ) then
332 return;
333 end
334  
335 local frame, parent;
336 for i, opt in MoveAnything_FrameOptions do
337 frame = getglobal( opt.name );
338 if( frame ) then
339 if( opt.movable or opt.hidden ) then
340 MoveAnything_HookFrame( opt.name );
341 end
342 if( opt.movable ) then
343 if( MoveAnything_DetachFromParent[ opt.name ] ) then
344 parent = UIParent;
345 else
346 parent = MAGetParent( frame );
347 end
348 frame:HiddenClearAllPoints();
349 frame:HiddenSetPoint( "BOTTOMLEFT", parent:GetName(), "BOTTOMLEFT", opt.x, opt.y );
350 if( opt.scale ) then
351 frame:HiddenSetScale( opt.scale );
352 if( frame.attachedChildren ) then
353 for i, v in frame.attachedChildren do
354 v:HiddenSetScale( opt.scale );
355 end
356 end
357 end
358 end
359 if( opt.hidden ) then
360 MoveAnything_HideFrame( frame );
361 end
362 end
363 end
364 end
365  
366 function MoveAnything_CurrentSettingsName()
367 local settingname = "default";
368  
369 if( MoveAnything_UseCharacterSettings ) then
370 settingname = GetCVar( "realmName" ).." "..UnitName( "player" );
371 end
372  
373 return settingname;
374 end
375  
376 function MoveAnything_CopySettings( fromName, toName )
377 if( MoveAnything_CharacterSettings[toName] == nil ) then
378 MoveAnything_CharacterSettings[toName] = {};
379 end
380 for i, val in MoveAnything_CharacterSettings[fromName] do
381 MoveAnything_CharacterSettings[toName][i] = val;
382 end
383 MoveAnything_FrameOptions = MoveAnything_CharacterSettings[MoveAnything_CurrentSettingsName()];
384 MoveAnything_RefreshPositions();
385 end
386  
387 function MoveAnything_Init()
388 if( MoveAnything_InitRun ) then
389 return;
390 end
391  
392 MoveAnything_AddDefaultFrames();
393  
394 -- update settings from old versions
395 if( MoveAnything_FrameOptions ~= nil ) then
396 MoveAnything_CharacterSettings["default"] = MoveAnything_FrameOptions;
397 MoveAnything_FrameOptions = nil;
398 end
399  
400 local settingname = MoveAnything_CurrentSettingsName();
401  
402 if( MoveAnything_CharacterSettings[settingname] == nil ) then
403 MoveAnything_CharacterSettings[settingname] = {};
404 end
405 MoveAnything_FrameOptions = MoveAnything_CharacterSettings[settingname];
406  
407 -- now add all the custom frames
408 for i, v in MoveAnything_CustomFrames do
409 if( not MoveAnything_FindFrame( v.name ) ) then
410 -- pass true for isDefault, so it doesn't get re-added to the custom list
411 MoveAnything_AddFrameToMovableList( v.name, v.helpfulname, true );
412 end
413 end
414  
415 MoveAnything_InitRun = true;
416  
417 MoveAnything_RefreshPositions();
418 end
419  
420 function MoveAnything_GetFrameCount()
421 return table.getn( MoveAnything_Frames );
422 end
423  
424 function MoveAnything_ClearFrameOptions( frameName )
425 MoveAnything_FrameOptions[frameName] = nil;
426 MoveAnything_RemoveIfCustom( frameName );
427 end
428  
429 function MoveAnything_FindFrameOptions( frameName, why )
430 if( MoveAnything_FrameOptions == nil ) then
431 return;
432 end
433 return MoveAnything_FrameOptions[frameName];
434 end
435  
436 function MoveAnything_FindFrame( frameName )
437 for i in MoveAnything_Frames do
438 if( MoveAnything_Frames[i].name == frameName ) then
439 return MoveAnything_Frames[i];
440 end
441 end
442 return nil;
443 end
444  
445 function MoveAnything_RemoveIfCustom( frameName )
446 local removed = false;
447 for i,v in MoveAnything_CustomFrames do
448 if( v.name == frameName ) then
449 table.remove( MoveAnything_CustomFrames, i );
450 removed = true;
451 break;
452 end
453 end
454 if( removed ) then
455 for i,v in MoveAnything_Frames do
456 if( v.name == frameName ) then
457 table.remove( MoveAnything_Frames, i );
458 break;
459 end
460 end
461 end
462 end
463  
464 function MoveAnything_PreventExternalVisibility( frame )
465 frame.MAWantsToBeVisible = frame:IsVisible();
466 frame:Hide();
467 frame.HiddenShow = frame.Show;
468 frame.HiddenHide = frame.Hide;
469 frame.HiddenIsVisible = frame.IsVisible;
470 frame.Show = MoveAnything_HiddenShow;
471 frame.Hide = MoveAnything_HiddenHide;
472 frame.IsVisible = MoveAnything_HiddenIsVisible;
473 if( frame.attachedChildren ) then
474 for i, val in frame.attachedChildren do
475 MoveAnything_PreventExternalVisibility( val );
476 end
477 end
478 end
479  
480 function MoveAnything_AllowExternalVisibility( frame )
481 frame.Show = frame.HiddenShow;
482 frame.Hide = frame.HiddenHide;
483 frame.IsVisible = frame.HiddenIsVisible;
484 frame.HiddenShow = nil;
485 frame.HiddenHide = nil;
486 frame.HiddenIsVisible = nil;
487 if( frame.MAWantsToBeVisible ) then
488 frame.MAWantsToBeVisible = nil
489 frame:Show();
490 end
491 if( frame.attachedChildren ) then
492 for i, val in frame.attachedChildren do
493 MoveAnything_AllowExternalVisibility( val );
494 end
495 end
496 end
497  
498 function MoveAnything_PreventExternalMovement( frame )
499 if( frame.HiddenSetPoint == nil ) then
500 frame.HiddenSetPoint = frame.SetPoint;
501 frame.SetPoint = function() end;
502 end
503 if( frame.HiddenSetAllPoints == nil ) then
504 frame.HiddenSetAllPoints = frame.SetAllPoints;
505 frame.SetAllPoints = function() end;
506 end
507 if( frame.HiddenClearAllPoints == nil ) then
508 frame.HiddenClearAllPoints = frame.ClearAllPoints;
509 frame.ClearAllPoints = function() end;
510 end
511 if( frame.HiddenSetScale == nil ) then
512 frame.HiddenSetScale = frame.SetScale;
513 frame.SetScale = function() end;
514 end
515 if( frame.attachedChildren ) then
516 for i, val in frame.attachedChildren do
517 MoveAnything_PreventExternalMovement( val );
518 end
519 end
520 end
521  
522 function MoveAnything_AllowExternalMovement( frame )
523 if( frame.HiddenSetPoint ) then
524 frame.SetPoint = frame.HiddenSetPoint;
525 frame.HiddenSetPoint = nil;
526 end
527 if( frame.HiddenSetAllPoints ) then
528 frame.SetAllPoints = frame.HiddenSetAllPoints;
529 frame.HiddenSetAllPoints = nil;
530 end
531 if( frame.HiddenClearAllPoints ) then
532 frame.ClearAllPoints = frame.HiddenClearAllPoints;
533 frame.HiddenClearAllPoints = nil;
534 end
535 if( frame.HiddenSetScale ) then
536 frame.SetScale = frame.HiddenSetScale;
537 frame.HiddenSetScale = nil;
538 end
539 if( frame.attachedChildren ) then
540 for i, val in frame.attachedChildren do
541 MoveAnything_AllowExternalMovement( val );
542 end
543 end
544 end
545  
546 function MoveAnything_HookFrame( frameName )
547 local frame = getglobal( frameName );
548  
549 if( not MoveAnything_IsFrameHooked( frameName ) ) then
550 local opt = MoveAnything_FindFrameOptions( frameName, "HookFrame" );
551 if( opt == nil ) then
552 MoveAnything_FrameOptions[frameName] = {};
553 opt = MoveAnything_FrameOptions[frameName];
554 opt.movable = false;
555 opt.hidden = false;
556 end
557 opt.name = frameName;
558 opt.originalLeft, opt.originalBottom = MoveAnything_GetRelativeBottomLeft( frame );
559 if( MoveAnything_ScaleWH[ frameName ] ) then
560 opt.originalWidth = frame:GetWidth();
561 opt.originalHeight = frame:GetHeight();
562 opt.originalScale = nil;
563 else
564 opt.originalWidth = nil;
565 opt.originalHeight = nil;
566 opt.originalScale = MAGetScale( frame );
567 end
568  
569 end
570 if( UIPanelWindows[frame:GetName()] ) then
571 local left = GetLeftFrame();
572 local center = GetCenterFrame();
573  
574 if( frame == left ) then
575 UIParent.left = nil;
576 if( center ) then
577 MovePanelToLeft();
578 end
579 elseif( frame == center and left ) then
580 UIParent.center = nil;
581 end
582 local opt = MoveAnything_FindFrameOptions( frameName, "Hook UIPanel" );
583 if( opt ) then
584 opt.UIPanelWindows = UIPanelWindows[frame:GetName()];
585 end
586 UIPanelWindows[frame:GetName()] = nil;
587 end
588 if( frame.OnMoveAnythingHook ) then
589 frame.OnMoveAnythingHook( frame );
590 end
591 MoveAnything_PreventExternalMovement( frame );
592 end
593  
594 function MoveAnything_IsFrameHooked( frameName )
595 if( frameName == nil ) then return; end
596 local opt = MoveAnything_FindFrameOptions( frameName, "IsFrameHooked "..frameName );
597 if( opt ) then
598 if( opt.movable or opt.hidden ) then
599 return true;
600 end
601 end
602 return false;
603 end
604  
605 function MoveAnything_IsFrameHidden( frameName )
606 if( frameName == nil ) then return; end
607 local opt = MoveAnything_FindFrameOptions( frameName, "IsFrameHooked "..frameName );
608 if( opt ) then
609 if( opt.hidden ) then
610 return true;
611 end
612 end
613 return false;
614 end
615  
616 function MoveAnything_AddFrameToMovableList( frameName, helpfulName, isDefault )
617 if( not MoveAnything_FindFrame( frameName ) ) then
618 local frame = getglobal( frameName );
619 local listOptions = {};
620 listOptions.name = frameName;
621 listOptions.helpfulName = helpfulName;
622 if( listOptions.helpfulName == nil ) then
623 listOptions.helpfulName = listOptions.name;
624 end
625 table.insert( MoveAnything_Frames, listOptions );
626 -- if this is not a built-in default frame, we also need to add it to CustomFrames
627 if( not isDefault ) then
628 table.insert( MoveAnything_CustomFrames, listOptions );
629 end
630 if( MAOptions:IsVisible() ) then
631 MoveAnythingOptions_Update();
632 end
633 end
634 end
635  
636 function MoveAnything_AddSeparator( separatorText, isDefault )
637 local listOptions = {};
638 listOptions.name = nil;
639 listOptions.helpfulName = separatorText;
640 table.insert( MoveAnything_Frames, listOptions );
641 -- if this is not a built-in default frame, we also need to add it to CustomFrames
642 if( not isDefault ) then
643 table.insert( MoveAnything_CustomFrames, listOptions );
644 end
645 if( MAOptions:IsVisible() ) then
646 MoveAnythingOptions_Update();
647 end
648 end
649  
650 function MoveAnything_SizingAnchor( button )
651 local s, e = string.find( button:GetName(), "Resize_" )
652 local anchorto = string.sub( this:GetName(), e + 1 );
653 local anchor;
654  
655 if( anchorto == "LEFT" ) then anchor = "RIGHT";
656 elseif( anchorto == "RIGHT" ) then anchor = "LEFT";
657 elseif( anchorto == "TOP" ) then anchor = "BOTTOM";
658 elseif( anchorto == "BOTTOM" ) then anchor = "TOP";
659 end
660  
661 return anchorto, anchor;
662 end
663  
664 function MoveAnything_Move( moveFrameName, helpfulName )
665 if( MoveAnything_MoveOnlyWhenVisible[ moveFrameName ] ) then
666 local frame = getglobal( moveFrameName );
667 if( frame == nil or not frame:IsVisible() ) then
668 Error( "That window may only be moved when it is visible" );
669 return;
670 end
671 end
672  
673 if( not MoveAnything_FindMAFrame( moveFrameName ) ) then
674 local frame = MoveAnything_FindAvailableFrame();
675 if( frame == nil ) then
676 Error( "You can only move "..MOVEANYTHING_MOVEATONETIME.." frames at once." );
677 elseif( getglobal( moveFrameName ) == nil ) then
678 Error( "\""..moveFrameName.."\" is not a valid frame name." );
679 else
680 local moveFrame = getglobal( moveFrameName );
681 MoveAnything_AddFrameToMovableList( moveFrameName, helpfulName );
682 MoveAnything_HookFrame( moveFrameName );
683 MoveAnything_Attach( frame, getglobal( moveFrameName ) );
684 if( moveFrame.OnMoveAnythingPostAttach ) then
685 moveFrame.OnMoveAnythingPostAttach( moveFrame );
686 end
687 if( MAOptions:IsVisible() ) then
688 MoveAnythingOptions_Update();
689 end
690 end
691 end
692 end
693  
694 function MA_Mover(dir)
695 if ( dir > 0 ) then
696 if ( CurrentMover < 20 ) then
697 CurrentMover = CurrentMover + 1;
698 else
699 return;
700 end
701 else
702 if ( CurrentMover > 1 ) then
703 CurrentMover = CurrentMover - 1;
704 else
705 return;
706 end
707 end
708 MA_NudgerFrameRefresh();
709 end
710  
711 function MA_GetFirstMover()
712 for i = 1, 20 do
713 if ( getglobal("MoveAnything"..i):IsVisible() ) then
714 return i;
715 end
716 end
717 end
718  
719 function MoveAnythingOptions_OnHide()
720 MA_MoverOnHide();
721 end
722  
723 function MA_MoverOnShow()
724 ResizingNudger:Show();
725 CurrentMover = tonumber(this:GetID());
726 MA_NudgerFrameRefresh();
727 end
728  
729 function MA_MoverOnHide()
730 if ( MA_GetFirstMover() ) then
731 CurrentMover = MA_GetFirstMover();
732 MA_NudgerFrameRefresh();
733 elseif ( MAOptions:IsVisible() ) then
734 CurrentMover = 1;
735 MA_NudgerFrameRefresh(1);
736 else
737 ResizingNudger:Hide();
738 end
739 end
740  
741 function MA_NudgerOnShow()
742 MA_NudgerFrameRefresh();
743 end
744  
745 function MA_NudgerFrameRefresh(reset)
746 if ( CurrentMover < 20 ) then
747 ResizingNudger_MoverPlus:Enable();
748 else
749 ResizingNudger_MoverPlus:Disable();
750 end
751 if ( CurrentMover > 1 ) then
752 ResizingNudger_MoverMinus:Enable();
753 else
754 ResizingNudger_MoverMinus:Disable();
755 end
756  
757 local labelText = "MA "..CurrentMover.."/20";
758 if ( not reset and getglobal("MoveAnything"..CurrentMover).tagged ) then
759 labelText = labelText.."\n"..getglobal("MoveAnything"..CurrentMover).tagged:GetName();
760 end
761 ResizingNudgerTitle:SetText(labelText);
762 end
763  
764 function MA_NudgerOnUpdate()
765 -- This code is ripped from DiscordART :)
766 local obj = GetMouseFocus();
767 local text = "MouseOver: ";
768 local label = ResizingNudgerMouseOver;
769  
770 if (obj and obj ~= WorldFrame and obj:GetName()) then
771 text = text..obj:GetName();
772 if (obj:GetParent() and obj:GetParent() ~= WorldFrame and obj:GetParent():GetName() ) then
773 text = text.."\nParent: "..obj:GetParent():GetName();
774 if (obj:GetParent():GetParent() and obj:GetParent():GetParent() ~= WorldFrame and obj:GetParent():GetParent():GetName()) then
775 text = text.."\nParent's Parent: "..obj:GetParent():GetParent():GetName();
776 end
777 end
778 end
779  
780 if ( not string.find(text, "ResizingNudger") ) then
781 label:SetText(text);
782 else
783 label:SetText("MouseOver: ");
784 end
785 end
786  
787 function MoveAnything_MoveFrameUnderCursor()
788 local obj = GetMouseFocus();
789 if (obj and obj ~= WorldFrame and obj ~= UIParent and obj:GetName()) then
790 MoveAnything_ToggleMove( obj:GetName() );
791 end
792 end
793  
794 function MA_Center(lock)
795 local mover = getglobal("MoveAnything"..CurrentMover);
796 if ( lock == 0 ) then
797 -- Both
798 mover:ClearAllPoints();
799 mover:SetPoint("CENTER",0,0);
800 else
801 local x, y;
802 x = mover:GetLeft();
803 y = mover:GetBottom();
804  
805 mover:ClearAllPoints();
806 if ( lock == 1 ) then
807 --Horizontal
808 mover:SetPoint("CENTER",0,0);
809 x = mover:GetLeft();
810 mover:ClearAllPoints();
811 mover:SetPoint("BOTTOMLEFT",x,y);
812 elseif ( lock == 2 ) then
813 -- Vertical
814 mover:SetPoint("CENTER",0,0);
815 y = mover:GetBottom();
816 mover:ClearAllPoints();
817 mover:SetPoint("BOTTOMLEFT",x,y);
818 end
819 end
820  
821 MoveAnything_UpdatePosition(mover);
822 end
823  
824 function MA_Nudge(dir, button)
825 local x, y, offsetX, offsetY, parent, mover, offsetAmount;
826 mover = getglobal("MoveAnything"..CurrentMover);
827  
828 if ( not mover:IsVisible() ) then
829 return;
830 end
831  
832 x = mover:GetLeft();
833 y = mover:GetBottom();
834  
835 if ( button == "RightButton" ) then
836 if ( IsShiftKeyDown() ) then
837 offsetAmount = 250;
838 else
839 offsetAmount = 50;
840 end
841 else
842 if ( IsShiftKeyDown() ) then
843 offsetAmount = 10;
844 else
845 offsetAmount = 1;
846 end
847 end
848  
849 if ( dir == 1 ) then
850 offsetX = 0;
851 offsetY = offsetAmount;
852 elseif ( dir == 2 ) then
853 offsetX = 0;
854 offsetY = -offsetAmount;
855 elseif ( dir == 3 ) then
856 offsetX = -offsetAmount;
857 offsetY = 0;
858 elseif ( dir == 4 ) then
859 offsetX = offsetAmount;
860 offsetY = 0;
861 end
862  
863 mover:ClearAllPoints();
864 mover:SetPoint("BOTTOMLEFT","UIParent","BOTTOMLEFT",x + offsetX, y + offsetY);
865 MoveAnything_UpdatePosition(mover);
866 end
867  
868 function MoveAnything_UpdatePosition( moveFrame )
869 local x, y, parent;
870 x = nil;
871 y = nil;
872 parent = nil;
873 if( moveFrame.tagged ) then
874 if( MoveAnything_DetachFromParent[ moveFrame.tagged:GetName() ] ) then
875 x = moveFrame.tagged:GetLeft();
876 y = moveFrame.tagged:GetBottom();
877 parent = UIParent;
878 else
879 x, y = MoveAnything_GetRelativeBottomLeft( moveFrame.tagged );
880 parent = MAGetParent( moveFrame.tagged );
881 end
882 local opt = MoveAnything_FindFrameOptions( moveFrame.tagged:GetName(), "UpdatePosition" );
883 opt.x = x;
884 opt.y = y;
885 end
886 return x, y, parent;
887 end
888  
889 function MoveAnything_StopMoving( moveFrameName )
890 local frame = MoveAnything_FindMAFrame( moveFrameName );
891 if( frame ) then
892 MoveAnything_Detach( frame );
893 if( MAOptions:IsVisible() ) then
894 MoveAnythingOptions_Update();
895 end
896 end
897 end
898  
899 function MoveAnything_ToggleMove( moveFrameName )
900 if( MoveAnything_FindMAFrame( moveFrameName ) ) then
901 MoveAnything_StopMoving( moveFrameName );
902 else
903 MoveAnything_Move( moveFrameName );
904 end
905 end
906  
907 function MoveAnything_FindMAFrame( moveFrameName )
908 local frame;
909 for i = 1, MOVEANYTHING_MOVEATONETIME, 1 do
910 frame = getglobal( "MoveAnything"..i );
911 if( type(frame) ~= "nil" and frame:IsVisible() and frame.tagged == getglobal( moveFrameName ) ) then
912 return frame;
913 end
914 end
915 return nil;
916 end
917  
918 function MoveAnything_FindAvailableFrame()
919 local frame;
920 for i = 1, MOVEANYTHING_MOVEATONETIME, 1 do
921 frame = getglobal( "MoveAnything"..i );
922 if( not( frame:IsVisible() ) ) then
923 return frame;
924 end
925 end
926 return nil;
927 end
928  
929 function MoveAnything_OnSizeChanged( this )
930 if( this.tagged ) then
931 local s, w, h, opt;
932  
933 opt = MoveAnything_FindFrameOptions( this.tagged:GetName(), "OnSizeChanged" );
934  
935 if( MoveAnything_ScaleWH[ this.tagged:GetName() ] ) then
936 this.tagged:SetHeight( this:GetHeight() );
937 this.tagged:SetWidth( this:GetWidth() );
938 -- if this ever needs to apply to a frame with attached children,
939 -- we're going to have to figure out what to do, since setting
940 -- the W and H directly is definitely incorrect
941  
942 if( opt ) then
943 opt.width = this:GetHeight();
944 opt.height = this:GetHeight();
945 end
946 else
947 if( this.MASizingAnchor == "LEFT" or this.MASizingAnchor == "RIGHT" ) then
948 w = this:GetWidth();
949 h = w * (this.tagged:GetHeight() / this.tagged:GetWidth());
950 if( h < 16 ) then
951 h = 16;
952 w = h * (this.tagged:GetWidth() / this.tagged:GetHeight());
953 end
954 else
955 h = this:GetHeight();
956 w = h * (this.tagged:GetWidth() / this.tagged:GetHeight());
957 if( w < 16 ) then
958 w = 16;
959 h = w * (this.tagged:GetHeight() / this.tagged:GetWidth());
960 end
961 end
962 s = this:GetWidth() / this.tagged:GetWidth();
963 s = s / MAGetScale( this.tagged:GetParent(), 1 ) * UIParent:GetScale();
964  
965 if( MoveAnything_ScaleAllowed( this.tagged:GetName() ) ) then
966 if( opt ) then
967 opt.scale = s;
968 end
969  
970 this.tagged:HiddenSetScale( s );
971 if( this.tagged.attachedChildren ) then
972 for i, v in this.tagged.attachedChildren do
973 v:HiddenSetScale( s );
974 end
975 end
976 end
977 this:SetWidth( w );
978 this:SetHeight( h );
979 end
980 end
981 end
982  
983 function MoveAnything_GetParentScaleRatio( frame )
984 return MAGetScale( frame, 1 );
985 end
986  
987 --[[
988 function MoveAnything_GetRelativeBottomLeft( tagFrame )
989 x = tagFrame:GetLeft();
990 if( x ) then
991 x = x - MAGetParent( tagFrame ):GetLeft() * MAGetScale( tagFrame );
992 end
993 y = tagFrame:GetBottom();
994 if( y ) then
995 y = y - MAGetParent( tagFrame ):GetBottom() * MAGetScale( tagFrame );
996 end
997 return x,y;
998 end
999 ]]
1000  
1001 function MoveAnything_GetRelativeBottomLeft( tagFrame )
1002 x = tagFrame:GetLeft();
1003 if( x ) then
1004 x = x - MAGetParent( tagFrame ):GetLeft() * MAGetScale( MAGetParent( tagFrame ) ) / MAGetScale( tagFrame );
1005 end
1006 y = tagFrame:GetBottom();
1007 if( y ) then
1008 y = y - MAGetParent( tagFrame ):GetBottom() * MAGetScale( MAGetParent( tagFrame ) ) / MAGetScale( tagFrame );
1009 end
1010 return x,y;
1011 end
1012  
1013 function MoveAnything_Attach( moveFrame, tagFrame )
1014 if( moveFrame.tagged ) then
1015 MoveAnything_Detach( moveFrame );
1016 end
1017  
1018 local listOptions = MoveAnything_FindFrame( tagFrame:GetName() );
1019 local frameOptions = MoveAnything_FindFrameOptions( tagFrame:GetName(), "Attach" );
1020 frameOptions.movable = true;
1021 moveFrame.helpfulName = listOptions.helpfulName;
1022  
1023 if( tagFrame.OnBeginMove ) then
1024 if( not tagFrame:OnBeginMove() ) then
1025 MoveAnything_Detach( moveFrame );
1026 return;
1027 end
1028 end
1029  
1030 local x, y;
1031 if( tagFrame:GetLeft() == nil ) then tagFrame:Show(); tagFrame:Hide(); end
1032 x = tagFrame:GetLeft() * MAGetScale( tagFrame, 1 ) / UIParent:GetScale();
1033 x = x - MAGetParent( tagFrame ):GetLeft() * MAGetScale( MAGetParent( tagFrame ), 1 ) / UIParent:GetScale();
1034  
1035 y = tagFrame:GetBottom() * MAGetScale( tagFrame, 1 ) / UIParent:GetScale();
1036 y = y - MAGetParent( tagFrame ):GetBottom() * MAGetScale( MAGetParent( tagFrame ), 1 ) / UIParent:GetScale();
1037  
1038 moveFrame:ClearAllPoints();
1039 moveFrame:SetPoint( "BOTTOMLEFT", MAGetParent( tagFrame ):GetName(), "BOTTOMLEFT", x, y );
1040 moveFrame:SetWidth( tagFrame:GetWidth() * MAGetScale( tagFrame , 1 ) / UIParent:GetScale() );
1041 moveFrame:SetHeight( tagFrame:GetHeight() * MAGetScale( tagFrame, 1 ) / UIParent:GetScale() ); moveFrame:SetFrameLevel( tagFrame:GetFrameLevel() + 1 );
1042 tagFrame:HiddenClearAllPoints();
1043 tagFrame:HiddenSetPoint( "BOTTOMLEFT", moveFrame:GetName(), "BOTTOMLEFT", 0, 0 );
1044  
1045 moveFrame.tagged = tagFrame;
1046  
1047 moveFrame:Show();
1048 end
1049  
1050 function MoveAnything_Detach( moveFrame )
1051 if( moveFrame.tagged ) then
1052 local x, y, parent = MoveAnything_UpdatePosition( moveFrame );
1053 moveFrame.tagged:HiddenClearAllPoints();
1054 moveFrame.tagged:HiddenSetPoint( "BOTTOMLEFT", parent:GetName(), "BOTTOMLEFT", x, y );
1055 end
1056 moveFrame:Hide();
1057 moveFrame.tagged = nil;
1058 end
1059  
1060 function MoveAnything_ResetFrameOptions( frameName )
1061 MoveAnything_StopMoving( frameName );
1062 local frame = getglobal( frameName );
1063 if ( not frame ) then return; end
1064  
1065 if( frame.OnMoveAnythingPreReset ) then
1066 frame.OnMoveAnythingPreReset( frame );
1067 end
1068  
1069 MoveAnything_AllowExternalMovement( frame );
1070 local opt = MoveAnything_FindFrameOptions( frameName, "Reset Frame Options" );
1071 local left = nil;
1072 local bottom = nil;
1073 local hidden = false;
1074 local width = nil;
1075 local height = nil;
1076 if( opt ) then
1077 left = opt.originalLeft;
1078 bottom = opt.originalBottom;
1079 width = opt.originalWidth;
1080 height = opt.originalHeight;
1081 if( opt.hidden ) then
1082 opt.hidden = false;
1083 MoveAnything_ShowFrame( frame );
1084 end
1085 end
1086 frame:ClearAllPoints();
1087 frame:SetPoint( "BOTTOMLEFT", MAGetParent( frame ):GetName(), "BOTTOMLEFT", left, bottom );
1088 if( MoveAnything_ScaleAllowed( frame:GetName() ) ) then
1089 frame:SetScale( opt.originalScale );
1090 end
1091 if( width ) then frame:SetWidth( width ); end
1092 if( height ) then frame:SetHeight( height ); end
1093 if( frame.attachedChildren ) then
1094 for i, v in frame.attachedChildren do
1095 if( MoveAnything_ScaleAllowed( frame:GetName() ) ) then
1096 v:SetScale( opt.originalScale );
1097 end
1098 end
1099 end
1100  
1101 if( frame.OnMoveAnythingPostReset ) then
1102 frame.OnMoveAnythingPostReset( frame );
1103 end
1104  
1105 frame.attachedChildren = nil;
1106 if( opt and opt.UIPanelWindows ) then
1107 UIPanelWindows[frameName] = opt.UIPanelWindows;
1108 if( frame:IsVisible() ) then
1109 frame:Hide();
1110 ShowUIPanel( frame );
1111 end
1112 end
1113 MoveAnything_ClearFrameOptions( frameName );
1114 if( MAOptions:IsVisible() ) then
1115 MoveAnythingOptions_Update();
1116 end
1117 end
1118  
1119 function MoveAnything_ToggleOptionsMenu()
1120 if( MAOptions:IsVisible() ) then
1121 MAOptions:Hide();
1122 else
1123 MAOptions:Show();
1124 end
1125 end
1126  
1127 function MoveAnythingOptions_OnShow()
1128 ResizingNudger:Show();
1129 MoveAnythingOptions_Update();
1130 end
1131  
1132 function MoveAnything_GetIndex( frame )
1133 local index = tonumber( string.sub( frame:GetName(), string.len( "MAMove" ) + 1, -1 ) );
1134 return index + FauxScrollFrame_GetOffset( MAScrollFrame );
1135 end
1136  
1137 function MoveAnything_GetMovableFrame( optionsListFrame )
1138 local index = MoveAnything_GetIndex( optionsListFrame );
1139 return getglobal( MoveAnything_Frames[index].name );
1140 end
1141  
1142 function MoveAnything_OnMoveCheck( button )
1143 local frame = MoveAnything_GetMovableFrame( MAGetParent( button ) );
1144 if ( not frame ) then return; end
1145 if( button:GetChecked() ) then
1146 MoveAnything_Move( frame:GetName() );
1147 else
1148 MoveAnything_StopMoving( frame:GetName() );
1149 end
1150 if( MAOptions:IsVisible() ) then
1151 MoveAnythingOptions_Update();
1152 end
1153 end
1154  
1155 function MoveAnything_HiddenShow( this )
1156 this.MAWantsToBeVisible = true;
1157 end
1158  
1159 function MoveAnything_HiddenHide( this )
1160 this.MAWantsToBeVisible = false;
1161 end
1162  
1163 function MoveAnything_HiddenIsVisible( this )
1164 return this.MAWantsToBeVisible;
1165 end
1166  
1167 function MoveAnything_HideFrame( frame )
1168 if ( not frame ) then return; end
1169 if ( not MoveAnything_IsFrameHooked( frame:GetName() ) ) then
1170 MoveAnything_HookFrame( frame:GetName() );
1171 end
1172 local opt = MoveAnything_FindFrameOptions( frame:GetName(), "HideFrame" );
1173 opt.hidden = true;
1174 frame.MAWantsToBeVisible = frame:IsVisible();
1175 if( MoveAnything_HideList[ frame:GetName() ] ) then
1176 for hIndex, hideEntry in MoveAnything_HideList[ frame:GetName() ] do
1177 local val = getglobal( hideEntry[1] );
1178 local hideType;
1179 for i = 2, table.getn( hideEntry ) do
1180 hideType = hideEntry[i];
1181 if( type( hideType ) == "function" ) then
1182 hideType( false );
1183 elseif( hideType == "DISABLEMOUSE" ) then
1184 val:EnableMouse( false );
1185 elseif( hideType == "FRAME" ) then
1186 MoveAnything_PreventExternalVisibility( val );
1187 elseif( hideType == "WH" ) then
1188 MoveAnything_StopMoving( frame:GetName() );
1189 val:SetWidth( 1 );
1190 val:SetHeight( 1 );
1191 else
1192 val:DisableDrawLayer( hideType );
1193 end
1194 end
1195 end
1196 elseif( MoveAnything_HideUsingWH[ frame:GetName() ] ) then
1197 MoveAnything_StopMoving( frame:GetName() );
1198 frame:SetWidth( 1 );
1199 frame:SetHeight( 1 );
1200 else
1201 MoveAnything_PreventExternalVisibility( frame );
1202 end
1203 end
1204  
1205 function MoveAnything_ShowFrame( frame )
1206 -- if being hidden is the only thing we're controlling with this frame
1207 -- do a full reset instead of a simple show
1208 if ( not frame ) then return; end
1209 local opt = MoveAnything_FindFrameOptions( frame:GetName(), "ShowFrame" );
1210 if( opt and opt.hidden ) then
1211 if( not opt.movable ) then
1212 MoveAnything_ResetFrameOptions( frame:GetName() );
1213 return;
1214 end
1215 end
1216  
1217 if( opt ) then
1218 opt.hidden = false;
1219 end
1220 if( MoveAnything_HideList[ frame:GetName() ] ) then
1221 for hIndex, hideEntry in MoveAnything_HideList[ frame:GetName() ] do
1222 local val = getglobal( hideEntry[1] );
1223 local hideType;
1224 for i = 2, table.getn( hideEntry ) do
1225 hideType = hideEntry[i];
1226 if( type( hideType ) == "function" ) then
1227 hideType( true );
1228 elseif( hideType == "DISABLEMOUSE" ) then
1229 val:EnableMouse( true );
1230 elseif( hideType == "FRAME" ) then
1231 MoveAnything_AllowExternalVisibility( val );
1232 elseif( hideType == "WH" ) then
1233 val:SetWidth( opt.originalWidth );
1234 val:SetHeight( opt.originalHeight );
1235 else
1236 val:EnableDrawLayer( hideType );
1237 end
1238 end
1239 end
1240 elseif( MoveAnything_HideUsingWH[ frame:GetName() ] ) then
1241 frame:SetWidth( opt.originalWidth );
1242 frame:SetHeight( opt.originalHeight );
1243 else
1244 MoveAnything_AllowExternalVisibility( frame );
1245 end
1246 end
1247  
1248 function MoveAnything_OnHideCheck( button )
1249 local frame = MoveAnything_GetMovableFrame( MAGetParent( button ) );
1250 if ( not frame ) then return; end
1251 if( button:GetChecked() ) then
1252 MoveAnything_HideFrame( frame );
1253 else
1254 MoveAnything_ShowFrame( frame );
1255 end
1256 MoveAnythingOptions_Update();
1257 end
1258  
1259 function MoveAnything_OnResetCheck( button )
1260 local frame = MoveAnything_GetMovableFrame( MAGetParent( button ) );
1261 if ( not frame ) then return; end
1262 MoveAnything_ResetFrameOptions( frame:GetName() );
1263 end
1264  
1265 function MoveAnything_OnCheckCharacterSpecific( button )
1266 local oldName = MoveAnything_CurrentSettingsName();
1267 if( button:GetChecked() ) then
1268 MoveAnything_UseCharacterSettings = true;
1269 MoveAnything_CopySettings( oldName, MoveAnything_CurrentSettingsName() );
1270 else
1271 MoveAnything_UseCharacterSettings = false;
1272 MoveAnything_CopySettings( oldName, MoveAnything_CurrentSettingsName() );
1273 end
1274 MoveAnythingOptions_Update();
1275 end
1276  
1277 function MoveAnythingOptions_Update()
1278 FauxScrollFrame_Update(MAScrollFrame, MoveAnything_GetFrameCount(), 10, MOVEANYTHING_SCROLL_HEIGHT );
1279  
1280 for i=1, 10, 1 do
1281 local index = FauxScrollFrame_GetOffset(MAScrollFrame) + i;
1282 if( index <= MoveAnything_GetFrameCount() ) then
1283 local f = getglobal( "MAMove"..i.."FrameNameText" );
1284 f:SetText( MoveAnything_Frames[index].helpfulName );
1285 if( MoveAnything_Frames[index] ) then
1286 getglobal( "MAMove"..i ):Show();
1287 end
1288  
1289 local opt = MoveAnything_FindFrameOptions( MoveAnything_Frames[index].name, "MAOptions Update" );
1290 if( MoveAnything_Frames[index].name ) then
1291 getglobal( "MAMove"..i.."Backdrop" ):Show();
1292 getglobal( "MAMove"..i.."Move" ):Show();
1293 else
1294 getglobal( "MAMove"..i.."Backdrop" ):Hide();
1295 getglobal( "MAMove"..i.."Move" ):Hide();
1296 end
1297  
1298 if( MoveAnything_FindMAFrame( MoveAnything_Frames[index].name ) ) then
1299 getglobal( "MAMove"..i.."Move" ):SetChecked( 1 );
1300 else
1301 getglobal( "MAMove"..i.."Move" ):SetChecked( nil );
1302 end
1303 if( opt and opt.hidden ) then
1304 getglobal( "MAMove"..i.."Hide" ):SetChecked( 1 );
1305 else
1306 getglobal( "MAMove"..i.."Hide" ):SetChecked( nil );
1307 end
1308  
1309 -- disallow hiding?
1310 if( not MoveAnything_Frames[index].name or
1311 MoveAnything_NoHide[ MoveAnything_Frames[index].name ] ) then
1312 getglobal( "MAMove"..i.."Hide" ):Hide();
1313 else
1314 getglobal( "MAMove"..i.."Hide" ):Show();
1315 end
1316  
1317 -- add a reset button if it's movable
1318 if( MoveAnything_IsFrameHooked( MoveAnything_Frames[index].name ) ) then
1319 getglobal( "MAMove"..i.."Reset" ):Show();
1320 else
1321 getglobal( "MAMove"..i.."Reset" ):Hide();
1322 end
1323 else
1324 getglobal( "MAMove"..i ):Hide();
1325 end
1326  
1327 end
1328  
1329 if( MoveAnything_UseCharacterSettings ) then
1330 MAOptionsCharacterSpecific:SetChecked( 1 );
1331 else
1332 MAOptionsCharacterSpecific:SetChecked( nil );
1333 end
1334 end
1335  
1336 function FuckMe()
1337 MoveAnything_FrameOptions = {};
1338 end
1339  
1340 function MoveAnythingOptions_ResetAll()
1341 for i,v in MoveAnything_FrameOptions do
1342 MoveAnything_ResetFrameOptions( v.name );
1343 end
1344 MoveAnything_FrameOptions = {};
1345 end
1346  
1347 function MoveAnything_FindContainerFrame( id )
1348 local i = 1;
1349 local container;
1350 while( 1 ) do
1351 container = getglobal( "ContainerFrame"..i );
1352 if( not container ) then break; end
1353 if( container:IsVisible() and container:GetID() == id ) then
1354 return container;
1355 end
1356 i = i + 1;
1357 end
1358 return nil;
1359 end
1360  
1361 function MoveAnything_GrabContainerFrame( container, movableBag )
1362 if( movableBag and MoveAnything_IsFrameHooked( movableBag:GetName() ) ) then
1363 MoveAnything_PreventExternalMovement( container );
1364 container.MAContainerOriginalScale = MAGetScale( container );
1365 movableBag:Show();
1366 container:HiddenClearAllPoints();
1367 container:HiddenSetScale( MAGetScale( movableBag ) );
1368 --container:HiddenSetPoint( "BOTTOMLEFT", "UIParent", "BOTTOMLEFT", movableBag:GetLeft(), movableBag:GetBottom() );
1369 container:HiddenSetPoint( "BOTTOMLEFT", movableBag:GetName(), "BOTTOMLEFT", 0, 0 );
1370 movableBag.attachedChildren = {};
1371 table.insert( movableBag.attachedChildren, container );
1372 end
1373 end
1374  
1375 function MoveAnything_RemoveContainerFromList( container )
1376 -- Remove this bag from the list and collapse the rest of the entries
1377 local index = 1;
1378 local tempIndex;
1379 while ContainerFrame1.bags[index] do
1380 if ( ContainerFrame1.bags[index] == container:GetName() ) then
1381 ContainerFrame1.bagsShown = ContainerFrame1.bagsShown - 1;
1382 local tempIndex = index;
1383 while ContainerFrame1.bags[tempIndex] do
1384 if ( ContainerFrame1.bags[tempIndex + 1] ) then
1385 ContainerFrame1.bags[tempIndex] = ContainerFrame1.bags[tempIndex + 1];
1386 else
1387 ContainerFrame1.bags[tempIndex] = nil;
1388 end
1389 tempIndex = tempIndex + 1;
1390 end
1391 end
1392 index = index + 1;
1393 end
1394 updateContainerFrameAnchors();
1395 end
1396  
1397 -- TOOLTIP HOOKS
1398 MoveAnything_OriginalSetDefaultAnchor = GameTooltip_SetDefaultAnchor;
1399 function GameTooltip_SetDefaultAnchor(tooltip, parent)
1400 if( MoveAnything_IsFrameHooked( "TooltipMover" ) and tooltip == GameTooltip ) then
1401 -- anchor the tooltip to the side of the mover that is closest to the edge
1402 local l, r, t, b, a, anchor;
1403 l = TooltipMover:GetLeft() - UIParent:GetLeft();
1404 r = UIParent:GetRight() - TooltipMover:GetRight();
1405 t = UIParent:GetTop() - TooltipMover:GetTop();
1406 b = TooltipMover:GetBottom() - UIParent:GetBottom();
1407 a = t;
1408 anchor = "TOP";
1409 if( l < a ) then a = l; anchor = "LEFT"; end
1410 if( r < a ) then a = r; anchor = "RIGHT"; end
1411 if( b < a ) then a = b; anchor = "BOTTOM"; end
1412  
1413 tooltip:ClearAllPoints();
1414 tooltip:SetOwner(parent, "ANCHOR_NONE");
1415 tooltip:SetPoint( anchor, "TooltipMover", anchor, 0, 0 );
1416 tooltip.default = 1;
1417 else
1418 tooltip:ClearAllPoints();
1419 MoveAnything_OriginalSetDefaultAnchor( tooltip, parent );
1420 end
1421 end
1422 MoveAnything_OriginalGameTooltip_OnHide = GameTooltip_OnHide;
1423 function GameTooltip_OnHide()
1424 MoveAnything_AllowExternalMovement( this );
1425 MoveAnything_OriginalGameTooltip_OnHide();
1426 end
1427  
1428 -- BAG FRAME HOOKS
1429 MoveAnything_BagFrames = {};
1430 MoveAnything_OriginalGenerateFrame = ContainerFrame_GenerateFrame;
1431 function ContainerFrame_GenerateFrame(frame, size, id)
1432 local bag = MoveAnything_BagFrames[id]
1433 MoveAnything_OriginalGenerateFrame( frame, size, id );
1434 MoveAnything_GrabContainerFrame( frame, bag );
1435 end
1436 MoveAnything_OriginalOnHide = ContainerFrame_OnHide;
1437 function ContainerFrame_OnHide()
1438 local bag = MoveAnything_BagFrames[this:GetID()];
1439 if( bag and MoveAnything_IsFrameHooked( bag:GetName() ) ) then
1440 MoveAnything_AllowExternalMovement( this );
1441 if( this.MAContainerOriginalScale ) then
1442 this:SetScale( this.MAContainerOriginalScale );
1443 this.MAContainerOriginalScale = nil;
1444 end
1445 this:ClearAllPoints();
1446 -- we removed the container from the list before, but now we have to add
1447 -- it back, since the container code is going to try to remove it, and doesn't
1448 -- particularly care if it's already gone
1449 ContainerFrame1.bagsShown = ContainerFrame1.bagsShown + 1;
1450 ContainerFrame1.bags[ContainerFrame1.bagsShown] = this:GetName();
1451 end
1452 MoveAnything_OriginalOnHide();
1453 end
1454 MoveAnything_OriginalOnShow = ContainerFrame_OnShow;
1455 function ContainerFrame_OnShow()
1456 MoveAnything_OriginalOnShow();
1457 local bag = MoveAnything_BagFrames[this:GetID()];
1458 if( bag and MoveAnything_IsFrameHooked( bag:GetName() ) ) then
1459 MoveAnything_RemoveContainerFromList( this );
1460 end
1461 end
1462  
1463 -- TALENT BUTTON HOOK
1464 MoveAnything_OriginalUpdateTalentButton = UpdateTalentButton;
1465 function UpdateTalentButton()
1466 if( MoveAnything_IsFrameHooked( "MicroButtonsVerticalMover" ) ) then
1467 if ( UnitLevel("player") < 10 ) then
1468 TalentMicroButton:Hide();
1469 QuestLogMicroButton:SetPoint("TOPLEFT", "TalentMicroButton", "TOPLEFT", 0, 0);
1470 else
1471 TalentMicroButton:Show();
1472 QuestLogMicroButton:SetPoint("TOPLEFT", "TalentMicroButton", "BOTTOMLEFT", 0, 24);
1473 end
1474 else
1475 MoveAnything_OriginalUpdateTalentButton();
1476 end
1477 end
1478  
1479 --- UI PANEL HOOKS
1480 function MoveAnything_SetLeftFrameLocation()
1481 local left = GetLeftFrame();
1482 if( left ) then
1483 if( MoveAnything_IsFrameHooked( "UIPanelMover1" ) ) then
1484 left:ClearAllPoints();
1485 left:SetPoint( "TOPLEFT", "UIPanelMover1", "TOPLEFT" );
1486 left:SetScale( MAGetScale( UIPanelMover1 ), 1 );
1487 else
1488 left:SetScale( 1 );
1489 end
1490 end
1491 end
1492  
1493 function MoveAnything_SetCenterFrameLocation()
1494 -- don't mess with the normal center panels, just the ones
1495 -- that are pushed over from the left
1496 if( GetLeftFrame() ) then
1497 local center = GetCenterFrame();
1498 if( center ) then
1499 if( MoveAnything_IsFrameHooked( "UIPanelMover2" ) ) then
1500 center:ClearAllPoints();
1501 center:SetPoint( "TOPLEFT", "UIPanelMover2", "TOPLEFT" );
1502 center:SetScale( MAGetScale( UIPanelMover2 ), 1 );
1503 else
1504 center:SetScale( 1 );
1505 end
1506 end
1507 end
1508 end
1509  
1510 MoveAnything_OriginalShowUIPanel = ShowUIPanel;
1511 function ShowUIPanel(frame)
1512 MoveAnything_OriginalShowUIPanel(frame);
1513 MoveAnything_SetLeftFrameLocation();
1514 MoveAnything_SetCenterFrameLocation();
1515 end
1516 MoveAnything_OriginalMovePanelToLeft = MovePanelToLeft;
1517 function MovePanelToLeft()
1518 MoveAnything_OriginalMovePanelToLeft();
1519 MoveAnything_SetLeftFrameLocation();
1520 end
1521 MoveAnything_OriginalMovePanelToCenter = MovePanelToCenter;
1522 function MovePanelToCenter()
1523 MoveAnything_OriginalMovePanelToCenter();
1524 MoveAnything_SetCenterFrameLocation();
1525 end
1526 MoveAnything_OriginalCloseAllWindows = CloseAllWindows;
1527 function CloseAllWindows(ignoreCenter)
1528 local closed = nil, oclosed;
1529 for i, v in MoveAnything_Frames do
1530 if( MoveAnything_IsFrameHooked( v.name ) ) then
1531 local opt = MoveAnything_FindFrameOptions( v.name, "CloseAllWindows" );
1532 if( opt and opt.UIPanelWindows ) then
1533 if ( type(getglobal(v.name)) ~= "nil" ) then
1534 if( getglobal( v.name ):IsVisible() ) then
1535 getglobal( v.name ):Hide();
1536 closed = true;
1537 end
1538 end
1539 end
1540 end
1541 end
1542 oclosed = MoveAnything_OriginalCloseAllWindows( ignoreCenter );
1543 if( oclosed or closed ) then
1544 return true;
1545 end
1546 return nil;
1547 end
1548  
1549 --- ACTION BUTTON HOOKS
1550 MoveAnything_OriginalShowBonusActionBar = ShowBonusActionBar;
1551 function ShowBonusActionBar()
1552 if( MoveAnything_IsFrameHooked( "BasicActionButtonsMover" ) or
1553 MoveAnything_IsFrameHooked( "BasicActionButtonsVerticalMover" ) or
1554 MoveAnything_IsFrameHidden( "MainMenuBar" ) ) then
1555 for i = 1, 12, 1 do
1556 getglobal( "ActionButton"..i ):Hide();
1557 MoveAnything_PreventExternalVisibility( getglobal( "ActionButton"..i ) );
1558 end
1559 end
1560 MoveAnything_OriginalShowBonusActionBar();
1561 end
1562  
1563 MoveAnything_OriginalHideBonusActionBar = HideBonusActionBar;
1564 function HideBonusActionBar()
1565 local hooked = nil;
1566 local opt = nil;
1567 if( MoveAnything_IsFrameHooked( "BasicActionButtonsMover" ) ) then
1568 hooked = "BasicActionButtonsMover";
1569 elseif( MoveAnything_IsFrameHooked( "BasicActionButtonsVerticalMover" ) ) then
1570 hooked = "BasicActionButtonsVerticalMover";
1571 end
1572 if( hooked ) then
1573 opt = MoveAnything_FindFrameOptions( hooked, "HideBonusActionBar" );
1574 end
1575 if( hooked or MoveAnything_IsFrameHidden( "MainMenuBar" ) ) then
1576 for i = 1, 12, 1 do
1577 getglobal( "ActionButton"..i ):Show();
1578 if( (not opt) or (not opt.hidden) ) then
1579 MoveAnything_AllowExternalVisibility( getglobal( "ActionButton"..i ) );
1580 end
1581 end
1582 end
1583 MoveAnything_OriginalHideBonusActionBar();
1584 end
1585  
1586 SLASH_MOVEANYTHING1 = "/move"
1587 SlashCmdList["MOVEANYTHING"] = function( msg )
1588 if( msg == nil or string.len( msg ) == 0 ) then
1589 MoveAnything_ToggleOptionsMenu();
1590 else
1591 MoveAnything_ToggleMove( msg );
1592 end
1593 end
1594  
1595 SLASH_UNMOVEANYTHING1 = "/unmove"
1596 SlashCmdList["UNMOVEANYTHING"] = function( msg )
1597 if( msg ) then
1598 MoveAnything_StopMoving( msg );
1599 local frame = getglobal( msg );
1600 MoveAnything_AllowExternalMovement( frame );
1601 frame:ClearAllPoints();
1602 frame:SetPoint( "CENTER", MAGetParent( frame ):GetName(), "CENTER", 0, 0 );
1603 end
1604 end
1605  
1606 SLASH_MOVEANYTHINGCOPYSETTINGS1 = "/movecopy"
1607 SlashCmdList["MOVEANYTHINGCOPYSETTINGS"] = function( msg )
1608 if( msg == nil or string.len( msg ) == 0 ) then
1609 Error( "Syntax: /movecopy ServerName PlayerName" );
1610 Error( "Use /movelist to see a current list of valid settings" );
1611 return;
1612 end
1613  
1614 if( MoveAnything_CharacterSettings[msg] == nil ) then
1615 Error( "No settings for server/character "..msg );
1616 Error( "Use /movelist to see a current list of valid settings" );
1617 return;
1618 end
1619  
1620 MoveAnything_CopySettings( msg, MoveAnything_CurrentSettingsName() );
1621 end
1622  
1623 SLASH_MOVEANYTHINGLISTSETTINGS1 = "/movelist"
1624 SlashCmdList["MOVEANYTHINGLISTSETTINGS"] = function( msg )
1625 Print( "Server/Character Settings List:", 1.0, 1.0, 0.2 );
1626 Print( "-------------------------------", 1.0, 1.0, 0.2 );
1627 for i, val in MoveAnything_CharacterSettings do
1628 local str = i;
1629 if( val == MoveAnything_FrameOptions ) then
1630 str = str.." (Current)";
1631 end
1632 Print( str, 1.0, 1.0, 0.2 );
1633 end
1634 end
1635  
1636 SLASH_MOVEANYTHINGDELETESETTINGS1 = "/movedelete"
1637 SLASH_MOVEANYTHINGDELETESETTINGS2 = "/movedel"
1638 SlashCmdList["MOVEANYTHINGDELETESETTINGS"] = function( msg )
1639 if( msg == nil or string.len( msg ) == 0 ) then
1640 Error( "Syntax: /movedelete ServerName PlayerName" );
1641 Error( "Use /movelist to see a current list of valid settings" );
1642 return;
1643 end
1644  
1645 if( MoveAnything_CharacterSettings[msg] == nil ) then
1646 Error( "No settings for server/character "..msg );
1647 Error( "Use /movelist to see a current list of valid settings" );
1648 return;
1649 end
1650  
1651 if( msg == MoveAnything_CurrentSettingsName() ) then
1652 MoveAnythingOptions_ResetAll();
1653 else
1654 MoveAnything_CharacterSettings[msg] = nil;
1655 end
1656 MoveAnything_FrameOptions = MoveAnything_CharacterSettings[MoveAnything_CurrentSettingsName()];
1657 MoveAnything_RefreshPositions();
1658 end
1659  
1660 function GameMenu_AddButton( button )
1661 if( GameMenu_InsertAfter == nil ) then
1662 GameMenu_InsertAfter = GameMenuButtonMacros;
1663 end
1664 if( GameMenu_InsertBefore == nil ) then
1665 GameMenu_InsertBefore = GameMenuButtonLogout;
1666 end
1667  
1668 button:ClearAllPoints();
1669 button:SetPoint( "TOP", GameMenu_InsertAfter:GetName(), "BOTTOM", 0, -1 );
1670 GameMenu_InsertBefore:SetPoint( "TOP", button:GetName(), "BOTTOM", 0, -1 );
1671 GameMenu_InsertAfter = button;
1672 GameMenuFrame:SetHeight( GameMenuFrame:GetHeight() + button:GetHeight() + 2 );
1673 end
1674  
1675 if ( GameMenuButtonAddOns ) then
1676 GameMenu_AddButton(GameMenuButtonAddOns);
1677 end
1678  
1679 --TODO:
1680 --ChatFrameEditBox move