You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
7.2 KiB
229 lines
7.2 KiB
local PA = _G.ProjectAzilroka
|
|
local MF = PA:NewModule('MovableFrames', 'AceEvent-3.0', 'AceHook-3.0')
|
|
PA.MF, _G.MovableFrames = MF, MF
|
|
|
|
MF.Title = PA.ACL['|cFF16C3F2Movable|r |cFFFFFFFFFrames|r']
|
|
MF.Description = PA.ACL['Make Blizzard Frames Movable']
|
|
MF.Authors = 'Azilroka Simpy'
|
|
MF.isEnabled = false
|
|
|
|
local next = next
|
|
|
|
local _G = _G
|
|
local IsAddOnLoaded = IsAddOnLoaded
|
|
local IsShiftKeyDown = IsShiftKeyDown
|
|
|
|
local Frames = {
|
|
'AddonList',
|
|
'BankFrame',
|
|
'CharacterFrame',
|
|
'DressUpFrame',
|
|
'FriendsFrame',
|
|
'FriendsFriendsFrame',
|
|
'GameMenuFrame',
|
|
'GhostFrame',
|
|
'GossipFrame',
|
|
'GuildInviteFrame',
|
|
'GuildRegistrarFrame',
|
|
'HelpFrame',
|
|
'InterfaceOptionsFrame',
|
|
'ItemTextFrame',
|
|
'LFGDungeonReadyDialog',
|
|
'LootFrame',
|
|
'LossOfControlFrame',
|
|
'MailFrame',
|
|
'MerchantFrame',
|
|
'PetitionFrame',
|
|
'PetStableFrame',
|
|
'PVEFrame',
|
|
'QuestFrame',
|
|
'QuestLogFrame',
|
|
'QuestLogPopupDetailFrame',
|
|
'RaidBrowserFrame',
|
|
'RaidParentFrame',
|
|
'ReadyCheckFrame',
|
|
'ScrollOfResurrectionSelectionFrame',
|
|
'SpellBookFrame',
|
|
'SplashFrame',
|
|
'StaticPopup1',
|
|
'StaticPopup2',
|
|
'StaticPopup3',
|
|
'StaticPopup4',
|
|
'TabardFrame',
|
|
'TaxiFrame',
|
|
'TimeManagerFrame',
|
|
'TradeFrame',
|
|
'VideoOptionsFrame',
|
|
'WorldMapFrame',
|
|
'WorldStateScoreFrame',
|
|
}
|
|
|
|
local AddOnFrames = {
|
|
Blizzard_AchievementUI = { 'AchievementFrame' },
|
|
Blizzard_AnimaDiversionUI = { 'AnimaDiversionFrame' },
|
|
Blizzard_ArchaeologyUI = { 'ArchaeologyFrame' },
|
|
Blizzard_AuctionUI = { 'AuctionFrame' },
|
|
Blizzard_AuctionHouseUI = { 'AuctionHouseFrame' },
|
|
Blizzard_BarbershopUI = { 'BarberShopFrame' },
|
|
Blizzard_BindingUI = { 'KeyBindingFrame' },
|
|
Blizzard_BlackMarketUI = { 'BlackMarketFrame' },
|
|
Blizzard_Calendar = { 'CalendarCreateEventFrame', 'CalendarFrame', 'CalendarViewEventFrame', 'CalendarViewHolidayFrame' },
|
|
Blizzard_ChallengesUI = { 'ChallengesKeystoneFrame' },
|
|
Blizzard_Channels = { 'ChannelFrame' },
|
|
Blizzard_Collections = { 'CollectionsJournal' },
|
|
Blizzard_Communities = { 'CommunitiesFrame' },
|
|
Blizzard_CovenantPreviewUI = { 'CovenantPreviewFrame' },
|
|
Blizzard_CovenantSanctum = { 'CovenantSanctumFrame' },
|
|
Blizzard_CraftUI = { 'CraftFrame' },
|
|
Blizzard_EncounterJournal = { 'EncounterJournal' },
|
|
Blizzard_GarrisonUI = { 'GarrisonBuildingFrame', 'GarrisonCapacitiveDisplayFrame', 'GarrisonLandingPage', 'GarrisonMissionFrame', 'GarrisonRecruiterFrame', 'GarrisonRecruitSelectFrame', 'GarrisonShipyardFrame' },
|
|
Blizzard_GuildBankUI = { 'GuildBankFrame' },
|
|
Blizzard_GuildControlUI = { 'GuildControlUI' },
|
|
Blizzard_InspectUI = { 'InspectFrame' },
|
|
Blizzard_ItemSocketingUI = { 'ItemSocketingFrame' },
|
|
Blizzard_ItemUpgradeUI = { 'ItemUpgradeFrame' },
|
|
Blizzard_LookingForGuildUI = { 'LookingForGuildFrame' },
|
|
Blizzard_MacroUI = { 'MacroFrame' },
|
|
Blizzard_OrderHallUI = { 'OrderHallTalentFrame' },
|
|
Blizzard_QuestChoice = { 'QuestChoiceFrame' },
|
|
Blizzard_TalentUI = { 'PlayerTalentFrame', 'TalentFrame' },
|
|
Blizzard_Soulbinds = { 'SoulbindViewer' },
|
|
Blizzard_ScrappingMachineUI = { 'ScrappingMachineFrame' },
|
|
Blizzard_TalkingHeadUI = { 'TalkingHeadFrame' },
|
|
Blizzard_TradeSkillUI = { 'TradeSkillFrame' },
|
|
Blizzard_TrainerUI = { 'ClassTrainerFrame' },
|
|
Blizzard_VoidStorageUI = { 'VoidStorageFrame' },
|
|
Blizzard_WeeklyRewards = { 'WeeklyRewardsFrame' },
|
|
Blizzard_ProfessionsCustomerOrders = { 'ProfessionsCustomerOrdersFrame' },
|
|
Blizzard_Professions = { 'ProfessionsFrame' },
|
|
}
|
|
|
|
function MF:OnDragStart(frame)
|
|
local point, relativeTo, relativePoint, xOffset, yOffset = frame:GetPoint()
|
|
|
|
frame:StartMoving()
|
|
|
|
if point and not frame:GetPoint() then
|
|
frame:SetUserPlaced(false)
|
|
frame:SetPoint(point, relativeTo, relativePoint, xOffset, yOffset)
|
|
else
|
|
frame:SetUserPlaced(true)
|
|
end
|
|
|
|
return point, relativeTo, relativePoint, xOffset, yOffset
|
|
end
|
|
|
|
function MF:OnDragStop(frame)
|
|
frame:StopMovingOrSizing()
|
|
end
|
|
|
|
function MF:OnMouseWheel(frame, delta)
|
|
if frame:IsMouseOver() and IsShiftKeyDown() then
|
|
local oldScale = frame:GetScale() or 1
|
|
local newScale = oldScale + (0.01 * delta)
|
|
|
|
if newScale > 1.5 then newScale = 1.5 end
|
|
if newScale < 0.75 then newScale = 0.75 end
|
|
|
|
frame:SetScale(newScale)
|
|
end
|
|
end
|
|
|
|
function MF:MakeMovable(name)
|
|
local frame = _G[name]
|
|
if not frame then
|
|
return
|
|
end
|
|
|
|
if name == 'AchievementFrame' then
|
|
local header = _G.AchievementFrameHeader or _G.AchievementFrame.Header
|
|
if header then
|
|
header:EnableMouse(false)
|
|
end
|
|
end
|
|
|
|
frame:EnableMouse(true)
|
|
frame:SetMovable(true)
|
|
frame:RegisterForDrag('LeftButton')
|
|
frame:SetClampedToScreen(true)
|
|
|
|
MF:HookScript(frame, 'OnDragStart', 'OnDragStart')
|
|
MF:HookScript(frame, 'OnDragStop', 'OnDragStop')
|
|
|
|
-- frame:EnableMouseWheel(true)
|
|
-- MF:SecureHookScript(Frame, 'OnMouseWheel', 'OnMouseWheel')
|
|
end
|
|
|
|
function MF:ADDON_LOADED(_, addon)
|
|
if AddOnFrames[addon] then
|
|
for _, frame in next, AddOnFrames[addon] do
|
|
MF:MakeMovable(frame)
|
|
end
|
|
end
|
|
end
|
|
|
|
function MF:GetOptions()
|
|
PA.Options.args.MovableFrames = PA.ACH:Group(MF.Title, MF.Description, nil, nil, function(info) return MF.db[info[#info]] end, function(info, value) MF.db[info[#info]] = value MF:Update() end)
|
|
PA.Options.args.MovableFrames.args.Header = PA.ACH:Description(MF.Description, 0)
|
|
PA.Options.args.MovableFrames.args.Enable = PA.ACH:Toggle(PA.ACL['Enable'], nil, 1, nil, nil, nil, nil, function(info, value) MF.db[info[#info]] = value if (not MF.isEnabled) then MF:Initialize() else _G.StaticPopup_Show('PROJECTAZILROKA_RL') end end)
|
|
|
|
PA.Options.args.MovableFrames.args.AuthorHeader = PA.ACH:Header(PA.ACL['Authors:'], -2)
|
|
PA.Options.args.MovableFrames.args.Authors = PA.ACH:Description(MF.Authors, -1, 'large')
|
|
end
|
|
|
|
function MF:BuildProfile()
|
|
PA.Defaults.profile.MovableFrames = { Enable = true }
|
|
end
|
|
|
|
function MF:UpdateSettings()
|
|
MF.db = PA.db.MovableFrames
|
|
end
|
|
|
|
function MF:Initialize()
|
|
MF:UpdateSettings()
|
|
|
|
if MF.db.Enable ~= true then
|
|
return
|
|
end
|
|
|
|
if PA.ElvUI and PA.SLE then
|
|
if (not _G.ElvUI[1].private.sle.module) or (_G.ElvUI[1].private.sle.module.blizzmove and _G.ElvUI[1].private.sle.module.blizzmove.enable) then
|
|
_G.StaticPopupDialogs.PROJECTAZILROKA.text = 'Shadow & Light Blizz Move and Movable Frames will not work together. Which one do you want to disable?'
|
|
_G.StaticPopupDialogs.PROJECTAZILROKA.button1 = 'S&L Blizz Move'
|
|
_G.StaticPopupDialogs.PROJECTAZILROKA.button2 = 'Movable Frames'
|
|
_G.StaticPopupDialogs.PROJECTAZILROKA.OnAccept = function()
|
|
_G.ElvUI[1].private.sle.module.blizzmove.enable = false
|
|
_G.ReloadUI()
|
|
end
|
|
_G.StaticPopupDialogs.PROJECTAZILROKA.OnCancel = function() MF.db.Enable = false end
|
|
_G.StaticPopup_Show("PROJECTAZILROKA")
|
|
return
|
|
end
|
|
end
|
|
|
|
MF.isEnabled = true
|
|
|
|
if PA:IsAddOnEnabled('WorldQuestTracker') or PA:IsAddOnEnabled('Leatrix_Maps') then
|
|
Frames.WorldMapFrame = nil
|
|
end
|
|
|
|
if PA.ElvUI then
|
|
AddOnFrames.LossOfControlFrame = nil
|
|
AddOnFrames.Blizzard_TalkingHeadUI = nil
|
|
end
|
|
|
|
for _, frame in next, Frames do
|
|
MF:MakeMovable(frame)
|
|
end
|
|
|
|
-- Check Forced Loaded AddOns
|
|
for addon, frames in next, AddOnFrames do
|
|
if IsAddOnLoaded(addon) then
|
|
for _, frame in next, frames do
|
|
MF:MakeMovable(frame)
|
|
end
|
|
end
|
|
end
|
|
|
|
MF:RegisterEvent('ADDON_LOADED')
|
|
end
|
|
|